MakeWarpTask

class lsst.pipe.tasks.makeWarp.MakeWarpTask(**kwargs)

Bases: lsst.pipe.tasks.coaddBase.CoaddBaseTask

Warp and optionally PSF-Match calexps onto an a common projection.

Warp and optionally PSF-Match calexps onto a common projection, by performing the following operations: - Group calexps by visit/run - For each visit, generate a Warp by calling method @ref run.

run loops over the visit’s calexps calling WarpAndPsfMatchTask on each visit

Notes

WarpType identifies the types of convolutions applied to Warps (previously CoaddTempExps). Only two types are available: direct (for regular Warps/Coadds) and psfMatched(for Warps/Coadds with homogenized PSFs). We expect to add a third type, likelihood, for generating likelihood Coadds with Warps that have been correlated with their own PSF.

To make psfMatchedWarps, select config.makePsfMatched=True. The subtask ModelPsfMatchTask is responsible for the PSF-Matching, and its config is accessed via config.warpAndPsfMatch.psfMatch.

The optimal configuration depends on aspects of dataset: the pixel scale, average PSF FWHM and dimensions of the PSF kernel. These configs include the requested model PSF, the matching kernel size, padding of the science PSF thumbnail and spatial sampling frequency of the PSF.

Config Guidelines: The user must specify the size of the model PSF to which to match by setting config.modelPsf.defaultFwhm in units of pixels. The appropriate values depends on science case. In general, for a set of input images, this config should equal the FWHM of the visit with the worst seeing. The smallest it should be set to is the median FWHM. The defaults of the other config options offer a reasonable starting point.

The following list presents the most common problems that arise from a misconfigured @link ip::diffim::modelPsfMatch::ModelPsfMatchTask ModelPsfMatchTask @endlink and corresponding solutions. All assume the default Alard-Lupton kernel, with configs accessed via `config.warpAndPsfMatch.psfMatch.kernel['AL']`. Each item in the list is formatted as: Problem: Explanation. Solution

Troublshooting PSF-Matching Configuration: - Matched PSFs look boxy: The matching kernel is too small.

_Increase the matching kernel size.
For example:_
config.warpAndPsfMatch.psfMatch.kernel[‘AL’].kernelSize=27 # default 21

Note that increasing the kernel size also increases runtime.

  • Matched PSFs look ugly (dipoles, quadropoles, donuts): unable to find good solution for matching kernel. _Provide the matcher with more data by either increasing

    the spatial sampling by decreasing the spatial cell size,_

    config.warpAndPsfMatch.psfMatch.kernel[‘AL’].sizeCellX = 64 # default 128 config.warpAndPsfMatch.psfMatch.kernel[‘AL’].sizeCellY = 64 # default 128

    _or increasing the padding around the Science PSF, for example:_

    config.warpAndPsfMatch.psfMatch.autoPadPsfTo=1.6 # default 1.4

    Increasing autoPadPsfTo increases the minimum ratio of input PSF dimensions to the matching kernel dimensions, thus increasing the number of pixels available to fit after convolving the PSF with the matching kernel. Optionally, for debugging the effects of padding, the level of padding may be manually controlled by setting turning off the automatic padding and setting the number of pixels by which to pad the PSF:

    config.warpAndPsfMatch.psfMatch.doAutoPadPsf = False # default True config.warpAndPsfMatch.psfMatch.padPsfBy = 6 # pixels. default 0

  • Deconvolution: Matching a large PSF to a smaller PSF produces

    a telltale noise pattern which looks like ripples or a brain. _Increase the size of the requested model PSF. For example:_

    config.modelPsf.defaultFwhm = 11 # Gaussian sigma in units of

    pixels.

  • High frequency (sometimes checkered) noise: The matching basis functions are too small.

    _Increase the width of the Gaussian basis functions. For example:_

    config.warpAndPsfMatch.psfMatch.kernel[‘AL’].alardSigGauss= [1.5, 3.0, 6.0] # from default [0.7, 1.5, 3.0]

Attributes Summary

canMultiprocess

Methods Summary

emptyMetadata() Empty (clear) the metadata for this Task and all sub-Tasks.
filterInputs(indices, inputs) Filter task inputs by their indices.
getBadPixelMask() Convenience method to provide the bitmask from the mask plane names
getFullMetadata() Get metadata for all tasks.
getFullName() Get the task name as a hierarchical name including parent task names.
getName() Get the name of the task.
getResourceConfig() Return resource configuration for this task.
getSkyInfo(patchRef) Use getSkyinfo to return the skyMap, tract and patch information, wcs and the outer bbox of the patch.
getTaskDict() Get a dictionary of all tasks as a shallow copy.
getTempExpDatasetName([warpType]) Return warp name for given warpType and task config
getWarpTypeList() Return list of requested warp types per the config.
makeField(doc) Make a lsst.pex.config.ConfigurableField for this task.
makeSubtask(name, **keyArgs) Create a subtask as a new instance as the name attribute of this task.
prepareCalibratedExposures(calExpList[, …]) Deprecated function.
run(calExpList, ccdIdList, skyInfo[, …]) Create a Warp from inputs.
runQuantum(butlerQC, inputRefs, outputRefs) Method to do butler IO and or transforms to provide in memory objects for tasks run method
timer(name, logLevel) Context manager to log performance data for an arbitrary block of code.

Attributes Documentation

canMultiprocess = True

Methods Documentation

emptyMetadata() → None

Empty (clear) the metadata for this Task and all sub-Tasks.

filterInputs(indices, inputs)

Filter task inputs by their indices.

Parameters:
indices : list [int]
inputs : dict [list]

A dictionary of input connections to be passed to run.

Returns:
inputs : dict [list]

Task inputs with their lists filtered by indices.

getBadPixelMask()

Convenience method to provide the bitmask from the mask plane names

getFullMetadata() → lsst.pipe.base._task_metadata.TaskMetadata

Get metadata for all tasks.

Returns:
metadata : TaskMetadata

The keys are the full task name. Values are metadata for the top-level task and all subtasks, sub-subtasks, etc.

Notes

The returned metadata includes timing information (if @timer.timeMethod is used) and any metadata set by the task. The name of each item consists of the full task name with . replaced by :, followed by . and the name of the item, e.g.:

topLevelTaskName:subtaskName:subsubtaskName.itemName

using : in the full task name disambiguates the rare situation that a task has a subtask and a metadata item with the same name.

getFullName() → str

Get the task name as a hierarchical name including parent task names.

Returns:
fullName : str

The full name consists of the name of the parent task and each subtask separated by periods. For example:

  • The full name of top-level task “top” is simply “top”.
  • The full name of subtask “sub” of top-level task “top” is “top.sub”.
  • The full name of subtask “sub2” of subtask “sub” of top-level task “top” is “top.sub.sub2”.
getName() → str

Get the name of the task.

Returns:
taskName : str

Name of the task.

See also

getFullName
getResourceConfig() → Optional[ResourceConfig]

Return resource configuration for this task.

Returns:
Object of type ResourceConfig or None if resource
configuration is not defined for this task.
getSkyInfo(patchRef)

Use getSkyinfo to return the skyMap, tract and patch information, wcs and the outer bbox of the patch.

Parameters:
patchRef : Unknown

Data reference for sky map. Must include keys “tract” and “patch”.

Returns:
getSkyInfo : lsst.pipe.base.Struct

Sky Info as a struct with attributes:

skyMap

sky map (lsst.skyMap.SkyMap).

tractInfo

Information for chosen tract of sky map (lsst.skymap.TractInfo).

patchInfo

Information about chosen patch of tract (lsst.skymap.PatchInfo).

wcs

WCS of tract (lsst.afw.image.SkyWcs).

bbox

Outer bbox of patch, as an geom Box2I (lsst.afw.geom.Box2I).

getTaskDict() → Dict[str, weakref.ReferenceType[lsst.pipe.base.task.Task]]

Get a dictionary of all tasks as a shallow copy.

Returns:
taskDict : dict

Dictionary containing full task name: task object for the top-level task and all subtasks, sub-subtasks, etc.

getTempExpDatasetName(warpType='direct')

Return warp name for given warpType and task config

Parameters:
warpType : str

Either ‘direct’ or ‘psfMatched’.

Returns:
WarpDatasetName : str
getWarpTypeList()

Return list of requested warp types per the config.

classmethod makeField(doc: str) → lsst.pex.config.configurableField.ConfigurableField

Make a lsst.pex.config.ConfigurableField for this task.

Parameters:
doc : str

Help text for the field.

Returns:
configurableField : lsst.pex.config.ConfigurableField

A ConfigurableField for this task.

Examples

Provides a convenient way to specify this task is a subtask of another task.

Here is an example of use:

class OtherTaskConfig(lsst.pex.config.Config):
    aSubtask = ATaskClass.makeField("brief description of task")
makeSubtask(name: str, **keyArgs) → None

Create a subtask as a new instance as the name attribute of this task.

Parameters:
name : str

Brief name of the subtask.

keyArgs

Extra keyword arguments used to construct the task. The following arguments are automatically provided and cannot be overridden:

  • “config”.
  • “parentTask”.

Notes

The subtask must be defined by Task.config.name, an instance of ConfigurableField or RegistryField.

prepareCalibratedExposures(calExpList, backgroundList=None, skyCorrList=None, externalSkyWcsCatalog=None, externalPhotoCalibCatalog=None, finalizedPsfApCorrCatalog=None, **kwargs)

Deprecated function.

Please use _prepareCalibratedExposure(), which this delegates to and noting its slightly updated API, instead.

Deprecated since version v25.0: This method is deprecated in favor of its leading underscore version, _prepareCalibratedfExposures(). Will be removed after v25.

run(calExpList, ccdIdList, skyInfo, visitId=0, dataIdList=None, **kwargs)

Create a Warp from inputs.

We iterate over the multiple calexps in a single exposure to construct the warp (previously called a coaddTempExp) of that exposure to the supplied tract/patch.

Pixels that receive no pixels are set to NAN; this is not correct (violates LSST algorithms group policy), but will be fixed up by interpolating after the coaddition.

calexpRefList : list
List of data references for calexps that (may) overlap the patch of interest.
skyInfo : lsst.pipe.base.Struct
Struct from CoaddBaseTask.getSkyInfo() with geometric information about the patch.
visitId : int
Integer identifier for visit, for the table that will produce the CoaddPsf.
Returns:
result : lsst.pipe.base.Struct

Results as a struct with attributes:

exposures

A dictionary containing the warps requested: “direct”: direct warp if config.makeDirect “psfMatched”: PSF-matched warp if config.makePsfMatched (dict).

runQuantum(butlerQC, inputRefs, outputRefs)

Method to do butler IO and or transforms to provide in memory objects for tasks run method

Parameters:
butlerQC : ButlerQuantumContext

A butler which is specialized to operate in the context of a lsst.daf.butler.Quantum.

inputRefs : InputQuantizedConnection

Datastructure whose attribute names are the names that identify connections defined in corresponding PipelineTaskConnections class. The values of these attributes are the lsst.daf.butler.DatasetRef objects associated with the defined input/prerequisite connections.

outputRefs : OutputQuantizedConnection

Datastructure whose attribute names are the names that identify connections defined in corresponding PipelineTaskConnections class. The values of these attributes are the lsst.daf.butler.DatasetRef objects associated with the defined output connections.

timer(name: str, logLevel: int = 10) → Iterator[None]

Context manager to log performance data for an arbitrary block of code.

Parameters:
name : str

Name of code being timed; data will be logged using item name: Start and End.

logLevel

A logging level constant.

See also

timer.logInfo

Examples

Creating a timer context:

with self.timer("someCodeToTime"):
    pass  # code to time