LSST Applications g180d380827+0f66a164bb,g2079a07aa2+86d27d4dc4,g2305ad1205+7d304bc7a0,g29320951ab+500695df56,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+e42ea45bea,g48712c4677+36a86eeaa5,g487adcacf7+2dd8f347ac,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+c70619cc9d,g5a732f18d5+53520f316c,g5ea96fc03c+341ea1ce94,g64a986408d+f7cd9c7162,g858d7b2824+f7cd9c7162,g8a8a8dda67+585e252eca,g99cad8db69+469ab8c039,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+c92fc63c7e,gbd866b1f37+f7cd9c7162,gc120e1dc64+02c66aa596,gc28159a63d+0e5473021a,gc3e9b769f7+b0068a2d9f,gcf0d15dbbd+e42ea45bea,gdaeeff99f8+f9a426f77a,ge6526c86ff+84383d05b3,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+f7cd9c7162,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
radii.h
Go to the documentation of this file.
1// -*- lsst-c++ -*-
2
3/*
4 * LSST Data Management System
5 * Copyright 2008, 2009, 2010 LSST Corporation.
6 *
7 * This product includes software developed by the
8 * LSST Project (http://www.lsst.org/).
9 *
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the LSST License Statement and
21 * the GNU General Public License along with this program. If not,
22 * see <http://www.lsstcorp.org/LegalNotices/>.
23 */
24
25#ifndef LSST_AFW_GEOM_ELLIPSES_radii_h_INCLUDED
26#define LSST_AFW_GEOM_ELLIPSES_radii_h_INCLUDED
27
28/*
29 * Helper classes defining radii for Separable core.
30 *
31 * Note: do not include directly; use the main ellipse header file.
32 */
33
36#include <complex>
37
38namespace lsst {
39namespace afw {
40namespace geom {
41namespace ellipses {
42
43template <typename Ellipticity_, typename Radius_>
44class Separable;
45
46class DeterminantRadius;
47class TraceRadius;
48class LogDeterminantRadius;
49class LogTraceRadius;
50
57class DeterminantRadius final {
58public:
59 void normalize() {
60 if (_value < 0)
62 "Ellipse radius cannot be negative.");
63 }
64
65 static std::string getName() { return "DeterminantRadius"; }
66
67 explicit DeterminantRadius(double value = 1.0) : _value(value) {}
68
69 explicit DeterminantRadius(LogDeterminantRadius const &other);
70
73 ~DeterminantRadius() = default;
74
75 operator double const &() const { return _value; }
76
77 operator double &() { return _value; }
78
80 _value = value;
81 return *this;
82 }
83
87
92
93private:
94 template <typename T1, typename T2>
95 friend class Separable;
96
97 void assignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
98
99 BaseCore::Jacobian dAssignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
100
101 void assignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy, double &ixy) const;
102
103 BaseCore::Jacobian dAssignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy,
104 double &ixy) const;
105
106 double _value;
107};
108
114class TraceRadius final {
115public:
116 void normalize() {
117 if (_value < 0)
119 "Ellipse radius cannot be negative.");
120 }
121
122 static std::string getName() { return "TraceRadius"; }
123
124 explicit TraceRadius(double value = 1.0) : _value(value) {}
125
126 explicit TraceRadius(LogTraceRadius const &other);
127
128 TraceRadius(TraceRadius const &) = default;
130 ~TraceRadius() = default;
131
132 operator double const &() const { return _value; }
133
134 operator double &() { return _value; }
135
136 TraceRadius &operator=(double value) {
137 _value = value;
138 return *this;
139 }
140
141 TraceRadius &operator=(LogTraceRadius const &other);
142 TraceRadius &operator=(TraceRadius const &) = default;
144
149
150private:
151 template <typename T1, typename T2>
152 friend class Separable;
153
154 void assignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
155
156 BaseCore::Jacobian dAssignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
157
158 void assignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy, double &ixy) const;
159
160 BaseCore::Jacobian dAssignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy,
161 double &ixy) const;
162
163 double _value;
164};
165
170public:
171 void normalize() {}
172
173 static std::string getName() { return "LogDeterminantRadius"; }
174
175 explicit LogDeterminantRadius(double value = 0.0) : _value(value) {}
176
177 explicit LogDeterminantRadius(DeterminantRadius const &other);
178
182
183 operator double const &() const { return _value; }
184
185 operator double &() { return _value; }
186
188 _value = value;
189 return *this;
190 }
191
195
200
201private:
202 template <typename T1, typename T2>
203 friend class Separable;
204
205 void assignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
206
207 BaseCore::Jacobian dAssignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
208
209 void assignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy, double &ixy) const;
210
211 BaseCore::Jacobian dAssignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy,
212 double &ixy) const;
213
214 double _value;
215};
216
220class LogTraceRadius final {
221public:
222 void normalize() {}
223
224 static std::string getName() { return "LogTraceRadius"; }
225
226 explicit LogTraceRadius(double value = 0.0) : _value(value) {}
227
228 explicit LogTraceRadius(TraceRadius const &other);
229
230 LogTraceRadius(LogTraceRadius const &) = default;
232 ~LogTraceRadius() = default;
233
234 operator double const &() const { return _value; }
235
236 operator double &() { return _value; }
237
238 LogTraceRadius &operator=(double value) {
239 _value = value;
240 return *this;
241 }
242
243 LogTraceRadius &operator=(TraceRadius const &value);
246
251
252private:
253 template <typename T1, typename T2>
254 friend class Separable;
255
256 void assignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
257
258 BaseCore::Jacobian dAssignFromQuadrupole(double ixx, double iyy, double ixy, Distortion &distortion);
259
260 void assignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy, double &ixy) const;
261
262 BaseCore::Jacobian dAssignToQuadrupole(Distortion const &distortion, double &ixx, double &iyy,
263 double &ixy) const;
264
265 double _value;
266};
267
268inline DeterminantRadius::DeterminantRadius(LogDeterminantRadius const &other) : _value(std::exp(other)) {}
269inline TraceRadius::TraceRadius(LogTraceRadius const &other) : _value(std::exp(other)) {}
270inline LogDeterminantRadius::LogDeterminantRadius(DeterminantRadius const &other) : _value(std::log(other)) {}
271inline LogTraceRadius::LogTraceRadius(TraceRadius const &other) : _value(std::log(other)) {}
272
274 _value = std::exp(other);
275 return *this;
276}
277
279 _value = std::exp(other);
280 return *this;
281}
282
284 _value = std::log(other);
285 return *this;
286}
287
289 _value = std::log(other);
290 return *this;
291}
292} // namespace ellipses
293} // namespace geom
294} // namespace afw
295} // namespace lsst
296
297#endif // !LSST_AFW_GEOM_ELLIPSES_radii_h_INCLUDED
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition BaseCore.h:64
The radius defined as the 4th root of the determinant of the quadrupole matrix.
Definition radii.h:57
DeterminantRadius(DeterminantRadius &&)=default
DeterminantRadius & operator=(DeterminantRadius const &)=default
DeterminantRadius & operator=(double value)
Definition radii.h:79
DeterminantRadius(DeterminantRadius const &)=default
DeterminantRadius & operator=(LogTraceRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
DeterminantRadius & operator=(TraceRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
DeterminantRadius & operator=(DeterminantRadius &&)=default
A complex ellipticity with magnitude .
Definition Distortion.h:44
The natural logarithm of the DeterminantRadius.
Definition radii.h:169
LogDeterminantRadius & operator=(LogTraceRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
LogDeterminantRadius & operator=(TraceRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
LogDeterminantRadius & operator=(double value)
Definition radii.h:187
LogDeterminantRadius(LogDeterminantRadius &&)=default
LogDeterminantRadius & operator=(LogDeterminantRadius &&)=default
LogDeterminantRadius & operator=(LogDeterminantRadius const &)=default
LogDeterminantRadius(LogDeterminantRadius const &)=default
The natural logarithm of the TraceRadius.
Definition radii.h:220
LogTraceRadius(LogTraceRadius &&)=default
LogTraceRadius & operator=(LogTraceRadius const &)=default
LogTraceRadius(LogTraceRadius const &)=default
LogTraceRadius & operator=(double value)
Definition radii.h:238
LogTraceRadius & operator=(LogTraceRadius &&)=default
LogTraceRadius & operator=(DeterminantRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
LogTraceRadius & operator=(LogDeterminantRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
An ellipse core with a complex ellipticity and radius parameterization.
Definition Separable.h:50
The radius defined as .
Definition radii.h:114
TraceRadius(TraceRadius const &)=default
TraceRadius(TraceRadius &&)=default
TraceRadius & operator=(TraceRadius const &)=default
TraceRadius & operator=(LogDeterminantRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
TraceRadius & operator=(TraceRadius &&)=default
TraceRadius & operator=(DeterminantRadius const &)=delete
Conversion between trace and determinant radii requires ellipticity.
static std::string getName()
Definition radii.h:122
TraceRadius & operator=(double value)
Definition radii.h:136
Reports invalid arguments.
Definition Runtime.h:66
T exp(T... args)
T log(T... args)
STL namespace.