lsst.meas.base  13.0-33-gb1a1d47+3
CircularApertureFlux.cc
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 /*
3  * LSST Data Management System
4  * Copyright 2008-2014 LSST Corporation.
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 #include "lsst/afw/table/Source.h"
28 
29 namespace lsst { namespace meas { namespace base {
30 
32  Control const & ctrl,
33  std::string const & name,
34  afw::table::Schema & schema,
35  daf::base::PropertySet & metadata
36 ) : ApertureFluxAlgorithm(ctrl, name, schema, metadata)
37 {
38  for (std::size_t i = 0; i < ctrl.radii.size(); ++i) {
39  if (ctrl.radii[i] > ctrl.maxSincRadius) break;
40  SincCoeffs<float>::cache(0.0, ctrl.radii[i]);
41  }
42 }
43 
45  afw::table::SourceRecord & measRecord,
46  afw::image::Exposure<float> const & exposure
47 ) const {
48  afw::geom::ellipses::Ellipse ellipse(afw::geom::ellipses::Axes(1.0, 1.0, 0.0));
49  PTR(afw::geom::ellipses::Axes) axes
50  = std::static_pointer_cast<afw::geom::ellipses::Axes>(ellipse.getCorePtr());
51  for (std::size_t i = 0; i < _ctrl.radii.size(); ++i) {
52  // Each call to _centroidExtractor within this loop goes through exactly the same error-checking
53  // logic and returns the same result, but it's not expensive logic, so we just call it repeatedly
54  // instead of coming up with a new interface that would allow us to move it outside the loop.
55  ellipse.setCenter(_centroidExtractor(measRecord, getFlagHandler(i)));
56  axes->setA(_ctrl.radii[i]);
57  axes->setB(_ctrl.radii[i]);
58  ApertureFluxAlgorithm::Result result = computeFlux(exposure.getMaskedImage(), ellipse, _ctrl);
59  copyResultToRecord(result, measRecord, i);
60  }
61 }
62 
63 }}} // namespace lsst::meas::base
void copyResultToRecord(Result const &result, afw::table::SourceRecord &record, int index) const
Return the flag definitions which apply to aperture flux measurements.
Configuration object for multiple-aperture flux algorithms.
Definition: ApertureFlux.h:43
Definition: mainpage.dox:3
Base class for multiple-aperture photometry algorithms.
Definition: ApertureFlux.h:83
static Result computeFlux(afw::image::Image< T > const &image, afw::geom::ellipses::Ellipse const &ellipse, Control const &ctrl=Control())
Compute the flux (and optionally, uncertanties) within an aperture using the algorithm determined by ...
double maxSincRadius
"Maximum radius (in pixels) for which the sinc algorithm should be used instead of the " "faster naiv...
Definition: ApertureFlux.h:57
FlagHandler const & getFlagHandler(int index) const
Definition: ApertureFlux.h:228
static void cache(float rInner, float rOuter)
Cache the coefficients for a particular aperture.
Definition: SincCoeffs.cc:515
virtual void measure(afw::table::SourceRecord &record, afw::image::Exposure< float > const &exposure) const
Measure the configured apertures on the given image.
CircularApertureFluxAlgorithm(Control const &ctrl, std::string const &name, afw::table::Schema &schema, daf::base::PropertySet &metadata)
std::vector< double > radii
"Radius (in pixels) of apertures." ;
Definition: ApertureFlux.h:51
SafeCentroidExtractor _centroidExtractor
Definition: ApertureFlux.h:231
A Result struct for running an aperture flux algorithm with a single radius.
Definition: ApertureFlux.h:251