LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
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.