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 Member Functions | List of all members
lsst::meas::base::CentroidChecker Class Reference

#include <CentroidUtilities.h>

Public Member Functions

 CentroidChecker (afw::table::Schema &schema, std::string const &name, bool inside=true, double maxDistFromPeak=-1.0)
 Check source record produced by a centroid algorithm called "name".
 
bool operator() (afw::table::SourceRecord &record) const
 Set the centroid to the first footprint if the centroid is either more than _dist pixels from the footprint center, or if it is outside the footprint.
 

Detailed Description

Definition at line 190 of file CentroidUtilities.h.

Constructor & Destructor Documentation

◆ CentroidChecker()

lsst::meas::base::CentroidChecker::CentroidChecker ( afw::table::Schema & schema,
std::string const & name,
bool inside = true,
double maxDistFromPeak = -1.0 )

Check source record produced by a centroid algorithm called "name".

If the centroid is accompanied by uncertainties (the xErr and yErr fields), these should not be NaN. If they are, the algorithmName + "_flag_badError" flag and the general failure flag for the algorithm are both set.

If the centroid set by the algorithm lies outside the footprint attached to the record, or the centroid is more than "dist" pixels from the footprint peak:

(1) the general failure flag for the algorithm is set (2) algorithmName + "_flag_resetToPeak" flag is set (3) the position of the centroid is changed to that of the footprint Peak

Parameters
[in,out]schemaSchema to which the flag_resetToPeak is to be added
[in]nameThe name of the algorithm we will be checking
[in]doFootprintCheckCheck if centroid is within footprint
[in]maxDistFromPeakIf >0; maximum distance in pixels between the footprint peak and centroid allowed before resetToPeak flag is set.

Definition at line 174 of file CentroidUtilities.cc.

176 : _doFootprintCheck(doFootprintCheck), _maxDistFromPeak(maxDistFromPeak) {
177 _resetKey = schema.addField<afw::table::Flag>(schema.join(name, "flag_resetToPeak"),
178 "set if CentroidChecker reset the centroid");
179 _failureKey = schema.find<afw::table::Flag>(schema.join(name, "flag")).key;
180 _xKey = schema.find<CentroidElement>(schema.join(name, "x")).key;
181 _yKey = schema.find<CentroidElement>(schema.join(name, "y")).key;
182
183 // We only check errors on the centroid if they exist: not all measurement
184 // algorithms provide them.
185 try {
186 _xErrKey = schema.find<ErrElement>(schema.join(name, "xErr")).key;
187 } catch (pex::exceptions::NotFoundError &err) {}
188 try {
189 _yErrKey = schema.find<ErrElement>(schema.join(name, "yErr")).key;
190 } catch (pex::exceptions::NotFoundError &err) {}
191 if (_xErrKey.isValid() || _yErrKey.isValid()) {
192 _badErrorKey = schema.addField<afw::table::Flag>(schema.join(name, "flag_badError"),
193 "Error on x and/or y position is NaN");
194 }
195}
bool isValid() const noexcept
Return true if the key was initialized to valid offset.
Definition Key.h:97
double CentroidElement
Definition constants.h:56

Member Function Documentation

◆ operator()()

bool lsst::meas::base::CentroidChecker::operator() ( afw::table::SourceRecord & record) const

Set the centroid to the first footprint if the centroid is either more than _dist pixels from the footprint center, or if it is outside the footprint.

Set appropriate flags to indicate any changes to the centroid, and to indicate if uncertainties are set to invalid ("NaN") values.

Definition at line 197 of file CentroidUtilities.cc.

197 {
198 CentroidElement x = record.get(_xKey);
199 CentroidElement y = record.get(_yKey);
200
201 // Check any errors specified on the centroid position are valid.
202 if ((_xErrKey.isValid() && std::isnan(record.get(_xErrKey))) ||
203 (_yErrKey.isValid() && std::isnan(record.get(_yErrKey)))) {
204 record.set(_badErrorKey, true);
205 record.set(_failureKey, true);
206 }
207
208 // Only proceed with checking if appropriately configured.
209 if (!_doFootprintCheck && _maxDistFromPeak < 0.0) {
210 return false;
211 }
212
213 // Check that the centroid has a footprint that we can validate; otherwise, give up.
214 std::shared_ptr<afw::detection::Footprint> footprint = record.getFootprint();
215 if (!footprint) {
216 throw LSST_EXCEPT(pex::exceptions::RuntimeError, "No Footprint attached to record");
217 }
218 if (footprint->getPeaks().empty()) {
219 throw LSST_EXCEPT(pex::exceptions::RuntimeError, "Footprint has no peaks; cannot verify centroid.");
220 }
221
222 // Set the centroid to the first footprint if the centroid is either more than
223 // _maxDistFromPeak pixels from the centroid, or if it is outside the footprint.
224 CentroidElement footX = footprint->getPeaks().front().getFx();
225 CentroidElement footY = footprint->getPeaks().front().getFy();
226 double distsq = (x - footX) * (x - footX) + (y - footY) * (y - footY);
227 if ((_doFootprintCheck && !footprint->contains(geom::Point2I(geom::Point2D(x, y)))) ||
228 ((_maxDistFromPeak > 0) && (distsq > _maxDistFromPeak * _maxDistFromPeak))) {
229 record.set(_xKey, footX);
230 record.set(_yKey, footY);
231 record.set(_failureKey, true);
232 record.set(_resetKey, true);
233 return true;
234 }
235 return false;
236}
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
int y
Definition SpanSet.cc:48
T isnan(T... args)

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