lsst.meas.base  14.0-18-g5442b95
ApertureFlux.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 /*
3  * LSST Data Management System
4  * Copyright 2008-2016 AURA/LSST.
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 #ifndef LSST_MEAS_BASE_ApertureFlux_h_INCLUDED
25 #define LSST_MEAS_BASE_ApertureFlux_h_INCLUDED
26 
27 #include <array>
28 #include "lsst/pex/config.h"
30 #include "lsst/afw/table/arrays.h"
37 
38 namespace lsst { namespace meas { namespace base {
39 
44 public:
45 
47 
50  "Radius (in pixels) of apertures."
51  );
52 
54  maxSincRadius, double,
55  "Maximum radius (in pixels) for which the sinc algorithm should be used instead of the "
56  "faster naive algorithm. For elliptical apertures, this is the minor axis radius."
57  );
58 
61  "Warping kernel used to shift Sinc photometry coefficients to different center positions"
62  );
63 
64 };
65 
66 
67 struct ApertureFluxResult;
68 
69 
84 public:
85 
86  // Structures and routines to manage flaghandler
87  static FlagDefinitionList const & getFlagDefinitions();
88  static unsigned int const N_FLAGS = 3;
89  static FlagDefinition const FAILURE;
92 
94 
97 
99 
110  template <typename T>
111  static Result computeSincFlux(
112  afw::image::Image<T> const & image,
113  afw::geom::ellipses::Ellipse const & ellipse,
114  Control const & ctrl=Control()
115  );
116  template <typename T>
117  static Result computeSincFlux(
118  afw::image::MaskedImage<T> const & image,
119  afw::geom::ellipses::Ellipse const & ellipse,
120  Control const & ctrl=Control()
121  );
123 
125 
134  template <typename T>
135  static Result computeNaiveFlux(
136  afw::image::Image<T> const & image,
137  afw::geom::ellipses::Ellipse const & ellipse,
138  Control const & ctrl=Control()
139  );
140  template <typename T>
141  static Result computeNaiveFlux(
142  afw::image::MaskedImage<T> const & image,
143  afw::geom::ellipses::Ellipse const & ellipse,
144  Control const & ctrl=Control()
145  );
147 
149 
160  template <typename T>
161  static Result computeFlux(
162  afw::image::Image<T> const & image,
163  afw::geom::ellipses::Ellipse const & ellipse,
164  Control const & ctrl=Control()
165  );
166 
167  template <typename T>
168  static Result computeFlux(
169  afw::image::MaskedImage<T> const & image,
170  afw::geom::ellipses::Ellipse const & ellipse,
171  Control const & ctrl=Control()
172  );
174 
178  explicit ApertureFluxAlgorithm(
179  Control const & ctrl,
180  std::string const & name,
181  afw::table::Schema & schema,
182  daf::base::PropertySet & metadata
183  );
184 
186 
195  virtual void measure(
196  afw::table::SourceRecord & record,
197  afw::image::Exposure<float> const & exposure
198  ) const = 0;
199 
201  virtual void fail(
202  afw::table::SourceRecord & measRecord,
203  MeasurementError * error=nullptr
204  ) const;
205 
218  static std::string makeFieldPrefix(std::string const & name, double radius);
219 
224 protected:
225 
226  void copyResultToRecord(Result const & result, afw::table::SourceRecord & record, int index) const;
227 
228  FlagHandler const & getFlagHandler(int index) const { return _keys[index].flags; }
229 
230  Control const _ctrl;
232 
233 private:
234 
235  struct Keys {
236  FluxResultKey fluxKey;
237  FlagHandler flags;
238 
239  Keys(afw::table::Schema & schema, std::string const & prefix, std::string const & doc, bool isSinc);
240  };
241 
242  std::vector<Keys> _keys;
243 };
244 
245 
252 
254  bool getFlag(unsigned int index) const { return _flags[index]; }
255 
257  bool getFlag(std::string const & name) const {
259  }
260 
262  void setFlag(unsigned int index, bool value=true) { _flags[index] = value; }
263 
265  void unsetFlag(unsigned int index) { _flags[index] = false; }
266 
267 private:
269 };
270 
278 public:
280  ApertureFluxTransform(Control const & ctrl, std::string const & name, afw::table::SchemaMapper & mapper);
281 
282  /*
283  * @brief Perform transformation from inputCatalog to outputCatalog.
284  *
285  * @param[in] inputCatalog Source of data to be transformed
286  * @param[in,out] outputCatalog Container for transformed results
287  * @param[in] wcs World coordinate system under which transformation will take place
288  * @param[in] calib Photometric calibration under which transformation will take place
289  * @throws LengthError Catalog sizes do not match
290  */
291  virtual void operator()(afw::table::SourceCatalog const & inputCatalog,
292  afw::table::BaseCatalog & outputCatalog,
293  afw::geom::SkyWcs const & wcs,
294  afw::image::Calib const & calib) const;
295 private:
296  std::vector<MagResultKey> _magKeys;
297  Control _ctrl;
298 };
299 
300 }}} // namespace lsst::meas::base
301 
302 #endif // !LSST_MEAS_BASE_ApertureFlux_h_INCLUDED
bool getFlag(std::string const &name) const
Return the flag value associated with the given flag name.
Definition: ApertureFlux.h:257
bool getFlag(unsigned int index) const
Return the flag value associated with the given bit.
Definition: ApertureFlux.h:254
void setFlag(unsigned int index, bool value=true)
Set the flag value associated with the given bit.
Definition: ApertureFlux.h:262
afw::table::Schema schema
static FlagDefinitionList const & getFlagDefinitions()
Definition: ApertureFlux.cc:45
Simple class used to define and document flags The name and doc constitute the identity of the FlagDe...
Definition: FlagHandler.h:38
This defines the base of measurement transformations.
Utility class for measurement algorithms that extracts a position from the Centroid slot and handles ...
Exception to be thrown when a measurement algorithm experiences a known failure mode.
Definition: exceptions.h:48
#define LSST_CONTROL_FIELD(NAME, TYPE, DOC)
string name
Configuration object for multiple-aperture flux algorithms.
Definition: ApertureFlux.h:43
STL class.
Utility class for handling flag fields that indicate the failure modes of an algorithm.
Definition: FlagHandler.h:156
static FlagDefinition const FAILURE
Definition: ApertureFlux.h:89
static FlagDefinition const APERTURE_TRUNCATED
Definition: ApertureFlux.h:90
Base class for multiple-aperture photometry algorithms.
Definition: ApertureFlux.h:83
double maxSincRadius
"Maximum radius (in pixels) for which the sinc algorithm should be used instead of the " "faster naiv...
Definition: ApertureFlux.h:57
static FlagDefinition const SINC_COEFFS_TRUNCATED
Definition: ApertureFlux.h:91
FlagHandler const & getFlagHandler(int index) const
Definition: ApertureFlux.h:228
FlagDefinition getDefinition(std::size_t index) const
get a reference to the FlagDefinition with specified index.
Definition: FlagHandler.h:87
Measurement transformation for aperture fluxes.
Definition: ApertureFlux.h:277
A FunctorKey for FluxResult.
Definition: FluxUtilities.h:58
void unsetFlag(unsigned int index)
Clear (i.e. set to false) the flag associated with the given bit.
Definition: ApertureFlux.h:265
An abstract base classes for which the same implementation can be used for both SingleFrameAlgorithm ...
Definition: Algorithm.h:185
Abstract base class for all C++ measurement transformations.
Definition: Transform.h:83
std::string shiftKernel
"Warping kernel used to shift Sinc photometry coefficients to different center positions" ; ...
Definition: ApertureFlux.h:62
std::vector< double > radii
"Radius (in pixels) of apertures." ;
Definition: ApertureFlux.h:51
vector-type utility class to build a collection of FlagDefinitions
Definition: FlagHandler.h:63
ApertureFluxResult Result
Result object returned by static methods.
Definition: ApertureFlux.h:96
A reusable result struct for flux measurements.
Definition: FluxUtilities.h:39
SafeCentroidExtractor _centroidExtractor
Definition: ApertureFlux.h:231
A Result struct for running an aperture flux algorithm with a single radius.
Definition: ApertureFlux.h:251