PsfMatchTask

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

Bases: lsst.pipe.base.Task

!

@anchor PsfMatchTask

@brief Base class for Psf Matching; should not be called directly

@section ip_diffim_psfmatch_Contents Contents

  • @ref ip_diffim_psfmatch_Purpose
  • @ref ip_diffim_psfmatch_Initialize
  • @ref ip_diffim_psfmatch_IO
  • @ref ip_diffim_psfmatch_Config
  • @ref ip_diffim_psfmatch_Metadata
  • @ref ip_diffim_psfmatch_Debug
  • @ref ip_diffim_psfmatch_Example

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@section ip_diffim_psfmatch_Purpose Description

PsfMatchTask is a base class that implements the core functionality for matching the Psfs of two images using a spatially varying Psf-matching lsst.afw.math.LinearCombinationKernel. The Task requires the user to provide an instance of an lsst.afw.math.SpatialCellSet, filled with lsst.ip.diffim.KernelCandidate instances, and a list of lsst.afw.math.Kernels of basis shapes that will be used for the decomposition. If requested, the Task also performs background matching and returns the differential background model as an lsst.afw.math.Kernel.SpatialFunction.

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@ection ip_diffim_psfmatch_Initialize Task initialization

@copydoc __init__

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@section ip_diffim_psfmatch_IO Invoking the Task

As a base class, this Task is not directly invoked. However, run() methods that are implemented on derived classes will make use of the core _solve() functionality, which defines a sequence of lsst.afw.math.CandidateVisitor classes that iterate through the KernelCandidates, first building up a per-candidate solution and then building up a spatial model from the ensemble of candidates. Sigma clipping is performed using the mean and standard deviation of all kernel sums (to reject variable objects), on the per-candidate substamp diffim residuals (to indicate a bad choice of kernel basis shapes for that particular object), and on the substamp diffim residuals using the spatial kernel fit (to indicate a bad choice of spatial kernel order, or poor constraints on the spatial model). The _diagnostic() method logs information on the quality of the spatial fit, and also modifies the Task metadata.

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@section ip_diffim_psfmatch_Config Configuration parameters

See @ref PsfMatchConfig, @ref PsfMatchConfigAL, @ref PsfMatchConfigDF, and @ref DetectionConfig.

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@section ip_diffim_psfmatch_Metadata Quantities set in Metadata

<DL> <DT> spatialConditionNum <DD> Condition number of the spatial kernel fit;

via @link lsst.ip.diffim.PsfMatchTask._diagnostic PsfMatchTask._diagnostic @endlink </DD> </DT>
<DT> spatialKernelSum <DD> Kernel sum (10^{-0.4 * &Delta; zeropoint}) of the spatial Psf-matching kernel;
via @link lsst.ip.diffim.PsfMatchTask._diagnostic PsfMatchTask._diagnostic @endlink </DD> </DT>
<DT> ALBasisNGauss <DD> If using sum-of-Gaussian basis, the number of gaussians used;
via @link lsst.ip.diffim.makeKernelBasisList.generateAlardLuptonBasisList generateAlardLuptonBasisList@endlink </DD> </DT>
<DT> ALBasisDegGauss <DD> If using sum-of-Gaussian basis, the degree of spatial variation of the Gaussians;
via @link lsst.ip.diffim.makeKernelBasisList.generateAlardLuptonBasisList generateAlardLuptonBasisList@endlink </DD> </DT>
<DT> ALBasisSigGauss <DD> If using sum-of-Gaussian basis, the widths (sigma) of the Gaussians;
via @link lsst.ip.diffim.makeKernelBasisList.generateAlardLuptonBasisList generateAlardLuptonBasisList@endlink </DD> </DT>
<DT> ALKernelSize <DD> If using sum-of-Gaussian basis, the kernel size;
via @link lsst.ip.diffim.makeKernelBasisList.generateAlardLuptonBasisList generateAlardLuptonBasisList@endlink </DD> </DT>
<DT> NFalsePositivesTotal <DD> Total number of diaSources;
via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>
<DT> NFalsePositivesRefAssociated <DD> Number of diaSources that associate with the reference catalog;
via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>
<DT> NFalsePositivesRefAssociated <DD> Number of diaSources that associate with the source catalog;
via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>
<DT> NFalsePositivesUnassociated <DD> Number of diaSources that are orphans;
via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>
<DT> metric_MEAN <DD> Mean value of substamp diffim quality metrics across all KernelCandidates,
for both the per-candidate (LOCAL) and SPATIAL residuals; via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>
<DT> metric_MEDIAN <DD> Median value of substamp diffim quality metrics across all KernelCandidates,
for both the per-candidate (LOCAL) and SPATIAL residuals; via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>
<DT> metric_STDEV <DD> Standard deviation of substamp diffim quality metrics across all KernelCandidates,
for both the per-candidate (LOCAL) and SPATIAL residuals; via @link lsst.ip.diffim.KernelCandidateQa.aggregate KernelCandidateQa.aggregate@endlink </DD> </DT>

</DL>

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@section ip_diffim_psfmatch_Debug Debug variables

The @link lsst.pipe.base.cmdLineTask.CmdLineTask command line task@endlink interface supports a flag @c -d/–debug to import @b debug.py from your @c PYTHONPATH. The relevant contents of debug.py for this Task include:

@code{.py}

import sys import lsstDebug def DebugInfo(name):

di = lsstDebug.getInfo(name) if name == “lsst.ip.diffim.psfMatch”:

di.display = True # enable debug output di.maskTransparency = 80 # ds9 mask transparency di.displayCandidates = True # show all the candidates and residuals di.displayKernelBasis = False # show kernel basis functions di.displayKernelMosaic = True # show kernel realized across the image di.plotKernelSpatialModel = False # show coefficients of spatial model di.showBadCandidates = True # show the bad candidates (red) along with good (green)

return di

lsstDebug.Info = DebugInfo lsstDebug.frame = 1

@endcode

Note that if you want addional logging info, you may add to your scripts: @code{.py} import lsst.log.utils as logUtils logUtils.traceSetAt(“ip.diffim”, 4) @endcode

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

@section ip_diffim_psfmatch_Example Example code

As a base class, there is no example code for PsfMatchTask. However, see @link lsst.ip.diffim.imagePsfMatch.ImagePsfMatchTask ImagePsfMatchTask@endlink, @link lsst.ip.diffim.snapPsfMatch.SnapPsfMatchTask SnapPsfMatchTask@endlink, and @link lsst.ip.diffim.modelPsfMatch.ModelPsfMatchTask ModelPsfMatchTask@endlink.

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-