lsst.meas.base  16.0-18-ga4d4bcb+13
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 {
39 namespace meas {
40 namespace base {
41 
46 public:
48 
49  LSST_CONTROL_FIELD(radii, std::vector<double>, "Radius (in pixels) of apertures.");
50 
52  maxSincRadius, double,
53  "Maximum radius (in pixels) for which the sinc algorithm should be used instead of the "
54  "faster naive algorithm. For elliptical apertures, this is the minor axis radius.");
55 
58  "Warping kernel used to shift Sinc photometry coefficients to different center positions");
59 };
60 
61 struct ApertureFluxResult;
62 
77 public:
78  // Structures and routines to manage flaghandler
79  static FlagDefinitionList const& getFlagDefinitions();
80  static unsigned int const N_FLAGS = 3;
81  static FlagDefinition const FAILURE;
84 
86 
89 
91 
102  template <typename T>
103  static Result computeSincFlux(afw::image::Image<T> const& image,
104  afw::geom::ellipses::Ellipse const& ellipse,
105  Control const& ctrl = Control());
106  template <typename T>
107  static Result computeSincFlux(afw::image::MaskedImage<T> const& image,
108  afw::geom::ellipses::Ellipse const& ellipse,
109  Control const& ctrl = Control());
111 
113 
122  template <typename T>
123  static Result computeNaiveFlux(afw::image::Image<T> const& image,
124  afw::geom::ellipses::Ellipse const& ellipse,
125  Control const& ctrl = Control());
126  template <typename T>
127  static Result computeNaiveFlux(afw::image::MaskedImage<T> const& image,
128  afw::geom::ellipses::Ellipse const& ellipse,
129  Control const& ctrl = Control());
131 
133 
144  template <typename T>
145  static Result computeFlux(afw::image::Image<T> const& image, afw::geom::ellipses::Ellipse const& ellipse,
146  Control const& ctrl = Control());
147 
148  template <typename T>
149  static Result computeFlux(afw::image::MaskedImage<T> const& image,
150  afw::geom::ellipses::Ellipse const& ellipse, Control const& ctrl = Control());
152 
156  explicit ApertureFluxAlgorithm(Control const& ctrl, std::string const& name, afw::table::Schema& schema,
157  daf::base::PropertySet& metadata);
158 
160 
169  virtual void measure(afw::table::SourceRecord& record,
170  afw::image::Exposure<float> const& exposure) const = 0;
171 
173  virtual void fail(afw::table::SourceRecord& measRecord, MeasurementError* error = nullptr) const;
174 
187  static std::string makeFieldPrefix(std::string const& name, double radius);
188 
189 protected:
190  void copyResultToRecord(Result const& result, afw::table::SourceRecord& record, int index) const;
191 
192  FlagHandler const& getFlagHandler(int index) const { return _keys[index].flags; }
193 
194  Control const _ctrl;
196 
197 private:
198  struct Keys {
199  FluxResultKey instFluxKey;
200  FlagHandler flags;
201 
202  Keys(afw::table::Schema& schema, std::string const& prefix, std::string const& doc, bool isSinc);
203  };
204 
205  std::vector<Keys> _keys;
206 };
207 
215  bool getFlag(unsigned int index) const { return _flags[index]; }
216 
218  bool getFlag(std::string const& name) const {
220  }
221 
223  void setFlag(unsigned int index, bool value = true) { _flags[index] = value; }
224 
226  void unsetFlag(unsigned int index) { _flags[index] = false; }
227 
228 private:
230 };
231 
239 public:
241  ApertureFluxTransform(Control const& ctrl, std::string const& name, afw::table::SchemaMapper& mapper);
242 
243  /*
244  * @brief Perform transformation from inputCatalog to outputCatalog.
245  *
246  * @param[in] inputCatalog Source of data to be transformed
247  * @param[in,out] outputCatalog Container for transformed results
248  * @param[in] wcs World coordinate system under which transformation will take place
249  * @param[in] calib Photometric calibration under which transformation will take place
250  * @throws LengthError Catalog sizes do not match
251  */
252  virtual void operator()(afw::table::SourceCatalog const& inputCatalog,
253  afw::table::BaseCatalog& outputCatalog, afw::geom::SkyWcs const& wcs,
254  afw::image::Calib const& calib) const;
255 
256 private:
257  std::vector<MagResultKey> _magKeys;
258  Control _ctrl;
259 };
260 
261 } // namespace base
262 } // namespace meas
263 } // namespace lsst
264 
265 #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:218
bool getFlag(unsigned int index) const
Return the flag value associated with the given bit.
Definition: ApertureFlux.h:215
void setFlag(unsigned int index, bool value=true)
Set the flag value associated with the given bit.
Definition: ApertureFlux.h:223
static FlagDefinitionList const & getFlagDefinitions()
Definition: ApertureFlux.cc:49
Simple class used to define and document flags The name and doc constitute the identity of the FlagDe...
Definition: FlagHandler.h:40
table::Schema schema
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:45
STL class.
Utility class for handling flag fields that indicate the failure modes of an algorithm.
Definition: FlagHandler.h:148
static FlagDefinition const FAILURE
Definition: ApertureFlux.h:81
static FlagDefinition const APERTURE_TRUNCATED
Definition: ApertureFlux.h:82
Base class for multiple-aperture photometry algorithms.
Definition: ApertureFlux.h:76
double maxSincRadius
"Maximum radius (in pixels) for which the sinc algorithm should be used instead of the " "faster naiv...
Definition: ApertureFlux.h:54
static FlagDefinition const SINC_COEFFS_TRUNCATED
Definition: ApertureFlux.h:83
FlagHandler const & getFlagHandler(int index) const
Definition: ApertureFlux.h:192
FlagDefinition getDefinition(std::size_t index) const
get a reference to the FlagDefinition with specified index.
Definition: FlagHandler.h:83
Measurement transformation for aperture fluxes.
Definition: ApertureFlux.h:238
A FunctorKey for FluxResult.
Definition: FluxUtilities.h:59
std::unique_ptr< SchemaItem< U > > result
void unsetFlag(unsigned int index)
Clear (i.e. set to false) the flag associated with the given bit.
Definition: ApertureFlux.h:226
An abstract base classes for which the same implementation can be used for both SingleFrameAlgorithm ...
Definition: Algorithm.h:170
Abstract base class for all C++ measurement transformations.
Definition: Transform.h:85
std::string prefix
std::string shiftKernel
"Warping kernel used to shift Sinc photometry coefficients to different center positions" ; ...
Definition: ApertureFlux.h:58
std::vector< double > radii
"Radius (in pixels) of apertures." ;
Definition: ApertureFlux.h:49
vector-type utility class to build a collection of FlagDefinitions
Definition: FlagHandler.h:60
ApertureFluxResult Result
Result object returned by static methods.
Definition: ApertureFlux.h:88
A reusable result struct for instFlux measurements.
Definition: FluxUtilities.h:41
SafeCentroidExtractor _centroidExtractor
Definition: ApertureFlux.h:195
A Result struct for running an aperture flux algorithm with a single radius.
Definition: ApertureFlux.h:213