LSSTApplications  19.0.0-14-gb0260a2+72efe9b372,20.0.0+7927753e06,20.0.0+8829bf0056,20.0.0+995114c5d2,20.0.0+b6f4b2abd1,20.0.0+bddc4f4cbe,20.0.0-1-g253301a+8829bf0056,20.0.0-1-g2b7511a+0d71a2d77f,20.0.0-1-g5b95a8c+7461dd0434,20.0.0-12-g321c96ea+23efe4bbff,20.0.0-16-gfab17e72e+fdf35455f6,20.0.0-2-g0070d88+ba3ffc8f0b,20.0.0-2-g4dae9ad+ee58a624b3,20.0.0-2-g61b8584+5d3db074ba,20.0.0-2-gb780d76+d529cf1a41,20.0.0-2-ged6426c+226a441f5f,20.0.0-2-gf072044+8829bf0056,20.0.0-2-gf1f7952+ee58a624b3,20.0.0-20-geae50cf+e37fec0aee,20.0.0-25-g3dcad98+544a109665,20.0.0-25-g5eafb0f+ee58a624b3,20.0.0-27-g64178ef+f1f297b00a,20.0.0-3-g4cc78c6+e0676b0dc8,20.0.0-3-g8f21e14+4fd2c12c9a,20.0.0-3-gbd60e8c+187b78b4b8,20.0.0-3-gbecbe05+48431fa087,20.0.0-38-ge4adf513+a12e1f8e37,20.0.0-4-g97dc21a+544a109665,20.0.0-4-gb4befbc+087873070b,20.0.0-4-gf910f65+5d3db074ba,20.0.0-5-gdfe0fee+199202a608,20.0.0-5-gfbfe500+d529cf1a41,20.0.0-6-g64f541c+d529cf1a41,20.0.0-6-g9a5b7a1+a1cd37312e,20.0.0-68-ga3f3dda+5fca18c6a4,20.0.0-9-g4aef684+e18322736b,w.2020.45
LSSTDataManagementBasePackage
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
lsst::ip::diffim::NaiveDipoleCentroid Class Reference

Intermediate base class for algorithms that compute a centroid. More...

#include <DipoleAlgorithms.h>

Inheritance diagram for lsst::ip::diffim::NaiveDipoleCentroid:
lsst::ip::diffim::DipoleCentroidAlgorithm lsst::meas::base::SimpleAlgorithm lsst::meas::base::SingleFrameAlgorithm lsst::meas::base::ForcedAlgorithm lsst::meas::base::BaseAlgorithm lsst::meas::base::BaseAlgorithm

Public Types

typedef meas::base::CentroidResultKey ResultKey
 Tuple type that holds the keys that define a standard centroid algorithm. More...
 
typedef DipoleCentroidControl Control
 

Public Member Functions

 NaiveDipoleCentroid (Control const &ctrl, std::string const &name, afw::table::Schema &schema)
 
ResultKey const & getCenterKeys () const
 Return the standard centroid keys registered by this algorithm. More...
 
ResultKey const & getPositiveKeys () const
 
ResultKey const & getNegativeKeys () const
 
void measure (afw::table::SourceRecord &measRecord, afw::image::Exposure< float > const &exposure) const
 Given an image and a pixel position, return a Centroid using a naive 3x3 weighted moment. More...
 
void mergeCentroids (afw::table::SourceRecord &source, double posValue, double negValue) const
 
void fail (afw::table::SourceRecord &measRecord, meas::base::MeasurementError *error=NULL) 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 meas::base::FlagDefinitionList const & getFlagDefinitions ()
 

Static Public Attributes

static meas::base::FlagDefinition const FAILURE = dipoleCentroidFlagDefinitions.addFailureFlag("general failure flag, set if anything went wrong")
 
static meas::base::FlagDefinition const POS_FLAG = dipoleCentroidFlagDefinitions.add("pos_flag", "failure flag for positive, set if anything went wrong")
 
static meas::base::FlagDefinition const NEG_FLAG = dipoleCentroidFlagDefinitions.add("neg_flag", "failure flag for negative, set if anything went wrong")
 

Protected Member Functions

 NaiveDipoleCentroid (Control const &ctrl, std::string const &name, afw::table::Schema &schema, ResultKey const &positiveKeys, ResultKey const &negativeKeys)
 Initialize with a manually-constructed key tuple. More...
 

Protected Attributes

ResultKey _centerKeys
 
ResultKey _positiveKeys
 
ResultKey _negativeKeys
 
std::string _logName
 

Detailed Description

Intermediate base class for algorithms that compute a centroid.

Definition at line 243 of file DipoleAlgorithms.h.

Member Typedef Documentation

◆ Control

Definition at line 88 of file DipoleAlgorithms.h.

◆ ResultKey

Tuple type that holds the keys that define a standard centroid algorithm.

Algorithms are encouraged to add additional flags as appropriate, but these are required.

Definition at line 252 of file DipoleAlgorithms.h.

Constructor & Destructor Documentation

◆ NaiveDipoleCentroid() [1/2]

lsst::ip::diffim::NaiveDipoleCentroid::NaiveDipoleCentroid ( Control const &  ctrl,
std::string const &  name,
afw::table::Schema schema 
)

Definition at line 145 of file DipoleAlgorithms.cc.

149  : DipoleCentroidAlgorithm(ctrl, name, schema, "unweighted first moment centroid"),
150  _ctrl(ctrl)
151 { }

◆ NaiveDipoleCentroid() [2/2]

lsst::ip::diffim::NaiveDipoleCentroid::NaiveDipoleCentroid ( Control const &  ctrl,
std::string const &  name,
afw::table::Schema schema,
ResultKey const &  positiveKeys,
ResultKey const &  negativeKeys 
)
protected

Initialize with a manually-constructed key tuple.

Member Function Documentation

◆ fail()

void lsst::ip::diffim::NaiveDipoleCentroid::fail ( afw::table::SourceRecord measRecord,
meas::base::MeasurementError error = NULL 
) 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 211 of file DipoleAlgorithms.cc.

212  {
213  _flagHandler.handleFailure(measRecord, error);
214 }

◆ getCenterKeys()

ResultKey const& lsst::ip::diffim::NaiveDipoleCentroid::getCenterKeys ( ) const
inline

Return the standard centroid keys registered by this algorithm.

Definition at line 255 of file DipoleAlgorithms.h.

255 { return _centerKeys; }

◆ getFlagDefinitions()

meas::base::FlagDefinitionList const & lsst::ip::diffim::DipoleCentroidAlgorithm::getFlagDefinitions ( )
staticinherited

Definition at line 78 of file DipoleAlgorithms.cc.

78  {
79  return dipoleCentroidFlagDefinitions;
80 }

◆ getLogName()

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

Definition at line 66 of file Algorithm.h.

66 { return _logName; }

◆ getNegativeKeys()

ResultKey const& lsst::ip::diffim::NaiveDipoleCentroid::getNegativeKeys ( ) const
inline

Definition at line 257 of file DipoleAlgorithms.h.

257 { return _negativeKeys; }

◆ getPositiveKeys()

ResultKey const& lsst::ip::diffim::NaiveDipoleCentroid::getPositiveKeys ( ) const
inline

Definition at line 256 of file DipoleAlgorithms.h.

256 { return _positiveKeys; }

◆ measure()

void lsst::ip::diffim::NaiveDipoleCentroid::measure ( afw::table::SourceRecord measRecord,
afw::image::Exposure< float > const &  exposure 
) const
virtual

Given an image and a pixel position, return a Centroid using a naive 3x3 weighted moment.

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

Definition at line 156 of file DipoleAlgorithms.cc.

159  {
160  afw::detection::PeakCatalog const& peaks = source.getFootprint()->getPeaks();
161 
162  int posInd = 0;
163  double posValue = peaks[posInd].getPeakValue(), negValue = 0;
164  if (posValue < 0.) { /* All peaks are negative so use the *most* negative value */
165  posInd = peaks.size() - 1;
166  posValue = peaks[posInd].getPeakValue();
167  }
168  naiveCentroid(source, exposure, peaks[posInd].getI(),
169  (posValue >= 0 ? getPositiveKeys() : getNegativeKeys()));
170 
171  if (posValue > 0. && posInd == 0 && peaks.size() > 1) { /* See if there's also a negative peak */
172  int negInd = peaks.size() - 1;
173  negValue = peaks[negInd].getPeakValue();
174  if (posValue > 0. && negValue < 0.) {
175  naiveCentroid(source, exposure, peaks[negInd].getI(),
176  (negValue >= 0 ? getPositiveKeys() : getNegativeKeys()));
177  }
178  }
179 
180  mergeCentroids(source, posValue, negValue);
181 
182 }

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

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

◆ mergeCentroids()

void lsst::ip::diffim::NaiveDipoleCentroid::mergeCentroids ( afw::table::SourceRecord source,
double  posValue,
double  negValue 
) const

Definition at line 184 of file DipoleAlgorithms.cc.

185  {
186 
187  double pos_x, pos_y, pos_f;
188  double neg_x, neg_y, neg_f;
189 
190  pos_x = source.get(getPositiveKeys().getX());
191  pos_y = source.get(getPositiveKeys().getY());
192  pos_f = posValue;
193 
194  neg_x = source.get(getNegativeKeys().getX());
195  neg_y = source.get(getNegativeKeys().getY());
196  neg_f = -negValue;
197 
198  if(std::isfinite(pos_x) && std::isfinite(pos_y) &&
199  std::isfinite(neg_x) && std::isfinite(neg_y)) {
200  source.set(getCenterKeys().getX(), (pos_x * pos_f + neg_x * neg_f) / (pos_f + neg_f));
201  source.set(getCenterKeys().getY(), (pos_y * pos_f + neg_y * neg_f) / (pos_f + neg_f));
202  } else if (std::isfinite(pos_x) && std::isfinite(pos_y)) {
203  source.set(getCenterKeys().getX(), pos_x);
204  source.set(getCenterKeys().getY(), pos_y);
205  } else {
206  source.set(getCenterKeys().getX(), neg_x);
207  source.set(getCenterKeys().getY(), neg_y);
208  }
209 }

Member Data Documentation

◆ _centerKeys

ResultKey lsst::ip::diffim::DipoleCentroidAlgorithm::_centerKeys
protectedinherited

Definition at line 107 of file DipoleAlgorithms.h.

◆ _logName

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

Definition at line 69 of file Algorithm.h.

◆ _negativeKeys

ResultKey lsst::ip::diffim::DipoleCentroidAlgorithm::_negativeKeys
protectedinherited

Definition at line 109 of file DipoleAlgorithms.h.

◆ _positiveKeys

ResultKey lsst::ip::diffim::DipoleCentroidAlgorithm::_positiveKeys
protectedinherited

Definition at line 108 of file DipoleAlgorithms.h.

◆ FAILURE

meas::base::FlagDefinition const lsst::ip::diffim::DipoleCentroidAlgorithm::FAILURE = dipoleCentroidFlagDefinitions.addFailureFlag("general failure flag, set if anything went wrong")
staticinherited

Definition at line 83 of file DipoleAlgorithms.h.

◆ NEG_FLAG

meas::base::FlagDefinition const lsst::ip::diffim::DipoleCentroidAlgorithm::NEG_FLAG = dipoleCentroidFlagDefinitions.add("neg_flag", "failure flag for negative, set if anything went wrong")
staticinherited

Definition at line 85 of file DipoleAlgorithms.h.

◆ POS_FLAG

meas::base::FlagDefinition const lsst::ip::diffim::DipoleCentroidAlgorithm::POS_FLAG = dipoleCentroidFlagDefinitions.add("pos_flag", "failure flag for positive, set if anything went wrong")
staticinherited

Definition at line 84 of file DipoleAlgorithms.h.


The documentation for this class was generated from the following files:
schema
table::Schema schema
Definition: Amplifier.cc:115
lsst::log.log.logContinued.error
def error(fmt, *args)
Definition: logContinued.py:213
lsst::meas::base::FlagHandler::handleFailure
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
lsst::ip::diffim::DipoleCentroidAlgorithm::_positiveKeys
ResultKey _positiveKeys
Definition: DipoleAlgorithms.h:108
lsst::ip::diffim::DipoleCentroidAlgorithm::_negativeKeys
ResultKey _negativeKeys
Definition: DipoleAlgorithms.h:109
lsst::afw::geom.transform.transformContinued.name
string name
Definition: transformContinued.py:32
lsst::ip::diffim::NaiveDipoleCentroid::getPositiveKeys
ResultKey const & getPositiveKeys() const
Definition: DipoleAlgorithms.h:256
lsst::ip::diffim::DipoleCentroidAlgorithm::DipoleCentroidAlgorithm
DipoleCentroidAlgorithm(Control const &ctrl, std::string const &name, afw::table::Schema &schema, std::string const &doc)
Definition: DipoleAlgorithms.h:151
std::isfinite
T isfinite(T... args)
ast::detail::source
const char * source()
Source function that allows astChannel to source from a Stream.
Definition: Stream.h:224
lsst::afw::detection::PeakCatalog
afw::table::CatalogT< PeakRecord > PeakCatalog
Definition: Peak.h:244
lsst::meas::base::SingleFrameAlgorithm::measureN
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
lsst::meas::base::SingleFrameAlgorithm::measure
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.
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
lsst::ip::diffim::NaiveDipoleCentroid::getCenterKeys
ResultKey const & getCenterKeys() const
Return the standard centroid keys registered by this algorithm.
Definition: DipoleAlgorithms.h:255
lsst::ip::diffim::DipoleCentroidAlgorithm::_centerKeys
ResultKey _centerKeys
Definition: DipoleAlgorithms.h:107
lsst::meas::base::BaseAlgorithm::_logName
std::string _logName
Definition: Algorithm.h:69
lsst::ip::diffim::NaiveDipoleCentroid::mergeCentroids
void mergeCentroids(afw::table::SourceRecord &source, double posValue, double negValue) const
Definition: DipoleAlgorithms.cc:184
lsst::ip::diffim::NaiveDipoleCentroid::getNegativeKeys
ResultKey const & getNegativeKeys() const
Definition: DipoleAlgorithms.h:257