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