LSST Applications g02d81e74bb+86cf3d8bc9,g180d380827+7a4e862ed4,g2079a07aa2+86d27d4dc4,g2305ad1205+e1ca1c66fa,g29320951ab+012e1474a1,g295015adf3+341ea1ce94,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+c429d67c83,g48712c4677+f88676dd22,g487adcacf7+27e1e21933,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+b41db86c35,g5a732f18d5+53520f316c,g64a986408d+86cf3d8bc9,g858d7b2824+86cf3d8bc9,g8a8a8dda67+585e252eca,g99cad8db69+84912a7fdc,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+a2b54eae19,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+6681f309db,gc120e1dc64+f0fcc2f6d8,gc28159a63d+0e5473021a,gcf0d15dbbd+c429d67c83,gdaeeff99f8+f9a426f77a,ge6526c86ff+0433e6603d,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+86cf3d8bc9,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
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.
 

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.
 
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.
 
void measureForced (afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure, afw::table::SourceRecord const &refRecord, afw::geom::SkyWcs const &refWcs) const override
 Called to measure a single child source in an image.
 
void measureNForced (afw::table::SourceCatalog const &measCat, afw::image::Exposure< float > const &exposure, afw::table::SourceCatalog const &refRecord, afw::geom::SkyWcs const &refWcs) const override
 Called to simultaneously measure all children in a deblend family, in a single image.
 
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.
 
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
 
static FlagDefinition const NEAR_EDGE
 

Protected Attributes

std::string _logName
 

Detailed Description

The Sdss Centroid Algorithm.

Definition at line 71 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 84 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 392 of file SdssCentroid.cc.

394 : _ctrl(ctrl),
395 _centroidKey(CentroidResultKey::addFields(schema, name, "centroid from Sdss Centroid algorithm",
396 SIGMA_ONLY)),
397 _flagHandler(FlagHandler::addFields(schema, name, getFlagDefinitions())),
398 _centroidExtractor(schema, name, true),
399 _centroidChecker(schema, name, ctrl.doFootprintCheck, ctrl.maxDistToPeak) {}
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.
static FlagDefinitionList const & getFlagDefinitions()
@ 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 523 of file SdssCentroid.cc.

523 {
524 _flagHandler.handleFailure(measRecord, error);
525}
void handleFailure(afw::table::BaseRecord &record, MeasurementError const *error=nullptr) const
Handle an expected or unexpected Exception thrown by a measurement algorithm.

◆ getFlagDefinitions()

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

Definition at line 55 of file SdssCentroid.cc.

55{ 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 400 of file SdssCentroid.cc.

401 {
402 // get our current best guess about the centroid: either a centroider measurement or peak.
403 geom::Point2D center = _centroidExtractor(measRecord, _flagHandler);
404 CentroidResult result;
405 result.x = center.getX();
406 result.y = center.getY();
407 measRecord.set(_centroidKey, result); // better than NaN
408
410 typedef MaskedImageT::Image ImageT;
411 typedef MaskedImageT::Variance VarianceT;
412 bool negative = false;
413 try {
414 negative = measRecord.get(measRecord.getSchema().find<afw::table::Flag>("flags_negative").key);
415 } catch (pexExcept::Exception &e) {
416 }
417
418 MaskedImageT const &mimage = exposure.getMaskedImage();
419 ImageT const &image = *mimage.getImage();
420 std::shared_ptr<afw::detection::Psf const> psf = exposure.getPsf();
421
422 int const x = image.positionToIndex(center.getX(), afw::image::X).first;
423 int const y = image.positionToIndex(center.getY(), afw::image::Y).first;
424
425 if (!image.getBBox().contains(geom::Extent2I(x, y) + image.getXY0())) {
426 _flagHandler.setValue(measRecord, EDGE.number, true);
427 _flagHandler.setValue(measRecord, SdssCentroidAlgorithm::FAILURE.number, true);
428 return;
429 }
430
431 // Algorithm uses a least-squares fit (implemented via a convolution) to a symmetrized PSF model.
432 // If you don't have a Psf, you need to use another centroider, such as GaussianCentroider.
433 if (!psf) {
434 throw LSST_EXCEPT(FatalAlgorithmError, "SdssCentroid algorithm requires a Psf with every exposure");
435 }
436
437 int binX = 1;
438 int binY = 1;
439 double xc = 0., yc = 0., dxc = 0., dyc = 0.; // estimated centre and error therein
440 bool stopBinning = false;
441 for (int binsize = 1; binsize <= _ctrl.binmax; binsize *= 2) {
443 smoothAndBinImage(psf, x, y, mimage, binX, binY, _flagHandler);
444 int errorFlag = std::get<2>(smoothResult);
445 if (errorFlag == static_cast<int>(EDGE.number)) {
446 psf = std::make_shared<afw::detection::GaussianPsf>(5, 5, 0.5);
447 smoothResult = smoothAndBinImage(psf, x, y, mimage, binX, binY, _flagHandler);
448 stopBinning = true;
449 errorFlag = std::get<2>(smoothResult);
450 if (errorFlag == 0) {
451 errorFlag = NEAR_EDGE.number;
452 }
453 }
454 if (errorFlag > 0) {
455 _flagHandler.setValue(measRecord, errorFlag, true);
456 _flagHandler.setValue(measRecord, SdssCentroidAlgorithm::FAILURE.number, true);
457 // if NEAR_EDGE is not a fatal error we continue otherwise return
458 if (errorFlag != static_cast<int>(NEAR_EDGE.number)) {
459 return;
460 }
461 }
462 MaskedImageT const smoothedImage = std::get<0>(smoothResult);
463 double const smoothingSigma = std::get<1>(smoothResult);
464
465 MaskedImageT::xy_locator mim =
466 smoothedImage.xy_at(smoothedImage.getWidth() / 2, smoothedImage.getHeight() / 2);
467
468 double sizeX2, sizeY2; // object widths^2 in x and y directions
469 double peakVal; // peak intensity in image
470
471 errorFlag = doMeasureCentroidImpl(&xc, &dxc, &yc, &dyc, &sizeX2, &sizeY2, &peakVal, mim, smoothingSigma, negative,
472 _flagHandler);
473 if (errorFlag > 0) {
474 _flagHandler.setValue(measRecord, errorFlag, true);
475 _flagHandler.setValue(measRecord, SdssCentroidAlgorithm::FAILURE.number, true);
476 return;
477 }
478
479 if (binsize > 1) {
480 // dilate from the lower left corner of central pixel
481 xc = (xc + 0.5) * binX - 0.5;
482 dxc *= binX;
483 sizeX2 *= binX * binX;
484
485 yc = (yc + 0.5) * binY - 0.5;
486 dyc *= binY;
487 sizeY2 *= binY * binY;
488 }
489
490 xc += x; // xc, yc are measured relative to pixel (x, y)
491 yc += y;
492
493 if (stopBinning) {
494 break;
495 }
496
497 double const fac = _ctrl.wfac * (1 + smoothingSigma * smoothingSigma);
498 double const facX2 = fac * binX * binX;
499 double const facY2 = fac * binY * binY;
500
501 if (sizeX2 < facX2 && ::pow(xc - x, 2) < facX2 && sizeY2 < facY2 && ::pow(yc - y, 2) < facY2) {
502 if (binsize > 1 || _ctrl.peakMin < 0.0 || peakVal > _ctrl.peakMin) {
503 break;
504 }
505 }
506
507 if (sizeX2 >= facX2 || ::pow(xc - x, 2) >= facX2) {
508 binX *= 2;
509 }
510 if (sizeY2 >= facY2 || ::pow(yc - y, 2) >= facY2) {
511 binY *= 2;
512 }
513 }
514 result.x = afw::image::indexToPosition(xc + image.getX0());
515 result.y = afw::image::indexToPosition(yc + image.getY0());
516
517 result.xErr = sqrt(dxc * dxc);
518 result.yErr = sqrt(dyc * dyc);
519 measRecord.set(_centroidKey, result);
520 _centroidChecker(measRecord);
521}
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
int y
Definition SpanSet.cc:48
MaskedImage< ImageT, MaskT, VarianceT > MaskedImageT
Definition Exposure.h:74
void setValue(afw::table::BaseRecord &record, std::size_t i, bool value) const
Set the flag field corresponding to the given flag index.
static FlagDefinition const FAILURE
static FlagDefinition const NEAR_EDGE
static FlagDefinition const EDGE
double wfac
"fiddle factor for adjusting the binning" ;
int binmax
"maximum allowed binning" ;
double peakMin
"if the peak's less than this insist on binning at least once" ;
Provides consistent interface for LSST exceptions.
Definition Exception.h:107
double indexToPosition(double ind)
Convert image index to image position.
Definition ImageUtils.h:55

◆ measureForced()

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
inlineoverridevirtualinherited

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()

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
inlineoverridevirtualinherited

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 78 of file SdssCentroid.h.

◆ EDGE

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

Definition at line 76 of file SdssCentroid.h.

◆ FAILURE

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

Definition at line 75 of file SdssCentroid.h.

◆ NEAR_EDGE

FlagDefinition const lsst::meas::base::SdssCentroidAlgorithm::NEAR_EDGE
static
Initial value:
=
flagDefinitions.add("flag_near_edge", "Object close to edge; fallback kernel used.")

Definition at line 80 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 77 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 79 of file SdssCentroid.h.


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