lsst.meas.base
ga44f29b7aa+acb932b993
Toggle main menu visibility
Loading...
Searching...
No Matches
src
FlagHandler.cc
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
/*
3
* LSST Data Management System
4
* Copyright 2008-2014 LSST Corporation.
5
*
6
* This product includes software developed by the
7
* LSST Project (http://www.lsst.org/).
8
*
9
* This program is free software: you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation, either version 3 of the License, or
12
* (at your option) any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the LSST License Statement and
20
* the GNU General Public License along with this program. If not,
21
* see <http://www.lsstcorp.org/LegalNotices/>.
22
*/
23
24
#include "
lsst/meas/base/FlagHandler.h
"
25
26
namespace
lsst
{
27
namespace
meas
{
28
namespace
base
{
29
30
// so pybind11 can get the address of number_undefined
31
constexpr
std::size_t
FlagDefinition::number_undefined
;
32
33
FlagDefinition
FlagDefinitionList::getDefinition
(
std::size_t
index)
const
{
34
if
(index >= _vector.size()) {
35
throw
std::out_of_range
((boost::format(
"Cannot access index %d of length=%d flag definition list."
) %
36
index % _vector.size())
37
.str());
38
}
else
{
39
return
_vector[index];
40
}
41
}
42
43
FlagDefinition
FlagDefinitionList::addFailureFlag
(
std::string
const
& doc) {
44
return
add
(
FlagHandler::getFailureFlagName
(), doc);
45
}
46
47
FlagHandler
FlagHandler::addFields
(
afw::table::Schema
& schema,
std::string
const
& prefix,
48
FlagDefinitionList
const
& flagDefs,
FlagDefinitionList
const
& exclDefs) {
49
FlagHandler
r;
50
r._vector.
reserve
(flagDefs.
size
());
51
for
(
std::size_t
i = 0; i < flagDefs.
size
(); i++) {
52
FlagDefinition
const
& flagDef = flagDefs[i];
53
if
(exclDefs.
hasDefinition
(flagDef.
name
)) {
54
afw::table::Key<afw::table::Flag>
key;
55
r._vector.
push_back
(
std::make_pair
(flagDef.
name
, key));
56
}
else
{
57
afw::table::Key<afw::table::Flag>
key(
58
schema.
addField
<afw::table::Flag>(schema.
join
(prefix, flagDef.
name
), flagDef.
doc
));
59
r._vector.
push_back
(
std::make_pair
(flagDef.
name
, key));
60
if
(flagDef.
name
==
FlagHandler::getFailureFlagName
()) {
61
r.
failureFlagNumber
= i;
62
}
63
}
64
}
65
return
r;
66
}
67
68
FlagHandler::FlagHandler
(
afw::table::SubSchema
const
& s,
FlagDefinitionList
const
& flagDefs,
69
FlagDefinitionList
const
& exclDefs)
70
:
failureFlagNumber
(
FlagDefinition
::number_undefined) {
71
_vector.reserve(flagDefs.
size
());
72
for
(
std::size_t
i = 0; i < flagDefs.
size
(); i++) {
73
FlagDefinition
const
& flagDef = flagDefs[i];
74
if
(exclDefs.
hasDefinition
(flagDef.
name
)) {
75
afw::table::Key<afw::table::Flag>
key;
76
_vector.push_back(
std::make_pair
(flagDef.
name
, key));
77
}
else
{
78
_vector.push_back(
std::make_pair
(flagDef.
name
, s[flagDef.
name
]));
79
if
(flagDef.
name
==
FlagHandler::getFailureFlagName
()) {
80
failureFlagNumber
= i;
81
}
82
}
83
}
84
}
85
86
void
FlagHandler::handleFailure
(
afw::table::BaseRecord
& record,
MeasurementError
const
* error)
const
{
87
std::size_t
const
numFlags = _vector.size();
88
if
(
failureFlagNumber
!=
FlagDefinition::number_undefined
) {
89
record.
set
(_vector[
failureFlagNumber
].second,
true
);
90
}
91
if
(error && error->
getFlagBit
() !=
FlagDefinition::number_undefined
) {
92
assert(numFlags > error->
getFlagBit
());
// We need the particular flag
93
record.
set
(_vector[error->
getFlagBit
()].second,
true
);
94
}
95
}
96
97
}
// namespace base
98
}
// namespace meas
99
}
// namespace lsst
FlagHandler.h
std::string
lsst::afw::table::BaseRecord
lsst::afw::table::BaseRecord::set
void set(Key< T > const &key, U const &value)
lsst::afw::table::Key
lsst::afw::table::Schema
lsst::afw::table::Schema::join
std::string join(std::string const &a, std::string const &b) const
lsst::afw::table::Schema::addField
Key< T > addField(Field< T > const &field, bool doReplace=false)
lsst::afw::table::SubSchema
lsst::meas::base::FlagDefinitionList
vector-type utility class to build a collection of FlagDefinitions
Definition
FlagHandler.h:60
lsst::meas::base::FlagDefinitionList::add
FlagDefinition add(std::string const &name, std::string const &doc)
Add a new FlagDefinition to this list.
Definition
FlagHandler.h:117
lsst::meas::base::FlagDefinitionList::getDefinition
FlagDefinition getDefinition(std::size_t index) const
get a reference to the FlagDefinition with specified index.
Definition
FlagHandler.cc:33
lsst::meas::base::FlagDefinitionList::size
std::size_t size() const
return the current size (number of defined elements) of the collection
Definition
FlagHandler.h:126
lsst::meas::base::FlagDefinitionList::addFailureFlag
FlagDefinition addFailureFlag(std::string const &doc="General Failure Flag")
Add a Flag Defintion to act as a "General" failure flag This flag will be set if a Measurement error ...
Definition
FlagHandler.cc:43
lsst::meas::base::FlagDefinitionList::hasDefinition
bool hasDefinition(std::string const &name) const
See if there is a FlagDefinition with specified name.
Definition
FlagHandler.h:101
lsst::meas::base::FlagHandler::failureFlagNumber
std::size_t failureFlagNumber
Definition
FlagHandler.h:298
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:86
lsst::meas::base::FlagHandler::FlagHandler
FlagHandler()
Each error should have a corresponding static FlagDefinition object.
Definition
FlagHandler.h:177
lsst::meas::base::FlagHandler::addFields
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.
Definition
FlagHandler.cc:47
lsst::meas::base::FlagHandler::getFailureFlagName
static std::string const & getFailureFlagName()
Define the universal name of the general failure flag.
Definition
FlagHandler.h:182
lsst::meas::base::MeasurementError
Exception to be thrown when a measurement algorithm experiences a known failure mode.
Definition
exceptions.h:48
lsst::meas::base::MeasurementError::getFlagBit
std::size_t getFlagBit() const
Return the flag bit associated with the error.
Definition
exceptions.h:59
lsst::meas::base.forcedPhotCcd.for
Definition
forcedPhotCcd.py:134
std::make_pair
T make_pair(T... args)
lsst::meas::base
Definition
Algorithm.h:37
lsst::meas
Definition
Algorithm.h:36
lsst
std::out_of_range
std::vector::push_back
T push_back(T... args)
std::vector::reserve
T reserve(T... args)
std::size_t
lsst::meas::base::FlagDefinition
Simple class used to define and document flags The name and doc constitute the identity of the FlagDe...
Definition
FlagHandler.h:40
lsst::meas::base::FlagDefinition::number_undefined
static constexpr std::size_t number_undefined
Definition
FlagHandler.h:41
lsst::meas::base::FlagDefinition::name
std::string name
Definition
FlagHandler.h:52
lsst::meas::base::FlagDefinition::doc
std::string doc
Definition
FlagHandler.h:53
Generated on
for lsst.meas.base by
1.17.0