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
Separable.cc
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 */
29
30namespace lsst {
31namespace afw {
32namespace geom {
33namespace ellipses {
34
35template <typename Ellipticity_, typename Radius_>
36BaseCore::Registrar<Separable<Ellipticity_, Radius_> > Separable<Ellipticity_, Radius_>::registrar;
37
38template <typename Ellipticity_, typename Radius_>
40 return "Separable" + Ellipticity_::getName() + Radius_::getName();
41}
42
43template <typename Ellipticity_, typename Radius_>
45 _ellipticity.normalize();
46 _radius.normalize();
47}
48
49template <typename Ellipticity_, typename Radius_>
51 setE1(*iter++);
52 setE2(*iter++);
53 setRadius(*iter++);
54}
55
56template <typename Ellipticity_, typename Radius_>
58 *iter++ = getE1();
59 *iter++ = getE2();
60 *iter++ = getRadius();
61}
62
63template <typename Ellipticity_, typename Radius_>
66 _ellipticity = other._ellipticity;
67 _radius = other._radius;
68 return *this;
69}
70
71// Delegate to copy-constructor for backwards compatibility
72template <typename Ellipticity_, typename Radius_>
75 return *this = other;
76}
77template <typename Ellipticity_, typename Radius_>
78Separable<Ellipticity_, Radius_>::Separable(double e1, double e2, double radius, bool normalize)
79 : _ellipticity(e1, e2), _radius(radius) {
80 if (normalize) this->normalize();
81}
82
83template <typename Ellipticity_, typename Radius_>
85 bool normalize)
86 : _ellipticity(complex), _radius(radius) {
87 if (normalize) this->normalize();
88}
89
90template <typename Ellipticity_, typename Radius_>
91Separable<Ellipticity_, Radius_>::Separable(Ellipticity const& ellipticity, double radius, bool normalize)
92 : _ellipticity(ellipticity), _radius(radius) {
93 if (normalize) this->normalize();
94}
95
96template <typename Ellipticity_, typename Radius_>
98 : _ellipticity(vector[0], vector[1]), _radius(vector[2]) {
99 if (normalize) this->normalize();
100}
101
102template <typename Ellipticity_, typename Radius_>
103void Separable<Ellipticity_, Radius_>::_assignToQuadrupole(double& ixx, double& iyy, double& ixy) const {
104 Distortion distortion(_ellipticity);
105 _radius.assignToQuadrupole(distortion, ixx, iyy, ixy);
106}
107
108template <typename Ellipticity_, typename Radius_>
110 double& ixy) const {
111 Distortion distortion;
112 BaseCore::Jacobian rhs = Jacobian::Identity();
113 rhs.block<2, 2>(0, 0) = distortion.dAssign(_ellipticity);
114 BaseCore::Jacobian lhs = _radius.dAssignToQuadrupole(distortion, ixx, iyy, ixy);
115 return lhs * rhs;
116}
117
118template <typename Ellipticity_, typename Radius_>
119void Separable<Ellipticity_, Radius_>::_assignToAxes(double& a, double& b, double& theta) const {
120 double ixx, iyy, ixy;
121 this->_assignToQuadrupole(ixx, iyy, ixy);
122 BaseCore::_assignQuadrupoleToAxes(ixx, iyy, ixy, a, b, theta);
123}
124
125template <typename Ellipticity_, typename Radius_>
127 double& theta) const {
128 double ixx, iyy, ixy;
129 BaseCore::Jacobian rhs = this->_dAssignToQuadrupole(ixx, iyy, ixy);
130 BaseCore::Jacobian lhs = BaseCore::_dAssignQuadrupoleToAxes(ixx, iyy, ixy, a, b, theta);
131 return lhs * rhs;
132}
133
134template <typename Ellipticity_, typename Radius_>
135void Separable<Ellipticity_, Radius_>::_assignFromQuadrupole(double ixx, double iyy, double ixy) {
136 Distortion distortion;
137 _radius.assignFromQuadrupole(ixx, iyy, ixy, distortion);
138 _ellipticity = distortion;
139}
140
141template <typename Ellipticity_, typename Radius_>
143 double ixy) {
144 Distortion distortion;
145 BaseCore::Jacobian rhs = _radius.dAssignFromQuadrupole(ixx, iyy, ixy, distortion);
146 BaseCore::Jacobian lhs = BaseCore::Jacobian::Identity();
147 lhs.block<2, 2>(0, 0) = _ellipticity.dAssign(distortion);
148 return lhs * rhs;
149}
150
151template <typename Ellipticity_, typename Radius_>
152void Separable<Ellipticity_, Radius_>::_assignFromAxes(double a, double b, double theta) {
153 double ixx, iyy, ixy;
154 BaseCore::_assignAxesToQuadrupole(a, b, theta, ixx, iyy, ixy);
155 this->_assignFromQuadrupole(ixx, iyy, ixy);
156}
157
158template <typename Ellipticity_, typename Radius_>
160 double ixx, iyy, ixy;
161 BaseCore::Jacobian rhs = BaseCore::_dAssignAxesToQuadrupole(a, b, theta, ixx, iyy, ixy);
162 BaseCore::Jacobian lhs = this->_dAssignFromQuadrupole(ixx, iyy, ixy);
163 return lhs * rhs;
164}
165
170
175
180} // namespace ellipses
181} // namespace geom
182} // namespace afw
183} // namespace lsst
table::Key< int > b
table::Key< int > a
static Jacobian _dAssignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
Return the size of the bounding box for the ellipse core.
Definition BaseCore.cc:231
Eigen::Vector3d ParameterVector
Parameter vector type.
Definition BaseCore.h:63
static void _assignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
Return the size of the bounding box for the ellipse core.
Definition BaseCore.cc:218
static Jacobian _dAssignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
Return the size of the bounding box for the ellipse core.
Definition BaseCore.cc:193
static void _assignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
Return the size of the bounding box for the ellipse core.
Definition BaseCore.cc:183
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition BaseCore.h:64
A complex ellipticity with magnitude .
Definition Distortion.h:44
Jacobian dAssign(Distortion const &other)
Definition Distortion.h:70
An ellipse core with a complex ellipticity and radius parameterization.
Definition Separable.h:50
Jacobian _dAssignToQuadrupole(double &ixx, double &iyy, double &ixy) const override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:109
void readParameters(double const *iter) override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:50
Jacobian _dAssignToAxes(double &a, double &b, double &theta) const override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:126
void _assignToAxes(double &a, double &b, double &theta) const override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:119
Separable & operator=(Separable const &other)
Standard assignment.
Definition Separable.cc:64
void _assignFromAxes(double a, double b, double theta) override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:152
Separable(double e1=0.0, double e2=0.0, double radius=Radius(), bool normalize=true)
Construct from parameter values.
Definition Separable.cc:78
Jacobian _dAssignFromAxes(double a, double b, double theta) override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:159
void _assignFromQuadrupole(double ixx, double iyy, double ixy) override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:135
void _assignToQuadrupole(double &ixx, double &iyy, double &ixy) const override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:103
std::string getName() const override
Return a string that identifies this parametrization.
Definition Separable.cc:39
void writeParameters(double *iter) const override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:57
Jacobian _dAssignFromQuadrupole(double ixx, double iyy, double ixy) override
Return the size of the bounding box for the ellipse core.
Definition Separable.cc:142
void normalize() override
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Definition Separable.cc:44