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 | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
lsst::meas::astrom::SipForwardTransform Class Reference

A transform that maps pixel coordinates to intermediate world coordinates according to the SIP convention. More...

#include <SipTransform.h>

Inheritance diagram for lsst::meas::astrom::SipForwardTransform:
lsst::meas::astrom::SipTransformBase

Public Member Functions

 SipForwardTransform (geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix, PolynomialTransform const &forwardSipPoly)
 Construct a SipForwardTransform from its components.
 
 SipForwardTransform (SipForwardTransform const &other)=default
 
 SipForwardTransform (SipForwardTransform &&other)=default
 
SipForwardTransformoperator= (SipForwardTransform const &other)=default
 
SipForwardTransformoperator= (SipForwardTransform &&other)=default
 
void swap (SipForwardTransform &other)
 
geom::AffineTransform linearize (geom::Point2D const &in) const
 Return an approximate affine transform at the given point.
 
geom::Point2D operator() (geom::Point2D const &uv) const
 Apply the transform to a point.
 
SipForwardTransform transformPixels (geom::AffineTransform const &s) const
 Return a new forward SIP transform that includes a transformation of the pixel coordinate system by the given affine transform.
 
geom::Point2D const & getPixelOrigin () const
 Return the pixel origin (CRPIX, but zero-indexed) of the transform.
 
geom::LinearTransform const & getCdMatrix () const
 Return the CD matrix of the transform.
 
PolynomialTransform const & getPoly () const
 Return the polynomial component of the transform (A,B) or (AP,BP).
 

Static Public Member Functions

static SipForwardTransform convert (PolynomialTransform const &poly, geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix)
 Convert a PolynomialTransform to an equivalent SipForwardTransform.
 
static SipForwardTransform convert (ScaledPolynomialTransform const &scaled, geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix)
 Convert a ScaledPolynomialTransform to an equivalent SipForwardTransform.
 
static SipForwardTransform convert (ScaledPolynomialTransform const &scaled)
 Convert a ScaledPolynomialTransform to an equivalent SipForwardTransform.
 

Protected Member Functions

void swap (SipTransformBase &other)
 
void transformPixelsInPlace (geom::AffineTransform const &s)
 

Protected Attributes

geom::Point2D _pixelOrigin
 
geom::LinearTransform _cdMatrix
 
PolynomialTransform _poly
 

Detailed Description

A transform that maps pixel coordinates to intermediate world coordinates according to the SIP convention.

The SIP forward transform is defined as

\[ \left[\begin{array}{ c } x \\ y \end{array}\right] = \mathbf{Z} \left[\begin{array}{ c } (u - u_0) + {\displaystyle\sum_{p,q}^{2 \le p + q \le N}} \mathrm{A}_{p,q} (u-u_0)^p (v-v_0)^q \\ (v - v_0) + {\displaystyle\sum_{p,q}^{2 \le p + q \le N}} \mathrm{B}_{p,q} (u-u_0)^p (v-v_0)^q \end{array}\right] \]

where

The SIP convention encourages (but does not require) nulling the zeroth- and first-order elements of \(\mathrm{A}\) and \(\mathrm{B}\), which ensures the representation of a given transform is unique. This also makes fitting a SIP transform to data a nonlinear operation, as well as making the conversion from standard polynomial transforms to SIP form impossible in general. Accordingly, this class does not attempt to null low-order polynomial terms at all when converting from other transforms.

SipForwardTransform instances should be confined to a single thread.

Definition at line 136 of file SipTransform.h.

Constructor & Destructor Documentation

◆ SipForwardTransform() [1/3]

lsst::meas::astrom::SipForwardTransform::SipForwardTransform ( geom::Point2D const & pixelOrigin,
geom::LinearTransform const & cdMatrix,
PolynomialTransform const & forwardSipPoly )
inline

Construct a SipForwardTransform from its components.

Parameters
[in]pixelOriginCRPIX \((u_0,v_0)\) (zero-indexed).
[in]cdMatrixCD matrix \(Z\)
[in]forwardSipPolyPolynomial transform \((A,B)\)

Definition at line 175 of file SipTransform.h.

177 : SipTransformBase(pixelOrigin, cdMatrix, forwardSipPoly) {}
SipTransformBase(geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix, PolynomialTransform const &poly)
Construct a SipTransformBase from its components.

◆ SipForwardTransform() [2/3]

lsst::meas::astrom::SipForwardTransform::SipForwardTransform ( SipForwardTransform const & other)
default

◆ SipForwardTransform() [3/3]

lsst::meas::astrom::SipForwardTransform::SipForwardTransform ( SipForwardTransform && other)
default

Member Function Documentation

◆ convert() [1/3]

SipForwardTransform lsst::meas::astrom::SipForwardTransform::convert ( PolynomialTransform const & poly,
geom::Point2D const & pixelOrigin,
geom::LinearTransform const & cdMatrix )
static

Convert a PolynomialTransform to an equivalent SipForwardTransform.

Parameters
[in]polyPolynomialTransform to convert.
[in]pixelOriginCRPIX \((u_0,v_0)\) (zero-indexed)
[in]cdMatrixCD matrix \(Z\)

Definition at line 52 of file SipTransform.cc.

54 {
55 auto forwardSipPoly = compose(geom::AffineTransform(cdMatrix.inverted()),
57 // Subtracting 1 here accounts for the extra terms outside the sum in the
58 // transform definition (see class docs) - note that you can fold those
59 // terms into the sum by adding 1 from the A_10 and B_01 terms.
60 forwardSipPoly._xCoeffs(1, 0) -= 1;
61 forwardSipPoly._yCoeffs(0, 1) -= 1;
62 return SipForwardTransform(pixelOrigin, cdMatrix, forwardSipPoly);
63}
An affine coordinate transformation consisting of a linear transformation and an offset.
SipForwardTransform(geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix, PolynomialTransform const &forwardSipPoly)
Construct a SipForwardTransform from its components.
Low-level polynomials (including special polynomials) in C++.
PolynomialTransform compose(geom::AffineTransform const &t1, PolynomialTransform const &t2)
Return a PolynomialTransform that is equivalent to the composition t1(t2())

◆ convert() [2/3]

SipForwardTransform lsst::meas::astrom::SipForwardTransform::convert ( ScaledPolynomialTransform const & scaled)
static

Convert a ScaledPolynomialTransform to an equivalent SipForwardTransform.

The pixel origin CRPIX and CD matrix are defined to reproduce the translation and linear transformation in the ScaledPolynomialTransform's input and output scalings (respectively).

Definition at line 79 of file SipTransform.cc.

79 {
80 geom::Point2D pixelOrigin(-scaled.getOutputScalingInverse().getTranslation());
81 geom::LinearTransform cdMatrix(scaled.getInputScaling().getLinear().inverted());
82 return convert(scaled, pixelOrigin, cdMatrix);
83}
A 2D linear coordinate transformation.
static SipForwardTransform convert(PolynomialTransform const &poly, geom::Point2D const &pixelOrigin, geom::LinearTransform const &cdMatrix)
Convert a PolynomialTransform to an equivalent SipForwardTransform.

◆ convert() [3/3]

SipForwardTransform lsst::meas::astrom::SipForwardTransform::convert ( ScaledPolynomialTransform const & scaled,
geom::Point2D const & pixelOrigin,
geom::LinearTransform const & cdMatrix )
static

Convert a ScaledPolynomialTransform to an equivalent SipForwardTransform.

Parameters
[in]scaledScaledPolynomialTransform to convert.
[in]pixelOriginCRPIX \((u_0,v_0)\) (zero-indexed)
[in]cdMatrixCD matrix \(Z\)

Definition at line 65 of file SipTransform.cc.

67 {
68 auto forwardSipPoly =
69 compose(geom::AffineTransform(cdMatrix.inverted()) * scaled.getOutputScalingInverse(),
70 compose(scaled.getPoly(),
71 scaled.getInputScaling() * geom::AffineTransform(geom::Extent2D(pixelOrigin))));
72 // Account for the terms outside the sum in the definition (see comment
73 // earlier in the file for more explanation).
74 forwardSipPoly._xCoeffs(1, 0) -= 1;
75 forwardSipPoly._yCoeffs(0, 1) -= 1;
76 return SipForwardTransform(pixelOrigin, cdMatrix, forwardSipPoly);
77}

◆ getCdMatrix()

geom::LinearTransform const & lsst::meas::astrom::SipTransformBase::getCdMatrix ( ) const
inlineinherited

Return the CD matrix of the transform.

Definition at line 56 of file SipTransform.h.

56{ return _cdMatrix; }

◆ getPixelOrigin()

geom::Point2D const & lsst::meas::astrom::SipTransformBase::getPixelOrigin ( ) const
inlineinherited

Return the pixel origin (CRPIX, but zero-indexed) of the transform.

Definition at line 51 of file SipTransform.h.

51{ return _pixelOrigin; }

◆ getPoly()

PolynomialTransform const & lsst::meas::astrom::SipTransformBase::getPoly ( ) const
inlineinherited

Return the polynomial component of the transform (A,B) or (AP,BP).

Definition at line 61 of file SipTransform.h.

61{ return _poly; }

◆ linearize()

geom::AffineTransform lsst::meas::astrom::SipForwardTransform::linearize ( geom::Point2D const & in) const

Return an approximate affine transform at the given point.

Definition at line 85 of file SipTransform.cc.

85 {
88}
geom::AffineTransform linearize(geom::Point2D const &in) const
Return an approximate affine transform at the given point.
geom::Point2D const & getPixelOrigin() const
Return the pixel origin (CRPIX, but zero-indexed) of the transform.

◆ operator()()

geom::Point2D lsst::meas::astrom::SipForwardTransform::operator() ( geom::Point2D const & uv) const

Apply the transform to a point.

Definition at line 90 of file SipTransform.cc.

90 {
92 return getCdMatrix()(geom::Extent2D(duv) + getPoly()(duv));
93}
PolynomialTransform const & getPoly() const
Return the polynomial component of the transform (A,B) or (AP,BP).
geom::LinearTransform const & getCdMatrix() const
Return the CD matrix of the transform.
Extent< double, 2 > Extent2D
Definition Extent.h:400

◆ operator=() [1/2]

SipForwardTransform & lsst::meas::astrom::SipForwardTransform::operator= ( SipForwardTransform && other)
default

◆ operator=() [2/2]

SipForwardTransform & lsst::meas::astrom::SipForwardTransform::operator= ( SipForwardTransform const & other)
default

◆ swap() [1/2]

void lsst::meas::astrom::SipForwardTransform::swap ( SipForwardTransform & other)
inline

Definition at line 187 of file SipTransform.h.

187{ SipTransformBase::swap(other); }
void swap(SipTransformBase &other)

◆ swap() [2/2]

void lsst::meas::astrom::SipTransformBase::swap ( SipTransformBase & other)
inlineprotectedinherited

Definition at line 85 of file SipTransform.h.

85 {
86 std::swap(_pixelOrigin, other._pixelOrigin);
87 std::swap(_cdMatrix, other._cdMatrix);
88 _poly.swap(other._poly);
89 }
void swap(PolynomialTransform &other)
Lightweight swap.
T swap(T... args)

◆ transformPixels()

SipForwardTransform lsst::meas::astrom::SipForwardTransform::transformPixels ( geom::AffineTransform const & s) const

Return a new forward SIP transform that includes a transformation of the pixel coordinate system by the given affine transform.

Definition at line 95 of file SipTransform.cc.

95 {
96 SipForwardTransform result(*this);
97 result.transformPixelsInPlace(s);
98 return result;
99}
py::object result
Definition _schema.cc:429

◆ transformPixelsInPlace()

void lsst::meas::astrom::SipTransformBase::transformPixelsInPlace ( geom::AffineTransform const & s)
protectedinherited

Definition at line 40 of file SipTransform.cc.

40 {
41 // The implementation for transformPixels is identical for
42 // SipForwardTransform and SipReverseTransform. That's pretty obvious for
43 // the pixel origin and CD matrix, which are the same in both cases, but
44 // it wasn't obvious to me until I did the math that the polynomial
45 // transforms are composed with the affine transform the same way.
46 auto sInv = s.inverted();
47 _pixelOrigin = s.getLinear()(_pixelOrigin - sInv.getTranslation());
48 _cdMatrix = _cdMatrix * sInv.getLinear();
49 _poly = compose(s.getLinear(), compose(getPoly(), sInv.getLinear()));
50}

Member Data Documentation

◆ _cdMatrix

geom::LinearTransform lsst::meas::astrom::SipTransformBase::_cdMatrix
protectedinherited

Definition at line 94 of file SipTransform.h.

◆ _pixelOrigin

geom::Point2D lsst::meas::astrom::SipTransformBase::_pixelOrigin
protectedinherited

Definition at line 93 of file SipTransform.h.

◆ _poly

PolynomialTransform lsst::meas::astrom::SipTransformBase::_poly
protectedinherited

Definition at line 95 of file SipTransform.h.


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