SourceDetectionTask

class lsst.meas.algorithms.SourceDetectionTask(schema=None, **kwds)

Bases: lsst.pipe.base.Task

Create the detection task. Most arguments are simply passed onto pipe.base.Task.

Parameters:
schema : lsst.afw.table.Schema

Schema object used to create the output lsst.afw.table.SourceCatalog

**kwds

Keyword arguments passed to lsst.pipe.base.task.Task.__init__

If schema is not None and configured for ‘both’ detections,
a ‘flags.negative’ field will be added to label detections made with a
negative threshold.

Notes

This task can add fields to the schema, so any code calling this task must ensure that these columns are indeed present in the input match list.

Methods Summary

applyTempLocalBackground(exposure, middle, …) Apply a temporary local background subtraction
applyThreshold(middle, bbox[, factor]) Apply thresholds to the convolved image
calculateKernelSize(sigma) Calculate size of smoothing kernel
clearMask(mask) Clear the DETECTED and DETECTED_NEGATIVE mask planes
clearUnwantedResults(mask, results) Clear unwanted results from the Struct of results
convolveImage(maskedImage, psf[, doSmooth]) Convolve the image with the PSF
detectFootprints(exposure[, doSmooth, …]) Detect footprints on an exposure.
display(exposure, results[, convolvedImage]) Display detections if so configured
emptyMetadata() Empty (clear) the metadata for this Task and all sub-Tasks.
finalizeFootprints(mask, results, sigma[, …]) Finalize the detected footprints
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.
getName() Get the name of the task.
getPsf(exposure[, sigma]) Retrieve the PSF for an exposure
getSchemaCatalogs() Get the schemas generated by this task.
getTaskDict() Get a dictionary of all tasks as a shallow copy.
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.
makeThreshold(image, thresholdParity[, factor]) Make an afw.detection.Threshold object corresponding to the task’s configuration and the statistics of the given image.
reEstimateBackground(maskedImage, backgrounds) Estimate the background after detection
run(table, exposure[, doSmooth, sigma, …]) Run source detection and create a SourceCatalog of detections.
setEdgeBits(maskedImage, goodBBox, edgeBitmask) Set the edgeBitmask bits for all of maskedImage outside goodBBox
tempWideBackgroundContext(exposure) Context manager for removing wide (large-scale) background
timer(name[, logLevel]) Context manager to log performance data for an arbitrary block of code.
updatePeaks(fpSet, image, threshold) Update the Peaks in a FootprintSet by detecting new Footprints and Peaks in an image and using the new Peaks instead of the old ones.

Methods Documentation

applyTempLocalBackground(exposure, middle, results)

Apply a temporary local background subtraction

This temporary local background serves to suppress noise fluctuations in the wings of bright objects.

Peaks in the footprints will be updated.

Parameters:
exposure : lsst.afw.image.Exposure

Exposure for which to fit local background.

middle : lsst.afw.image.MaskedImage

Convolved image on which detection will be performed (typically smaller than exposure because the half-kernel has been removed around the edges).

results : lsst.pipe.base.Struct

Results of the ‘detectFootprints’ method, containing positive and negative footprints (which contain the peak positions that we will plot). This is a Struct with positive and negative elements that are of type lsst.afw.detection.FootprintSet.

applyThreshold(middle, bbox, factor=1.0)

Apply thresholds to the convolved image

Identifies ``Footprint``s, both positive and negative.

The threshold can be modified by the provided multiplication factor.

Parameters:
middle : lsst.afw.image.MaskedImage

Convolved image to threshold.

bbox : lsst.geom.Box2I

Bounding box of unconvolved image.

factor : float

Multiplier for the configured threshold.

calculateKernelSize(sigma)

Calculate size of smoothing kernel

Uses the nSigmaForKernel configuration parameter. Note that that is the full width of the kernel bounding box (so a value of 7 means 3.5 sigma on either side of center). The value will be rounded up to the nearest odd integer.

Parameters:
sigma : float

Gaussian sigma of smoothing kernel.

Returns:
size : int

Size of the smoothing kernel.

clearMask(mask)

Clear the DETECTED and DETECTED_NEGATIVE mask planes

Removes any previous detection mask in preparation for a new detection pass.

Parameters:
mask : lsst.afw.image.Mask

Mask to be cleared.

clearUnwantedResults(mask, results)

Clear unwanted results from the Struct of results

If we specifically want only positive or only negative detections, drop the ones we don’t want, and its associated mask plane.

Parameters:
mask : lsst.afw.image.Mask

Mask image.

results : lsst.pipe.base.Struct

Detection results, with positive and negative elements; modified.

convolveImage(maskedImage, psf, doSmooth=True)

Convolve the image with the PSF

We convolve the image with a Gaussian approximation to the PSF, because this is separable and therefore fast. It’s technically a correlation rather than a convolution, but since we use a symmetric Gaussian there’s no difference.

The convolution can be disabled with doSmooth=False. If we do convolve, we mask the edges as EDGE and return the convolved image with the edges removed. This is because we can’t convolve the edges because the kernel would extend off the image.

Parameters:
maskedImage : lsst.afw.image.MaskedImage

Image to convolve.

psf : lsst.afw.detection.Psf

PSF to convolve with (actually with a Gaussian approximation to it).

doSmooth : bool

Actually do the convolution? Set to False when running on e.g. a pre-convolved image, or a mask plane.

detectFootprints(exposure, doSmooth=True, sigma=None, clearMask=True, expId=None)

Detect footprints on an exposure.

Parameters:
exposure : lsst.afw.image.Exposure

Exposure to process; DETECTED{,_NEGATIVE} mask plane will be set in-place.

doSmooth : bool, optional

If True, smooth the image before detection using a Gaussian of width sigma, or the measured PSF width of exposure. Set to False when running on e.g. a pre-convolved image, or a mask plane.

sigma : float, optional

Gaussian Sigma of PSF (pixels); used for smoothing and to grow detections; if None then measure the sigma of the PSF of the exposure.

clearMask : bool, optional

Clear both DETECTED and DETECTED_NEGATIVE planes before running detection.

expId : dict, optional

Exposure identifier; unused by this implementation, but used for RNG seed by subclasses.

display(exposure, results, convolvedImage=None)

Display detections if so configured

Displays the exposure in frame 0, overlays the detection peaks.

Requires that lsstDebug has been set up correctly, so that lsstDebug.Info("lsst.meas.algorithms.detection") evaluates True.

If the convolvedImage is non-None and lsstDebug.Info("lsst.meas.algorithms.detection") > 1, the convolvedImage will be displayed in frame 1.

Parameters:
exposure : lsst.afw.image.Exposure

Exposure to display, on which will be plotted the detections.

results : lsst.pipe.base.Struct

Results of the ‘detectFootprints’ method, containing positive and negative footprints (which contain the peak positions that we will plot). This is a Struct with positive and negative elements that are of type lsst.afw.detection.FootprintSet.

convolvedImage : lsst.afw.image.Image, optional

Convolved image used for thresholding.

emptyMetadata()

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

finalizeFootprints(mask, results, sigma, factor=1.0)

Finalize the detected footprints

Grows the footprints, sets the DETECTED and DETECTED_NEGATIVE mask planes, and logs the results.

numPos (number of positive footprints), numPosPeaks (number of positive peaks), numNeg (number of negative footprints), numNegPeaks (number of negative peaks) entries are added to the detection results.

Parameters:
mask : lsst.afw.image.Mask

Mask image on which to flag detected pixels.

results : lsst.pipe.base.Struct

Struct of detection results, including positive and negative entries; modified.

sigma : float

Gaussian sigma of PSF.

factor : float

Multiplier for the configured threshold.

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

Get the name of the task.

Returns:
taskName : str

Name of the task.

See also

getFullName

getPsf(exposure, sigma=None)

Retrieve the PSF for an exposure

If sigma is provided, we make a GaussianPsf with that, otherwise use the one from the exposure.

Parameters:
exposure : lsst.afw.image.Exposure

Exposure from which to retrieve the PSF.

sigma : float, optional

Gaussian sigma to use if provided.

Returns:
psf : lsst.afw.detection.Psf

PSF to use for detection.

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

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.

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("brief description of task")
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 ConfigurableField or RegistryField.

makeThreshold(image, thresholdParity, factor=1.0)

Make an afw.detection.Threshold object corresponding to the task’s configuration and the statistics of the given image.

Parameters:
image : afw.image.MaskedImage

Image to measure noise statistics from if needed.

thresholdParity: `str`

One of “positive” or “negative”, to set the kind of fluctuations the Threshold will detect.

factor : float

Factor by which to multiply the configured detection threshold. This is useful for tweaking the detection threshold slightly.

Returns:
threshold : lsst.afw.detection.Threshold

Detection threshold.

reEstimateBackground(maskedImage, backgrounds)

Estimate the background after detection

Parameters:
maskedImage : lsst.afw.image.MaskedImage

Image on which to estimate the background.

backgrounds : lsst.afw.math.BackgroundList

List of backgrounds; modified.

Returns:
bg : lsst.afw.math.backgroundMI

Empirical background model.

run(table, exposure, doSmooth=True, sigma=None, clearMask=True, expId=None)

Run source detection and create a SourceCatalog of detections.

Parameters:
table : lsst.afw.table.SourceTable

Table object that will be used to create the SourceCatalog.

exposure : lsst.afw.image.Exposure

Exposure to process; DETECTED mask plane will be set in-place.

doSmooth : bool

If True, smooth the image before detection using a Gaussian of width sigma, or the measured PSF width. Set to False when running on e.g. a pre-convolved image, or a mask plane.

sigma : float

Sigma of PSF (pixels); used for smoothing and to grow detections; if None then measure the sigma of the PSF of the exposure

clearMask : bool

Clear DETECTED{,_NEGATIVE} planes before running detection.

expId : int

Exposure identifier; unused by this implementation, but used for RNG seed by subclasses.

Returns:
result : lsst.pipe.base.Struct
sources

The detected sources (lsst.afw.table.SourceCatalog)

fpSets

The result resturned by detectFootprints (lsst.pipe.base.Struct).

Raises:
ValueError

If flags.negative is needed, but isn’t in table’s schema.

lsst.pipe.base.TaskError

If sigma=None, doSmooth=True and the exposure has no PSF.

Notes

If you want to avoid dealing with Sources and Tables, you can use detectFootprints() to just get the `lsst.afw.detection.FootprintSet`s.

static setEdgeBits(maskedImage, goodBBox, edgeBitmask)

Set the edgeBitmask bits for all of maskedImage outside goodBBox

Parameters:
maskedImage : lsst.afw.image.MaskedImage

Image on which to set edge bits in the mask.

goodBBox : lsst.geom.Box2I

Bounding box of good pixels, in LOCAL coordinates.

edgeBitmask : lsst.afw.image.MaskPixel

Bit mask to OR with the existing mask bits in the region outside goodBBox.

tempWideBackgroundContext(exposure)

Context manager for removing wide (large-scale) background

Removing a wide (large-scale) background helps to suppress the detection of large footprints that may overwhelm the deblender. It does, however, set a limit on the maximum scale of objects.

The background that we remove will be restored upon exit from the context manager.

Parameters:
exposure : lsst.afw.image.Exposure

Exposure on which to remove large-scale background.

Returns:
context : context manager

Context manager that will ensure the temporary wide background is restored.

timer(name, logLevel=10)

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 logging level constant.

See also

timer.logInfo

Examples

Creating a timer context:

with self.timer("someCodeToTime"):
    pass  # code to time
updatePeaks(fpSet, image, threshold)

Update the Peaks in a FootprintSet by detecting new Footprints and Peaks in an image and using the new Peaks instead of the old ones.

Parameters:
fpSet : afw.detection.FootprintSet

Set of Footprints whose Peaks should be updated.

image : afw.image.MaskedImage

Image to detect new Footprints and Peak in.

threshold : afw.detection.Threshold

Threshold object for detection.

Input Footprints with fewer Peaks than self.config.nPeaksMaxSimple
are not modified, and if no new Peaks are detected in an input
Footprint, the brightest original Peak in that Footprint is kept.