lsst.jointcal  16.0-23-gcb65559+1
ConstrainedPhotometryModel.h
Go to the documentation of this file.
1 // -*- LSST-C++ -*-
2 /*
3  * This file is part of jointcal.
4  *
5  * Developed for the LSST Data Management System.
6  * This product includes software developed by the LSST Project
7  * (https://www.lsst.org).
8  * See the COPYRIGHT file at the top-level directory of this distribution
9  * for details of code ownership.
10  *
11  * This program is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program. If not, see <https://www.gnu.org/licenses/>.
23  */
24 
25 #ifndef LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
26 #define LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
27 
28 #include <map>
29 
30 #include "lsst/jointcal/CcdImage.h"
33 
34 namespace lsst {
35 namespace jointcal {
36 
49 public:
60  explicit ConstrainedPhotometryModel(CcdImageList const &ccdImageList,
61  afw::geom::Box2D const &focalPlaneBBox, LOG_LOGGER log,
62  int visitOrder = 7, double errorPedestal_ = 0)
63  : PhotometryModel(log, errorPedestal_), _fittingChips(false), _fittingVisits(false) {
64  _chipVisitMap.reserve(ccdImageList.size());
65  }
66 
72 
74  unsigned assignIndices(std::string const &whatToFit, unsigned firstIndex) override;
75 
77  void offsetParams(Eigen::VectorXd const &delta) override;
78 
80  void freezeErrorTransform() override;
81 
83  void getMappingIndices(CcdImage const &ccdImage, std::vector<unsigned> &indices) const override;
84 
86  int getTotalParameters() const override;
87 
89  void computeParameterDerivatives(MeasuredStar const &measuredStar, CcdImage const &ccdImage,
90  Eigen::VectorXd &derivatives) const override;
91 
93  void dump(std::ostream &stream = std::cout) const override;
94 
95 protected:
96  PhotometryMappingBase *findMapping(CcdImage const &ccdImage) const override;
97 
98  /* The per-ccdImage transforms, each of which is a composition of a chip and visit transform.
99  * Not all pairs of _visitMap[visit] and _chipMap[chip] are guaranteed to have an entry in
100  * _chipVisitMap (for example, one ccd in one visit might fail to produce a catalog).
101  */
103  MapType _chipVisitMap;
104 
105  // The per-visit transforms that go into _chipVisitMap.
107  VisitMapType _visitMap;
108  // The per-chip transforms that go into _chipVisitMap.
110  ChipMapType _chipMap;
111 
115  template <class ChipTransfo, class VisitTransfo, class ChipVisitMapping>
116  void initialize(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, int visitOrder);
117 
120 
121 private:
122  // Which components of the model are we fitting currently?
123  bool _fittingChips;
124  bool _fittingVisits;
125 };
126 
128 public:
129  explicit ConstrainedFluxModel(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox,
130  int visitOrder = 7, double errorPedestal_ = 0)
131  : ConstrainedPhotometryModel(ccdImageList, focalPlaneBBox,
132  LOG_GET("jointcal.ConstrainedFluxModel"), visitOrder,
133  errorPedestal_) {
134  initialize<FluxTransfoSpatiallyInvariant, FluxTransfoChebyshev, ChipVisitFluxMapping>(
135  ccdImageList, focalPlaneBBox, visitOrder);
136  }
137 
139  void offsetFittedStar(FittedStar &fittedStar, double delta) const override {
140  fittedStar.getFlux() -= delta;
141  }
142 
144  double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
145 
147  double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override {
148  return fittedStar.getFlux() - refStar.getFlux();
149  };
150 
152  double getRefError(RefStar const &refStar) const override { return refStar.getFluxErr(); }
153 
155  double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
156 
158  double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
159 
161  std::shared_ptr<afw::image::PhotoCalib> toPhotoCalib(CcdImage const &ccdImage) const override;
162 
163 protected:
166  return photoCalib->getCalibrationMean();
167  }
168 };
169 
171 public:
172  explicit ConstrainedMagnitudeModel(CcdImageList const &ccdImageList,
173  afw::geom::Box2D const &focalPlaneBBox, int visitOrder = 7,
174  double errorPedestal_ = 0)
175  : ConstrainedPhotometryModel(ccdImageList, focalPlaneBBox,
176  LOG_GET("jointcal.ConstrainedMagnitudeModel"), visitOrder,
177  errorPedestal_) {
178  initialize<MagnitudeTransfoSpatiallyInvariant, MagnitudeTransfoChebyshev, ChipVisitMagnitudeMapping>(
179  ccdImageList, focalPlaneBBox, visitOrder);
180  }
181 
183  void offsetFittedStar(FittedStar &fittedStar, double delta) const override {
184  fittedStar.getMag() -= delta;
185  }
186 
188  double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
189 
191  double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override {
192  return fittedStar.getMag() - refStar.getMag();
193  };
194 
196  double getRefError(RefStar const &refStar) const override { return refStar.getMagErr(); }
197 
199  double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
200 
202  double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
203 
205  std::shared_ptr<afw::image::PhotoCalib> toPhotoCalib(CcdImage const &ccdImage) const override;
206 
207 protected:
210  return magFromFlux(photoCalib->getCalibrationMean());
211  }
212 };
213 
214 } // namespace jointcal
215 } // namespace lsst
216 
217 #endif // LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
ConstrainedPhotometryModel(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, LOG_LOGGER log, int visitOrder=7, double errorPedestal_=0)
Construct a constrained photometry model.
Objects used as position anchors, typically USNO stars.
Definition: RefStar.h:39
virtual double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const =0
Return the on-sky transformed flux uncertainty for measuredStar on ccdImage.
double getFluxErr(size_t filter) const
reference fluxErr in a given filter
Definition: RefStar.h:67
double getRefError(RefStar const &refStar) const override
Return the refStar error appropriate for this model (e.g. fluxErr or magErr).
virtual double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const =0
Compute the residual between the model applied to a star and its associated fittedStar.
Relates transfo(s) to their position in the fitting matrix and allows interaction with the transfo(s)...
double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override
Return the fittedStar - refStar residual appropriate for this model (e.g. flux - flux or mag - mag)...
virtual std::shared_ptr< afw::image::PhotoCalib > toPhotoCalib(CcdImage const &ccdImage) const =0
Return the mapping of ccdImage represented as a PhotoCalib.
double initialChipCalibration(std::shared_ptr< afw::image::PhotoCalib const > photoCalib) override
Return the initial calibration to use from this photoCalib.
std::map< VisitIdType, std::shared_ptr< PhotometryMapping > > VisitMapType
void offsetFittedStar(FittedStar &fittedStar, double delta) const override
Offset the appropriate flux or magnitude (by -delta).
STL class.
STL class.
unsigned assignIndices(std::string const &whatToFit, unsigned firstIndex) override
Assign indices in the full matrix to the parameters being fit in the mappings, starting at firstIndex...
int getTotalParameters() const override
Return the total number of parameters in this model.
double getRefError(RefStar const &refStar) const override
Return the refStar error appropriate for this model (e.g. fluxErr or magErr).
ConstrainedMagnitudeModel(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, int visitOrder=7, double errorPedestal_=0)
Class for a simple mapping implementing a generic Gtransfo.
PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const override
Return a pointer to the mapping associated with this ccdImage.
double getMag() const
Definition: BaseStar.h:103
objects measured on actual images.
Definition: MeasuredStar.h:42
double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override
Return the fittedStar - refStar residual appropriate for this model (e.g. flux - flux or mag - mag)...
void initialize(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, int visitOrder)
Initialize the chip, visit, and chipVisit mappings by creating appropriate transfos and mappings...
void computeParameterDerivatives(MeasuredStar const &measuredStar, CcdImage const &ccdImage, Eigen::VectorXd &derivatives) const override
Compute the parametric derivatives of this model.
std::map< CcdIdType, std::shared_ptr< PhotometryMapping > > ChipMapType
double getFlux() const
Definition: BaseStar.h:96
std::unordered_map< CcdImageKey, std::unique_ptr< ChipVisitPhotometryMapping > > MapType
ConstrainedFluxModel(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, int visitOrder=7, double errorPedestal_=0)
T size(T... args)
void dump(std::ostream &stream=std::cout) const override
Dump the contents of the transfos, for debugging.
double getMagErr() const
Definition: BaseStar.h:106
void offsetParams(Eigen::VectorXd const &delta) override
Offset the parameters by the provided amounts (by -delta).
Photometry model with constraints, .
double getFlux(size_t filter) const
reference flux in a given filter
Definition: RefStar.h:65
virtual double initialChipCalibration(std::shared_ptr< afw::image::PhotoCalib const > photoCalib)=0
Return the initial calibration to use from this photoCalib.
Handler of an actual image from a single CCD.
Definition: CcdImage.h:64
ConstrainedPhotometryModel & operator=(ConstrainedPhotometryModel const &)=delete
STL class.
#define LOG_GET(logger)
The objects which have been measured several times.
Definition: FittedStar.h:60
double initialChipCalibration(std::shared_ptr< afw::image::PhotoCalib const > photoCalib) override
Return the initial calibration to use from this photoCalib.
void freezeErrorTransform() override
Once this routine has been called, the error transform is not modified by offsetParams().
virtual double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const =0
Return the on-sky transformed flux for measuredStar on ccdImage.
void getMappingIndices(CcdImage const &ccdImage, std::vector< unsigned > &indices) const override
Get how this set of parameters (of length Npar()) map into the "grand" fit.
void offsetFittedStar(FittedStar &fittedStar, double delta) const override
Offset the appropriate flux or magnitude (by -delta).
T reserve(T... args)