LSST Applications 29.0.1,g0fba68d861+132dd21e0a,g107a963962+1bb9f809a9,g1fd858c14a+005be21cae,g21d47ad084+8a07b29876,g325378336f+5d73323c8f,g330003fc43+40b4eaffc6,g35bb328faa+fcb1d3bbc8,g36ff55ed5b+9c28a42a87,g4e0f332c67+5fbd1e3e73,g53246c7159+fcb1d3bbc8,g60b5630c4e+9c28a42a87,g67b6fd64d1+a38b34ea13,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g7b71ed6315+fcb1d3bbc8,g86c591e316+6b2b2d0295,g8852436030+bf14db0e33,g89139ef638+a38b34ea13,g8b8da53e10+e3777245af,g9125e01d80+fcb1d3bbc8,g989de1cb63+a38b34ea13,g9f1445be69+9c28a42a87,g9f33ca652e+52c8f07962,ga9baa6287d+9c28a42a87,ga9e4eb89a6+9f84bd6575,gabe3b4be73+1e0a283bba,gb037a4e798+f3cbcd26c0,gb1101e3267+e7be8da0f8,gb58c049af0+f03b321e39,gb89ab40317+a38b34ea13,gcf25f946ba+bf14db0e33,gd6cbbdb0b4+bce7f7457e,gd9a9a58781+fcb1d3bbc8,gde0f65d7ad+53d424b1ae,ge278dab8ac+222406d50a,ge410e46f29+a38b34ea13,ge80e9994a3+664d6357dc,gf67bdafdda+a38b34ea13
LSST Data Management Base Package
Loading...
Searching...
No Matches
slots.cc
Go to the documentation of this file.
3
4namespace lsst {
5namespace afw {
6namespace table {
7
8namespace {
9
10// Return true if 'a' starts with 'b'
11bool startsWith(std::string const &a, std::string const b) { return a.compare(0, b.size(), b) == 0; }
12
13// helper class that resolves aliases for a slot's main measurement field, while
14// distiguishing between two cases where the field can't be found:
15// - if the alias points to an invalid field, we should throw an exception (which is actually
16// done by the calling setKeys() method, by allowing a lower-level exception to propagate up).
17// - if the alias simply isn't defined, we should just reset the slot with invalid keys
18class MeasFieldNameGetter {
19public:
20 MeasFieldNameGetter(SubSchema const &s, Schema const &schema)
21 : replaced(schema[schema.getAliasMap()->apply(s.getPrefix())]),
22 defined(replaced.getPrefix() !=
23 s.getPrefix()) // slot is defined if applying alias wasn't a no-op
24 {}
25
26 SubSchema replaced; // a SubSchema that includes alias replacement
27 bool defined; // whether the slot is defined at all
28};
29
30} // namespace
31
32void FluxSlotDefinition::setKeys(std::string const &alias, Schema const &schema) {
33 SubSchema s = schema["slot"][_name];
34 if (!alias.empty() && !startsWith(alias, s.getPrefix())) return;
35 _measKey = MeasKey();
36 _errKey = ErrKey();
37 _flagKey = Key<Flag>();
38 MeasFieldNameGetter helper(s["instFlux"], schema);
39 if (!helper.defined) {
40 return;
41 }
42 _measKey = helper.replaced;
43 try {
44 _errKey = s["instFluxErr"];
46 }
47 try {
48 _flagKey = s["flag"];
50 }
51}
52
53namespace {
54
55CentroidSlotDefinition::ErrKey::NameArray makeCentroidNameArray() {
57 v.push_back("x");
58 v.push_back("y");
59 return v;
60}
61
62} // namespace
63
64void CentroidSlotDefinition::setKeys(std::string const &alias, Schema const &schema) {
65 SubSchema s = schema["slot"][_name];
66 if (!alias.empty() && !startsWith(alias, s.getPrefix())) return;
67 static ErrKey::NameArray names = makeCentroidNameArray();
68 _measKey = MeasKey();
69 _errKey = ErrKey();
70 _flagKey = Key<Flag>();
71 MeasFieldNameGetter helper(s, schema);
72 if (!helper.defined) return;
73 _measKey = helper.replaced;
74 try {
75 _errKey = ErrKey(s, names);
77 }
78 try {
79 _flagKey = s["flag"];
81 }
82}
83
84namespace {
85
86ShapeSlotDefinition::ErrKey::NameArray makeShapeNameArray() {
88 v.push_back("xx");
89 v.push_back("yy");
90 v.push_back("xy");
91 return v;
92}
93
94} // namespace
95
96void ShapeSlotDefinition::setKeys(std::string const &alias, Schema const &schema) {
97 SubSchema s = schema["slot"][_name];
98 if (!alias.empty() && !startsWith(alias, s.getPrefix())) return;
99 static ErrKey::NameArray names = makeShapeNameArray();
100 _measKey = MeasKey();
101 _errKey = ErrKey();
102 _flagKey = Key<Flag>();
103 MeasFieldNameGetter helper(s, schema);
104 if (!helper.defined) return;
105 _measKey = helper.replaced;
106 try {
107 _errKey = ErrKey(s, names);
109 }
110 try {
111 _flagKey = s["flag"];
113 }
114}
115
116void SlotSuite::handleAliasChange(std::string const &alias, Schema const &schema) {
117 defPsfFlux.setKeys(alias, schema);
118 defApFlux.setKeys(alias, schema);
119 defGaussianFlux.setKeys(alias, schema);
120 defModelFlux.setKeys(alias, schema);
121 defCalibFlux.setKeys(alias, schema);
122 defCentroid.setKeys(alias, schema);
123 defShape.setKeys(alias, schema);
124}
125
127 : defPsfFlux("PsfFlux"),
128 defApFlux("ApFlux"),
129 defGaussianFlux("GaussianFlux"),
130 defModelFlux("ModelFlux"),
131 defCalibFlux("CalibFlux"),
132 defCentroid("Centroid"),
133 defShape("Shape") {
134 defPsfFlux.setKeys("", schema);
135 defApFlux.setKeys("", schema);
136 defGaussianFlux.setKeys("", schema);
137 defModelFlux.setKeys("", schema);
138 defCalibFlux.setKeys("", schema);
139 defCentroid.setKeys("", schema);
140 defShape.setKeys("", schema);
141}
142} // namespace table
143} // namespace afw
144} // namespace lsst
CovarianceMatrixKey< float, 2 > ErrKey
Key type used to access the slot uncertainty.
Definition slots.h:125
Point2DKey MeasKey
Key type used to access the slot measurement.
Definition slots.h:124
void setKeys(std::string const &alias, Schema const &schema)
Update the cached Keys following an change of aliases in the given Schema.
Definition slots.cc:64
Key< double > MeasKey
Key type used to access the slot measurement.
Definition slots.h:77
Key< double > ErrKey
Key type used to access the slot uncertainty.
Definition slots.h:78
void setKeys(std::string const &alias, Schema const &schema)
Update the cached Keys following an change of aliases in the given Schema.
Definition slots.cc:32
A class used as a handle to a particular field in a table.
Definition Key.h:53
Defines the fields and offsets for a table.
Definition Schema.h:51
CovarianceMatrixKey< float, 3 > ErrKey
Key type used to access the slot uncertainty.
Definition slots.h:172
void setKeys(std::string const &alias, Schema const &schema)
Update the cached Keys following an change of aliases in the given Schema.
Definition slots.cc:96
QuadrupoleKey MeasKey
Key type used to access the slot measurement.
Definition slots.h:171
A proxy type for name lookups in a Schema.
Definition Schema.h:367
Reports attempts to access elements using an invalid key.
Definition Runtime.h:151
T compare(T... args)
T empty(T... args)
T push_back(T... args)
CentroidSlotDefinition defCentroid
Definition slots.h:225
FluxSlotDefinition defModelFlux
Definition slots.h:223
SlotSuite(Schema const &schema)
Initialize the slots.
Definition slots.cc:126
FluxSlotDefinition defCalibFlux
Definition slots.h:224
FluxSlotDefinition defApFlux
Definition slots.h:221
FluxSlotDefinition defPsfFlux
Definition slots.h:220
ShapeSlotDefinition defShape
Definition slots.h:226
FluxSlotDefinition defGaussianFlux
Definition slots.h:222
void handleAliasChange(std::string const &alias, Schema const &schema)
Handle a callback from an AliasMap informing the table that an alias has changed.
Definition slots.cc:116