deblend¶
- lsst.meas.deblender.deblend(footprint, maskedImage, psf, psffwhm, psfChisqCut1=1.5, psfChisqCut2=1.5, psfChisqCut2b=1.5, fitPsfs=True, medianSmoothTemplate=True, medianFilterHalfsize=2, monotonicTemplate=True, weightTemplates=False, log=None, verbose=False, sigma1=None, maxNumberOfPeaks=0, assignStrayFlux=True, strayFluxToPointSources='necessary', strayFluxAssignment='r-to-peak', rampFluxAtEdge=False, patchEdges=False, tinyFootprintSize=2, getTemplateSum=False, clipStrayFluxFraction=0.001, clipFootprintToNonzero=True, removeDegenerateTemplates=False, maxTempDotProd=0.5)¶
Deblend a parent
Footprint
in aMaskedImageF
.Deblending assumes that
footprint
has multiple peaks, as it will still create aPerFootprint
object with a list of peaks even if there is only one peak in the list. It is recommended to first check thatfootprint
has more than one peak, similar to the execution oflsst.meas.deblender.deblend.SourceDeblendTask
.Note
This is the API for the old deblender, however the function builds the plugins necessary to use the new deblender to perform identically to the old deblender. To test out newer functionality use
newDeblend
instead.Deblending involves several mandatory and optional steps:
# Optional: If
fitPsfs
is True, find all peaks that are well-fit by a PSF + background modelPeaks that pass the cuts have their footprints modified to the PSF + background model and their
deblendedAsPsf
property set toTrue
.Relevant parameters:
psfChisqCut1
,psfChisqCut2
,psfChisqCut2b
,tinyFootprintSize
.See the parameter descriptions for more.
# Build a symmetric template for each peak not well-fit by the PSF model
Given
maskedImageF
,footprint
, and aDeblendedPeak
, creates a symmetric template (templateImage
andtemplateFootprint
) around the peak for all peaks not flagged asskip
ordeblendedAsPsf
.If
patchEdges=True
and iffootprint
touches pixels with theEDGE
bit set, thenfootprint
is grown to include spans whose symmetric mirror is outside of the image.Relevant parameters:
sigma1
andpatchEdges
.
# Optional: If
rampFluxAtEdge
is True, adjust flux on the edges of the template footprintsUsing the PSF, a peak
Footprint
with pixels on the edge of offootprint
is grown by the psffwhm*1.5 and filled in with zeros.The result is a new symmetric footprint template for the peaks near the edge.
Relevant parameter:
patchEdges
.
# Optionally (
medianSmoothTemplate=True
) filter the template imagesApply a median smoothing filter to all of the template images.
Relevant parameters:
medianFilterHalfSize
# Optional: If
monotonicTemplate
is True, make the templates monotonic.The pixels in the templates are modified such that pixels further from the peak will have values smaller than those closer to the peak.
# Optional: If
clipFootprintToNonzero
is True, clip non-zero spans in the template footprintsPeak
Footprint
s are clipped to the region in the image containing non-zero values by dropping spans that are completely zero and moving endpoints to non-zero pixels (but does not split spans that have internal zeros).
# Optional: If
weightTemplates
is True, weight the templates to best fit the observed imageRe-weight the templates so that their linear combination best represents the observed
maskedImage
# Optional: If
removeDegenerateTempaltes
is True, reconstruct shredded galaxiesIf galaxies have substructure, such as face-on spirals, the process of identifying peaks can “shred” the galaxy into many pieces. The templates of shredded galaxies are typically quite similar because they represent the same galaxy, so we try to identify these “degenerate” peaks by looking at the inner product (in pixel space) of pairs of templates.
If they are nearly parallel, we only keep one of the peaks and reject the other.
If only one of the peaks is a PSF template, the other template is used, otherwise the one with the maximum template value is kept.
Relevant parameters:
maxTempDotProduct
# Apportion flux to all of the peak templates
Divide the
maskedImage
flux amongst all of the templates based on the fraction of flux assigned to eachtempalteFootprint
.Leftover “stray flux” is assigned to peaks based on the other parameters.
Relevant parameters:
clipStrayFluxFraction
,strayFluxAssignment
,strayFluxToPointSources
,assignStrayFlux
- Parameters:
- footprint: `afw.detection.Footprint`
Parent footprint to deblend
- maskedImage: `afw.image.MaskedImageF`
Masked image containing the
footprint
- psf: `afw.detection.Psf`
Psf of the
maskedImage
- psffwhm: `float`
FWHM of the
maskedImage
'spsf
- psfChisqCut*: `float`, optional
If
fitPsfs==True
, all of the peaks are fit to the image PSF.psfChisqCut1
is the maximum chi-squared-per-degree-of-freedom allowed for a peak to be considered a PSF match without recentering. A fit is also made that includes terms to recenter the PSF.psfChisqCut2
is the same aspsfChisqCut1
except it determines the restriction on the fit that includes recentering terms. If the peak is a match for a re-centered PSF, the PSF is repositioned at the new center and the peak footprint is fit again, this time to the new PSF. If the resulting chi-squared-per-degree-of-freedom is less thanpsfChisqCut2b
then it passes the re-centering algorithm. If the peak passes both the re-centered and fixed position cuts, the better of the two is accepted, but parameters for all three psf fits are stored in theDeblendedPeak
. The default forpsfChisqCut1
,psfChisqCut2
, andpsfChisqCut2b
is1.5
.- fitPsfs: `bool`, optional
If True then all of the peaks will be compared to the image PSF to distinguish stars from galaxies.
- medianSmoothTemplate: ``bool``, optional
If
medianSmoothTemplate==True
it a median smoothing filter is applied to themaskedImage
. The default isTrue
.- medianFilterHalfSize: `int`, optional
Half the box size of the median filter, ie a
medianFilterHalfSize
of 50 means that each output pixel will be the median of the pixels in a 101 x 101-pixel box in the input image. This parameter is only used whenmedianSmoothTemplate==True
, otherwise it is ignored. The default value is 2.- monotonicTempalte: `bool`, optional
If True then make the template monotonic. The default is True.
- weightTemplates: `bool`, optional
If True, re-weight the templates so that their linear combination best represents the observed
maskedImage
. The default is False.- log:`lsst.log.Logger` or `lsst.utils.logging.LsstLogAdapter`, optional
LSST logger for logging purposes. If
None
, a default logger will be created named after this module.- verbose: `bool`, optional
Whether or not to show a more verbose output. This option only affects the logger creeated internally and will not change the reporting level of an externally-supplied logger. The default is
False
.- sigma1: `float`, optional
Average noise level in
maskedImage
. The default isNone
, which estimates the noise from the median value ofmaskedImage
.- maxNumberOfPeaks: `int`, optional
If nonzero, the maximum number of peaks to deblend. If the total number of peaks is greater than
maxNumberOfPeaks
, then only the firstmaxNumberOfPeaks
sources are deblended. The default is 0, which deblends all of the peaks.- assignStrayFlux: `bool`, optional
If True then flux in the parent footprint that is not covered by any of the template footprints is assigned to templates based on their 1/(1+r^2) distance. How the flux is apportioned is determined by
strayFluxAssignment
. The default is True.- strayFluxToPointSources: `string`
Determines how stray flux is apportioned to point sources
never
: never apportion stray flux to point sourcesnecessary
(default): point sources are included only if there are no extended sources nearbyalways
: point sources are always included in the 1/(1+r^2) splitting
- strayFluxAssignment: `string`, optional
Determines how stray flux is apportioned.
trim
: Trim stray flux and do not include in any footprintsr-to-peak
(default): Stray flux is assigned based on (1/(1+r^2) from the peaksr-to-footprint
: Stray flux is distributed to the footprints based on 1/(1+r^2) of the minimum distance from the stray flux to footprintnearest-footprint
: Stray flux is assigned to the footprint with lowest L-1 (Manhattan) distance to the stray flux
- rampFluxAtEdge: `bool`, optional
If True then extend footprints with excessive flux on the edges as described above. The default is False.
- patchEdges: `bool`, optional
If True and if the footprint touches pixels with the
EDGE
bit set, then grow the footprint to include all symmetric templates. The default isFalse
.- tinyFootprintSize: `float`, optional
The PSF model is shrunk to the size that contains the original footprint. If the bbox of the clipped PSF model for a peak is smaller than
max(tinyFootprintSize,2)
thentinyFootprint
for the peak is set toTrue
and the peak is not fit. The default is 2.- getTemplateSum: `bool`, optional
As part of the flux calculation, the sum of the templates is calculated. If
getTemplateSum==True
then the sum of the templates is stored in the result (aPerFootprint
). The default is False.- clipStrayFluxFraction: `float`, optional
Minimum stray-flux portion. Any stray-flux portion less than
clipStrayFluxFraction
is clipped to zero. The default is 0.001.- clipFootprintToNonzero: `bool`, optional
If True then clip non-zero spans in the template footprints. See above for more. The default is True.
- removeDegenerateTemplates: `bool`, optional
If True then we try to identify “degenerate” peaks by looking at the inner product (in pixel space) of pairs of templates. The default is False.
- maxTempDotProduct: `float`, optional
All dot products between templates greater than
maxTempDotProduct
will result in one of the templates removed. This parameter is only used whenremoveDegenerateTempaltes==True
. The default is 0.5.
- Returns:
- res:
PerFootprint
Deblender result that contains a list of
DeblendedPeak
s for each peak and (optionally) the template sum.
- res: