LSST Applications g0f08755f38+82efc23009,g12f32b3c4e+e7bdf1200e,g1653933729+a8ce1bb630,g1a0ca8cf93+50eff2b06f,g28da252d5a+52db39f6a5,g2bbee38e9b+37c5a29d61,g2bc492864f+37c5a29d61,g2cdde0e794+c05ff076ad,g3156d2b45e+41e33cbcdc,g347aa1857d+37c5a29d61,g35bb328faa+a8ce1bb630,g3a166c0a6a+37c5a29d61,g3e281a1b8c+fb992f5633,g414038480c+7f03dfc1b0,g41af890bb2+11b950c980,g5fbc88fb19+17cd334064,g6b1c1869cb+12dd639c9a,g781aacb6e4+a8ce1bb630,g80478fca09+72e9651da0,g82479be7b0+04c31367b4,g858d7b2824+82efc23009,g9125e01d80+a8ce1bb630,g9726552aa6+8047e3811d,ga5288a1d22+e532dc0a0b,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+37c5a29d61,gcf0d15dbbd+2acd6d4d48,gd7358e8bfb+778a810b6e,gda3e153d99+82efc23009,gda6a2b7d83+2acd6d4d48,gdaeeff99f8+1711a396fd,ge2409df99d+6b12de1076,ge79ae78c31+37c5a29d61,gf0baf85859+d0a5978c5a,gf3967379c6+4954f8c433,gfb92a5be7c+82efc23009,gfec2e1e490+2aaed99252,w.2024.46
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.