DcrAssembleCoaddTask#
- class lsst.drp.tasks.dcr_assemble_coadd.DcrAssembleCoaddTask(*args, **kwargs)#
Bases:
CompareWarpAssembleCoaddTaskAssemble DCR coadded images from a set of warps.
Attributes#
- bufferSize
int The number of pixels to grow each subregion by to allow for DCR.
Notes#
As with AssembleCoaddTask, we want to assemble a coadded image from a set of Warps (also called coadded temporary exposures), including the effects of Differential Chromatic Refraction (DCR). For full details of the mathematics and algorithm, please see DMTN-037: DCR-matched template generation (https://dmtn-037.lsst.io).
This Task produces a DCR-corrected Coadd, as well as a dcrCoadd for each subfilter used in the iterative calculation. It begins by dividing the bandpass-defining filter into N equal bandwidth “subfilters”, and divides the flux in each pixel from an initial coadd equally into each as a “dcrModel”. Because the airmass and parallactic angle of each individual exposure is known, we can calculate the shift relative to the center of the band in each subfilter due to DCR. For each exposure we apply this shift as a linear transformation to the dcrModels and stack the results to produce a DCR-matched exposure. The matched exposures are subtracted from the input exposures to produce a set of residual images, and these residuals are reverse shifted for each exposures’ subfilters and stacked. The shifted and stacked residuals are added to the dcrModels to produce a new estimate of the flux in each pixel within each subfilter. The dcrModels are solved for iteratively, which continues until the solution from a new iteration improves by less than a set percentage, or a maximum number of iterations is reached. Two forms of regularization are employed to reduce unphysical results. First, the new solution is averaged with the solution from the previous iteration, which mitigates oscillating solutions where the model overshoots with alternating very high and low values. Second, a common degeneracy when the data have a limited range of airmass or parallactic angle values is for one subfilter to be fit with very low or negative values, while another subfilter is fit with very high values. This typically appears in the form of holes next to sources in one subfilter, and corresponding extended wings in another. Because each subfilter has a narrow bandwidth we assume that physical sources that are above the noise level will not vary in flux by more than a factor of
frequencyClampFactorbetween subfilters, and pixels that have flux deviations larger than that factor will have the excess flux distributed evenly among all subfilters. IfsplitSubfiltersis set, then each subfilter will be further sub- divided during the forward modeling step (only). This approximates using a higher number of subfilters that may be necessary for high airmass observations, but does not increase the number of free parameters in the fit. This is needed when there are high airmass observations which would otherwise have significant DCR even within a subfilter. Because calculating the shifted images takes most of the time, splitting the subfilters is turned off by way of thesplitThresholdoption for low-airmass observations that do not suffer from DCR within a subfilter.Methods Summary
applyModelWeights(modelImages, refImage, ...)Smoothly replace model pixel values with those from a reference at locations away from detected sources.
calculateConvergence(dcrModels, ...)Calculate a quality of fit metric for the matched templates.
calculateGain(convergenceList, gainList)Calculate the gain to use for the current iteration.
calculateModelWeights(dcrModels, dcrBBox)Build an array that smoothly tapers to 0 away from detected sources.
calculateNImage(dcrModels, bbox, ...)Calculate the number of exposures contributing to each subfilter.
calculateSingleConvergence(dcrModels, ...)Calculate a quality of fit metric for a single matched template.
dcrAssembleSubregion(dcrModels, ...)Assemble the DCR coadd for a sub-region.
dcrResiduals(residual, visitInfo, wcs, ...)Prepare a residual image for stacking in each subfilter by applying the reverse DCR shifts.
fillCoadd(dcrModels, skyInfo, warpRefList, ...)Create a list of coadd exposures from a list of masked images.
loadSubExposures(bbox, statsCtrl, ...)Pre-load sub-regions of a list of exposures.
measureCoaddPsf(coaddExposure)Detect sources on the coadd exposure and measure the final PSF.
newModelFromResidual(dcrModels, ...)Calculate a new DcrModel from a set of image residuals.
prepareDcrInputs(templateCoadd, warpRefList, ...)Prepare the DCR coadd by iterating through the visitInfo of the input warps.
run(skyInfo, *, warpRefList, ...[, ...])Assemble the coadd.
runQuantum(butlerQC, inputRefs, outputRefs)Do butler IO and transform to provide in memory objects for tasks
runmethod.selectCoaddPsf(templateCoadd, warpRefList)Compute the PSF of the coadd from the exposures with the best seeing.
stackCoadd(dcrCoadds)Add a list of sub-band coadds together.
Methods Documentation
- applyModelWeights(modelImages, refImage, modelWeights)#
Smoothly replace model pixel values with those from a reference at locations away from detected sources.
Parameters#
- modelImages
listoflsst.afw.image.Image The new DCR model images from the current iteration. The values will be modified in place.
- refImage
lsst.afw.image.MaskedImage A reference image used to supply the default pixel values.
- modelWeights
numpy.ndarrayorfloat A 2D array of weight values that tapers smoothly to zero away from detected sources. Set to a placeholder value of 1.0 if
self.config.useModelWeightsis False.
- modelImages
- calculateConvergence(dcrModels, subExposures, bbox, warpRefList, weightList, statsCtrl)#
Calculate a quality of fit metric for the matched templates.
Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
- subExposures
dictoflsst.afw.image.ExposureF The pre-loaded exposures for the current subregion.
- bbox
lsst.geom.box.Box2I Sub-region to coadd.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
- weightList
listoffloat The weight to give each input exposure in the coadd.
- statsCtrl
lsst.afw.math.StatisticsControl Statistics control object for coadd.
Returns#
- convergenceMetric
float Quality of fit metric for all input exposures, within the sub-region.
- dcrModels
- calculateGain(convergenceList, gainList)#
Calculate the gain to use for the current iteration.
After calculating a new DcrModel, each value is averaged with the value in the corresponding pixel from the previous iteration. This reduces oscillating solutions that iterative techniques are plagued by, and speeds convergence. By far the biggest changes to the model happen in the first couple iterations, so we can also use a more aggressive gain later when the model is changing slowly.
Parameters#
- convergenceList
listoffloat The quality of fit metric from each previous iteration.
- gainList
listoffloat The gains used in each previous iteration: appended with the new gain value. Gains are numbers between
self.config.baseGainand 1.
Returns#
- gain
float Relative weight to give the new solution when updating the model. A value of 1.0 gives equal weight to both solutions.
Raises#
- ValueError
If
len(convergenceList) != len(gainList)+1.
- convergenceList
- calculateModelWeights(dcrModels, dcrBBox)#
Build an array that smoothly tapers to 0 away from detected sources.
Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
- dcrBBox
lsst.geom.box.Box2I Sub-region of the coadd which includes a buffer to allow for DCR.
Returns#
- weights
numpy.ndarrayorfloat A 2D array of weight values that tapers smoothly to zero away from detected sources. Set to a placeholder value of 1.0 if
self.config.useModelWeightsis False.
Raises#
- ValueError
If
useModelWeightsis set andmodelWeightsWidthis negative.
- dcrModels
- calculateNImage(dcrModels, bbox, warpRefList, spanSetMaskList, statsCtrl)#
Calculate the number of exposures contributing to each subfilter.
Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
- bbox
lsst.geom.box.Box2I Bounding box of the patch to coadd.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
- spanSetMaskList
listofdictcontaining spanSet lists, orNone Each element of the
dictcontains the new mask plane name (e.g. “CLIPPED and/or “NO_DATA”) as the key, and the list of SpanSets to apply to the mask.- statsCtrl
lsst.afw.math.StatisticsControl Statistics control object for coadd
Returns#
- dcrNImages
listoflsst.afw.image.ImageU List of exposure count images for each subfilter.
- dcrWeights
listoflsst.afw.image.ImageF Per-pixel weights for each subfilter. Equal to 1/(number of unmasked images contributing to each pixel).
- dcrModels
- calculateSingleConvergence(dcrModels, exposure, significanceImage, statsCtrl)#
Calculate a quality of fit metric for a single matched template.
Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
- exposure
lsst.afw.image.ExposureF The input warped exposure to evaluate.
- significanceImage
numpy.ndarray Array of weights for each pixel corresponding to its significance for the convergence calculation.
- statsCtrl
lsst.afw.math.StatisticsControl Statistics control object for coadd.
Returns#
- convergenceMetric
float Quality of fit metric for one exposure, within the sub-region.
- dcrModels
- dcrAssembleSubregion(dcrModels, subExposures, bbox, dcrBBox, warpRefList, statsCtrl, convergenceMetric, gain, modelWeights, refImage, dcrWeights)#
Assemble the DCR coadd for a sub-region.
Build a DCR-matched template for each input exposure, then shift the residuals according to the DCR in each subfilter. Stack the shifted residuals and apply them as a correction to the solution from the previous iteration. Restrict the new model solutions from varying by more than a factor of
modelClampFactorfrom the last solution, and additionally restrict the individual subfilter models from varying by more than a factor offrequencyClampFactorfrom their average. Finally, mitigate potentially oscillating solutions by averaging the new solution with the solution from the previous iteration, weighted by their convergence metric.Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
- subExposures
dictoflsst.afw.image.ExposureF The pre-loaded exposures for the current subregion.
- bbox
lsst.geom.box.Box2I Bounding box of the subregion to coadd.
- dcrBBox
lsst.geom.box.Box2I Sub-region of the coadd which includes a buffer to allow for DCR.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
- statsCtrl
lsst.afw.math.StatisticsControl Statistics control object for coadd.
- convergenceMetric
float Quality of fit metric for the matched templates of the input images.
- gain
float, optional Relative weight to give the new solution when updating the model.
- modelWeights
numpy.ndarrayorfloat A 2D array of weight values that tapers smoothly to zero away from detected sources. Set to a placeholder value of 1.0 if
self.config.useModelWeightsis False.- refImage
lsst.afw.image.Image A reference image used to supply the default pixel values.
- dcrWeights
listoflsst.afw.image.Image Per-pixel weights for each subfilter. Equal to 1/(number of unmasked images contributing to each pixel).
- dcrModels
- dcrResiduals(residual, visitInfo, wcs, effectiveWavelength, bandwidth)#
Prepare a residual image for stacking in each subfilter by applying the reverse DCR shifts.
Parameters#
- residual
numpy.ndarray The residual masked image for one exposure, after subtracting the matched template.
- visitInfo
lsst.afw.image.VisitInfo Metadata for the exposure.
- wcs
lsst.afw.geom.SkyWcs Coordinate system definition (wcs) for the exposure.
Yields#
- residualImage
numpy.ndarray The residual image for the next subfilter, shifted for DCR.
- residual
- fillCoadd(dcrModels, skyInfo, warpRefList, weightList, calibration=None, coaddInputs=None, mask=None, variance=None)#
Create a list of coadd exposures from a list of masked images.
Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
- skyInfo
lsst.pipe.base.Struct Patch geometry information, from getSkyInfo.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
- weightList
listoffloat The weight to give each input exposure in the coadd.
- calibration
lsst.afw.Image.PhotoCalib, optional Scale factor to set the photometric calibration of an exposure.
- coaddInputs
lsst.afw.Image.CoaddInputs, optional A record of the observations that are included in the coadd.
- mask
lsst.afw.image.Mask, optional Optional mask to override the values in the final coadd.
- variance
lsst.afw.image.Image, optional Optional variance plane to override the values in the final coadd.
Returns#
- dcrCoadds
listoflsst.afw.image.ExposureF A list of coadd exposures, each exposure containing the model for one subfilter.
- dcrModels
- loadSubExposures(bbox, statsCtrl, warpRefList, imageScalerList, spanSetMaskList)#
Pre-load sub-regions of a list of exposures.
Parameters#
- bbox
lsst.geom.box.Box2I Sub-region to coadd.
- statsCtrl
lsst.afw.math.StatisticsControl Statistics control object for coadd.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
- imageScalerList
listoflsst.pipe.task.ImageScaler The image scalars correct for the zero point of the exposures. Deprecated and will be removed after v29 in DM-49083.
- spanSetMaskList
listofdictcontaining spanSet lists, orNone Each element is dict with keys = mask plane name to add the spans to.
Returns#
- subExposures
dict The
dictkeys are the visit IDs, and the values arelsst.afw.image.ExposureFThe pre-loaded exposures for the current subregion. The variance plane contains weights, and not the variance
- bbox
- measureCoaddPsf(coaddExposure)#
Detect sources on the coadd exposure and measure the final PSF.
Parameters#
- coaddExposure
lsst.afw.image.Exposure The final coadded exposure.
- coaddExposure
- newModelFromResidual(dcrModels, residualGeneratorList, dcrBBox, statsCtrl, gain, modelWeights, refImage, dcrWeights)#
Calculate a new DcrModel from a set of image residuals.
Parameters#
- dcrModels
lsst.pipe.tasks.DcrModel Current model of the true sky after correcting chromatic effects.
- residualGeneratorList
generatorofnumpy.ndarray The residual image for the next subfilter, shifted for DCR.
- dcrBBox
lsst.geom.box.Box2I Sub-region of the coadd which includes a buffer to allow for DCR.
- statsCtrl
lsst.afw.math.StatisticsControl Statistics control object for coadd.
- gain
float Relative weight to give the new solution when updating the model.
- modelWeights
numpy.ndarrayorfloat A 2D array of weight values that tapers smoothly to zero away from detected sources. Set to a placeholder value of 1.0 if
self.config.useModelWeightsis False.- refImage
lsst.afw.image.Image A reference image used to supply the default pixel values.
- dcrWeights
listoflsst.afw.image.Image Per-pixel weights for each subfilter. Equal to 1/(number of unmasked images contributing to each pixel).
Returns#
- dcrModel
lsst.pipe.tasks.DcrModel New model of the true sky after correcting chromatic effects.
- dcrModels
- prepareDcrInputs(templateCoadd, warpRefList, weightList)#
Prepare the DCR coadd by iterating through the visitInfo of the input warps.
Sets the property
bufferSize.Parameters#
- templateCoadd
lsst.afw.image.ExposureF The initial coadd exposure before accounting for DCR.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
- weightList
listoffloat The weight to give each input exposure in the coadd. Will be modified in place if
doAirmassWeightis set.
Returns#
- dcrModels
lsst.pipe.tasks.DcrModel Best fit model of the true sky after correcting chromatic effects.
Raises#
- NotImplementedError
If
lambdaMinis missing from the Mapper class of the obs package being used.
- templateCoadd
- run(skyInfo, *, warpRefList, imageScalerList, weightList, supplementaryData=None, **kwargs)#
Assemble the coadd.
Requires additional inputs Struct
supplementaryDatato contain atemplateCoaddthat serves as the model of the static sky.Find artifacts and apply them to the warps’ masks creating a list of alternative masks with a new “CLIPPED” plane and updated “NO_DATA” plane then pass these alternative masks to the base class’s assemble method.
Divide the
templateCoaddevenly between each subfilter of aDcrModelas the starting best estimate of the true wavelength- dependent sky. Forward model theDcrModelusing the known chromatic effects in each subfilter and calculate a convergence metric based on how well the modeled template matches the input warps. If the convergence has not yet reached the desired threshold, then shift and stack the residual images to build a newDcrModel. Apply conditioning to prevent oscillating solutions between iterations or between subfilters.Once the
DcrModelreaches convergence or the maximum number of iterations has been reached, fill the metadata for each subfilter image and make them propercoaddExposures.Parameters#
- skyInfo
lsst.pipe.base.Struct Patch geometry information, from getSkyInfo
- warpRefList
list[lsst.daf.butler.DeferredDatasetHandle] The data references to the input warped exposures.
- imageScalerList
list[lsst.pipe.task.ImageScaler] The image scalars correct for the zero point of the exposures. Deprecated and will be removed after v29 in DM-49083.
- weightList
list[float] The weight to give each input exposure in the coadd.
- supplementaryData
lsst.pipe.base.Struct Result struct returned by
_makeSupplementaryDatawith attributes:templateCoaddCoadded exposure (
lsst.afw.image.Exposure).
Returns#
- result
lsst.pipe.base.Struct Results as a struct with attributes:
coaddExposureCoadded exposure (
lsst.afw.image.Exposure).nImageExposure count image (
lsst.afw.image.ImageU).dcrCoaddslistof coadded exposures for each subfilter.dcrNImageslistof exposure count images for each subfilter.
- skyInfo
- runQuantum(butlerQC, inputRefs, outputRefs)#
Do butler IO and transform to provide in memory objects for tasks
runmethod.Parameters#
- butlerQC
QuantumContext 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
PipelineTaskConnectionsclass. The values of these attributes are thelsst.daf.butler.DatasetRefobjects associated with the defined input/prerequisite connections.- outputRefs
OutputQuantizedConnection Datastructure whose attribute names are the names that identify connections defined in corresponding
PipelineTaskConnectionsclass. The values of these attributes are thelsst.daf.butler.DatasetRefobjects associated with the defined output connections.
Notes#
Assemble a coadd from a set of Warps.
- butlerQC
- selectCoaddPsf(templateCoadd, warpRefList)#
Compute the PSF of the coadd from the exposures with the best seeing.
Parameters#
- templateCoadd
lsst.afw.image.ExposureF The initial coadd exposure before accounting for DCR.
- warpRefList
listoflsst.daf.butler.DeferredDatasetHandle The data references to the input warped exposures.
Returns#
- psf
lsst.meas.algorithms.CoaddPsf The average PSF of the input exposures with the best seeing.
- templateCoadd
- stackCoadd(dcrCoadds)#
Add a list of sub-band coadds together.
Parameters#
- dcrCoadds
listoflsst.afw.image.ExposureF A list of coadd exposures, each exposure containing the model for one subfilter.
Returns#
- coaddExposure
lsst.afw.image.ExposureF A single coadd exposure that is the sum of the sub-bands.
- dcrCoadds
- bufferSize