lsst.jointcal  19.0.0-3-g6513920+6
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, geom::Box2D const &focalPlaneBBox,
61  LOG_LOGGER log, int visitOrder = 7, double errorPedestal = 0)
62  : PhotometryModel(log, errorPedestal), _fittingChips(false), _fittingVisits(false) {
63  _chipVisitMap.reserve(ccdImageList.size());
64  }
65 
71 
73  Eigen::Index assignIndices(std::string const &whatToFit, Eigen::Index firstIndex) override;
74 
76  void offsetParams(Eigen::VectorXd const &delta) override;
77 
79  void freezeErrorTransform() override;
80 
82  void getMappingIndices(CcdImage const &ccdImage, IndexVector &indices) const override;
83 
85  std::size_t getTotalParameters() const override;
86 
88  void computeParameterDerivatives(MeasuredStar const &measuredStar, CcdImage const &ccdImage,
89  Eigen::VectorXd &derivatives) const override;
90 
92  void print(std::ostream &out) const override;
93 
94 protected:
95  PhotometryMappingBase *findMapping(CcdImage const &ccdImage) const override;
96 
97  /* The per-ccdImage transforms, each of which is a composition of a chip and visit transform.
98  * Not all pairs of _visitMap[visit] and _chipMap[chip] are guaranteed to have an entry in
99  * _chipVisitMap (for example, one ccd in one visit might fail to produce a catalog).
100  */
102  MapType _chipVisitMap;
103 
104  // The per-visit transforms that go into _chipVisitMap.
106  VisitMapType _visitMap;
107  // The per-chip transforms that go into _chipVisitMap.
109  ChipMapType _chipMap;
110 
114  template <class ChipTransform, class VisitTransform, class ChipVisitMapping>
115  void initialize(CcdImageList const &ccdImageList, geom::Box2D const &focalPlaneBBox, int visitOrder);
116 
119 
121  struct PrepPhotoCalib {
122  double chipConstant;
125  double visitMean;
126  };
127 
129  PrepPhotoCalib prepPhotoCalib(CcdImage const &ccdImage) const;
130 
131 private:
132  // Which components of the model are we fitting currently?
133  bool _fittingChips;
134  bool _fittingVisits;
135 };
136 
138 public:
139  explicit ConstrainedFluxModel(CcdImageList const &ccdImageList, geom::Box2D const &focalPlaneBBox,
140  int visitOrder = 7, double errorPedestal = 0)
141  : ConstrainedPhotometryModel(ccdImageList, focalPlaneBBox,
142  LOG_GET("jointcal.ConstrainedFluxModel"), visitOrder,
143  errorPedestal) {
144  initialize<FluxTransformSpatiallyInvariant, FluxTransformChebyshev, ChipVisitFluxMapping>(
145  ccdImageList, focalPlaneBBox, visitOrder);
146  }
147 
149  void offsetFittedStar(FittedStar &fittedStar, double delta) const override {
150  fittedStar.getFlux() -= delta;
151  }
152 
154  double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
155 
157  double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override {
158  return fittedStar.getFlux() - refStar.getFlux();
159  };
160 
162  double getRefError(RefStar const &refStar) const override { return refStar.getFluxErr(); }
163 
165  double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
166 
168  double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
169 
171  std::shared_ptr<afw::image::PhotoCalib> toPhotoCalib(CcdImage const &ccdImage) const override;
172 
174  void print(std::ostream &out) const override;
175 
176 protected:
179  return photoCalib->getCalibrationMean();
180  }
181 };
182 
184 public:
185  explicit ConstrainedMagnitudeModel(CcdImageList const &ccdImageList, geom::Box2D const &focalPlaneBBox,
186  int visitOrder = 7, double errorPedestal = 0)
187  : ConstrainedPhotometryModel(ccdImageList, focalPlaneBBox,
188  LOG_GET("jointcal.ConstrainedMagnitudeModel"), visitOrder,
189  errorPedestal) {
191  ChipVisitMagnitudeMapping>(ccdImageList, focalPlaneBBox, visitOrder);
192  }
193 
195  void offsetFittedStar(FittedStar &fittedStar, double delta) const override {
196  fittedStar.getMag() -= delta;
197  }
198 
200  double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
201 
203  double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override {
204  return fittedStar.getMag() - refStar.getMag();
205  };
206 
208  double getRefError(RefStar const &refStar) const override { return refStar.getMagErr(); }
209 
211  double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
212 
214  double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
215 
217  std::shared_ptr<afw::image::PhotoCalib> toPhotoCalib(CcdImage const &ccdImage) const override;
218 
220  void print(std::ostream &out) const override;
221 
222 protected:
225  return utils::nanojanskyToABMagnitude(photoCalib->getCalibrationMean());
226  }
227 };
228 
229 } // namespace jointcal
230 } // namespace lsst
231 
232 #endif // LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
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 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 transform(s) to their position in the fitting matrix and allows interaction with the transfor...
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.
ConstrainedMagnitudeModel(CcdImageList const &ccdImageList, geom::Box2D const &focalPlaneBBox, int visitOrder=7, double errorPedestal=0)
std::map< VisitIdType, std::shared_ptr< PhotometryMapping > > VisitMapType
void offsetFittedStar(FittedStar &fittedStar, double delta) const override
Offset the appropriate flux or magnitude (by -delta).
double getFluxErr() const
Definition: BaseStar.h:100
std::size_t getTotalParameters() const override
Return the total number of parameters in this model.
STL class.
STL class.
nth-order 2d Chebyshev photometry transform, plus the input flux.
double getRefError(RefStar const &refStar) const override
Return the refStar error appropriate for this model (e.g. fluxErr or magErr).
Class for a simple mapping implementing a generic AstrometryTransform.
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:46
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, geom::Box2D const &focalPlaneBBox, int visitOrder)
Initialize the chip, visit, and chipVisit mappings by creating appropriate transforms 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
ConstrainedPhotometryModel(CcdImageList const &ccdImageList, geom::Box2D const &focalPlaneBBox, LOG_LOGGER log, int visitOrder=7, double errorPedestal=0)
Construct a constrained photometry model.
std::unordered_map< CcdImageKey, std::unique_ptr< ChipVisitPhotometryMapping > > MapType
T size(T... args)
double nanojanskyToABMagnitude(double flux)
double getMagErr() const
Definition: BaseStar.h:106
STL class.
void offsetParams(Eigen::VectorXd const &delta) override
Offset the parameters by the provided amounts (by -delta).
std::shared_ptr< afw::geom::TransformPoint2ToPoint2 > pixToFocal
Photometry model with constraints, .
PrepPhotoCalib prepPhotoCalib(CcdImage const &ccdImage) const
Helper for preparing toPhotoCalib()
Photometric offset independent of position, defined as -2.5 * log(flux / fluxMag0).
ConstrainedFluxModel(CcdImageList const &ccdImageList, geom::Box2D const &focalPlaneBBox, int visitOrder=7, double errorPedestal=0)
void print(std::ostream &out) const override
Print a string representation of the contents of this mapping, for debugging.
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
#define LOG_GET(logger)
ConstrainedPhotometryModel & operator=(ConstrainedPhotometryModel const &)=delete
STL class.
The objects which have been measured several times.
Definition: FittedStar.h:61
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, IndexVector &indices) const override
Get how this set of parameters (of length Npar()) map into the "grand" fit.
Eigen::Index assignIndices(std::string const &whatToFit, Eigen::Index firstIndex) override
Assign indices in the full matrix to the parameters being fit in the mappings, starting at firstIndex...
void offsetFittedStar(FittedStar &fittedStar, double delta) const override
Offset the appropriate flux or magnitude (by -delta).
T reserve(T... args)