LSSTApplications  18.0.0+106,18.0.0+50,19.0.0,19.0.0+1,19.0.0+10,19.0.0+11,19.0.0+13,19.0.0+17,19.0.0+2,19.0.0-1-g20d9b18+6,19.0.0-1-g425ff20,19.0.0-1-g5549ca4,19.0.0-1-g580fafe+6,19.0.0-1-g6fe20d0+1,19.0.0-1-g7011481+9,19.0.0-1-g8c57eb9+6,19.0.0-1-gb5175dc+11,19.0.0-1-gdc0e4a7+9,19.0.0-1-ge272bc4+6,19.0.0-1-ge3aa853,19.0.0-10-g448f008b,19.0.0-12-g6990b2c,19.0.0-2-g0d9f9cd+11,19.0.0-2-g3d9e4fb2+11,19.0.0-2-g5037de4,19.0.0-2-gb96a1c4+3,19.0.0-2-gd955cfd+15,19.0.0-3-g2d13df8,19.0.0-3-g6f3c7dc,19.0.0-4-g725f80e+11,19.0.0-4-ga671dab3b+1,19.0.0-4-gad373c5+3,19.0.0-5-ga2acb9c+2,19.0.0-5-gfe96e6c+2,w.2020.01
LSSTDataManagementBasePackage
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

typedef Eigen::Matrix< double, 4, 3 > DerivativeMatrix
 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...
 
lsst::geom::LinearTransform invert () 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  typedef Separable<ReducedShear, DeterminantRadius> C;
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()); }
T sqrt(T... args)

◆ 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 }

◆ invert()

lsst::geom::LinearTransform lsst::afw::geom::ellipses::BaseCore::GridTransform::invert ( ) const
inline

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

Deprecated:
invert is deprecated in favor of inverted

Definition at line 77 of file GridTransform.h.

77  {
78  return inverted();
79  };
lsst::geom::LinearTransform inverted() const
Return the inverse of the lsst::geom::LinearTransform;.

◆ inverted()

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

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

Deprecated:
invert is deprecated in favor of inverted

Definition at line 96 of file GridTransform.cc.

96  {
97  return lsst::geom::LinearTransform(_eig.operatorSqrt());
98 }

◆ 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: