lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
geom
ellipses
Distortion.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/Distortion.h
"
25
#include "
lsst/afw/geom/ellipses/ReducedShear.h
"
26
#include "
lsst/afw/geom/ellipses/ConformalShear.h
"
27
#include "
lsst/afw/geom/ellipses/BaseCore.h
"
28
29
namespace
lsst
{
30
namespace
afw
{
31
namespace
geom
{
32
namespace
ellipses
{
33
34
double
Distortion::getAxisRatio
()
const
{
35
double
e =
getE
();
36
return
std::sqrt
((1.0 - e) / (1.0 + e));
37
}
38
39
Distortion
&
Distortion::operator=
(
ConformalShear
const
& other) {
40
double
eta = other.
getE
();
41
if
(eta < 1E-8) {
42
_complex
= other.
getComplex
() * (1.0 - eta * eta / 3.0);
43
}
else
{
44
double
delta =
std::tanh
(eta);
45
_complex
= other.
getComplex
() * delta / eta;
46
}
47
return
*
this
;
48
}
49
50
Distortion
&
Distortion::operator=
(
ReducedShear
const
& other) {
51
double
g = other.
getE
();
52
_complex
= other.
getComplex
() * 2.0 / (1 + g * g);
53
return
*
this
;
54
}
55
56
detail::EllipticityBase::Jacobian
Distortion::dAssign
(
ConformalShear
const
& other) {
57
Jacobian
result = Jacobian::Zero();
58
double
eta = other.
getE
();
59
double
alpha, beta;
60
if
(eta < 1E-8) {
61
alpha = (1.0 - eta * eta / 3.0);
62
beta = -2.0 / 3.0;
63
}
else
{
64
double
delta =
std::tanh
(eta);
65
alpha = delta / eta;
66
beta = (1.0 - delta * delta - alpha) / (eta * eta);
67
}
68
_complex
= other.
getComplex
() * alpha;
69
result(0, 0) = alpha + other.
getE1
() * other.
getE1
() * beta;
70
result(1, 1) = alpha + other.
getE2
() * other.
getE2
() * beta;
71
result(1, 0) = result(0, 1) = other.
getE1
() * other.
getE2
() * beta;
72
return
result;
73
}
74
75
detail::EllipticityBase::Jacobian
Distortion::dAssign
(
ReducedShear
const
& other) {
76
Jacobian
result = Jacobian::Zero();
77
double
g = other.
getE
();
78
double
alpha = 2.0 / (1 + g * g);
79
double
beta = -alpha * alpha;
80
_complex
= other.
getComplex
() * alpha;
81
result(0, 0) = alpha + other.
getE1
() * other.
getE1
() * beta;
82
result(1, 1) = alpha + other.
getE2
() * other.
getE2
() * beta;
83
result(1, 0) = result(0, 1) = other.
getE1
() * other.
getE2
() * beta;
84
return
result;
85
}
86
87
void
Distortion::normalize
() {
88
if
(
getE
() > 1.0) {
89
throw
LSST_EXCEPT
(
lsst::pex::exceptions::InvalidParameterError
,
90
"Distortion magnitude cannot be greater than one."
);
91
}
92
}
93
}
// namespace ellipses
94
}
// namespace geom
95
}
// namespace afw
96
}
// namespace lsst
BaseCore.h
ConformalShear.h
Distortion.h
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
ReducedShear.h
lsst::afw::geom::ellipses::ConformalShear
A logarithmic complex ellipticity with magnitude .
Definition
ConformalShear.h:45
lsst::afw::geom::ellipses::Distortion::normalize
void normalize()
Definition
Distortion.cc:87
lsst::afw::geom::ellipses::Distortion::dAssign
Jacobian dAssign(Distortion const &other)
Definition
Distortion.h:70
lsst::afw::geom::ellipses::Distortion::operator=
Distortion & operator=(Distortion const &other)
Definition
Distortion.h:59
lsst::afw::geom::ellipses::Distortion::Distortion
Distortion(std::complex< double > const &complex)
Definition
Distortion.h:46
lsst::afw::geom::ellipses::Distortion::getAxisRatio
double getAxisRatio() const
Definition
Distortion.cc:34
lsst::afw::geom::ellipses::ReducedShear
A complex ellipticity with magnitude .
Definition
ReducedShear.h:45
lsst::afw::geom::ellipses::detail::EllipticityBase::getE2
double getE2() const
Definition
EllipticityBase.h:66
lsst::afw::geom::ellipses::detail::EllipticityBase::Jacobian
Eigen::Matrix2d Jacobian
Definition
EllipticityBase.h:47
lsst::afw::geom::ellipses::detail::EllipticityBase::getE1
double getE1() const
Definition
EllipticityBase.h:57
lsst::afw::geom::ellipses::detail::EllipticityBase::_complex
std::complex< double > _complex
Definition
EllipticityBase.h:91
lsst::afw::geom::ellipses::detail::EllipticityBase::getE
double getE() const
Definition
EllipticityBase.h:75
lsst::afw::geom::ellipses::detail::EllipticityBase::getComplex
std::complex< double > & getComplex()
Definition
EllipticityBase.h:51
lsst::pex::exceptions::InvalidParameterError
lsst::afw::geom::ellipses
Definition
ellipses.h:50
lsst::afw::geom
Definition
frameSetUtils.h:40
lsst::afw
Definition
imageAlgorithm.dox:1
lsst
std::sqrt
T sqrt(T... args)
std::tanh
T tanh(T... args)
Generated on
for lsst.afw by
1.17.0