LSST Applications g02d81e74bb+86cf3d8bc9,g180d380827+7a4e862ed4,g2079a07aa2+86d27d4dc4,g2305ad1205+e1ca1c66fa,g29320951ab+012e1474a1,g295015adf3+341ea1ce94,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+c429d67c83,g48712c4677+f88676dd22,g487adcacf7+27e1e21933,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+b41db86c35,g5a732f18d5+53520f316c,g64a986408d+86cf3d8bc9,g858d7b2824+86cf3d8bc9,g8a8a8dda67+585e252eca,g99cad8db69+84912a7fdc,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+a2b54eae19,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+6681f309db,gc120e1dc64+f0fcc2f6d8,gc28159a63d+0e5473021a,gcf0d15dbbd+c429d67c83,gdaeeff99f8+f9a426f77a,ge6526c86ff+0433e6603d,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+86cf3d8bc9,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | List of all members
lsst::afw::cameraGeom::Orientation Class Referencefinal

Describe a detector's orientation in the focal plane. More...

#include <Orientation.h>

Public Member Functions

 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))
 
 Orientation (lsst::geom::Point2D const fpPosition2, 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))
 
 ~Orientation () noexcept
 
 Orientation (Orientation const &) noexcept
 
 Orientation (Orientation &&) noexcept
 
Orientationoperator= (Orientation const &) noexcept
 
Orientationoperator= (Orientation &&) noexcept
 
lsst::geom::Point2D getFpPosition () const
 Return focal plane position of detector reference point (mm)
 
lsst::geom::Point3D getFpPosition3 () const noexcept
 
lsst::geom::Point2D getReferencePoint () const noexcept
 Return detector reference point (pixels)
 
double getHeight () const noexcept
 
lsst::geom::Angle getYaw () const noexcept
 Return the yaw angle.
 
lsst::geom::Angle getPitch () const noexcept
 Return the pitch angle.
 
lsst::geom::Angle getRoll () const noexcept
 Return the roll angle.
 
int getNQuarter () const noexcept
 Return the number of quarter turns (rounded to the closest quarter)
 
std::shared_ptr< geom::TransformPoint2ToPoint2 > makePixelFpTransform (lsst::geom::Extent2D const pixelSizeMm) const
 Generate a Transform from pixel to focal plane coordinates.
 
std::shared_ptr< geom::TransformPoint2ToPoint2 > makeFpPixelTransform (lsst::geom::Extent2D const pixelSizeMm) const
 Generate a Transform from focal plane to pixel coordinates.
 

Detailed Description

Describe a detector's orientation in the focal plane.

All rotations are about the reference point on the detector. Rotations are intrinsic, meaning each rotation is applied in the coordinates system produced by the previous rotation. Rotations are applied in this order: yaw (Z), pitch (Y'), and roll (X'').

Warning
: default refPoint is -0.5, -0.5 (the lower left corner of a detector). This means that the default-constructed Orientation is not a unity transform, but instead includes a 1/2 pixel shift.

Definition at line 51 of file Orientation.h.

Constructor & Destructor Documentation

◆ Orientation() [1/4]

lsst::afw::cameraGeom::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) )
explicit
Parameters
fpPositionFocal plane position of detector reference point (mm)
refPointReference point on detector (pixels). Offset is measured to this point and all all rotations are about this point. The default value (-0.5, -0.5) is the lower left corner of the detector.
yawyaw: rotation about Z (X to Y), 1st rotation
pitchpitch: rotation about Y' (Z'=Z to X'), 2nd rotation
rollroll: rotation about X'' (Y''=Y' to Z''), 3rd rotation

Definition at line 30 of file Orientation.cc.

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}
table::Point2DKey refPoint
Definition Detector.cc:169
table::Point3DKey fpPosition
Definition Detector.cc:168
table::Key< lsst::geom::Angle > yaw
Definition Detector.cc:170
table::Key< lsst::geom::Angle > roll
Definition Detector.cc:172
table::Key< lsst::geom::Angle > pitch
Definition Detector.cc:171
T cos(T... args)
T sin(T... args)

◆ Orientation() [2/4]

lsst::afw::cameraGeom::Orientation::Orientation ( lsst::geom::Point2D const fpPosition2,
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) )
inlineexplicit

Definition at line 69 of file Orientation.h.

75 {}
table::Point2DKey fpPosition2
Definition Detector.cc:167
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))
A coordinate class intended to represent absolute positions.
Definition Point.h:169

◆ ~Orientation()

lsst::afw::cameraGeom::Orientation::~Orientation ( )
defaultnoexcept

◆ Orientation() [3/4]

lsst::afw::cameraGeom::Orientation::Orientation ( Orientation const & other)
noexcept

Definition at line 52 of file Orientation.cc.

53 : _fpPosition(other._fpPosition),
54 _refPoint(other._refPoint),
55 _yaw(other._yaw),
56 _pitch(other._pitch),
57 _roll(other._roll),
58 _rotMat(other._rotMat) {}

◆ Orientation() [4/4]

lsst::afw::cameraGeom::Orientation::Orientation ( Orientation && other)
noexcept

Definition at line 59 of file Orientation.cc.

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)) {}
T move(T... args)

Member Function Documentation

◆ getFpPosition()

lsst::geom::Point2D lsst::afw::cameraGeom::Orientation::getFpPosition ( ) const
inline

Return focal plane position of detector reference point (mm)

Definition at line 84 of file Orientation.h.

84 {
85 return lsst::geom::Point2D(_fpPosition[0], _fpPosition[1]);
86 }
Point< double, 2 > Point2D
Definition Point.h:324

◆ getFpPosition3()

lsst::geom::Point3D lsst::afw::cameraGeom::Orientation::getFpPosition3 ( ) const
inlinenoexcept

Definition at line 88 of file Orientation.h.

88{ return _fpPosition; }

◆ getHeight()

double lsst::afw::cameraGeom::Orientation::getHeight ( ) const
inlinenoexcept

Definition at line 93 of file Orientation.h.

93{ return _fpPosition[2]; }

◆ getNQuarter()

int lsst::afw::cameraGeom::Orientation::getNQuarter ( ) const
noexcept

Return the number of quarter turns (rounded to the closest quarter)

Definition at line 85 of file Orientation.cc.

85 {
86 float yawDeg = _yaw.asDegrees();
87 while (yawDeg < 0.) {
88 yawDeg += 360.;
89 }
90 return std::floor((yawDeg + 45.) / 90.);
91}
constexpr double asDegrees() const noexcept
Return an Angle's value in degrees.
Definition Angle.h:176
T floor(T... args)

◆ getPitch()

lsst::geom::Angle lsst::afw::cameraGeom::Orientation::getPitch ( ) const
inlinenoexcept

Return the pitch angle.

Definition at line 99 of file Orientation.h.

99{ return _pitch; }

◆ getReferencePoint()

lsst::geom::Point2D lsst::afw::cameraGeom::Orientation::getReferencePoint ( ) const
inlinenoexcept

Return detector reference point (pixels)

Definition at line 91 of file Orientation.h.

91{ return _refPoint; }

◆ getRoll()

lsst::geom::Angle lsst::afw::cameraGeom::Orientation::getRoll ( ) const
inlinenoexcept

Return the roll angle.

Definition at line 102 of file Orientation.h.

102{ return _roll; }

◆ getYaw()

lsst::geom::Angle lsst::afw::cameraGeom::Orientation::getYaw ( ) const
inlinenoexcept

Return the yaw angle.

Definition at line 96 of file Orientation.h.

96{ return _yaw; }

◆ makeFpPixelTransform()

std::shared_ptr< afw::geom::TransformPoint2ToPoint2 > lsst::afw::cameraGeom::Orientation::makeFpPixelTransform ( lsst::geom::Extent2D const pixelSizeMm) const

Generate a Transform from focal plane to pixel coordinates.

Returns
lsst::afw::geom::Transform from focal plane to pixel coordinates
Parameters
pixelSizeMmSize of the pixel in mm in X and Y

Definition at line 107 of file Orientation.cc.

108 {
109 return makePixelFpTransform(pixelSizeMm)->inverted();
110}
std::shared_ptr< geom::TransformPoint2ToPoint2 > makePixelFpTransform(lsst::geom::Extent2D const pixelSizeMm) const
Generate a Transform from pixel to focal plane coordinates.

◆ makePixelFpTransform()

std::shared_ptr< afw::geom::TransformPoint2ToPoint2 > lsst::afw::cameraGeom::Orientation::makePixelFpTransform ( lsst::geom::Extent2D const pixelSizeMm) const

Generate a Transform from pixel to focal plane coordinates.

Returns
lsst::afw::geom::Transform from pixel to focal plane coordinates
Parameters
pixelSizeMmSize of the pixel in mm in X and Y

Definition at line 93 of file Orientation.cc.

94 {
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}
An affine coordinate transformation consisting of a linear transformation and an offset.
EigenVector const & asEigen() const noexcept(IS_ELEMENT_NOTHROW_COPYABLE)
Return a fixed-size Eigen representation of the coordinate object.
std::shared_ptr< TransformPoint2ToPoint2 > makeTransform(lsst::geom::AffineTransform const &affine)
Wrap an lsst::geom::AffineTransform as a Transform.

◆ operator=() [1/2]

Orientation & lsst::afw::cameraGeom::Orientation::operator= ( Orientation && other)
noexcept

Definition at line 75 of file Orientation.cc.

75 {
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}

◆ operator=() [2/2]

Orientation & lsst::afw::cameraGeom::Orientation::operator= ( Orientation const & other)
noexcept

Definition at line 66 of file Orientation.cc.

66 {
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}

The documentation for this class was generated from the following files: