lsst.jointcal  16.0-18-gdf247dd+6
ConstrainedPhotometryModel.h
Go to the documentation of this file.
1 // -*- LSST-C++ -*-
2 #ifndef LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
3 #define LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
4 
5 #include <map>
6 
10 
11 namespace lsst {
12 namespace jointcal {
13 
26 public:
35  explicit ConstrainedPhotometryModel(CcdImageList const &ccdImageList,
36  afw::geom::Box2D const &focalPlaneBBox, int visitOrder = 7,
37  double errorPedestal_ = 0)
38  : PhotometryModel(errorPedestal_), _fittingChips(false), _fittingVisits(false) {
39  _chipVisitMap.reserve(ccdImageList.size());
40  }
41 
47 
49  unsigned assignIndices(std::string const &whatToFit, unsigned firstIndex) override;
50 
52  void offsetParams(Eigen::VectorXd const &delta) override;
53 
55  void freezeErrorTransform() override;
56 
58  void getMappingIndices(CcdImage const &ccdImage, std::vector<unsigned> &indices) const override;
59 
61  int getTotalParameters() const override;
62 
64  void computeParameterDerivatives(MeasuredStar const &measuredStar, CcdImage const &ccdImage,
65  Eigen::VectorXd &derivatives) const override;
66 
68  void dump(std::ostream &stream = std::cout) const override;
69 
70 protected:
71  PhotometryMappingBase *findMapping(CcdImage const &ccdImage) const override;
72 
73  /* The per-ccdImage transforms, each of which is a composition of a chip and visit transform.
74  * Not all pairs of _visitMap[visit] and _chipMap[chip] are guaranteed to have an entry in
75  * _chipVisitMap (for example, one ccd in one visit might fail to produce a catalog).
76  */
78  MapType _chipVisitMap;
79 
80  // The per-visit transforms that go into _chipVisitMap.
82  VisitMapType _visitMap;
83  // The per-chip transforms that go into _chipVisitMap.
85  ChipMapType _chipMap;
86 
90  template <class ChipTransfo, class VisitTransfo, class ChipVisitMapping>
91  void initialize(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, int visitOrder);
92 
95 
96 private:
97  // Which components of the model are we fitting currently?
98  bool _fittingChips;
99  bool _fittingVisits;
100 };
101 
103 public:
104  explicit ConstrainedFluxModel(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox,
105  int visitOrder = 7, double errorPedestal_ = 0)
106  : ConstrainedPhotometryModel(ccdImageList, focalPlaneBBox, visitOrder, errorPedestal_) {
107  initialize<FluxTransfoSpatiallyInvariant, FluxTransfoChebyshev, ChipVisitFluxMapping>(
108  ccdImageList, focalPlaneBBox, visitOrder);
109  }
110 
112  void offsetFittedStar(FittedStar &fittedStar, double delta) const override {
113  fittedStar.getFlux() -= delta;
114  }
115 
117  double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
118 
120  double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override {
121  return fittedStar.getFlux() - refStar.getFlux();
122  };
123 
125  double getRefError(RefStar const &refStar) const override { return refStar.getFluxErr(); }
126 
128  double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
129 
131  double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
132 
134  std::shared_ptr<afw::image::PhotoCalib> toPhotoCalib(CcdImage const &ccdImage) const override;
135 
136 protected:
139  return photoCalib->getCalibrationMean();
140  }
141 };
142 
144 public:
145  explicit ConstrainedMagnitudeModel(CcdImageList const &ccdImageList,
146  afw::geom::Box2D const &focalPlaneBBox, int visitOrder = 7,
147  double errorPedestal_ = 0)
148  : ConstrainedPhotometryModel(ccdImageList, focalPlaneBBox, visitOrder, errorPedestal_) {
149  initialize<MagnitudeTransfoSpatiallyInvariant, MagnitudeTransfoChebyshev, ChipVisitMagnitudeMapping>(
150  ccdImageList, focalPlaneBBox, visitOrder);
151  }
152 
154  void offsetFittedStar(FittedStar &fittedStar, double delta) const override {
155  fittedStar.getMag() -= delta;
156  }
157 
159  double computeResidual(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
160 
162  double computeRefResidual(FittedStar const &fittedStar, RefStar const &refStar) const override {
163  return fittedStar.getMag() - refStar.getMag();
164  };
165 
167  double getRefError(RefStar const &refStar) const override { return refStar.getMagErr(); }
168 
170  double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
171 
173  double transformError(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override;
174 
176  std::shared_ptr<afw::image::PhotoCalib> toPhotoCalib(CcdImage const &ccdImage) const override;
177 
178 protected:
181  return magFromFlux(photoCalib->getCalibrationMean());
182  }
183 };
184 
185 } // namespace jointcal
186 } // namespace lsst
187 
188 #endif // LSST_JOINTCAL_CONSTRAINED_PHOTOMETRY_MODEL_H
Objects used as position anchors, typically USNO stars.
Definition: RefStar.h:16
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:44
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:80
objects measured on actual images.
Definition: MeasuredStar.h:19
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:73
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:83
void offsetParams(Eigen::VectorXd const &delta) override
Offset the parameters by the provided amounts (by -delta).
ConstrainedPhotometryModel(CcdImageList const &ccdImageList, afw::geom::Box2D const &focalPlaneBBox, int visitOrder=7, double errorPedestal_=0)
Construct a constrained photometry model.
Photometry model with constraints, .
double getFlux(size_t filter) const
reference flux in a given filter
Definition: RefStar.h:42
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:41
ConstrainedPhotometryModel & operator=(ConstrainedPhotometryModel const &)=delete
STL class.
The objects which have been measured several times.
Definition: FittedStar.h:37
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)