LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask Class Reference
Inheritance diagram for lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask:

Public Member Functions

def __init__ (self, config, *display=None, **kwargs)
 
def run (self, exp, *donutDiameter=None, doDisplay=False)
 

Static Public Member Functions

def detectObjectsInExp (exp, nSigma, nPixMin, grow=0)
 
def checkResult (exp, centroid, srcNum, percentile)
 

Public Attributes

 display
 
 centroidName
 
 shapeName
 
 schema
 
 control
 
 centroider
 
 sdssShape
 
 shaper
 
 apFluxControl
 
 apFluxer
 
 table
 
 plateScale
 

Static Public Attributes

 ConfigClass = QuickFrameMeasurementTaskConfig
 

Detailed Description

WARNING: An experimental new task with changable API! Do not rely on yet!

This task finds the centroid of the brightest source in a given CCD-image
and returns its centroid and a rough estimate of the seeing/PSF.

It is designed for speed, such that it can be used in observing scripts
to provide pointing offsets, allowing subsequent pointings to place
a source at an exact pixel position.

The approach taken here is deliberately sub-optimal in the detection and
measurement sense, with all optimisation being done for speed and robustness
of the result.

A small set of unit tests exist for this task, which run automatically
if afwdata is setup. These, however, are stricky unit tests, and will not
catch algorithmic regressions. TODO: DM-29038 exists to merge a regression
real test which runs against 1,000 LATISS images, but is therefore slow
and requires access to the data.

Parameters
----------
config : `lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTaskConfig`
    Configuration class for the QuickFrameMeasurementTask.
display : `lsst.afw.display.Display`, optional
    The display to use for showing the images, detections and centroids.

Returns
-------
result : `lsst.pipe.base.Struct`
    Return strucure containing whether the task was successful, the main
    source's centroid, its the aperture fluxes, the ixx and iyy of the
    source, and the median ixx, iyy of the detections in the exposure.
    See run() method for further details.

Raises
------
This task should *never* raise, as the run() method is enclosed in an
except Exception block, so that it will never fail during observing.
Failure modes should be limited to returning a return Struct() with the same
structure as the success case, with all value set to np.nan but with
result.success=False.

Definition at line 96 of file quickFrameMeasurement.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.__init__ (   self,
  config,
display = None,
**  kwargs 
)

Definition at line 142 of file quickFrameMeasurement.py.

142  def __init__(self, config, *, display=None, **kwargs):
143  super().__init__(config=config, **kwargs)
144  self.makeSubtask("installPsf")
145 
146  self.display = None
147  if display:
148  self.display = display
149 
150  self.centroidName = "base_SdssCentroid"
151  self.shapeName = "base_SdssShape"
152  self.schema = afwTable.SourceTable.makeMinimalSchema()
153  self.schema.getAliasMap().set("slot_Centroid", self.centroidName)
154  self.schema.getAliasMap().set("slot_Shape", self.shapeName)
155  self.control = measBase.SdssCentroidControl()
156  self.centroider = measBase.SdssCentroidAlgorithm(self.control, self.centroidName, self.schema)
157  self.sdssShape = measBase.SdssShapeControl()
158  self.shaper = measBase.SdssShapeAlgorithm(self.sdssShape, self.shapeName, self.schema)
159  self.apFluxControl = measBase.ApertureFluxControl()
160  md = dafBase.PropertySet()
161  self.apFluxer = measBase.CircularApertureFluxAlgorithm(self.apFluxControl, "aperFlux",
162  self.schema, md)
163 
164  self.table = afwTable.SourceTable.make(self.schema) # make sure to call this last!
165 
Class for storing generic metadata.
Definition: PropertySet.h:66
daf::base::PropertySet * set
Definition: fits.cc:912

Member Function Documentation

◆ checkResult()

def lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.checkResult (   exp,
  centroid,
  srcNum,
  percentile 
)
static
Perform a final check that centroid location is actually bright.

Parameters
----------
exp : `lsst.afw.image.Exposure`
    The exposure on which to operate
centroid : `tuple` of `float`
    Location of the centroid in pixel coordinates
scrNum : `int`
    Number of the source in the source catalog. Only used if the check
    is failed, for debug purposes.
percentile : `float`
    Image's percentile above which the pixel containing the centroid
    must be in order to pass the check.

Raises
------
ValueError
    Raised if the centroid's pixel is not above the percentile threshold

Definition at line 195 of file quickFrameMeasurement.py.

195  def checkResult(exp, centroid, srcNum, percentile):
196  """Perform a final check that centroid location is actually bright.
197 
198  Parameters
199  ----------
200  exp : `lsst.afw.image.Exposure`
201  The exposure on which to operate
202  centroid : `tuple` of `float`
203  Location of the centroid in pixel coordinates
204  scrNum : `int`
205  Number of the source in the source catalog. Only used if the check
206  is failed, for debug purposes.
207  percentile : `float`
208  Image's percentile above which the pixel containing the centroid
209  must be in order to pass the check.
210 
211  Raises
212  ------
213  ValueError
214  Raised if the centroid's pixel is not above the percentile threshold
215  """
216  threshold = np.percentile(exp.image.array, percentile)
217  pixelValue = exp.image[centroid]
218  if pixelValue < threshold:
219  msg = (f"Final centroid pixel value check failed: srcNum {srcNum} at {centroid}"
220  f" has central pixel = {pixelValue:3f} <"
221  f" {percentile} percentile of image = {threshold:3f}")
222  raise ValueError(msg)
223  return
224 

◆ detectObjectsInExp()

def lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.detectObjectsInExp (   exp,
  nSigma,
  nPixMin,
  grow = 0 
)
static
Run a very basic but fast threshold-based object detection on an exposure
Return the footPrintSet for the objects in a postISR exposure.

Parameters
----------
exp : `lsst.afw.image.Exposure`
    Image in which to detect objects.
nSigma : `float`
    nSigma above image's stddev at which to set the detection threshold.
nPixMin : `int`
    Minimum number of pixels for detection.
grow : `int`
    Grow the detected footprint by this many pixels.

Returns
-------
footPrintSet : `lsst.afw.detection.FootprintSet`
    FootprintSet containing the detections.

Definition at line 167 of file quickFrameMeasurement.py.

167  def detectObjectsInExp(exp, nSigma, nPixMin, grow=0):
168  """Run a very basic but fast threshold-based object detection on an exposure
169  Return the footPrintSet for the objects in a postISR exposure.
170 
171  Parameters
172  ----------
173  exp : `lsst.afw.image.Exposure`
174  Image in which to detect objects.
175  nSigma : `float`
176  nSigma above image's stddev at which to set the detection threshold.
177  nPixMin : `int`
178  Minimum number of pixels for detection.
179  grow : `int`
180  Grow the detected footprint by this many pixels.
181 
182  Returns
183  -------
184  footPrintSet : `lsst.afw.detection.FootprintSet`
185  FootprintSet containing the detections.
186  """
187  threshold = afwDetect.Threshold(nSigma, afwDetect.Threshold.STDEV)
188  footPrintSet = afwDetect.FootprintSet(exp.getMaskedImage(), threshold, "DETECTED", nPixMin)
189  if grow > 0:
190  isotropic = True
191  footPrintSet = afwDetect.FootprintSet(footPrintSet, grow, isotropic)
192  return footPrintSet
193 
A set of Footprints, associated with a MaskedImage.
Definition: FootprintSet.h:53
A Threshold is used to pass a threshold value to detection algorithms.
Definition: Threshold.h:43

◆ run()

def lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.run (   self,
  exp,
donutDiameter = None,
  doDisplay = False 
)
Calculate position, flux and shape of the brightest star in an image.

Given an an assembled (and at least minimally ISRed exposure),
quickly and robustly calculate the centroid of the
brightest star in the image.

Parameters
----------
exp : `lsst.afw.image.Exposure`
    The exposure in which to find and measure the brightest star.
donutDiameter : `int` or `float`, optional
    The expected diameter of donuts in pixels for use in the centre of
    mass centroid measurement. If None is provided, the config option
    is used.
doDisplay : `bool`
    Display the image and found sources. A diplay object must have
    been passed to the task constructor.

Returns
-------
result : `lsst.pipe.base.Struct`
    Struct containing:
        Whether the task ran successfully and found the object (bool)
        The object's centroid (float, float)
        The object's ixx, iyy (float, float)
        The object's 70 pixel aperture flux (float)
        The object's 25 pixel aperture flux (float)
        The images's median ixx, iyy (float, float)
    If unsuccessful, the success field is False and all other results
    are np.nan of the expected shape.

Notes
-----
Because of this task's involvement in observing scripts, the run method
should *never* raise. Failure modes are noted by returning a Struct with
the same structure as the success case, with all value set to np.nan and
result.success=False.

Definition at line 448 of file quickFrameMeasurement.py.

448  def run(self, exp, *, donutDiameter=None, doDisplay=False):
449  """Calculate position, flux and shape of the brightest star in an image.
450 
451  Given an an assembled (and at least minimally ISRed exposure),
452  quickly and robustly calculate the centroid of the
453  brightest star in the image.
454 
455  Parameters
456  ----------
457  exp : `lsst.afw.image.Exposure`
458  The exposure in which to find and measure the brightest star.
459  donutDiameter : `int` or `float`, optional
460  The expected diameter of donuts in pixels for use in the centre of
461  mass centroid measurement. If None is provided, the config option
462  is used.
463  doDisplay : `bool`
464  Display the image and found sources. A diplay object must have
465  been passed to the task constructor.
466 
467  Returns
468  -------
469  result : `lsst.pipe.base.Struct`
470  Struct containing:
471  Whether the task ran successfully and found the object (bool)
472  The object's centroid (float, float)
473  The object's ixx, iyy (float, float)
474  The object's 70 pixel aperture flux (float)
475  The object's 25 pixel aperture flux (float)
476  The images's median ixx, iyy (float, float)
477  If unsuccessful, the success field is False and all other results
478  are np.nan of the expected shape.
479 
480  Notes
481  -----
482  Because of this task's involvement in observing scripts, the run method
483  should *never* raise. Failure modes are noted by returning a Struct with
484  the same structure as the success case, with all value set to np.nan and
485  result.success=False.
486  """
487  try:
488  result = self._run(exp=exp, donutDiameter=donutDiameter, doDisplay=doDisplay)
489  return result
490  except Exception as e:
491  self.log.warning("Failed to find main source centroid %s", e)
492  result = self._makeEmptyReturnStruct()
493  return result
494 
def run(self, coaddExposures, bbox, wcs)
Definition: getTemplate.py:603

Member Data Documentation

◆ apFluxControl

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.apFluxControl

Definition at line 159 of file quickFrameMeasurement.py.

◆ apFluxer

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.apFluxer

Definition at line 161 of file quickFrameMeasurement.py.

◆ centroider

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.centroider

Definition at line 156 of file quickFrameMeasurement.py.

◆ centroidName

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.centroidName

Definition at line 150 of file quickFrameMeasurement.py.

◆ ConfigClass

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.ConfigClass = QuickFrameMeasurementTaskConfig
static

Definition at line 139 of file quickFrameMeasurement.py.

◆ control

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.control

Definition at line 155 of file quickFrameMeasurement.py.

◆ display

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.display

Definition at line 146 of file quickFrameMeasurement.py.

◆ plateScale

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.plateScale

Definition at line 503 of file quickFrameMeasurement.py.

◆ schema

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.schema

Definition at line 152 of file quickFrameMeasurement.py.

◆ sdssShape

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.sdssShape

Definition at line 157 of file quickFrameMeasurement.py.

◆ shapeName

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.shapeName

Definition at line 151 of file quickFrameMeasurement.py.

◆ shaper

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.shaper

Definition at line 158 of file quickFrameMeasurement.py.

◆ table

lsst.pipe.tasks.quickFrameMeasurement.QuickFrameMeasurementTask.table

Definition at line 164 of file quickFrameMeasurement.py.


The documentation for this class was generated from the following file: