LSST Applications g0fba68d861+539c3c8198,g1ec0fe41b4+f0b7a83aa5,g1fd858c14a+78b1f303e5,g22210bfa2a+8e34e7f00e,g2440f9efcc+8c5ae1fdc5,g3533f9d6cb+f4db8b1b3b,g35bb328faa+8c5ae1fdc5,g3fc7d4f5b9+a4d3a2d8bb,g40d01f57dd+ad4ae80abb,g4178042926+abd409f097,g53246c7159+8c5ae1fdc5,g548d740b8c+47e4a7beb3,g60b5630c4e+f4db8b1b3b,g663da51e9b+e0f2ae43b2,g67b6fd64d1+c104138150,g78460c75b0+7e33a9eb6d,g786e29fd12+668abc6043,g8352419a5c+8c5ae1fdc5,g8852436030+d435302cbd,g89139ef638+c104138150,g8b40312ef5+5b6744d273,g90aefe88b0+c7f866738c,g989de1cb63+c104138150,g9f33ca652e+0b88989aa6,ga2f891cd6c+f4db8b1b3b,gabe3b4be73+8856018cbb,gabf8522325+5cb9e9d408,gb1101e3267+78d08b86ce,gb89ab40317+c104138150,gcf25f946ba+d435302cbd,gd6cbbdb0b4+be834e5da7,gde0f65d7ad+a7114e3dba,ge278dab8ac+fa35eb453c,ge410e46f29+c104138150,gf35d7ec915+97dd712d81,gf5e32f922b+8c5ae1fdc5,gf67bdafdda+c104138150,gffe7e49bb4+f4db8b1b3b,v29.1.0.rc2
LSST Data Management Base Package
Loading...
Searching...
No Matches
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 286 of file SdssCentroid.cc.

288 : _ctrl(ctrl),
289 _centroidKey(CentroidResultKey::addFields(schema, name, "centroid from Sdss Centroid algorithm",
290 SIGMA_ONLY)),
291 _flagHandler(FlagHandler::addFields(schema, name, getFlagDefinitions())),
292 _centroidExtractor(schema, name, true),
293 _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 417 of file SdssCentroid.cc.

417 {
418 _flagHandler.handleFailure(measRecord, error);
419}

◆ 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 294 of file SdssCentroid.cc.

295 {
296 // get our current best guess about the centroid: either a centroider measurement or peak.
297 geom::Point2D center = _centroidExtractor(measRecord, _flagHandler);
298 CentroidResult result;
299 result.x = center.getX();
300 result.y = center.getY();
301 measRecord.set(_centroidKey, result); // better than NaN
302
304 typedef MaskedImageT::Image ImageT;
305 typedef MaskedImageT::Variance VarianceT;
306 bool negative = false;
307 try {
308 negative = measRecord.get(measRecord.getSchema().find<afw::table::Flag>("is_negative").key);
309 } catch (pexExcept::Exception &e) {
310 }
311
312 MaskedImageT const &mimage = exposure.getMaskedImage();
313 ImageT const &image = *mimage.getImage();
314 std::shared_ptr<afw::detection::Psf const> psf = exposure.getPsf();
315
316 int const x = image.positionToIndex(center.getX(), afw::image::X).first;
317 int const y = image.positionToIndex(center.getY(), afw::image::Y).first;
318
319 if (!image.getBBox().contains(geom::Extent2I(x, y) + image.getXY0())) {
320 _flagHandler.setValue(measRecord, EDGE.number, true);
321 _flagHandler.setValue(measRecord, SdssCentroidAlgorithm::FAILURE.number, true);
322 return;
323 }
324
325 // Algorithm uses a least-squares fit (implemented via a convolution) to a symmetrized PSF model.
326 // If you don't have a Psf, you need to use another centroider, such as GaussianCentroider.
327 if (!psf) {
328 throw LSST_EXCEPT(FatalAlgorithmError, "SdssCentroid algorithm requires a Psf with every exposure");
329 }
330
331 int binX = 1;
332 int binY = 1;
333 double xc = 0., yc = 0., dxc = 0., dyc = 0.; // estimated centre and error therein
334 bool stopBinning = false;
335 for (int binsize = 1; binsize <= _ctrl.binmax; binsize *= 2) {
336 std::tuple<MaskedImageT, double, int> smoothResult =
337 smoothAndBinImage(psf, x, y, mimage, binX, binY, _flagHandler);
338 int errorFlag = std::get<2>(smoothResult);
339 if (errorFlag == static_cast<int>(EDGE.number)) {
341 smoothResult = smoothAndBinImage(psf, x, y, mimage, binX, binY, _flagHandler);
342 stopBinning = true;
343 errorFlag = std::get<2>(smoothResult);
344 if (errorFlag == 0) {
345 errorFlag = NEAR_EDGE.number;
346 }
347 }
348 if (errorFlag > 0) {
349 _flagHandler.setValue(measRecord, errorFlag, true);
350 _flagHandler.setValue(measRecord, SdssCentroidAlgorithm::FAILURE.number, true);
351 // if NEAR_EDGE is not a fatal error we continue otherwise return
352 if (errorFlag != static_cast<int>(NEAR_EDGE.number)) {
353 return;
354 }
355 }
356 MaskedImageT const smoothedImage = std::get<0>(smoothResult);
357 double const smoothingSigma = std::get<1>(smoothResult);
358
359 MaskedImageT::xy_locator mim =
360 smoothedImage.xy_at(smoothedImage.getWidth() / 2, smoothedImage.getHeight() / 2);
361
362 double sizeX2, sizeY2; // object widths^2 in x and y directions
363 double peakVal; // peak intensity in image
364
365 errorFlag = doMeasureCentroidImpl(&xc, &dxc, &yc, &dyc, &sizeX2, &sizeY2, &peakVal, mim, smoothingSigma, negative,
366 _flagHandler);
367 if (errorFlag > 0) {
368 _flagHandler.setValue(measRecord, errorFlag, true);
369 _flagHandler.setValue(measRecord, SdssCentroidAlgorithm::FAILURE.number, true);
370 return;
371 }
372
373 if (binsize > 1) {
374 // dilate from the lower left corner of central pixel
375 xc = (xc + 0.5) * binX - 0.5;
376 dxc *= binX;
377 sizeX2 *= binX * binX;
378
379 yc = (yc + 0.5) * binY - 0.5;
380 dyc *= binY;
381 sizeY2 *= binY * binY;
382 }
383
384 xc += x; // xc, yc are measured relative to pixel (x, y)
385 yc += y;
386
387 if (stopBinning) {
388 break;
389 }
390
391 double const fac = _ctrl.wfac * (1 + smoothingSigma * smoothingSigma);
392 double const facX2 = fac * binX * binX;
393 double const facY2 = fac * binY * binY;
394
395 if (sizeX2 < facX2 && ::pow(xc - x, 2) < facX2 && sizeY2 < facY2 && ::pow(yc - y, 2) < facY2) {
396 if (binsize > 1 || _ctrl.peakMin < 0.0 || peakVal > _ctrl.peakMin) {
397 break;
398 }
399 }
400
401 if (sizeX2 >= facX2 || ::pow(xc - x, 2) >= facX2) {
402 binX *= 2;
403 }
404 if (sizeY2 >= facY2 || ::pow(yc - y, 2) >= facY2) {
405 binY *= 2;
406 }
407 }
408 result.x = afw::image::indexToPosition(xc + image.getX0());
409 result.y = afw::image::indexToPosition(yc + image.getY0());
410
411 result.xErr = sqrt(dxc * dxc);
412 result.yErr = sqrt(dyc * dyc);
413 measRecord.set(_centroidKey, result);
414 _centroidChecker(measRecord);
415}
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
MaskedImage< ImageT, MaskT, VarianceT > MaskedImageT
Definition Exposure.h:74
static FlagDefinition const FAILURE
static FlagDefinition const NEAR_EDGE
static FlagDefinition const EDGE
T make_shared(T... args)
double indexToPosition(double ind)
Convert image index to image position.
Definition ImageUtils.h:55
Point< double, 2 > Point2D
Definition Point.h:324
Extent< int, 2 > Extent2I
Definition Extent.h:397
T sqrt(T... args)

◆ 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: