LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | List of all members
lsst::afw::geom::ellipses::BaseCore::GridTransform Class Referencefinal

A temporary-only expression object representing an lsst::geom::LinearTransform that maps the ellipse core to a unit circle. More...

#include <GridTransform.h>

Public Types

using DerivativeMatrix = Eigen::Matrix< double, 4, 3 >
 Matrix type for derivative with respect to ellipse parameters. More...
 

Public Member Functions

 GridTransform (BaseCore const &input)
 Standard constructor. More...
 
 operator lsst::geom::LinearTransform () const
 Convert the proxy to an lsst::geom::LinearTransform. More...
 
lsst::geom::LinearTransform::Matrix getMatrix () const
 Return the transform matrix as an Eigen object. More...
 
DerivativeMatrix d () const
 Return the derivative of the transform with respect to input core. More...
 
double getDeterminant () const
 Return the determinant of the lsst::geom::LinearTransform. More...
 
lsst::geom::LinearTransform inverted () const
 Return the inverse of the lsst::geom::LinearTransform;. More...
 

Detailed Description

A temporary-only expression object representing an lsst::geom::LinearTransform that maps the ellipse core to a unit circle.

Definition at line 48 of file GridTransform.h.

Member Typedef Documentation

◆ DerivativeMatrix

Matrix type for derivative with respect to ellipse parameters.

Definition at line 51 of file GridTransform.h.

Constructor & Destructor Documentation

◆ GridTransform()

lsst::afw::geom::ellipses::BaseCore::GridTransform::GridTransform ( BaseCore const &  input)
explicit

Standard constructor.

Definition at line 35 of file GridTransform.cc.

36  : _input(input), _eig(Quadrupole(input).getMatrix()) {}
lsst::geom::LinearTransform::Matrix getMatrix() const
Return the transform matrix as an Eigen object.

Member Function Documentation

◆ d()

BaseCore::GridTransform::DerivativeMatrix lsst::afw::geom::ellipses::BaseCore::GridTransform::d ( ) const

Return the derivative of the transform with respect to input core.

Definition at line 46 of file GridTransform.cc.

46  {
47  /*
48  Grid transform is easiest to differentiate in the ReducedShear/DeterminantRadius parametrization.
49  But we actually differentiate the inverse of the transform, and then use
50  $dM^{-1}/dt = -M^{-1} dM/dt M^{-1} to compute the derivative of the inverse.
51 
52  The inverse of the grid transform in ReducedShear/DeterminantRadius is:
53  $\frac{r}{\sqrt{1-g^2}}(\sigma_x + g_1 \sigma_z + g2 \sigma_y)$, where $\sigma_i$ are the
54  Pauli spin matrices.
55  */
56  using C = Separable<ReducedShear, DeterminantRadius>;
57  C core;
58  Jacobian rhs = core.dAssign(_input);
59  double g1 = core.getE1();
60  double g2 = core.getE2();
61  double g = core.getEllipticity().getE();
62  double r = core.getRadius();
63  double beta = 1.0 - g * g;
64  double alpha = r / std::sqrt(beta);
65 
66  Eigen::Matrix2d sigma_z, sigma_y;
67  sigma_z << 1.0, 0.0, 0.0, -1.0;
68  sigma_y << 0.0, 1.0, 1.0, 0.0;
69  Eigen::Matrix2d t = _eig.operatorSqrt();
70  Eigen::Matrix2d tInv = _eig.operatorInverseSqrt();
71  Eigen::Matrix2d dt_dg1 = t * g1 / beta + alpha * sigma_z;
72  Eigen::Matrix2d dt_dg2 = t * g2 / beta + alpha * sigma_y;
73  Eigen::Matrix2d dt_dr = t * (1.0 / r);
74  Eigen::Matrix2d dtInv_dg1 = -tInv * dt_dg1 * tInv;
75  Eigen::Matrix2d dtInv_dg2 = -tInv * dt_dg2 * tInv;
76  Eigen::Matrix2d dtInv_dr = -tInv * dt_dr * tInv;
77 
79  mid(lsst::geom::LinearTransform::XX, C::E1) = dtInv_dg1(0, 0);
81  dtInv_dg1(0, 1);
82  mid(lsst::geom::LinearTransform::YY, C::E1) = dtInv_dg1(1, 1);
83  mid(lsst::geom::LinearTransform::XX, C::E2) = dtInv_dg2(0, 0);
85  dtInv_dg2(0, 1);
86  mid(lsst::geom::LinearTransform::YY, C::E2) = dtInv_dg2(1, 1);
87  mid(lsst::geom::LinearTransform::XX, C::RADIUS) = dtInv_dr(0, 0);
88  mid(lsst::geom::LinearTransform::XY, C::RADIUS) = mid(lsst::geom::LinearTransform::YX, C::RADIUS) =
89  dtInv_dr(0, 1);
90  mid(lsst::geom::LinearTransform::YY, C::RADIUS) = dtInv_dr(1, 1);
91  return mid * rhs;
92 }
Eigen::Matrix< double, 4, 3 > DerivativeMatrix
Matrix type for derivative with respect to ellipse parameters.
Definition: GridTransform.h:51
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64
T sqrt(T... args)

◆ getDeterminant()

double lsst::afw::geom::ellipses::BaseCore::GridTransform::getDeterminant ( ) const

Return the determinant of the lsst::geom::LinearTransform.

Definition at line 94 of file GridTransform.cc.

94 { return sqrt(1.0 / _eig.eigenvalues().prod()); }

◆ getMatrix()

lsst::geom::LinearTransform::Matrix lsst::afw::geom::ellipses::BaseCore::GridTransform::getMatrix ( ) const

Return the transform matrix as an Eigen object.

Definition at line 38 of file GridTransform.cc.

38  {
39  return _eig.operatorInverseSqrt();
40 }

◆ inverted()

lsst::geom::LinearTransform lsst::afw::geom::ellipses::BaseCore::GridTransform::inverted ( ) const

Return the inverse of the lsst::geom::LinearTransform;.

Definition at line 96 of file GridTransform.cc.

96  {
97  return lsst::geom::LinearTransform(_eig.operatorSqrt());
98 }
A 2D linear coordinate transformation.

◆ operator lsst::geom::LinearTransform()

lsst::afw::geom::ellipses::BaseCore::GridTransform::operator lsst::geom::LinearTransform ( ) const

Convert the proxy to an lsst::geom::LinearTransform.

Definition at line 42 of file GridTransform.cc.

42  {
43  return lsst::geom::LinearTransform(_eig.operatorInverseSqrt());
44 }

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