LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
SimpleAstrometryMapping.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_SIMPLE_ASTROMETRY_MAPPING_H
26#define LSST_JOINTCAL_SIMPLE_ASTROMETRY_MAPPING_H
27
28#include <memory> // for unique_ptr
29
32
34
38namespace lsst {
39namespace jointcal {
40
42public:
43 SimpleAstrometryMapping(AstrometryTransform const &astrometryTransform, bool toBeFit = true)
45 transform(astrometryTransform.clone()),
48
54
55 virtual void freezeErrorTransform() {
56 // from there on, updating the transform does not change the errors.
57 errorProp = transform->clone();
58 }
59
61 std::size_t getNpar() const override {
62 if (toBeFit)
63 return transform->getNpar();
64 else
65 return 0;
66 }
67
69 void getMappingIndices(IndexVector &indices) const override;
70
72 void transformPosAndErrors(FatPoint const &where, FatPoint &outPoint) const override;
73
75 void positionDerivative(Point const &where, Eigen::Matrix2d &derivative, double epsilon) const override;
76
78 void offsetParams(Eigen::VectorXd const &delta) override {
79 if (toBeFit) transform->offsetParams(delta);
80 }
81
83 Eigen::Index getIndex() const { return index; }
84
86 void setIndex(Eigen::Index i) { index = i; }
87
89 void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint,
90 Eigen::MatrixX2d &H) const override;
91
93 virtual AstrometryTransform const &getTransform() const { return *transform; }
94
96 bool getToBeFit() const { return toBeFit; }
98 void setToBeFit(bool value) { toBeFit = value; }
99
100 void print(std::ostream &out) const override;
101
102protected:
103 // Whether this Mapping is fit as part of a Model.
105 Eigen::Index index{};
106 /* inheritance may also work. Perhaps with some trouble because
107 some routines in Mapping and AstrometryTransform have the same name */
109
111 /* to avoid allocation at every call of positionDerivative.
112 use a pointer for constness */
114};
115
118public:
120
121 // ! contructor.
126
132
133 /* The SimpleAstrometryMapping version does not account for the
134 _centerAndScale transform */
135
136 void positionDerivative(Point const &where, Eigen::Matrix2d &derivative, double epsilon) const override;
137
139 /* We should put the computation of error propagation and
140 parameter derivatives into the same AstrometryTransform routine because
141 it could be significantly faster */
142 void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint,
143 Eigen::MatrixX2d &H) const override;
144
146 void transformPosAndErrors(FatPoint const &where, FatPoint &outPoint) const override;
147
149 AstrometryTransform const &getTransform() const override;
150
151private:
152 /* to better condition the 2nd derivative matrix, the
153 transformed coordinates are mapped (roughly) on [-1,1].
154 We need both the transform and its derivative. */
155 AstrometryTransformLinear _centerAndScale;
156 Eigen::Matrix2d preDer;
157
158 /* Where we store the combination. */
159 mutable AstrometryTransformPolynomial actualResult;
160};
161
162#ifdef STORAGE
165class SimpleIdentityMapping : public SimpleAstrometryMapping<AstrometryTransformIdentity> {
166public:
168 virtual void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint,
169 Eigen::MatrixX2d &H) const {
170 outPoint = where;
171 }
172};
173#endif
174} // namespace jointcal
175} // namespace lsst
176
177#endif // LSST_JOINTCAL_SIMPLE_ASTROMETRY_MAPPING_H
Eigen::Matrix< double, Eigen::Dynamic, 2 > MatrixX2d
Definition: Eigenstuff.h:33
virtual class needed in the abstraction of the distortion model
a virtual (interface) class for geometric transformations.
implements the linear transformations (6 real coefficients).
A Point with uncertainties.
Definition: FatPoint.h:34
A point in a plane.
Definition: Point.h:37
std::shared_ptr< AstrometryTransform > errorProp
bool getToBeFit() const
Get whether this mapping is fit as part of a Model.
SimpleAstrometryMapping & operator=(SimpleAstrometryMapping const &)=delete
void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint, Eigen::MatrixX2d &H) const override
Actually applies the AstrometryMapping and evaluates the derivatives w.r.t the fitted parameters.
void print(std::ostream &out) const override
Print a string representation of the contents of this mapping, for debugging.
virtual AstrometryTransform const & getTransform() const
Access to the (fitted) transform.
std::size_t getNpar() const override
Number of parameters in total.
void setIndex(Eigen::Index i)
Set the index of this mapping in the grand fit.
std::shared_ptr< AstrometryTransform > transform
SimpleAstrometryMapping(SimpleAstrometryMapping &&)=delete
void getMappingIndices(IndexVector &indices) const override
Sets how this set of parameters (of length Npar()) map into the "grand" fit Expects that indices has ...
void setToBeFit(bool value)
Set whether this Mapping is to be fit as part of a Model.
std::unique_ptr< AstrometryTransformLinear > lin
SimpleAstrometryMapping & operator=(SimpleAstrometryMapping &&)=delete
SimpleAstrometryMapping(AstrometryTransform const &astrometryTransform, bool toBeFit=true)
void transformPosAndErrors(FatPoint const &where, FatPoint &outPoint) const override
The same as above but without the parameter derivatives (used to evaluate chi^2)
Eigen::Index getIndex() const
position of the parameters within the grand fitting scheme
void positionDerivative(Point const &where, Eigen::Matrix2d &derivative, double epsilon) const override
The derivative w.r.t. position.
void offsetParams(Eigen::VectorXd const &delta) override
Remember the error scale and freeze it.
SimpleAstrometryMapping(SimpleAstrometryMapping const &)=delete
No copy or move: there is only ever one instance of a given mapping (i.e.. per ccd+visit)
Mapping implementation for a polynomial transformation.
SimplePolyMapping(SimplePolyMapping const &)=delete
No copy or move: there is only ever one instance of a given mapping (i.e.. per ccd+visit)
SimplePolyMapping & operator=(SimplePolyMapping &&)=delete
SimplePolyMapping(SimplePolyMapping &&)=delete
void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint, Eigen::MatrixX2d &H) const override
Calls the transforms and implements the centering and scaling of coordinates.
void positionDerivative(Point const &where, Eigen::Matrix2d &derivative, double epsilon) const override
The derivative w.r.t. position.
SimplePolyMapping(AstrometryTransformLinear CenterAndScale, AstrometryTransformPolynomial const &transform)
The transformation will be initialized to transform, so that the effective transformation reads trans...
AstrometryTransform const & getTransform() const override
Access to the (fitted) transform.
SimplePolyMapping & operator=(SimplePolyMapping const &)=delete
void transformPosAndErrors(FatPoint const &where, FatPoint &outPoint) const override
The same as above but without the parameter derivatives (used to evaluate chi^2)
A base class for image defects.