LSST Applications 26.0.0,g0265f82a02+6660c170cc,g07994bdeae+30b05a742e,g0a0026dc87+17526d298f,g0a60f58ba1+17526d298f,g0e4bf8285c+96dd2c2ea9,g0ecae5effc+c266a536c8,g1e7d6db67d+6f7cb1f4bb,g26482f50c6+6346c0633c,g2bbee38e9b+6660c170cc,g2cc88a2952+0a4e78cd49,g3273194fdb+f6908454ef,g337abbeb29+6660c170cc,g337c41fc51+9a8f8f0815,g37c6e7c3d5+7bbafe9d37,g44018dc512+6660c170cc,g4a941329ef+4f7594a38e,g4c90b7bd52+5145c320d2,g58be5f913a+bea990ba40,g635b316a6c+8d6b3a3e56,g67924a670a+bfead8c487,g6ae5381d9b+81bc2a20b4,g93c4d6e787+26b17396bd,g98cecbdb62+ed2cb6d659,g98ffbb4407+81bc2a20b4,g9ddcbc5298+7f7571301f,ga1e77700b3+99e9273977,gae46bcf261+6660c170cc,gb2715bf1a1+17526d298f,gc86a011abf+17526d298f,gcf0d15dbbd+96dd2c2ea9,gdaeeff99f8+0d8dbea60f,gdb4ec4c597+6660c170cc,ge23793e450+96dd2c2ea9,gf041782ebf+171108ac67
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.