LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
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: