lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
geom
ellipses
Transformer.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/Transformer.h
"
25
26
#include "Eigen/LU"
27
28
namespace
lsst
{
29
namespace
afw
{
30
namespace
geom
{
31
namespace
ellipses
{
32
33
std::shared_ptr<BaseCore>
BaseCore::Transformer::copy
()
const
{
34
std::shared_ptr<BaseCore>
r(
input
.clone());
35
apply
(*r);
36
return
r;
37
}
38
39
void
BaseCore::Transformer::inPlace
() {
apply
(
input
); }
40
41
void
BaseCore::Transformer::apply
(
BaseCore
& result)
const
{
42
Eigen::Matrix2d m;
43
input
._assignToQuadrupole(m(0, 0), m(1, 1), m(0, 1));
44
m(1, 0) = m(0, 1);
45
m =
transform
.getMatrix() * m *
transform
.getMatrix().transpose();
46
result.
_assignFromQuadrupole
(m(0, 0), m(1, 1), m(0, 1));
47
}
48
49
BaseCore::Transformer::DerivativeMatrix
BaseCore::Transformer::d
()
const
{
50
std::shared_ptr<BaseCore>
output(
input
.clone());
51
Eigen::Matrix2d m;
52
Jacobian
rhs =
input
._dAssignToQuadrupole(m(0, 0), m(1, 1), m(0, 1));
53
m(1, 0) = m(0, 1);
54
m =
transform
.getMatrix() * m *
transform
.getMatrix().transpose();
55
Jacobian
lhs = output->_dAssignFromQuadrupole(m(0, 0), m(1, 1), m(0, 1));
56
Jacobian
mid = Jacobian::Zero();
57
mid(0, 0) =
transform
[
lsst::geom::LinearTransform::XX
] *
transform
[
lsst::geom::LinearTransform::XX
];
58
mid(0, 1) =
transform
[
lsst::geom::LinearTransform::XY
] *
transform
[
lsst::geom::LinearTransform::XY
];
59
mid(0, 2) = 2 *
transform
[
lsst::geom::LinearTransform::XY
] *
transform
[
lsst::geom::LinearTransform::XX
];
60
mid(1, 0) =
transform
[
lsst::geom::LinearTransform::YX
] *
transform
[
lsst::geom::LinearTransform::YX
];
61
mid(1, 1) =
transform
[
lsst::geom::LinearTransform::YY
] *
transform
[
lsst::geom::LinearTransform::YY
];
62
mid(1, 2) = 2 *
transform
[
lsst::geom::LinearTransform::YY
] *
transform
[
lsst::geom::LinearTransform::YX
];
63
mid(2, 0) =
transform
[
lsst::geom::LinearTransform::YX
] *
transform
[
lsst::geom::LinearTransform::XX
];
64
mid(2, 1) =
transform
[
lsst::geom::LinearTransform::YY
] *
transform
[
lsst::geom::LinearTransform::XY
];
65
mid(2, 2) =
transform
[
lsst::geom::LinearTransform::XX
] *
transform
[
lsst::geom::LinearTransform::YY
] +
66
transform
[
lsst::geom::LinearTransform::XY
] *
transform
[
lsst::geom::LinearTransform::YX
];
67
return
lhs * mid * rhs;
68
}
69
70
BaseCore::Transformer::TransformDerivativeMatrix
BaseCore::Transformer::dTransform
()
const
{
71
std::shared_ptr<BaseCore>
output(
input
.clone());
72
Eigen::Matrix2d m;
73
input
._assignToQuadrupole(m(0, 0), m(1, 1), m(0, 1));
74
Eigen::Matrix<double, 3, 4> mid = Eigen::Matrix<double, 3, 4>::Zero();
75
m(1, 0) = m(0, 1);
76
mid(0,
lsst::geom::LinearTransform::XX
) = 2.0 * (
transform
[
lsst::geom::LinearTransform::XX
] * m(0, 0) +
77
transform
[
lsst::geom::LinearTransform::XY
] * m(0, 1));
78
mid(0,
lsst::geom::LinearTransform::XY
) = 2.0 * (
transform
[
lsst::geom::LinearTransform::XX
] * m(0, 1) +
79
transform
[
lsst::geom::LinearTransform::XY
] * m(1, 1));
80
mid(1,
lsst::geom::LinearTransform::YX
) = 2.0 * (
transform
[
lsst::geom::LinearTransform::YX
] * m(0, 0) +
81
transform
[
lsst::geom::LinearTransform::YY
] * m(0, 1));
82
mid(1,
lsst::geom::LinearTransform::YY
) = 2.0 * (
transform
[
lsst::geom::LinearTransform::YX
] * m(0, 1) +
83
transform
[
lsst::geom::LinearTransform::YY
] * m(1, 1));
84
mid(2,
lsst::geom::LinearTransform::XX
) =
transform
[
lsst::geom::LinearTransform::YX
] * m(0, 0) +
85
transform
[
lsst::geom::LinearTransform::YY
] * m(0, 1);
86
mid(2,
lsst::geom::LinearTransform::XY
) =
transform
[
lsst::geom::LinearTransform::YX
] * m(0, 1) +
87
transform
[
lsst::geom::LinearTransform::YY
] * m(1, 1);
88
mid(2,
lsst::geom::LinearTransform::YX
) =
transform
[
lsst::geom::LinearTransform::XX
] * m(0, 0) +
89
transform
[
lsst::geom::LinearTransform::XY
] * m(0, 1);
90
mid(2,
lsst::geom::LinearTransform::YY
) =
transform
[
lsst::geom::LinearTransform::XX
] * m(0, 1) +
91
transform
[
lsst::geom::LinearTransform::XY
] * m(1, 1);
92
m =
transform
.getMatrix() * m *
transform
.getMatrix().transpose();
93
Jacobian
lhs = output->_dAssignFromQuadrupole(m(0, 0), m(1, 1), m(0, 1));
94
return
lhs * mid;
95
}
96
97
std::shared_ptr<Ellipse>
Ellipse::Transformer::copy
()
const
{
98
std::shared_ptr<Ellipse>
r =
std::make_shared<Ellipse>
(
99
input
.getCore().transform(
transform
.getLinear()).copy(),
transform
(
input
.getCenter()));
100
return
r;
101
}
102
103
void
Ellipse::Transformer::inPlace
() {
104
input
.setCenter(
transform
(
input
.getCenter()));
105
input
.getCore().transform(
transform
.getLinear()).inPlace();
106
}
107
108
Ellipse::Transformer::DerivativeMatrix
Ellipse::Transformer::d
()
const
{
109
DerivativeMatrix
r = DerivativeMatrix::Zero();
110
r.block<2, 2>(3, 3) =
transform
.getLinear().getMatrix();
111
r.block<3, 3>(0, 0) =
input
.getCore().transform(
transform
.getLinear()).d();
112
return
r;
113
}
114
115
Ellipse::Transformer::TransformDerivativeMatrix
Ellipse::Transformer::dTransform
()
const
{
116
TransformDerivativeMatrix
r = TransformDerivativeMatrix::Zero();
117
r.block<2, 6>(3, 0) =
transform
.dTransform(
input
.getCenter());
118
r.block<3, 4>(0, 0) =
input
.getCore().transform(
transform
.getLinear()).dTransform();
119
return
r;
120
}
121
}
// namespace ellipses
122
}
// namespace geom
123
}
// namespace afw
124
}
// namespace lsst
Transformer.h
lsst::afw::geom::ellipses::BaseCore::Transformer::d
DerivativeMatrix d() const
Return the derivative of transformed core with respect to input core.
Definition
Transformer.cc:49
lsst::afw::geom::ellipses::BaseCore::Transformer::inPlace
void inPlace()
Transform the ellipse core in-place.
Definition
Transformer.cc:39
lsst::afw::geom::ellipses::BaseCore::Transformer::dTransform
TransformDerivativeMatrix dTransform() const
Return the derivative of transformed core with respect to transform parameters.
Definition
Transformer.cc:70
lsst::afw::geom::ellipses::BaseCore::Transformer::transform
lsst::geom::LinearTransform const & transform
transform object
Definition
Transformer.h:76
lsst::afw::geom::ellipses::BaseCore::Transformer::copy
std::shared_ptr< BaseCore > copy() const
Return a new transformed ellipse core.
Definition
Transformer.cc:33
lsst::afw::geom::ellipses::BaseCore::Transformer::TransformDerivativeMatrix
Eigen::Matrix< double, 3, 4 > TransformDerivativeMatrix
Matrix type for derivative with respect to transform parameters.
Definition
Transformer.h:55
lsst::afw::geom::ellipses::BaseCore::Transformer::input
BaseCore & input
input core to be transformed
Definition
Transformer.h:75
lsst::afw::geom::ellipses::BaseCore::Transformer::DerivativeMatrix
Eigen::Matrix3d DerivativeMatrix
Matrix type for derivative with respect to input ellipse parameters.
Definition
Transformer.h:52
lsst::afw::geom::ellipses::BaseCore::Transformer::apply
void apply(BaseCore &result) const
Definition
Transformer.cc:41
lsst::afw::geom::ellipses::BaseCore::BaseCore
BaseCore()=default
Return the size of the bounding box for the ellipse core.
lsst::afw::geom::ellipses::BaseCore::_assignFromQuadrupole
virtual void _assignFromQuadrupole(double ixx, double iyy, double ixy)=0
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::Transformer::input
Ellipse & input
input ellipse to be transformed
Definition
Transformer.h:112
lsst::afw::geom::ellipses::Ellipse::Transformer::inPlace
void inPlace()
Transform the ellipse in-place.
Definition
Transformer.cc:103
lsst::afw::geom::ellipses::Ellipse::Transformer::DerivativeMatrix
Eigen::Matrix< double, 5, 5 > DerivativeMatrix
Matrix type for derivative with respect to input ellipse parameters.
Definition
Transformer.h:89
lsst::afw::geom::ellipses::Ellipse::Transformer::dTransform
TransformDerivativeMatrix dTransform() const
Return the derivative of transform output ellipse with respect to transform parameters.
Definition
Transformer.cc:115
lsst::afw::geom::ellipses::Ellipse::Transformer::transform
lsst::geom::AffineTransform const & transform
transform object
Definition
Transformer.h:113
lsst::afw::geom::ellipses::Ellipse::Transformer::copy
std::shared_ptr< Ellipse > copy() const
Return a new transformed ellipse.
Definition
Transformer.cc:97
lsst::afw::geom::ellipses::Ellipse::Transformer::d
DerivativeMatrix d() const
Return the derivative of transform output ellipse with respect to input ellipse.
Definition
Transformer.cc:108
lsst::afw::geom::ellipses::Ellipse::Transformer::TransformDerivativeMatrix
Eigen::Matrix< double, 5, 6 > TransformDerivativeMatrix
Matrix type for derivative with respect to transform parameters.
Definition
Transformer.h:92
lsst::geom::LinearTransform::YX
YX
lsst::geom::LinearTransform::YY
YY
lsst::geom::LinearTransform::XX
XX
lsst::geom::LinearTransform::XY
XY
std::make_shared
T make_shared(T... args)
lsst::afw::geom::ellipses
Definition
ellipses.h:50
lsst::afw::geom
Definition
frameSetUtils.h:40
lsst::afw
Definition
imageAlgorithm.dox:1
lsst
std::shared_ptr
Generated on
for lsst.afw by
1.17.0