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.meas.base.plugins.VariancePlugin Class Reference
Inheritance diagram for lsst.meas.base.plugins.VariancePlugin:
lsst.meas.base.wrappers.GenericPlugin lsst.meas.base.pluginsBase.BasePlugin

Public Member Functions

def getExecutionOrder (cls)
 
def __init__ (self, config, name, schema, metadata)
 
def measure (self, measRecord, exposure, center)
 
def fail (self, measRecord, error=None)
 
def measureN (self, measCat, exposure, refCat, refWcs)
 
def makeSingleFramePlugin (cls, name)
 
def makeForcedPlugin (cls, name)
 
def getLogName (self)
 

Static Public Member Functions

def getTransformClass ()
 

Public Attributes

 varValue
 
 emptyFootprintFlag
 
 config
 
 name
 
 logName
 

Static Public Attributes

 ConfigClass = VarianceConfig
 
int FAILURE_BAD_CENTROID = 1
 
int FAILURE_EMPTY_FOOTPRINT = 2
 
float CENTROID_ORDER = 0.0
 
float SHAPE_ORDER = 1.0
 
float FLUX_ORDER = 2.0
 
float APCORR_ORDER = 3.0
 
float DEFAULT_CATALOGCALCULATION = 4.0
 

Detailed Description

Compute the median variance corresponding to a footprint.

The aim here is to measure the background variance, rather than that of
the object itself. In order to achieve this, the variance is calculated
over an area scaled up from the shape of the input footprint.

Parameters
----------
config : `VarianceConfig`
    Plugin configuraion.
name : `str`
    Plugin name.
schema : `lsst.afw.table.Schema`
    The schema for the measurement output catalog. New fields will be
    added to hold measurements produced by this plugin.
metadata : `lsst.daf.base.PropertySet`
    Plugin metadata that will be attached to the output catalog

Definition at line 229 of file plugins.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.meas.base.plugins.VariancePlugin.__init__ (   self,
  config,
  name,
  schema,
  metadata 
)

Definition at line 263 of file plugins.py.

263  def __init__(self, config, name, schema, metadata):
264  GenericPlugin.__init__(self, config, name, schema, metadata)
265  self.varValue = schema.addField(name + '_value', type="D", doc="Variance at object position")
266  self.emptyFootprintFlag = schema.addField(name + '_flag_emptyFootprint', type="Flag",
267  doc="Set to True when the footprint has no usable pixels")
268 
269  # Alias the badCentroid flag to that which is defined for the target
270  # of the centroid slot. We do not simply rely on the alias because
271  # that could be changed post-measurement.
272  schema.getAliasMap().set(name + '_flag_badCentroid', schema.getAliasMap().apply("slot_Centroid_flag"))
273 
daf::base::PropertySet * set
Definition: fits.cc:912

Member Function Documentation

◆ fail()

def lsst.meas.base.plugins.VariancePlugin.fail (   self,
  measRecord,
  error = None 
)
Record a measurement failure.

This default implementation simply records the failure in the source
record.

Parameters
----------
measRecord : `lsst.afw.table.SourceRecord`
    Catalog record for the source being measured.
error : `Exception`
    Error causing failure, or `None`.

Reimplemented from lsst.meas.base.wrappers.GenericPlugin.

Definition at line 302 of file plugins.py.

302  def fail(self, measRecord, error=None):
303  # Check that we have an error object and that it is of type
304  # MeasurementError
305  if isinstance(error, MeasurementError):
306  assert error.getFlagBit() in (self.FAILURE_BAD_CENTROID, self.FAILURE_EMPTY_FOOTPRINT)
307  # FAILURE_BAD_CENTROID handled by alias to centroid record.
308  if error.getFlagBit() == self.FAILURE_EMPTY_FOOTPRINT:
309  measRecord.set(self.emptyFootprintFlag, True)
310  measRecord.set(self.varValue, np.nan)
311  GenericPlugin.fail(self, measRecord, error)
312 
313 

◆ getExecutionOrder()

def lsst.meas.base.plugins.VariancePlugin.getExecutionOrder (   cls)
Get the relative execution order of this plugin.

Must be reimplemented as a class method by concrete derived classes.

Reimplemented from lsst.meas.base.wrappers.GenericPlugin.

Definition at line 260 of file plugins.py.

260  def getExecutionOrder(cls):
261  return BasePlugin.FLUX_ORDER
262 

◆ getLogName()

def lsst.meas.base.pluginsBase.BasePlugin.getLogName (   self)
inherited

Definition at line 134 of file pluginsBase.py.

134  def getLogName(self):
135  return self.logName
136 

◆ getTransformClass()

def lsst.meas.base.pluginsBase.BasePlugin.getTransformClass ( )
staticinherited
Get the measurement transformation appropriate to this plugin.

This returns a subclass of `transforms.MeasurementTransform`, which
may be instantiated with details of the algorithm configuration and
then called with information about calibration and WCS to convert from
raw measurement quantities to calibrated units. Calibrated data is
then provided in a separate output table.

Notes
-----
By default, we copy everything from the input to the output without
transformation.

Reimplemented in lsst.meas.base.plugins.ForcedPeakCentroidPlugin, and lsst.meas.base.plugins.SingleFramePeakCentroidPlugin.

Definition at line 169 of file pluginsBase.py.

169  def getTransformClass():
170  """Get the measurement transformation appropriate to this plugin.
171 
172  This returns a subclass of `transforms.MeasurementTransform`, which
173  may be instantiated with details of the algorithm configuration and
174  then called with information about calibration and WCS to convert from
175  raw measurement quantities to calibrated units. Calibrated data is
176  then provided in a separate output table.
177 
178  Notes
179  -----
180  By default, we copy everything from the input to the output without
181  transformation.
182  """
183  return PassThroughTransform

◆ makeForcedPlugin()

def lsst.meas.base.wrappers.GenericPlugin.makeForcedPlugin (   cls,
  name 
)
inherited
Produce a ForcedPlugin subclass from this GenericPlugin class.

The class is also registered.

Parameters
----------
name : `str`
    Name of plugin to register.

Definition at line 623 of file wrappers.py.

623  def makeForcedPlugin(cls, name):
624  """Produce a ForcedPlugin subclass from this GenericPlugin class.
625 
626  The class is also registered.
627 
628  Parameters
629  ----------
630  name : `str`
631  Name of plugin to register.
632  """
633  class ForcedFromGenericConfig(cls.ConfigClass, ForcedPluginConfig):
634  pass
635 
636  @register(name)
637  class ForcedFromGenericPlugin(ForcedPlugin):
638  ConfigClass = ForcedFromGenericConfig
639 
640  def __init__(self, config, name, schemaMapper, metadata, logName=None):
641  ForcedPlugin.__init__(self, config, name, schemaMapper, metadata, logName=logName)
642  schema = schemaMapper.editOutputSchema()
643  self._generic = cls(config, name, schema, metadata)
644 
645  def measure(self, measRecord, exposure, refRecord, refWcs):
646  # Forced photometry tasks should almost be configured with a
647  # centroider (populating measRecord.getCentroid()) that
648  # transforms the reference centroid, but we respect their
649  # decision if they decided to re-centroid (or do something more
650  # unusual) on the image being measured.
651  center = measRecord.getCentroid()
652  return self._generic.measure(measRecord, exposure, center)
653 
654  def measureN(self, measCat, exposure, refCat, refWcs):
655  return self._generic.measureN(measCat, exposure, refCat, refWcs)
656 
657  def fail(self, measRecord, error=None):
658  self._generic.fail(measRecord, error if error is not None else None)
659 
660  @staticmethod
661  def getExecutionOrder():
662  return cls.getExecutionOrder()
663 
664  def getTransformClass(self):
665  return self._generic.getTransformClass()
666 
667  return ForcedFromGenericPlugin
def measure(mi, x, y, size, statistic, stats)
Definition: fringe.py:517

◆ makeSingleFramePlugin()

def lsst.meas.base.wrappers.GenericPlugin.makeSingleFramePlugin (   cls,
  name 
)
inherited
Produce a SingleFramePlugin subclass from this GenericPlugin class.

The class is also registered.

Parameters
----------
name : `str`
    Name of plugin to register.

Definition at line 582 of file wrappers.py.

582  def makeSingleFramePlugin(cls, name):
583  """Produce a SingleFramePlugin subclass from this GenericPlugin class.
584 
585  The class is also registered.
586 
587  Parameters
588  ----------
589  name : `str`
590  Name of plugin to register.
591  """
592  class SingleFrameFromGenericConfig(cls.ConfigClass, SingleFramePluginConfig):
593  pass
594 
595  @register(name)
596  class SingleFrameFromGenericPlugin(SingleFramePlugin):
597  ConfigClass = SingleFrameFromGenericConfig
598 
599  def __init__(self, config, name, schema, metadata, logName=None):
600  SingleFramePlugin.__init__(self, config, name, schema, metadata, logName=logName)
601  self._generic = cls(config, name, schema, metadata)
602 
603  def measure(self, measRecord, exposure):
604  center = measRecord.getCentroid()
605  return self._generic.measure(measRecord, exposure, center)
606 
607  def measureN(self, measCat, exposure, refCat, refWcs):
608  return self._generic.measureN(measCat, exposure, refCat, refWcs)
609 
610  def fail(self, measRecord, error=None):
611  self._generic.fail(measRecord, error if error is not None else None)
612 
613  @staticmethod
614  def getExecutionOrder():
615  return cls.getExecutionOrder()
616 
617  def getTransformClass(self):
618  return self._generic.getTransformClass()
619 
620  return SingleFrameFromGenericPlugin
621 

◆ measure()

def lsst.meas.base.plugins.VariancePlugin.measure (   self,
  measRecord,
  exposure,
  center 
)
Measure a single source.

It is the responsibility of this method to perform the desired
measurement and record the result in the `measRecord`.

Parameters
----------
measRecord : `lsst.afw.table.SourceRecord`
    Catalog record for the source being measured.
exposure : `lsst.afw.image.Exposure`
    Exposure on which the source is being measured.
center : `lsst.geom.Point2D`
    Pixel coordinates of the object.

Raises
------
MeasurementError
    Raised if the measurement fails for a known/justifiable reason.

Reimplemented from lsst.meas.base.wrappers.GenericPlugin.

Definition at line 274 of file plugins.py.

274  def measure(self, measRecord, exposure, center):
275  # Create an aperture and grow it by scale value defined in config to
276  # ensure there are enough pixels around the object to get decent
277  # statistics
278  if not np.all(np.isfinite(measRecord.getCentroid())):
279  raise MeasurementError("Bad centroid and/or shape", self.FAILURE_BAD_CENTROID)
280  aperture = lsst.afw.geom.Ellipse(measRecord.getShape(), measRecord.getCentroid())
281  aperture.scale(self.config.scale)
282  ellipse = lsst.afw.geom.SpanSet.fromShape(aperture)
283  foot = lsst.afw.detection.Footprint(ellipse)
284  foot.clipTo(exposure.getBBox(lsst.afw.image.PARENT))
285  # Filter out any pixels which have mask bits set corresponding to the
286  # planes to be excluded (defined in config.mask)
287  maskedImage = exposure.getMaskedImage()
288  pixels = lsst.afw.detection.makeHeavyFootprint(foot, maskedImage)
289  maskBits = maskedImage.getMask().getPlaneBitMask(self.config.mask)
290  logicalMask = np.logical_not(pixels.getMaskArray() & maskBits)
291  # Compute the median variance value for each pixel not excluded by the
292  # mask and write the record. Numpy median is used here instead of
293  # afw.math makeStatistics because of an issue with data types being
294  # passed into the C++ layer (DM-2379).
295  if np.any(logicalMask):
296  medVar = np.median(pixels.getVarianceArray()[logicalMask])
297  measRecord.set(self.varValue, medVar)
298  else:
299  raise MeasurementError("Footprint empty, or all pixels are masked, can't compute median",
300  self.FAILURE_EMPTY_FOOTPRINT)
301 
Class to describe the properties of a detected object from an image.
Definition: Footprint.h:63
static std::shared_ptr< geom::SpanSet > fromShape(int r, Stencil s=Stencil::CIRCLE, lsst::geom::Point2I offset=lsst::geom::Point2I())
Factory function for creating SpanSets from a Stencil.
Definition: SpanSet.cc:688
An ellipse defined by an arbitrary BaseCore and a center point.
Definition: Ellipse.h:51
HeavyFootprint< ImagePixelT, MaskPixelT, VariancePixelT > makeHeavyFootprint(Footprint const &foot, lsst::afw::image::MaskedImage< ImagePixelT, MaskPixelT, VariancePixelT > const &img, HeavyFootprintCtrl const *ctrl=nullptr)
Create a HeavyFootprint with footprint defined by the given Footprint and pixel values from the given...

◆ measureN()

def lsst.meas.base.wrappers.GenericPlugin.measureN (   self,
  measCat,
  exposure,
  refCat,
  refWcs 
)
inherited
Measure multiple sources.

It is the responsibility of this method to perform the desired
measurement and record the result in the `measCat`.

Parameters
----------
measCat : `lsst.afw.table.SourceCatalog`
    Catalog for the sources being measured.
exposure : `lsst.afw.image.Exposure`
    Exposure on which the source is being measured.
refCat : `lsst.afw.table.SourceCatalog`
    Reference catalog.
refWcs : `lsst.afw.image.Wcs`
    Astrometric solution for the reference image.

Raises
------
MeasurementError
    Raised if the measurement fails for a known/justifiable reason.

Definition at line 542 of file wrappers.py.

542  def measureN(self, measCat, exposure, refCat, refWcs):
543  """Measure multiple sources.
544 
545  It is the responsibility of this method to perform the desired
546  measurement and record the result in the `measCat`.
547 
548  Parameters
549  ----------
550  measCat : `lsst.afw.table.SourceCatalog`
551  Catalog for the sources being measured.
552  exposure : `lsst.afw.image.Exposure`
553  Exposure on which the source is being measured.
554  refCat : `lsst.afw.table.SourceCatalog`
555  Reference catalog.
556  refWcs : `lsst.afw.image.Wcs`
557  Astrometric solution for the reference image.
558 
559  Raises
560  ------
561  MeasurementError
562  Raised if the measurement fails for a known/justifiable reason.
563  """
564  raise NotImplementedError()
565 

Member Data Documentation

◆ APCORR_ORDER

float lsst.meas.base.pluginsBase.BasePlugin.APCORR_ORDER = 3.0
staticinherited

Definition at line 98 of file pluginsBase.py.

◆ CENTROID_ORDER

float lsst.meas.base.pluginsBase.BasePlugin.CENTROID_ORDER = 0.0
staticinherited

Definition at line 72 of file pluginsBase.py.

◆ config

lsst.meas.base.pluginsBase.BasePlugin.config
inherited

Definition at line 130 of file pluginsBase.py.

◆ ConfigClass

lsst.meas.base.plugins.VariancePlugin.ConfigClass = VarianceConfig
static

Definition at line 249 of file plugins.py.

◆ DEFAULT_CATALOGCALCULATION

float lsst.meas.base.pluginsBase.BasePlugin.DEFAULT_CATALOGCALCULATION = 4.0
staticinherited

Definition at line 108 of file pluginsBase.py.

◆ emptyFootprintFlag

lsst.meas.base.plugins.VariancePlugin.emptyFootprintFlag

Definition at line 266 of file plugins.py.

◆ FAILURE_BAD_CENTROID

int lsst.meas.base.plugins.VariancePlugin.FAILURE_BAD_CENTROID = 1
static

Definition at line 251 of file plugins.py.

◆ FAILURE_EMPTY_FOOTPRINT

int lsst.meas.base.plugins.VariancePlugin.FAILURE_EMPTY_FOOTPRINT = 2
static

Definition at line 255 of file plugins.py.

◆ FLUX_ORDER

float lsst.meas.base.pluginsBase.BasePlugin.FLUX_ORDER = 2.0
staticinherited

Definition at line 89 of file pluginsBase.py.

◆ logName

lsst.meas.base.pluginsBase.BasePlugin.logName
inherited

Definition at line 132 of file pluginsBase.py.

◆ name

lsst.meas.base.pluginsBase.BasePlugin.name
inherited

Definition at line 131 of file pluginsBase.py.

◆ SHAPE_ORDER

float lsst.meas.base.pluginsBase.BasePlugin.SHAPE_ORDER = 1.0
staticinherited

Definition at line 80 of file pluginsBase.py.

◆ varValue

lsst.meas.base.plugins.VariancePlugin.varValue

Definition at line 265 of file plugins.py.


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