ZogyImagePsfMatchTask

class lsst.ip.diffim.ZogyImagePsfMatchTask(*args, **kwargs)

Bases: lsst.ip.diffim.ImagePsfMatchTask

Task to perform Zogy PSF matching and image subtraction.

This class inherits from ImagePsfMatchTask to contain the _warper subtask and related methods.

Methods Summary

emptyMetadata() Empty (clear) the metadata for this Task and all sub-Tasks.
getAllSchemaCatalogs() Get schema catalogs for all tasks in the hierarchy, combining the results into a single dict.
getFullMetadata() Get metadata for all tasks.
getFullName() Get the task name as a hierarchical name including parent task names.
getFwhmPix(psf) !Return the FWHM in pixels of a Psf
getName() Get the name of the task.
getSchemaCatalogs() Get the schemas generated by this task.
getSelectSources(exposure[, sigma, …]) !Get sources to use for Psf-matching
getTaskDict() Get a dictionary of all tasks as a shallow copy.
makeCandidateList(templateExposure, …[, …]) !Make a list of acceptable KernelCandidates
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.
matchExposures(templateExposure, scienceExposure) !Warp and PSF-match an exposure to the reference
matchMaskedImages(templateMaskedImage, …) !PSF-match a MaskedImage (templateMaskedImage) to a reference MaskedImage (scienceMaskedImage)
subtractExposures(templateExposure, …[, …]) Register, PSF-match, and subtract two Exposures using the ZOGY algorithm.
subtractMaskedImages(templateExposure, …) !Psf-match and subtract two MaskedImages
timer(name[, logLevel]) Context manager to log performance data for an arbitrary block of code.

Methods Documentation

emptyMetadata()

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

getAllSchemaCatalogs()

Get schema catalogs for all tasks in the hierarchy, combining the results into a single dict.

Returns:
schemacatalogs : dict

Keys are butler dataset type, values are a empty catalog (an instance of the appropriate lsst.afw.table Catalog type) for all tasks in the hierarchy, from the top-level task down through all subtasks.

Notes

This method may be called on any task in the hierarchy; it will return the same answer, regardless.

The default implementation should always suffice. If your subtask uses schemas the override Task.getSchemaCatalogs, not this method.

getFullMetadata()

Get metadata for all tasks.

Returns:
metadata : lsst.daf.base.PropertySet

The PropertySet 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()

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”.
getFwhmPix(psf)

!Return the FWHM in pixels of a Psf

getName()

Get the name of the task.

Returns:
taskName : str

Name of the task.

See also

getFullName

getSchemaCatalogs()

Get the schemas generated by this task.

Returns:
schemaCatalogs : dict

Keys are butler dataset type, values are an empty catalog (an instance of the appropriate lsst.afw.table Catalog type) for this task.

See also

Task.getAllSchemaCatalogs

Notes

Warning

Subclasses that use schemas must override this method. The default implemenation returns an empty dict.

This method may be called at any time after the Task is constructed, which means that all task schemas should be computed at construction time, not when data is actually processed. This reflects the philosophy that the schema should not depend on the data.

Returning catalogs rather than just schemas allows us to save e.g. slots for SourceCatalog as well.

getSelectSources(exposure, sigma=None, doSmooth=True, idFactory=None)

!Get sources to use for Psf-matching

This method runs detection and measurement on an exposure. The returned set of sources will be used as candidates for Psf-matching.

@param exposure: Exposure on which to run detection/measurement @param sigma: Detection threshold @param doSmooth: Whether or not to smooth the Exposure with Psf before detection @param idFactory: Factory for the generation of Source ids

@return source catalog containing candidates for the Psf-matching

getTaskDict()

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..

makeCandidateList(templateExposure, scienceExposure, kernelSize, candidateList=None)

!Make a list of acceptable KernelCandidates

Accept or generate a list of candidate sources for Psf-matching, and examine the Mask planes in both of the images for indications of bad pixels

@param templateExposure: Exposure that will be convolved @param scienceExposure: Exposure that will be matched-to @param kernelSize: Dimensions of the Psf-matching Kernel, used to grow detection footprints @param candidateList: List of Sources to examine. Elements must be of type afw.table.Source

or a type that wraps a Source and has a getSource() method, such as meas.algorithms.PsfCandidateF.

@return a list of dicts having a “source” and “footprint” field for the Sources deemed to be appropriate for Psf matching

classmethod makeField(doc)

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("a brief description of what this task does")
makeSubtask(name, **keyArgs)

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 pex_config ConfigurableField or RegistryField.

matchExposures(templateExposure, scienceExposure, templateFwhmPix=None, scienceFwhmPix=None, candidateList=None, doWarping=True, convolveTemplate=True)

!Warp and PSF-match an exposure to the reference

Do the following, in order: - Warp templateExposure to match scienceExposure,

if doWarping True and their WCSs do not already match
  • Determine a PSF matching kernel and differential background model
    that matches templateExposure to scienceExposure
  • Convolve templateExposure by PSF matching kernel

@param templateExposure: Exposure to warp and PSF-match to the reference masked image @param scienceExposure: Exposure whose WCS and PSF are to be matched to @param templateFwhmPix: FWHM (in pixels) of the Psf in the template image (image to convolve) @param scienceFwhmPix: FWHM (in pixels) of the Psf in the science image @param candidateList: a list of footprints/maskedImages for kernel candidates;

if None then source detection is run.
  • Currently supported: list of Footprints or measAlg.PsfCandidateF
@param doWarping: what to do if templateExposure’s and scienceExposure’s WCSs do not match:
  • if True then warp templateExposure to match scienceExposure
  • if False then raise an Exception
@param convolveTemplate: convolve the template image or the science image
  • if True, templateExposure is warped if doWarping, templateExposure is convolved
  • if False, templateExposure is warped if doWarping, scienceExposure is convolved

@return a pipeBase.Struct containing these fields: - matchedImage: the PSF-matched exposure =

warped templateExposure convolved by psfMatchingKernel. This has: - the same parent bbox, Wcs and Calib as scienceExposure - the same filter as templateExposure - no Psf (because the PSF-matching process does not compute one)
  • psfMatchingKernel: the PSF matching kernel
  • backgroundModel: differential background model
  • kernelCellSet: SpatialCellSet used to solve for the PSF matching kernel
Raise a RuntimeError if doWarping is False and templateExposure’s and scienceExposure’s
WCSs do not match
matchMaskedImages(templateMaskedImage, scienceMaskedImage, candidateList, templateFwhmPix=None, scienceFwhmPix=None)

!PSF-match a MaskedImage (templateMaskedImage) to a reference MaskedImage (scienceMaskedImage)

Do the following, in order: - Determine a PSF matching kernel and differential background model

that matches templateMaskedImage to scienceMaskedImage
  • Convolve templateMaskedImage by the PSF matching kernel
@param templateMaskedImage: masked image to PSF-match to the reference masked image;
must be warped to match the reference masked image

@param scienceMaskedImage: maskedImage whose PSF is to be matched to @param templateFwhmPix: FWHM (in pixels) of the Psf in the template image (image to convolve) @param scienceFwhmPix: FWHM (in pixels) of the Psf in the science image @param candidateList: a list of footprints/maskedImages for kernel candidates;

if None then source detection is run.
  • Currently supported: list of Footprints or measAlg.PsfCandidateF

@return a pipeBase.Struct containing these fields: - psfMatchedMaskedImage: the PSF-matched masked image =

templateMaskedImage convolved with psfMatchingKernel. This has the same xy0, dimensions and wcs as scienceMaskedImage.
  • psfMatchingKernel: the PSF matching kernel
  • backgroundModel: differential background model
  • kernelCellSet: SpatialCellSet used to solve for the PSF matching kernel

Raise a RuntimeError if input images have different dimensions

subtractExposures(templateExposure, scienceExposure, doWarping=True, spatiallyVarying=True, inImageSpace=False, doPreConvolve=False)

Register, PSF-match, and subtract two Exposures using the ZOGY algorithm.

Do the following, in order: - Warp templateExposure to match scienceExposure, if their WCSs do not already match - Compute subtracted exposure ZOGY image subtraction algorithm on the two exposures

Parameters:
templateExposure : lsst.afw.image.Exposure

exposure to PSF-match to scienceExposure. The exposure’s mean value is subtracted in-place.

scienceExposure : lsst.afw.image.Exposure

reference Exposure. The exposure’s mean value is subtracted in-place.

doWarping : bool

what to do if templateExposure’s and scienceExposure’s WCSs do not match: - if True then warp templateExposure to match scienceExposure - if False then raise an Exception

spatiallyVarying : bool

If True, perform the operation over a grid of patches across the two exposures

inImageSpace : bool

If True, perform the Zogy convolutions in image space rather than in frequency space.

doPreConvolve : bool

*Currently not implemented.* If True assume we are to compute the match filter-convolved exposure which can be thresholded for detection. In the case of Zogy this would mean we compute the Scorr image.

Returns:
A `lsst.pipe.base.Struct` containing these fields:
- subtractedExposure: subtracted Exposure
- warpedExposure: templateExposure after warping to match scienceExposure (if doWarping true)
subtractMaskedImages(templateExposure, scienceExposure, doWarping=True, spatiallyVarying=True, inImageSpace=False, doPreConvolve=False)

!Psf-match and subtract two MaskedImages

Do the following, in order: - PSF-match templateMaskedImage to scienceMaskedImage - Determine the differential background - Return the difference: scienceMaskedImage -

((warped templateMaskedImage convolved with psfMatchingKernel) + backgroundModel)

@param templateMaskedImage: MaskedImage to PSF-match to scienceMaskedImage @param scienceMaskedImage: reference MaskedImage @param templateFwhmPix: FWHM (in pixels) of the Psf in the template image (image to convolve) @param scienceFwhmPix: FWHM (in pixels) of the Psf in the science image @param candidateList: a list of footprints/maskedImages for kernel candidates;

if None then source detection is run.
  • Currently supported: list of Footprints or measAlg.PsfCandidateF

@return a pipeBase.Struct containing these fields: - subtractedMaskedImage = scienceMaskedImage - (matchedImage + backgroundModel) - matchedImage: templateMaskedImage convolved with psfMatchingKernel - psfMatchingKernel: PSF matching kernel - backgroundModel: differential background model - kernelCellSet: SpatialCellSet used to determine PSF matching kernel

timer(name, logLevel=10000)

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 lsst.log level constant.

See also

timer.logInfo

Examples

Creating a timer context:

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