LSSTApplications  16.0-10-g0ee56ad+5,16.0-11-ga33d1f2+5,16.0-12-g3ef5c14+3,16.0-12-g71e5ef5+18,16.0-12-gbdf3636+3,16.0-13-g118c103+3,16.0-13-g8f68b0a+3,16.0-15-gbf5c1cb+4,16.0-16-gfd17674+3,16.0-17-g7c01f5c+3,16.0-18-g0a50484+1,16.0-20-ga20f992+8,16.0-21-g0e05fd4+6,16.0-21-g15e2d33+4,16.0-22-g62d8060+4,16.0-22-g847a80f+4,16.0-25-gf00d9b8+1,16.0-28-g3990c221+4,16.0-3-gf928089+3,16.0-32-g88a4f23+5,16.0-34-gd7987ad+3,16.0-37-gc7333cb+2,16.0-4-g10fc685+2,16.0-4-g18f3627+26,16.0-4-g5f3a788+26,16.0-5-gaf5c3d7+4,16.0-5-gcc1f4bb+1,16.0-6-g3b92700+4,16.0-6-g4412fcd+3,16.0-6-g7235603+4,16.0-69-g2562ce1b+2,16.0-8-g14ebd58+4,16.0-8-g2df868b+1,16.0-8-g4cec79c+6,16.0-8-gadf6c7a+1,16.0-8-gfc7ad86,16.0-82-g59ec2a54a+1,16.0-9-g5400cdc+2,16.0-9-ge6233d7+5,master-g2880f2d8cf+3,v17.0.rc1
LSSTDataManagementBasePackage
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,
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:
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
Defines the fields and offsets for a table.
Definition: Schema.h:50
bool getFlag(std::string const &name) const
Return the flag value associated with the given flag name.
Definition: ApertureFlux.h:218
A 2-dimensional celestial WCS that transform pixels to ICRS RA/Dec, using the LSST standard for pixel...
Definition: SkyWcs.h:115
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
A mapping between the keys of two Schemas, used to copy data between them.
Definition: SchemaMapper.h:21
Simple class used to define and document flags The name and doc constitute the identity of the FlagDe...
Definition: FlagHandler.h:40
py::object result
Definition: schema.cc:284
std::string prefix
Definition: SchemaMapper.cc:79
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)
A preprocessor macro used to define fields in C++ "control object" structs.
Definition: config.h:36
This defines the base of measurement transformations.
Describe an exposure&#39;s calibration.
Definition: Calib.h:95
table::Key< table::Array< std::uint8_t > > wcs
Definition: SkyWcs.cc:71
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
A base class for image defects.
static FlagDefinition const APERTURE_TRUNCATED
Definition: ApertureFlux.h:82
Base class for multiple-aperture photometry algorithms.
Definition: ApertureFlux.h:76
An ellipse defined by an arbitrary BaseCore and a center point.
Definition: Ellipse.h:51
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
A class to manipulate images, masks, and variance as a single object.
Definition: MaskedImage.h:74
FlagDefinition getDefinition(std::size_t index) const
get a reference to the FlagDefinition with specified index.
Definition: FlagHandler.h:83
table::Schema schema
Definition: Camera.cc:161
Measurement transformation for aperture fluxes.
Definition: ApertureFlux.h:238
A FunctorKey for FluxResult.
Definition: FluxUtilities.h:59
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
Class for storing generic metadata.
Definition: PropertySet.h:68
Abstract base class for all C++ measurement transformations.
Definition: Transform.h:85
def measure(mi, x, y, size, statistic, stats)
Definition: fringe.py:357
Record class that contains measurements made on a single exposure.
Definition: Source.h:82
std::string shiftKernel
"Warping kernel used to shift Sinc photometry coefficients to different center positions" ; ...
Definition: ApertureFlux.h:58
vector-type utility class to build a collection of FlagDefinitions
Definition: FlagHandler.h:60
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:59
ApertureFluxResult Result
Result object returned by static methods.
Definition: ApertureFlux.h:88
A reusable result struct for instFlux measurements.
Definition: FluxUtilities.h:41
SchemaMapper * mapper
Definition: SchemaMapper.cc:78
SafeCentroidExtractor _centroidExtractor
Definition: ApertureFlux.h:195
A Result struct for running an aperture flux algorithm with a single radius.
Definition: ApertureFlux.h:213