LSST Applications g180d380827+6621f76652,g2079a07aa2+86d27d4dc4,g2305ad1205+f5a9e323a1,g2bbee38e9b+c6a8a0fb72,g337abbeb29+c6a8a0fb72,g33d1c0ed96+c6a8a0fb72,g3a166c0a6a+c6a8a0fb72,g3ddfee87b4+9a10e1fe7b,g48712c4677+c9a099281a,g487adcacf7+f2e03ea30b,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+aead732c78,g64a986408d+eddffb812c,g858d7b2824+eddffb812c,g864b0138d7+aa38e45daa,g974c55ee3d+f37bf00e57,g99cad8db69+119519a52d,g9c22b2923f+e2510deafe,g9ddcbc5298+9a081db1e4,ga1e77700b3+03d07e1c1f,gb0e22166c9+60f28cb32d,gb23b769143+eddffb812c,gba4ed39666+c2a2e4ac27,gbb8dafda3b+27317ec8e9,gbd998247f1+585e252eca,gc120e1dc64+5817c176a8,gc28159a63d+c6a8a0fb72,gc3e9b769f7+6707aea8b4,gcf0d15dbbd+9a10e1fe7b,gdaeeff99f8+f9a426f77a,ge6526c86ff+6a2e01d432,ge79ae78c31+c6a8a0fb72,gee10cc3b42+585e252eca,gff1a9f87cc+eddffb812c,v27.0.0.rc1
LSST Data Management Base Package
Loading...
Searching...
No Matches
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
33namespace lsst {
34namespace jointcal {
35
43public:
44 SimpleAstrometryMapping(AstrometryTransform const &astrometryTransform, bool toBeFit = true)
46 transform(astrometryTransform.clone()),
47 errorProp(transform),
49
55
56 virtual void freezeErrorTransform() {
57 // from there on, updating the transform does not change the errors.
58 errorProp = transform->clone();
59 }
60
62 std::size_t getNpar() const override {
63 if (toBeFit)
64 return transform->getNpar();
65 else
66 return 0;
67 }
68
70 void getMappingIndices(IndexVector &indices) const override;
71
73 void transformPosAndErrors(FatPoint const &where, FatPoint &outPoint) const override;
74
76 void positionDerivative(Point const &where, Eigen::Matrix2d &derivative, double epsilon) const override;
77
79 void offsetParams(Eigen::VectorXd const &delta) override {
80 if (toBeFit) transform->offsetParams(delta);
81 }
82
84 Eigen::Index getIndex() const { return index; }
85
87 void setIndex(Eigen::Index i) { index = i; }
88
90 void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint,
91 Eigen::MatrixX2d &H) const override;
92
94 virtual AstrometryTransform const &getTransform() const { return *transform; }
95
97 bool getToBeFit() const { return toBeFit; }
99 void setToBeFit(bool value) { toBeFit = value; }
100
101 void print(std::ostream &out) const override;
102
103protected:
104 // Whether this Mapping is fit as part of a Model.
106 Eigen::Index index{};
107 /* inheritance may also work. Perhaps with some trouble because
108 some routines in Mapping and AstrometryTransform have the same name */
110
112 /* to avoid allocation at every call of positionDerivative.
113 use a pointer for constness */
115};
116
119public:
121
122 // ! contructor.
126 AstrometryTransformPolynomial const &transform);
127
133
134 /* The SimpleAstrometryMapping version does not account for the
135 _centerAndScale transform */
136
137 void positionDerivative(Point const &where, Eigen::Matrix2d &derivative, double epsilon) const override;
138
140 /* We should put the computation of error propagation and
141 parameter derivatives into the same AstrometryTransform routine because
142 it could be significantly faster */
143 void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint,
144 Eigen::MatrixX2d &H) const override;
145
147 void transformPosAndErrors(FatPoint const &where, FatPoint &outPoint) const override;
148
150 AstrometryTransform const &getTransform() const override;
151
152private:
153 /* to better condition the 2nd derivative matrix, the
154 transformed coordinates are mapped (roughly) on [-1,1].
155 We need both the transform and its derivative. */
156 AstrometryTransformLinear _centerAndScale;
157 Eigen::Matrix2d preDer;
158
159 /* Where we store the combination. */
160 mutable AstrometryTransformPolynomial actualResult;
161};
162
163#ifdef STORAGE
166class SimpleIdentityMapping : public SimpleAstrometryMapping<AstrometryTransformIdentity> {
167public:
169 virtual void computeTransformAndDerivatives(FatPoint const &where, FatPoint &outPoint,
170 Eigen::MatrixX2d &H) const {
171 outPoint = where;
172 }
173};
174#endif
175} // namespace jointcal
176} // namespace lsst
177
178#endif // LSST_JOINTCAL_SIMPLE_ASTROMETRY_MAPPING_H
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
Class for a simple mapping implementing a generic AstrometryTransform.
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)