lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
geom
ellipses
GridTransform.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
*/
24
#include "
lsst/afw/geom/ellipses/GridTransform.h
"
25
#include "
lsst/afw/geom/ellipses/Quadrupole.h
"
26
#include "
lsst/afw/geom/ellipses/Separable.h
"
27
#include "
lsst/afw/geom/ellipses/ReducedShear.h
"
28
#include "
lsst/afw/geom/ellipses/radii.h
"
29
30
namespace
lsst
{
31
namespace
afw
{
32
namespace
geom
{
33
namespace
ellipses
{
34
35
BaseCore::GridTransform::GridTransform
(
BaseCore
const
& input)
36
: _input(input), _eig(
Quadrupole
(input).
getMatrix
()) {}
37
38
lsst::geom::LinearTransform::Matrix
BaseCore::GridTransform::getMatrix
()
const
{
39
return
_eig.operatorInverseSqrt();
40
}
41
42
BaseCore::GridTransform::operator
lsst::geom::LinearTransform
()
const
{
43
return
lsst::geom::LinearTransform
(_eig.operatorInverseSqrt());
44
}
45
46
BaseCore::GridTransform::DerivativeMatrix
BaseCore::GridTransform::d
()
const
{
47
/*
48
Grid transform is easiest to differentiate in the ReducedShear/DeterminantRadius parametrization.
49
But we actually differentiate the inverse of the transform, and then use
50
$dM^{-1}/dt = -M^{-1} dM/dt M^{-1} to compute the derivative of the inverse.
51
52
The inverse of the grid transform in ReducedShear/DeterminantRadius is:
53
$\frac{r}{\sqrt{1-g^2}}(\sigma_x + g_1 \sigma_z + g2 \sigma_y)$, where $\sigma_i$ are the
54
Pauli spin matrices.
55
*/
56
using
C =
Separable<ReducedShear, DeterminantRadius>
;
57
C core;
58
Jacobian
rhs = core.dAssign(_input);
59
double
g1 = core.getE1();
60
double
g2 = core.getE2();
61
double
g = core.getEllipticity().getE();
62
double
r = core.getRadius();
63
double
beta = 1.0 - g * g;
64
double
alpha = r /
std::sqrt
(beta);
65
66
Eigen::Matrix2d sigma_z, sigma_y;
67
sigma_z << 1.0, 0.0, 0.0, -1.0;
68
sigma_y << 0.0, 1.0, 1.0, 0.0;
69
Eigen::Matrix2d t = _eig.operatorSqrt();
70
Eigen::Matrix2d tInv = _eig.operatorInverseSqrt();
71
Eigen::Matrix2d dt_dg1 = t * g1 / beta + alpha * sigma_z;
72
Eigen::Matrix2d dt_dg2 = t * g2 / beta + alpha * sigma_y;
73
Eigen::Matrix2d dt_dr = t * (1.0 / r);
74
Eigen::Matrix2d dtInv_dg1 = -tInv * dt_dg1 * tInv;
75
Eigen::Matrix2d dtInv_dg2 = -tInv * dt_dg2 * tInv;
76
Eigen::Matrix2d dtInv_dr = -tInv * dt_dr * tInv;
77
78
GridTransform::DerivativeMatrix
mid;
79
mid(
lsst::geom::LinearTransform::XX
, C::E1) = dtInv_dg1(0, 0);
80
mid(
lsst::geom::LinearTransform::XY
, C::E1) = mid(
lsst::geom::LinearTransform::YX
, C::E1) =
81
dtInv_dg1(0, 1);
82
mid(
lsst::geom::LinearTransform::YY
, C::E1) = dtInv_dg1(1, 1);
83
mid(
lsst::geom::LinearTransform::XX
, C::E2) = dtInv_dg2(0, 0);
84
mid(
lsst::geom::LinearTransform::XY
, C::E2) = mid(
lsst::geom::LinearTransform::YX
, C::E2) =
85
dtInv_dg2(0, 1);
86
mid(
lsst::geom::LinearTransform::YY
, C::E2) = dtInv_dg2(1, 1);
87
mid(
lsst::geom::LinearTransform::XX
, C::RADIUS) = dtInv_dr(0, 0);
88
mid(
lsst::geom::LinearTransform::XY
, C::RADIUS) = mid(
lsst::geom::LinearTransform::YX
, C::RADIUS) =
89
dtInv_dr(0, 1);
90
mid(
lsst::geom::LinearTransform::YY
, C::RADIUS) = dtInv_dr(1, 1);
91
return
mid * rhs;
92
}
93
94
double
BaseCore::GridTransform::getDeterminant
()
const
{
return
sqrt(1.0 / _eig.eigenvalues().prod()); }
95
96
lsst::geom::LinearTransform
BaseCore::GridTransform::inverted
()
const
{
97
return
lsst::geom::LinearTransform
(_eig.operatorSqrt());
98
}
99
100
Ellipse::GridTransform::GridTransform
(
Ellipse
const
& input) : _input(input), _coreGt(input.
getCore
()) {}
101
102
lsst::geom::AffineTransform::Matrix
Ellipse::GridTransform::getMatrix
()
const
{
103
lsst::geom::AffineTransform::Matrix
r = lsst::geom::AffineTransform::Matrix::Zero();
104
r.block<2, 2>(0, 0) = _coreGt.getMatrix();
105
r.block<2, 1>(0, 2) = -r.block<2, 2>(0, 0) * _input.getCenter().asEigen();
106
r(2, 2) = 1.0;
107
return
r;
108
}
109
110
Ellipse::GridTransform::DerivativeMatrix
Ellipse::GridTransform::d
()
const
{
111
DerivativeMatrix
r = DerivativeMatrix::Zero();
112
lsst::geom::LinearTransform
linear = _coreGt;
113
r.block<4, 3>(0, 0) = _coreGt.d();
114
double
x = -_input.getCenter().getX();
115
double
y = -_input.getCenter().getY();
116
r(
lsst::geom::AffineTransform::X
,
Ellipse::X
) = -linear[
lsst::geom::LinearTransform::XX
];
117
r(
lsst::geom::AffineTransform::Y
,
Ellipse::X
) = -linear[
lsst::geom::LinearTransform::YX
];
118
r(
lsst::geom::AffineTransform::X
,
Ellipse::Y
) = -linear[
lsst::geom::LinearTransform::XY
];
119
r(
lsst::geom::AffineTransform::Y
,
Ellipse::Y
) = -linear[
lsst::geom::LinearTransform::YY
];
120
r(
lsst::geom::AffineTransform::X
, 0) =
121
x * r(
lsst::geom::AffineTransform::XX
, 0) + y * r(
lsst::geom::AffineTransform::XY
, 0);
122
r(
lsst::geom::AffineTransform::Y
, 0) =
123
x * r(
lsst::geom::AffineTransform::YX
, 0) + y * r(
lsst::geom::AffineTransform::YY
, 0);
124
r(
lsst::geom::AffineTransform::X
, 1) =
125
x * r(
lsst::geom::AffineTransform::XX
, 1) + y * r(
lsst::geom::AffineTransform::XY
, 1);
126
r(
lsst::geom::AffineTransform::Y
, 1) =
127
x * r(
lsst::geom::AffineTransform::YX
, 1) + y * r(
lsst::geom::AffineTransform::YY
, 1);
128
r(
lsst::geom::AffineTransform::X
, 2) =
129
x * r(
lsst::geom::AffineTransform::XX
, 2) + y * r(
lsst::geom::AffineTransform::XY
, 2);
130
r(
lsst::geom::AffineTransform::Y
, 2) =
131
x * r(
lsst::geom::AffineTransform::YX
, 2) + y * r(
lsst::geom::AffineTransform::YY
, 2);
132
return
r;
133
}
134
135
double
Ellipse::GridTransform::getDeterminant
()
const
{
return
_coreGt.getDeterminant(); }
136
137
Ellipse::GridTransform::operator
lsst::geom::AffineTransform
()
const
{
138
lsst::geom::LinearTransform
linear = _coreGt;
139
return
lsst::geom::AffineTransform
(linear, linear(
lsst::geom::Point2D
() - _input.getCenter()));
140
}
141
142
lsst::geom::AffineTransform
Ellipse::GridTransform::inverted
()
const
{
143
return
lsst::geom::AffineTransform
(_coreGt.inverted(),
lsst::geom::Extent2D
(_input.getCenter()));
144
}
145
}
// namespace ellipses
146
}
// namespace geom
147
}
// namespace afw
148
}
// namespace lsst
GridTransform.h
Quadrupole.h
ReducedShear.h
Separable.h
lsst::afw::geom::ellipses::BaseCore::GridTransform::getDeterminant
double getDeterminant() const
Return the determinant of the lsst::geom::LinearTransform.
Definition
GridTransform.cc:94
lsst::afw::geom::ellipses::BaseCore::GridTransform::inverted
lsst::geom::LinearTransform inverted() const
Return the inverse of the lsst::geom::LinearTransform;.
Definition
GridTransform.cc:96
lsst::afw::geom::ellipses::BaseCore::GridTransform::d
DerivativeMatrix d() const
Return the derivative of the transform with respect to input core.
Definition
GridTransform.cc:46
lsst::afw::geom::ellipses::BaseCore::GridTransform::GridTransform
GridTransform(BaseCore const &input)
Standard constructor.
Definition
GridTransform.cc:35
lsst::afw::geom::ellipses::BaseCore::GridTransform::DerivativeMatrix
Eigen::Matrix< double, 4, 3 > DerivativeMatrix
Matrix type for derivative with respect to ellipse parameters.
Definition
GridTransform.h:51
lsst::afw::geom::ellipses::BaseCore::GridTransform::getMatrix
lsst::geom::LinearTransform::Matrix getMatrix() const
Return the transform matrix as an Eigen object.
Definition
GridTransform.cc:38
lsst::afw::geom::ellipses::BaseCore::BaseCore
BaseCore()=default
Return the size of the bounding box for the ellipse core.
lsst::afw::geom::ellipses::BaseCore::Jacobian
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition
BaseCore.h:64
lsst::afw::geom::ellipses::Ellipse::GridTransform::getDeterminant
double getDeterminant() const
Return the determinant of the lsst::geom::AffineTransform.
Definition
GridTransform.cc:135
lsst::afw::geom::ellipses::Ellipse::GridTransform::d
DerivativeMatrix d() const
Return the derivative of transform with respect to input ellipse.
Definition
GridTransform.cc:110
lsst::afw::geom::ellipses::Ellipse::GridTransform::getMatrix
lsst::geom::AffineTransform::Matrix getMatrix() const
Return the transform matrix as an Eigen object.
Definition
GridTransform.cc:102
lsst::afw::geom::ellipses::Ellipse::GridTransform::DerivativeMatrix
Eigen::Matrix< double, 6, 5 > DerivativeMatrix
Matrix type for derivative with respect to input ellipse parameters.
Definition
GridTransform.h:85
lsst::afw::geom::ellipses::Ellipse::GridTransform::inverted
lsst::geom::AffineTransform inverted() const
Return the inverse of the AffineTransform.
Definition
GridTransform.cc:142
lsst::afw::geom::ellipses::Ellipse::GridTransform::GridTransform
GridTransform(Ellipse const &input)
Standard constructor.
Definition
GridTransform.cc:100
lsst::afw::geom::ellipses::Ellipse::getCore
BaseCore const & getCore() const
Return the ellipse core.
Definition
Ellipse.h:71
lsst::afw::geom::ellipses::Ellipse::Ellipse
Ellipse(BaseCore const &core, lsst::geom::Point2D const ¢er=lsst::geom::Point2D())
Return the transform that maps the ellipse to the unit circle.
Definition
Ellipse.h:164
lsst::afw::geom::ellipses::Ellipse::X
@ X
Definition
Ellipse.h:59
lsst::afw::geom::ellipses::Ellipse::Y
@ Y
Definition
Ellipse.h:59
lsst::afw::geom::ellipses::Quadrupole
An ellipse core with quadrupole moments as parameters.
Definition
Quadrupole.h:47
lsst::afw::geom::ellipses::Separable
An ellipse core with a complex ellipticity and radius parameterization.
Definition
Separable.h:50
lsst::geom::AffineTransform
lsst::geom::AffineTransform::Matrix
Eigen::Matrix3d Matrix
lsst::geom::AffineTransform::YY
YY
lsst::geom::AffineTransform::YX
YX
lsst::geom::AffineTransform::X
X
lsst::geom::AffineTransform::Y
Y
lsst::geom::AffineTransform::XY
XY
lsst::geom::AffineTransform::XX
XX
lsst::geom::LinearTransform
lsst::geom::LinearTransform::Matrix
Eigen::Matrix< double, 2, 2, Eigen::DontAlign > Matrix
lsst::geom::LinearTransform::YX
YX
lsst::geom::LinearTransform::YY
YY
lsst::geom::LinearTransform::XX
XX
lsst::geom::LinearTransform::XY
XY
lsst::afw::geom::ellipses
Definition
ellipses.h:50
lsst::afw::geom
Definition
frameSetUtils.h:40
lsst::afw
Definition
imageAlgorithm.dox:1
lsst::geom::Extent2D
Extent< double, 2 > Extent2D
lsst::geom::Point2D
Point< double, 2 > Point2D
lsst
radii.h
std::sqrt
T sqrt(T... args)
Generated on
for lsst.afw by
1.17.0