lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
cameraGeom
Orientation.cc
Go to the documentation of this file.
1
/*
2
* LSST Data Management System
3
* Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014 LSST Corporation.
4
*
5
* This product includes software developed by the
6
* LSST Project (http://www.lsst.org/).
7
*
8
* This program is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the LSST License Statement and
19
* the GNU General Public License along with this program. If not,
20
* see <http://www.lsstcorp.org/LegalNotices/>.
21
*/
22
23
#include "
lsst/afw/geom/transformFactory.h
"
24
#include "
lsst/afw/cameraGeom/Orientation.h
"
25
26
namespace
lsst
{
27
namespace
afw
{
28
namespace
cameraGeom
{
29
30
Orientation::Orientation
(
lsst::geom::Point3D
const
fpPosition,
lsst::geom::Point2D
const
refPoint,
31
lsst::geom::Angle
const
yaw,
lsst::geom::Angle
const
pitch,
32
lsst::geom::Angle
const
roll)
33
: _fpPosition(fpPosition), _refPoint(refPoint), _yaw(yaw), _pitch(pitch), _roll(roll), _rotMat() {
34
double
cosYaw =
std::cos
(_yaw);
35
double
sinYaw =
std::sin
(_yaw);
36
double
cosPitch =
std::cos
(_pitch);
37
double
sinPitch =
std::sin
(_pitch);
38
double
cosRoll =
std::cos
(_roll);
39
double
sinRoll =
std::sin
(_roll);
40
41
// This comes from the rotation matrix written down here:
42
// http://en.wikipedia.org/wiki/Euler_angles
43
// for Tait-Bryan angles Z_1Y_2X_3
44
// _rotMat = coeffA coeffB
45
// coeffD coeffE
46
_rotMat << cosYaw * cosPitch, cosYaw * sinPitch * sinRoll - cosRoll * sinYaw, cosPitch * sinYaw,
47
cosYaw * cosRoll + sinYaw * sinPitch * sinRoll;
48
}
49
50
Orientation::~Orientation
() noexcept = default;
51
// Can't combine noexcept and =default until Eigen::Matrix supports noexcept
52
Orientation
::
Orientation
(
Orientation
const &other) noexcept
53
: _fpPosition(other._fpPosition),
54
_refPoint(other._refPoint),
55
_yaw(other._yaw),
56
_pitch(other._pitch),
57
_roll(other._roll),
58
_rotMat(other._rotMat) {}
59
Orientation::Orientation
(
Orientation
&&other) noexcept
60
: _fpPosition(
std::move
(other._fpPosition)),
61
_refPoint(
std::move
(other._refPoint)),
62
_yaw(
std::move
(other._yaw)),
63
_pitch(
std::move
(other._pitch)),
64
_roll(
std::move
(other._roll)),
65
_rotMat(
std::move
(other._rotMat)) {}
66
Orientation
&
Orientation::operator=
(
Orientation
const
&other)
noexcept
{
67
_fpPosition = other._fpPosition;
68
_refPoint = other._refPoint;
69
_yaw = other._yaw;
70
_pitch = other._pitch;
71
_roll = other._roll;
72
_rotMat = other._rotMat;
73
return
*
this
;
74
}
75
Orientation
&
Orientation::operator=
(
Orientation
&&other)
noexcept
{
76
_fpPosition =
std::move
(other._fpPosition);
77
_refPoint =
std::move
(other._refPoint);
78
_yaw =
std::move
(other._yaw);
79
_pitch =
std::move
(other._pitch);
80
_roll =
std::move
(other._roll);
81
_rotMat =
std::move
(other._rotMat);
82
return
*
this
;
83
}
84
85
int
Orientation::getNQuarter
() const noexcept {
86
float
yawDeg = _yaw.asDegrees();
87
while
(yawDeg < 0.) {
88
yawDeg += 360.;
89
}
90
return
std::floor
((yawDeg + 45.) / 90.);
91
}
92
93
std::shared_ptr<afw::geom::TransformPoint2ToPoint2>
Orientation::makePixelFpTransform
(
94
lsst::geom::Extent2D
const
pixelSizeMm)
const
{
95
// jacobian = coeffA*pixelSizeMmX, coeffB*pixelSizeMmY,
96
// coeffD*pixelSizeMmX, coeffE*pixelSizeMmY
97
Eigen::Matrix2d jacobian =
98
_rotMat.array() * (Eigen::Vector2d::Ones() * pixelSizeMm.
asEigen
().transpose()).array();
99
100
Eigen::Vector2d refMm = pixelSizeMm.
asEigen
().array() * _refPoint.asEigen().array();
101
Eigen::Vector2d translation = _fpPosition.asEigen().head<2>() - (_rotMat * refMm);
102
103
lsst::geom::AffineTransform
affineTransform =
lsst::geom::AffineTransform
(jacobian, translation);
104
return
afw::geom::makeTransform
(affineTransform);
105
}
106
107
std::shared_ptr<afw::geom::TransformPoint2ToPoint2>
Orientation::makeFpPixelTransform
(
108
lsst::geom::Extent2D
const
pixelSizeMm)
const
{
109
return
makePixelFpTransform
(pixelSizeMm)->inverted();
110
}
111
112
}
// namespace cameraGeom
113
}
// namespace afw
114
}
// namespace lsst
Orientation.h
lsst::afw::cameraGeom::Orientation::Orientation
Orientation(lsst::geom::Point3D const fpPosition=lsst::geom::Point3D(0, 0, 0), lsst::geom::Point2D const refPoint=lsst::geom::Point2D(-0.5, -0.5), lsst::geom::Angle const yaw=lsst::geom::Angle(0), lsst::geom::Angle const pitch=lsst::geom::Angle(0), lsst::geom::Angle const roll=lsst::geom::Angle(0))
Definition
Orientation.cc:30
lsst::afw::cameraGeom::Orientation::operator=
Orientation & operator=(Orientation const &) noexcept
Definition
Orientation.cc:66
lsst::afw::cameraGeom::Orientation::makePixelFpTransform
std::shared_ptr< geom::TransformPoint2ToPoint2 > makePixelFpTransform(lsst::geom::Extent2D const pixelSizeMm) const
Generate a Transform from pixel to focal plane coordinates.
Definition
Orientation.cc:93
lsst::afw::cameraGeom::Orientation::makeFpPixelTransform
std::shared_ptr< geom::TransformPoint2ToPoint2 > makeFpPixelTransform(lsst::geom::Extent2D const pixelSizeMm) const
Generate a Transform from focal plane to pixel coordinates.
Definition
Orientation.cc:107
lsst::afw::cameraGeom::Orientation::getNQuarter
int getNQuarter() const noexcept
Return the number of quarter turns (rounded to the closest quarter).
Definition
Orientation.cc:85
lsst::afw::cameraGeom::Orientation::~Orientation
~Orientation() noexcept
lsst::geom::AffineTransform
lsst::geom::Angle
lsst::geom::Extent::asEigen
EigenVector const & asEigen() const noexcept(IS_ELEMENT_NOTHROW_COPYABLE)
std::cos
T cos(T... args)
std::floor
T floor(T... args)
std::move
T move(T... args)
lsst::afw::cameraGeom
Definition
Amplifier.h:33
lsst::afw::geom::makeTransform
std::shared_ptr< TransformPoint2ToPoint2 > makeTransform(lsst::geom::AffineTransform const &affine)
Wrap an lsst::geom::AffineTransform as a Transform.
Definition
transformFactory.cc:154
lsst::afw
Definition
imageAlgorithm.dox:1
lsst::geom::Extent2D
Extent< double, 2 > Extent2D
lsst::geom::Point3D
Point< double, 3 > Point3D
lsst::geom::Point2D
Point< double, 2 > Point2D
lsst
std::shared_ptr
std::sin
T sin(T... args)
transformFactory.h
Generated on
for lsst.afw by
1.17.0