ImagePsfMatchTask¶
ImagePsfMatchTask creates a PSF-matching kernel for two images.
Description¶
Build a Psf-matching kernel using two input images, either as MaskedImages
(in which case they need to be astrometrically aligned) or Exposures (in which
case astrometric alignment will happen by default but may be turned off). This
requires a list of input Sources which may be provided by the calling Task; if
not, the Task will perform a coarse source detection and selection for this
purpose. Sources are vetted for signal-to-noise and masked pixels (in both the
template and science image), and substamps around each acceptable source are
extracted and used to create an instance of KernelCandidate. Each
KernelCandidate is then placed within a SpatialCellSet
, which is
used by an ensemble of CandidateVisitor
instances to build the
Psf-matching kernel. These visitors include, in the order that they are
called: BuildSingleKernelVisitor
, KernelSumVisitor
, BuildSpatialKernelVisitor
,
and AssessSpatialKernelVisitor
.
Upon initialization, the kernel configuration is defined by
self.config.kernel.active
. The task creates an Warper
from the
subConfig self.config.kernel.active.warpingConfig
. A schema for the selection
and measurement of candidate KernelCandidates
is defined, and
used to initize subTasks selectDetection (for candidate detection) and
selectMeasurement(for candidate measurement).
Sigma clipping of KernelCandidates is performed as follows:
BuildSingleKernelVisitor, using the substamp diffim residuals from the per-source kernel fit, if PsfMatchConfig.singleKernelClipping is True
KernelSumVisitor, using the mean and standard deviation of the kernel sum from all candidates, if PsfMatchConfig.kernelSumClipping is True
AssessSpatialKernelVisitor, using the substamp diffim ressiduals from the spatial kernel fit, if PsfMatchConfig.spatialKernelClipping is True
The actual solving for the kernel (and differential background model) happens
in lsst.ip.diffim.PsfMatchTask._solve
. This involves a loop over the
SpatialCellSet that first builds the per-candidate matching kernel for the
requested number of KernelCandidates per cell
(PsfMatchConfig.nStarPerCell
). The quality of this initial per-candidate
difference image is examined, using moments of the pixel residuals in the
difference image normalized by the square root of the variance(i.e. sigma);
ideally this should follow a normal (0, 1) distribution, but the rejection
thresholds are set by the config (PsfMatchConfig.candidateResidualMeanMax
and
PsfMatchConfig.candidateResidualStdMax
). All candidates that pass this initial
build are then examined en masse to find the mean/stdev of the kernel sums
across all candidates. Objects that are significantly above or below the mean,
typically due to variability or sources that are saturated in one image but
not the other, are also rejected.This threshold is defined by
PsfMatchConfig.maxKsumSigma
. Finally, a spatial model is built using all
currently-acceptable candidates, and the spatial model used to derive a second
set of (spatial) residuals which are again used to reject bad candidates,
using the same thresholds as above.
Invoking the Task¶
There is no run() method for this Task. Instead there are 4 methods that
may be used to invoke the Psf-matching. These are
matchMaskedImages
,
subtractMaskedImages
,
matchExposures
, and
subtractExposures
.
The methods that operate on MaskedImage
require that the images
already be astrometrically aligned, and are the same shape. The methods that
operate on Exposure
allow for the input images to be
misregistered and potentially be different sizes; by default a
LanczosWarpingKernel
is used to perform the astrometric
alignment. The methods that “match” images return a Psf-matched image, while
the methods that “subtract” images return a Psf-matched and template
subtracted image.
See each method’s returned Struct
for more details.
Python API summary¶
from lsst.ip.diffim.imagePsfMatch import ImagePsfMatchTask
-
class
ImagePsfMatchTask
(*args, **kwargs) Psf-match two MaskedImages or Exposures using the sources in the images
...
- attributeconfig
Access configuration fields and retargetable subtasks.
See also
See the ImagePsfMatchTask
API reference for complete details.
Retargetable subtasks¶
selectDetection¶
- Default
- Field type
Initial detections used to feed stars to kernel fitting
selectMeasurement¶
- Default
- Field type
Initial measurements used to feed stars to kernel fitting
Configuration fields¶
autoPadPsfTo¶
- Default
1.4
- Field type
- Range
[1.0,2.0)
Minimum Science Psf dimensions as a fraction of matching kernel dimensions. If the dimensions of the Psf to be matched are less than the matching kernel dimensions * autoPadPsfTo, pad Science Psf to this size. Ignored if doAutoPadPsf=False.
doAutoPadPsf¶
If too small, automatically pad the science Psf? Pad to smallest dimensions appropriate for the matching kernel dimensions, as specified by autoPadPsfTo. If false, pad by the padPsfBy config.
kernel¶
- Default
'AL'
- Field type
Single-selection
ConfigChoiceField
- Choices
'AL'
lsst.ip.diffim.psfMatch.PsfMatchConfigAL
kernel type
padPsfBy¶
Pixels (even) to pad Science Psf by before matching. Ignored if doAutoPadPsf=True
Debugging¶
The pipetask
command line interface supports a --debug
flag to import
debug.py
from your PYTHONPATH; see lsstDebug for more about debug.py
files.
The available variables in ImagePsfMatchTask include:
- display
bool
Enable debug display output.
- maskTransparency
float
Transparency of mask planes in the output display.
- displayCandidates
bool
Show all the candidates and residuals.
- displayKernelBasis
bool
Show kernel basis functions.
- displayKernelMosaic
bool
Show kernel realized across the image.
- plotKernelSpatialModel
bool
Show coefficients of spatial model.
- showBadCandidates
bool
Show the bad candidates (red) along with good (green).
- displayTemplate
bool
Show full (remapped) template.
- displaySciIm
bool
Show science image to match to.
- displaySpatialCells
bool
Show spatial cells.
- displayDiffIm
bool
Show difference image.