LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
LSST Data Management Base Package
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
lsst::meas::base::FlagHandler Class Reference

Utility class for handling flag fields that indicate the failure modes of an algorithm. More...

#include <FlagHandler.h>

Public Member Functions

 FlagHandler ()
 Each error should have a corresponding static FlagDefinition object. More...
 
 FlagHandler (afw::table::SubSchema const &s, FlagDefinitionList const &flagDefs, FlagDefinitionList const &exclDefs=FlagDefinitionList::getEmptyList())
 Construct a FlagHandler to manage fields already added to a schema. More...
 
unsigned int getFlagNumber (std::string const &flagName) const
 Return the index of a flag with the given flag name. More...
 
std::string getFlagName (std::size_t i) const
 Return the value of the flag name corresponding to the given flag index. More...
 
bool getValue (afw::table::BaseRecord const &record, std::size_t i) const
 Return the value of the flag field corresponding to the given flag index. More...
 
bool getValue (afw::table::BaseRecord const &record, std::string const &flagName) const
 Return the value of the flag field with the given flag name. More...
 
void setValue (afw::table::BaseRecord &record, std::size_t i, bool value) const
 Set the flag field corresponding to the given flag index. More...
 
void setValue (afw::table::BaseRecord &record, std::string const &flagName, bool value) const
 Set the flag field corresponding to the given flag name. More...
 
std::size_t getFailureFlagNumber () const
 Get the index of the General Failure flag, if one is defined. More...
 
void handleFailure (afw::table::BaseRecord &record, MeasurementError const *error=nullptr) const
 Handle an expected or unexpected Exception thrown by a measurement algorithm. More...
 

Static Public Member Functions

static std::string const & getFailureFlagName ()
 Define the universal name of the general failure flag. More...
 
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. More...
 

Public Attributes

std::size_t failureFlagNumber
 

Detailed Description

Utility class for handling flag fields that indicate the failure modes of an algorithm.

The typical pattern for using FlagHandler within an Algorithm is:

See PsfFluxAlgorithm for a complete example.

Definition at line 148 of file FlagHandler.h.

Constructor & Destructor Documentation

◆ FlagHandler() [1/2]

lsst::meas::base::FlagHandler::FlagHandler ( )
inline

Each error should have a corresponding static FlagDefinition object.

In the Algorithm header file, this will be defined like this:

static FlagDefinition const & FAILURE;
static FlagDefinition const & SOME_OTHER_FAILURE_MODE;
    ...

A static FlagDefinitionList is created in the Algorithm .cc file, like this:

FlagDefinitionList flagDefinitions;
FlagDefinition const FAILURE = flagDefinitions.addFailureFlag();
FlagDefinition const FAILURE_MODE = flagDefinitions.add("flag_mode", "Specific failure flag");

Default constructor for delayed initialization.

This constructor creates an invalid, unusable FlagHandler in the same way a const_iterator default constructor constructs an invalid const_iterator. Its only purpose is to delay construction of the FlagHandler from an Algorithm constructor's initializer list to the constructor body, which can be necessary when the list of possible flags depends on the algorithm's configuration. To use this constructor to delay initialization, simply use it in the initializer list, and then assign the result of a call to addFields() to the FlagHandler data member later in the constructor.

Definition at line 176 of file FlagHandler.h.

◆ FlagHandler() [2/2]

lsst::meas::base::FlagHandler::FlagHandler ( afw::table::SubSchema const &  s,
FlagDefinitionList const &  flagDefs,
FlagDefinitionList const &  exclDefs = FlagDefinitionList::getEmptyList() 
)

Construct a FlagHandler to manage fields already added to a schema.

This is primarily intended for use by forced measurement algorithms that need to parse the flags of the single-frame measurement algorithms providing their reference parameters.

Parameters
[in]ASubSchema object that holds the fields to extract and their namespace. Obtainable from the arguments to addFields() as "schema[prefix]".
[in]flagDefsReference to a FlagDefinitionList
[in]exclDefsoptional FlagDefinitionList of flags to exclude

As with addFields(), pointers must be valid only for the duration of this constructor call.

Definition at line 58 of file FlagHandler.cc.

61  _vector.reserve(flagDefs.size());
62  for (std::size_t i = 0; i < flagDefs.size(); i++) {
63  FlagDefinition const& flagDef = flagDefs[i];
64  if (exclDefs.hasDefinition(flagDef.name)) {
65  afw::table::Key<afw::table::Flag> key;
66  _vector.push_back(std::make_pair(flagDef.name, key));
67  } else {
68  _vector.push_back(std::make_pair(flagDef.name, s[flagDef.name]));
69  if (flagDef.name == FlagHandler::getFailureFlagName()) {
71  }
72  }
73  }
74 }
static std::string const & getFailureFlagName()
Define the universal name of the general failure flag.
Definition: FlagHandler.h:181
T make_pair(T... args)
T push_back(T... args)
T reserve(T... args)

Member Function Documentation

◆ addFields()

FlagHandler lsst::meas::base::FlagHandler::addFields ( afw::table::Schema schema,
std::string const &  prefix,
FlagDefinitionList const &  flagDefs,
FlagDefinitionList const &  exclDefs = FlagDefinitionList::getEmptyList() 
)
static

Add Flag fields to a schema, creating a FlagHandler object to manage them.

This is the way FlagHandlers will typically be constructed for new algorithms.

Parameters
[out]schemaSchema to which fields should be added.
[in]prefixString name of the algorithm or algorithm component. Field names will be constructed by using schema.join() on this and the flag name from the FlagDefinition array.
[in]flagDefsReference to a FlagDefinitionList
[in]exclDefsoptional FlagDefinitionList of flags to exclude

If the set of flags depends on the algorithm configuration, a flag may be excluded from the schema using the optional exclDefs parameter. This can be specified using an initializer_list, as in: _flagHandler = FlagHandler::addFields(schema, prefix, flagDefs, {NO_PSF})

Definition at line 37 of file FlagHandler.cc.

38  {
39  FlagHandler r;
40  r._vector.reserve(flagDefs.size());
41  for (std::size_t i = 0; i < flagDefs.size(); i++) {
42  FlagDefinition const& flagDef = flagDefs[i];
43  if (exclDefs.hasDefinition(flagDef.name)) {
44  afw::table::Key<afw::table::Flag> key;
45  r._vector.push_back(std::make_pair(flagDef.name, key));
46  } else {
47  afw::table::Key<afw::table::Flag> key(
48  schema.addField<afw::table::Flag>(schema.join(prefix, flagDef.name), flagDef.doc));
49  r._vector.push_back(std::make_pair(flagDef.name, key));
50  if (flagDef.name == FlagHandler::getFailureFlagName()) {
51  r.failureFlagNumber = i;
52  }
53  }
54  }
55  return r;
56 }
std::string prefix
Definition: SchemaMapper.cc:72
table::Schema schema
Definition: python.h:134
FlagHandler()
Each error should have a corresponding static FlagDefinition object.
Definition: FlagHandler.h:176

◆ getFailureFlagName()

static std::string const& lsst::meas::base::FlagHandler::getFailureFlagName ( )
inlinestatic

Define the universal name of the general failure flag.

Definition at line 181 of file FlagHandler.h.

181  {
182  static std::string name = "flag";
183  return name;
184  }
table::Key< std::string > name
Definition: Amplifier.cc:116

◆ getFailureFlagNumber()

std::size_t lsst::meas::base::FlagHandler::getFailureFlagNumber ( ) const
inline

Get the index of the General Failure flag, if one is defined.

This flag is defined by most algorithms, and if defined, is set whenever an error is caught by the FlagHandler. If no General Failure flag is defined, this routine will return FlagDefinition::number_undefined

Definition at line 286 of file FlagHandler.h.

286 { return failureFlagNumber; }

◆ getFlagName()

std::string lsst::meas::base::FlagHandler::getFlagName ( std::size_t  i) const
inline

Return the value of the flag name corresponding to the given flag index.

Definition at line 233 of file FlagHandler.h.

233  {
234  if (i < _vector.size() && _vector[i].second.isValid()) {
235  return _vector[i].first;
236  }
237  throw FatalAlgorithmError("No legal FlagHandler entry number " + std::to_string(i));
238  }
T size(T... args)
T to_string(T... args)

◆ getFlagNumber()

unsigned int lsst::meas::base::FlagHandler::getFlagNumber ( std::string const &  flagName) const
inline

Return the index of a flag with the given flag name.

Definition at line 222 of file FlagHandler.h.

222  {
223  for (unsigned int i = 0; i < _vector.size(); i++) {
224  if (_vector[i].first == flagName && _vector[i].second.isValid()) {
225  return i;
226  }
227  }
228  throw FatalAlgorithmError("No FlagHandler entry for " + flagName);
229  }

◆ getValue() [1/2]

bool lsst::meas::base::FlagHandler::getValue ( afw::table::BaseRecord const &  record,
std::size_t  i 
) const
inline

Return the value of the flag field corresponding to the given flag index.

Definition at line 242 of file FlagHandler.h.

242  {
243  if (i < _vector.size() && _vector[i].second.isValid()) {
244  return record.get(_vector[i].second);
245  }
246  throw FatalAlgorithmError("No legal FlagHandler entry number " + std::to_string(i));
247  }

◆ getValue() [2/2]

bool lsst::meas::base::FlagHandler::getValue ( afw::table::BaseRecord const &  record,
std::string const &  flagName 
) const
inline

Return the value of the flag field with the given flag name.

Definition at line 251 of file FlagHandler.h.

251  {
252  for (std::size_t i = 0; i < _vector.size(); i++) {
253  if (_vector[i].first == flagName && _vector[i].second.isValid()) {
254  return record.get(_vector[i].second);
255  }
256  }
257  throw FatalAlgorithmError("No FlagHandler entry for " + flagName);
258  }

◆ handleFailure()

void lsst::meas::base::FlagHandler::handleFailure ( afw::table::BaseRecord record,
MeasurementError const *  error = nullptr 
) const

Handle an expected or unexpected Exception thrown by a measurement algorithm.

If the exception is expected, it should inherit from MeasurementError and can be passed here; this allows handleFailure to extract the failure mode enum value from the exception and set the corresponding flag. The general failure flag will be set regardless of whether the "error" argument is nullptr (which happens when an unexpected error occurs).

Definition at line 76 of file FlagHandler.cc.

76  {
77  std::size_t const numFlags = _vector.size();
79  record.set(_vector[failureFlagNumber].second, true);
80  }
81  if (error && error->getFlagBit() != FlagDefinition::number_undefined) {
82  assert(numFlags > error->getFlagBit()); // We need the particular flag
83  record.set(_vector[error->getFlagBit()].second, true);
84  }
85 }

◆ setValue() [1/2]

void lsst::meas::base::FlagHandler::setValue ( afw::table::BaseRecord record,
std::size_t  i,
bool  value 
) const
inline

Set the flag field corresponding to the given flag index.

Definition at line 262 of file FlagHandler.h.

262  {
263  if (i < _vector.size() && _vector[i].second.isValid()) {
264  record.set(_vector[i].second, value);
265  return;
266  }
267  throw FatalAlgorithmError("No legal FlagHandler entry number " + std::to_string(i));
268  }

◆ setValue() [2/2]

void lsst::meas::base::FlagHandler::setValue ( afw::table::BaseRecord record,
std::string const &  flagName,
bool  value 
) const
inline

Set the flag field corresponding to the given flag name.

Definition at line 272 of file FlagHandler.h.

272  {
273  for (std::size_t i = 0; i < _vector.size(); i++) {
274  if (_vector[i].first == flagName && _vector[i].second.isValid()) {
275  record.set(_vector[i].second, value);
276  return;
277  }
278  }
279  throw FatalAlgorithmError("No FlagHandler entry for " + flagName);
280  }

Member Data Documentation

◆ failureFlagNumber

std::size_t lsst::meas::base::FlagHandler::failureFlagNumber

Definition at line 297 of file FlagHandler.h.


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