LSSTApplications  8.0.0.0+107,8.0.0.1+13,9.1+18,9.2,master-g084aeec0a4,master-g0aced2eed8+6,master-g15627eb03c,master-g28afc54ef9,master-g3391ba5ea0,master-g3d0fb8ae5f,master-g4432ae2e89+36,master-g5c3c32f3ec+17,master-g60f1e072bb+1,master-g6a3ac32d1b,master-g76a88a4307+1,master-g7bce1f4e06+57,master-g8ff4092549+31,master-g98e65bf68e,master-ga6b77976b1+53,master-gae20e2b580+3,master-gb584cd3397+53,master-gc5448b162b+1,master-gc54cf9771d,master-gc69578ece6+1,master-gcbf758c456+22,master-gcec1da163f+63,master-gcf15f11bcc,master-gd167108223,master-gf44c96c709
LSSTDataManagementBasePackage
FluxControl.h
Go to the documentation of this file.
1 // -*- LSST-C++ -*-
2 
3 /*
4  * LSST Data Management System
5  * Copyright 2008, 2009, 2010 LSST Corporation.
6  *
7  * This product includes software developed by the
8  * LSST Project (http://www.lsst.org/).
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the LSST License Statement and
21  * the GNU General Public License along with this program. If not,
22  * see <http://www.lsstcorp.org/LegalNotices/>.
23  */
24 
25 #ifndef LSST_MEAS_ALGORITHMS_FLUXCONTROL_H
26 #define LSST_MEAS_ALGORITHMS_FLUXCONTROL_H
27 // Control/algorithm hierarchy for flux measurement.
29 //
30 
31 #include "lsst/base.h"
32 #include "lsst/pex/config.h"
34 
35 namespace lsst {
36 namespace meas {
37 namespace algorithms {
38 
39 class FluxControl;
40 
44 class FluxAlgorithm : public Algorithm {
45 public:
46 
53 
55  FluxControl const & getControl() const;
56 
58  KeyTuple const & getKeys() const { return _keys; }
59 
60 protected:
61 
63  FluxAlgorithm(FluxControl const & ctrl, KeyTuple const & keys);
64 
66  FluxAlgorithm(FluxControl const & ctrl, afw::table::Schema & schema, char const * doc);
67 
68 private:
70 };
71 
72 class FluxControl : public AlgorithmControl {
73 public:
74 
75  PTR(FluxControl) clone() const { return boost::static_pointer_cast<FluxControl>(_clone()); }
76 
78  afw::table::Schema & schema,
79  PTR(daf::base::PropertyList) const & metadata = PTR(daf::base::PropertyList)(),
80  AlgorithmMap const & others = AlgorithmMap()
81  ) const {
82  return boost::static_pointer_cast<FluxAlgorithm>(_makeAlgorithm(schema, metadata, others));
83  }
84 
85 protected:
86  explicit FluxControl(std::string const & name_, double priority=2.0) :
87  AlgorithmControl(name_, priority) {}
88 };
89 
90 inline FluxAlgorithm::FluxAlgorithm(FluxControl const & ctrl, KeyTuple const & keys) :
91  Algorithm(ctrl), _keys(keys)
92 {}
93 
95  FluxControl const & ctrl, afw::table::Schema & schema, char const * doc
96 ) :
97  Algorithm(ctrl), _keys(afw::table::addFluxFields(schema, ctrl.name, doc))
98 {}
99 
100 inline FluxControl const & FluxAlgorithm::getControl() const {
101  return static_cast<FluxControl const &>(Algorithm::getControl());
102 }
103 
113 public:
114 
115  LSST_CONTROL_FIELD(radii, std::vector<double>, "vector of radii for apertures (in pixels)");
116 
117  ApertureFluxControl(std::string const& name="flux.aperture",
118  float const priority=2.0
119  );
120 
121 private:
122  virtual PTR(AlgorithmControl) _clone() const;
123  virtual PTR(Algorithm) _makeAlgorithm(
124  afw::table::Schema & schema, PTR(daf::base::PropertyList) const & metadata
125  ) const;
126 };
127 
128 
135 public:
136  EllipticalApertureFluxControl() : ApertureFluxControl("flux.aperture.elliptical",
137  1.9
138  )
139  { }
140 
141 private:
142  virtual PTR(AlgorithmControl) _clone() const;
143  virtual PTR(Algorithm) _makeAlgorithm(
144  afw::table::Schema & schema, PTR(daf::base::PropertyList) const & metadata
145  ) const;
146 };
147 
166 public:
167 
169  "Name of warping kernel (e.g. \"lanczos4\") used to compute the peak");
170 
171  PeakLikelihoodFluxControl() : FluxControl("flux.peakLikelihood"), warpingKernelName("lanczos4") {}
172 
173 private:
174  virtual PTR(AlgorithmControl) _clone() const;
175  virtual PTR(Algorithm) _makeAlgorithm(
176  afw::table::Schema & schema, PTR(daf::base::PropertyList) const & metadata
177  ) const;
178 };
179 
186 public:
187 
188  LSST_CONTROL_FIELD(radius, double, "FIXME! NEVER DOCUMENTED!");
189 
190  NaiveFluxControl() : FluxControl("flux.naive"), radius(7.0) {}
191 
192 private:
193  virtual PTR(AlgorithmControl) _clone() const;
194  virtual PTR(Algorithm) _makeAlgorithm(
195  afw::table::Schema & schema, PTR(daf::base::PropertyList) const & metadata
196  ) const;
197 };
198 
204 class PsfFluxControl : public FluxControl {
205 public:
206 
207  PsfFluxControl() : FluxControl("flux.psf") {}
208 
209 private:
210  virtual PTR(AlgorithmControl) _clone() const;
211  virtual PTR(Algorithm) _makeAlgorithm(
212  afw::table::Schema & schema, PTR(daf::base::PropertyList) const & metadata
213  ) const;
214 };
215 
221 class SincFluxControl : public FluxControl {
222 public:
223 
224  LSST_CONTROL_FIELD(radius1, double, "major axis of inner boundary (pixels)");
225  LSST_CONTROL_FIELD(radius2, double, "major axis of outer boundary (pixels)");
226  LSST_CONTROL_FIELD(angle, double, "measured from x anti-clockwise; radians");
227  LSST_CONTROL_FIELD(ellipticity, double, "1 - b/a");
228 
230  FluxControl("flux.sinc"), radius1(0.0), radius2(7.0), angle(0.0), ellipticity(0.0) {}
231 
232 private:
233  virtual PTR(AlgorithmControl) _clone() const;
234  virtual PTR(Algorithm) _makeAlgorithm(
235  afw::table::Schema & schema, PTR(daf::base::PropertyList) const & metadata
236  ) const;
237 };
238 
239 }}}// namespace lsst::meas::algorithms
240 
241 #endif // !LSST_MEAS_ALGORITHMS_FLUXCONTROL_H
Defines the fields and offsets for a table.
Definition: Schema.h:46
#define PTR(...)
Definition: base.h:41
C++ control object for elliptical aperture fluxes.
Definition: FluxControl.h:134
KeyTuple const & getKeys() const
Return the standard flux keys registered by this algorithm.
Definition: FluxControl.h:58
std::string name
Name of the algorithm.
Definition: Algorithm.h:178
Class for storing ordered metadata with comments.
Definition: PropertyList.h:81
virtual boost::shared_ptr< AlgorithmControl > _clone() const =0
double priority
&quot;Parameter that sets the sort order for algorithms; lower numbers go first. &quot; &quot;Typically, priority=0 for centroids, 1 for shapes, and 2 for fluxes.&quot; ;
Definition: Algorithm.h:184
ApertureFluxControl(std::string const &name="flux.aperture", float const priority=2.0)
Definition: ApertureFlux.cc:56
C++ control object for sinc aperture flux.
Definition: FluxControl.h:221
AlgorithmControl const & getControl() const
Return a clone of the control object used to construct the algorithm.
Definition: Algorithm.h:120
#define LSST_CONTROL_FIELD(NAME, TYPE, DOC)
Definition: config.h:36
boost::shared_ptr< FluxControl > clone() const
Definition: FluxControl.h:75
std::vector< double > radii
&quot;vector of radii for apertures (in pixels)&quot; ;
Definition: FluxControl.h:115
Base class for source measurement algorithms.
Definition: Algorithm.h:106
Base class for measurement algorithm control objects.
Definition: Algorithm.h:168
virtual boost::shared_ptr< Algorithm > _makeAlgorithm(afw::table::Schema &schema, boost::shared_ptr< daf::base::PropertyList > const &metadata) const
KeyArray _keys
Definition: PixelFlags.cc:69
tbl::Schema schema
Definition: CoaddPsf.cc:324
FluxControl(std::string const &name_, double priority=2.0)
Definition: FluxControl.h:86
C++ control object for PSF flux.
Definition: FluxControl.h:204
boost::shared_ptr< FluxAlgorithm > makeAlgorithm(afw::table::Schema &schema, boost::shared_ptr< daf::base::PropertyList > const &metadata=boost::shared_ptr< daf::base::PropertyList >(), AlgorithmMap const &others=AlgorithmMap()) const
Definition: FluxControl.h:77
C++ control object for naive flux.
Definition: FluxControl.h:185
FluxControl const & getControl() const
Return a clone of the control object used to construct the algorithm.
Definition: FluxControl.h:100
tbl::Key< std::string > warpingKernelName
Definition: CoaddPsf.cc:328
FluxAlgorithm(FluxControl const &ctrl, KeyTuple const &keys)
Initialize with a manually-constructed key tuple.
Definition: FluxControl.h:90
C++ control object for peak likelihood flux.
Definition: FluxControl.h:165
virtual boost::shared_ptr< Algorithm > _makeAlgorithm(afw::table::Schema &schema, boost::shared_ptr< daf::base::PropertyList > const &metadata) const
Definition: Algorithm.h:211
C++ control object for aperture flux.
Definition: FluxControl.h:112
std::map< std::string, boost::shared_ptr< Algorithm const > > AlgorithmMap
Definition: Algorithm.h:79
Intermediate base class for algorithms that compute a flux.
Definition: FluxControl.h:44
afw::table::KeyTuple< afw::table::Flux > KeyTuple
Tuple type that holds the keys that define a standard flux algorithm.
Definition: FluxControl.h:52
virtual boost::shared_ptr< AlgorithmControl > _clone() const
KeyTuple< lsst::afw::table::Flux > addFluxFields(lsst::afw::table::Schema &schema, std::string const &filter, std::string const &name, std::string const &doc, std::string const &unit)
Convenience function to setup fields for fluxes.