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 Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | List of all members
lsst::meas::base::SdssCentroidAlgorithm Class Reference

The Sdss Centroid Algorithm. More...

#include <SdssCentroid.h>

Inheritance diagram for lsst::meas::base::SdssCentroidAlgorithm:
lsst::meas::base::SimpleAlgorithm lsst::meas::base::SingleFrameAlgorithm lsst::meas::base::ForcedAlgorithm lsst::meas::base::BaseAlgorithm lsst::meas::base::BaseAlgorithm

Public Types

typedef SdssCentroidControl Control
 A typedef to the Control object for this algorithm, defined above. More...
 

Public Member Functions

 SdssCentroidAlgorithm (Control const &ctrl, std::string const &name, afw::table::Schema &schema)
 
virtual void measure (afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const
 Called to measure a single child source in an image. More...
 
virtual void fail (afw::table::SourceRecord &measRecord, MeasurementError *error=nullptr) const
 Handle an exception thrown by the current algorithm by setting flags in the given record. More...
 
virtual void measureForced (afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure, afw::table::SourceRecord const &refRecord, afw::geom::SkyWcs const &refWcs) const
 Called to measure a single child source in an image. More...
 
virtual void measureNForced (afw::table::SourceCatalog const &measCat, afw::image::Exposure< float > const &exposure, afw::table::SourceCatalog const &refRecord, afw::geom::SkyWcs const &refWcs) const
 Called to simultaneously measure all children in a deblend family, in a single image. More...
 
virtual void measureN (afw::table::SourceCatalog const &measCat, afw::image::Exposure< float > const &exposure) const
 Called to simultaneously measure all children in a deblend family, in a single image. More...
 
std::string getLogName () const
 

Static Public Member Functions

static FlagDefinitionList const & getFlagDefinitions ()
 

Static Public Attributes

static FlagDefinition const FAILURE = flagDefinitions.addFailureFlag()
 
static FlagDefinition const EDGE
 
static FlagDefinition const NO_SECOND_DERIVATIVE
 
static FlagDefinition const ALMOST_NO_SECOND_DERIVATIVE
 
static FlagDefinition const NOT_AT_MAXIMUM
 

Protected Attributes

std::string _logName
 

Detailed Description

The Sdss Centroid Algorithm.

Definition at line 69 of file SdssCentroid.h.

Member Typedef Documentation

◆ Control

A typedef to the Control object for this algorithm, defined above.

The control object contains the configuration parameters for this algorithm.

Definition at line 81 of file SdssCentroid.h.

Constructor & Destructor Documentation

◆ SdssCentroidAlgorithm()

lsst::meas::base::SdssCentroidAlgorithm::SdssCentroidAlgorithm ( Control const &  ctrl,
std::string const &  name,
afw::table::Schema schema 
)

Definition at line 403 of file SdssCentroid.cc.

405  : _ctrl(ctrl),
406  _centroidKey(CentroidResultKey::addFields(schema, name, "centroid from Sdss Centroid algorithm",
407  SIGMA_ONLY)),
409  _centroidExtractor(schema, name, true),
410  _centroidChecker(schema, name, ctrl.doFootprintCheck, ctrl.maxDistToPeak) {}
table::Key< std::string > name
Definition: Amplifier.cc:116
table::Schema schema
Definition: python.h:134
static CentroidResultKey addFields(afw::table::Schema &schema, std::string const &name, std::string const &doc, UncertaintyEnum uncertainty)
Add the appropriate fields to a Schema, and return a CentroidResultKey that manages them.
static FlagHandler addFields(afw::table::Schema &schema, std::string const &prefix, FlagDefinitionList const &flagDefs, FlagDefinitionList const &exclDefs=FlagDefinitionList::getEmptyList())
Add Flag fields to a schema, creating a FlagHandler object to manage them.
Definition: FlagHandler.cc:37
static FlagDefinitionList const & getFlagDefinitions()
Definition: SdssCentroid.cc:52
@ SIGMA_ONLY
Only the diagonal elements of the covariance matrix are provided.
Definition: constants.h:45

Member Function Documentation

◆ fail()

void lsst::meas::base::SdssCentroidAlgorithm::fail ( afw::table::SourceRecord measRecord,
MeasurementError error = nullptr 
) const
virtual

Handle an exception thrown by the current algorithm by setting flags in the given record.

fail() is called by the measurement framework when an exception is allowed to propagate out of one the algorithm's measure() methods. It should generally set both a general failure flag for the algorithm as well as a specific flag indicating the error condition, if possible. To aid in this, if the exception was an instance of MeasurementError, it will be passed in, carrying information about what flag to set.

An algorithm can also to chose to set flags within its own measure() methods, and then just return, rather than throw an exception. However, fail() should be implemented even when all known failure modes do not throw exceptions, to ensure that unexpected exceptions thrown in lower-level code are properly handled.

Implements lsst::meas::base::BaseAlgorithm.

Definition at line 504 of file SdssCentroid.cc.

504  {
505  _flagHandler.handleFailure(measRecord, error);
506 }
void handleFailure(afw::table::BaseRecord &record, MeasurementError const *error=nullptr) const
Handle an expected or unexpected Exception thrown by a measurement algorithm.
Definition: FlagHandler.cc:76

◆ getFlagDefinitions()

FlagDefinitionList const & lsst::meas::base::SdssCentroidAlgorithm::getFlagDefinitions ( )
static

Definition at line 52 of file SdssCentroid.cc.

52 { return flagDefinitions; }

◆ getLogName()

std::string lsst::meas::base::BaseAlgorithm::getLogName ( ) const
inlineinherited

Definition at line 66 of file Algorithm.h.

66 { return _logName; }

◆ measure()

void lsst::meas::base::SdssCentroidAlgorithm::measure ( afw::table::SourceRecord measRecord,
afw::image::Exposure< float > const &  exposure 
) const
virtual

Called to measure a single child source in an image.

Before this method is called, all neighbors will be replaced with noise, using the outputs of the deblender. Outputs should be saved in the given SourceRecord, which can also be used to obtain centroid (see SafeCentroidExtractor) and shape (see SafeShapeExtractor) information.

Implements lsst::meas::base::SingleFrameAlgorithm.

Definition at line 411 of file SdssCentroid.cc.

412  {
413  // get our current best guess about the centroid: either a centroider measurement or peak.
414  geom::Point2D center = _centroidExtractor(measRecord, _flagHandler);
415  CentroidResult result;
416  result.x = center.getX();
417  result.y = center.getY();
418  measRecord.set(_centroidKey, result); // better than NaN
419 
420  typedef afw::image::Exposure<float>::MaskedImageT MaskedImageT;
421  typedef MaskedImageT::Image ImageT;
422  typedef MaskedImageT::Variance VarianceT;
423  bool negative = false;
424  try {
425  negative = measRecord.get(measRecord.getSchema().find<afw::table::Flag>("flags_negative").key);
426  } catch (pexExcept::Exception &e) {
427  }
428 
429  MaskedImageT const &mimage = exposure.getMaskedImage();
430  ImageT const &image = *mimage.getImage();
432 
433  int const x = image.positionToIndex(center.getX(), afw::image::X).first;
434  int const y = image.positionToIndex(center.getY(), afw::image::Y).first;
435 
436  if (!image.getBBox().contains(geom::Extent2I(x, y) + image.getXY0())) {
437  throw LSST_EXCEPT(meas::base::MeasurementError, EDGE.doc, EDGE.number);
438  }
439 
440  // Algorithm uses a least-squares fit (implemented via a convolution) to a symmetrized PSF model.
441  // If you don't have a Psf, you need to use another centroider, such as GaussianCentroider.
442  if (!psf) {
443  throw LSST_EXCEPT(FatalAlgorithmError, "SdssCentroid algorithm requires a Psf with every exposure");
444  }
445 
446  int binX = 1;
447  int binY = 1;
448  double xc = 0., yc = 0., dxc = 0., dyc = 0.; // estimated centre and error therein
449  for (int binsize = 1; binsize <= _ctrl.binmax; binsize *= 2) {
451  smoothAndBinImage(psf, x, y, mimage, binX, binY, _flagHandler);
452  MaskedImageT const smoothedImage = result.first;
453  double const smoothingSigma = result.second;
454 
455  MaskedImageT::xy_locator mim =
456  smoothedImage.xy_at(smoothedImage.getWidth() / 2, smoothedImage.getHeight() / 2);
457 
458  double sizeX2, sizeY2; // object widths^2 in x and y directions
459  double peakVal; // peak intensity in image
460 
461  doMeasureCentroidImpl(&xc, &dxc, &yc, &dyc, &sizeX2, &sizeY2, &peakVal, mim, smoothingSigma, negative,
462  _flagHandler);
463 
464  if (binsize > 1) {
465  // dilate from the lower left corner of central pixel
466  xc = (xc + 0.5) * binX - 0.5;
467  dxc *= binX;
468  sizeX2 *= binX * binX;
469 
470  yc = (yc + 0.5) * binY - 0.5;
471  dyc *= binY;
472  sizeY2 *= binY * binY;
473  }
474 
475  xc += x; // xc, yc are measured relative to pixel (x, y)
476  yc += y;
477 
478  double const fac = _ctrl.wfac * (1 + smoothingSigma * smoothingSigma);
479  double const facX2 = fac * binX * binX;
480  double const facY2 = fac * binY * binY;
481 
482  if (sizeX2 < facX2 && ::pow(xc - x, 2) < facX2 && sizeY2 < facY2 && ::pow(yc - y, 2) < facY2) {
483  if (binsize > 1 || _ctrl.peakMin < 0.0 || peakVal > _ctrl.peakMin) {
484  break;
485  }
486  }
487 
488  if (sizeX2 >= facX2 || ::pow(xc - x, 2) >= facX2) {
489  binX *= 2;
490  }
491  if (sizeY2 >= facY2 || ::pow(yc - y, 2) >= facY2) {
492  binY *= 2;
493  }
494  }
495  result.x = afw::image::indexToPosition(xc + image.getX0());
496  result.y = afw::image::indexToPosition(yc + image.getY0());
497 
498  result.xErr = sqrt(dxc * dxc);
499  result.yErr = sqrt(dyc * dyc);
500  measRecord.set(_centroidKey, result);
501  _centroidChecker(measRecord);
502 }
py::object result
Definition: _schema.cc:429
double x
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
int y
Definition: SpanSet.cc:48
MaskedImage< float, lsst::afw::image::MaskPixel, lsst::afw::image::VariancePixel > MaskedImageT
Definition: Exposure.h:74
static FlagDefinition const EDGE
Definition: SdssCentroid.h:74
double wfac
"fiddle factor for adjusting the binning" ;
Definition: SdssCentroid.h:52
int binmax
"maximum allowed binning" ;
Definition: SdssCentroid.h:50
double peakMin
"if the peak's less than this insist on binning at least once" ;
Definition: SdssCentroid.h:51
Provides consistent interface for LSST exceptions.
Definition: Exception.h:107
Backwards-compatibility support for depersisting the old Calib (FluxMag0/FluxMag0Err) objects.
double indexToPosition(double ind)
Convert image index to image position.
Definition: ImageUtils.h:55
T pow(T... args)
T sqrt(T... args)
Key< int > psf
Definition: Exposure.cc:65

◆ measureForced()

virtual void lsst::meas::base::SimpleAlgorithm::measureForced ( afw::table::SourceRecord measRecord,
afw::image::Exposure< float > const &  exposure,
afw::table::SourceRecord const &  refRecord,
afw::geom::SkyWcs const &  refWcs 
) const
inlinevirtualinherited

Called to measure a single child source in an image.

Before this method is called, all neighbors will be replaced with noise, using the outputs of the deblender. Outputs should be saved in the given SourceRecord, which can also be used to obtain centroid (see SafeCentroidExtractor) and shape (see SafeShapeExtractor) information.

Implements lsst::meas::base::ForcedAlgorithm.

Reimplemented in lsst::meas::extensions::photometryKron::KronFluxAlgorithm.

Definition at line 172 of file Algorithm.h.

175  {
176  measure(measRecord, exposure);
177  }
virtual void measure(afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const =0
Called to measure a single child source in an image.

◆ measureN()

void lsst::meas::base::SingleFrameAlgorithm::measureN ( afw::table::SourceCatalog const &  measCat,
afw::image::Exposure< float > const &  exposure 
) const
virtualinherited

Called to simultaneously measure all children in a deblend family, in a single image.

Outputs should be saved in the given SourceCatalog, which can also be used to obtain centroid (see SafeCentroidExtractor) and shape (see SafeShapeExtractor) information.

The default implementation simply throws an exception, indicating that simultaneous measurement is not supported.

Definition at line 31 of file Algorithm.cc.

32  {
33  throw LSST_EXCEPT(pex::exceptions::LogicError, "measureN not implemented for this algorithm");
34 }

◆ measureNForced()

virtual void lsst::meas::base::SimpleAlgorithm::measureNForced ( afw::table::SourceCatalog const &  measCat,
afw::image::Exposure< float > const &  exposure,
afw::table::SourceCatalog const &  refRecord,
afw::geom::SkyWcs const &  refWcs 
) const
inlinevirtualinherited

Called to simultaneously measure all children in a deblend family, in a single image.

Outputs should be saved in the given SourceCatalog, which can also be used to obtain centroid (see SafeCentroidExtractor) and shape (see SafeShapeExtractor) information.

The default implementation simply throws an exception, indicating that simultaneous measurement is not supported.

Reimplemented from lsst::meas::base::ForcedAlgorithm.

Definition at line 179 of file Algorithm.h.

182  {
183  measureN(measCat, exposure);
184  }
virtual void measureN(afw::table::SourceCatalog const &measCat, afw::image::Exposure< float > const &exposure) const
Called to simultaneously measure all children in a deblend family, in a single image.
Definition: Algorithm.cc:31

Member Data Documentation

◆ _logName

std::string lsst::meas::base::BaseAlgorithm::_logName
protectedinherited

Definition at line 69 of file Algorithm.h.

◆ ALMOST_NO_SECOND_DERIVATIVE

FlagDefinition const lsst::meas::base::SdssCentroidAlgorithm::ALMOST_NO_SECOND_DERIVATIVE
static
Initial value:
=
flagDefinitions.add("flag_almostNoSecondDerivative", "Almost vanishing second derivative")

Definition at line 76 of file SdssCentroid.h.

◆ EDGE

FlagDefinition const lsst::meas::base::SdssCentroidAlgorithm::EDGE
static
Initial value:
=
flagDefinitions.add("flag_edge", "Object too close to edge")

Definition at line 74 of file SdssCentroid.h.

◆ FAILURE

FlagDefinition const lsst::meas::base::SdssCentroidAlgorithm::FAILURE = flagDefinitions.addFailureFlag()
static

Definition at line 73 of file SdssCentroid.h.

◆ NO_SECOND_DERIVATIVE

FlagDefinition const lsst::meas::base::SdssCentroidAlgorithm::NO_SECOND_DERIVATIVE
static
Initial value:
=
flagDefinitions.add("flag_noSecondDerivative", "Vanishing second derivative")

Definition at line 75 of file SdssCentroid.h.

◆ NOT_AT_MAXIMUM

FlagDefinition const lsst::meas::base::SdssCentroidAlgorithm::NOT_AT_MAXIMUM
static
Initial value:
=
flagDefinitions.add("flag_notAtMaximum", "Object is not at a maximum")

Definition at line 77 of file SdssCentroid.h.


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