LSSTApplications  18.1.0
LSSTDataManagementBasePackage
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | List of all members
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ > Class Template Reference

An ellipse core with a complex ellipticity and radius parameterization. More...

#include <radii.h>

Inheritance diagram for lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >:
lsst::afw::geom::ellipses::BaseCore

Public Types

enum  ParameterEnum { E1 = 0, E2 = 1, RADIUS = 2 }
 
typedef Ellipticity_ Ellipticity
 
typedef Radius_ Radius
 
typedef Eigen::Vector3d ParameterVector
 Parameter vector type. More...
 
typedef Eigen::Matrix3d Jacobian
 Parameter Jacobian matrix type. More...
 

Public Member Functions

double const getE1 () const
 
void setE1 (double e1)
 
double const getE2 () const
 
void setE2 (double e2)
 
Radius const & getRadius () const
 
RadiusgetRadius ()
 
void setRadius (double radius)
 
void setRadius (Radius const &radius)
 
Ellipticity const & getEllipticity () const
 
EllipticitygetEllipticity ()
 
std::shared_ptr< Separableclone () const
 Deep copy the ellipse core. More...
 
std::string getName () const override
 Return a string that identifies this parametrization. More...
 
void normalize () override
 Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normalized. More...
 
void readParameters (double const *iter) override
 
void writeParameters (double *iter) const override
 
Separableoperator= (Separable const &other)
 Standard assignment. More...
 
Separableoperator= (Separable &&other)
 
Separableoperator= (BaseCore const &other)
 Converting assignment. More...
 
 Separable (double e1=0.0, double e2=0.0, double radius=Radius(), bool normalize=true)
 Construct from parameter values. More...
 
 Separable (std::complex< double > const &complex, double radius=Radius(), bool normalize=true)
 Construct from parameter values. More...
 
 Separable (Ellipticity const &ellipticity, double radius=Radius(), bool normalize=true)
 Construct from parameter values. More...
 
 Separable (BaseCore::ParameterVector const &vector, bool normalize=false)
 Construct from a parameter vector. More...
 
 Separable (Separable const &other)
 Copy constructor. More...
 
 Separable (Separable &&other)
 
 ~Separable () override=default
 
 Separable (BaseCore const &other)
 Converting copy constructor. More...
 
 Separable (BaseCore::Transformer const &transformer)
 Converting copy constructor. More...
 
 Separable (BaseCore::Convolution const &convolution)
 Converting copy constructor. More...
 
void grow (double buffer)
 Increase the major and minor radii of the ellipse core by the given buffer. More...
 
void scale (double factor)
 Scale the size of the ellipse core by the given factor. More...
 
double getArea () const
 Return the area of the ellipse core. More...
 
double getDeterminantRadius () const
 Return the radius defined as the 4th root of the determinant of the quadrupole matrix. More...
 
double getTraceRadius () const
 Return the radius defined as the square root of one half the trace of the quadrupole matrix. More...
 
GridTransform const getGridTransform () const
 Return the transform that maps the ellipse to the unit circle. More...
 
lsst::geom::Extent2D computeDimensions () const
 Return the size of the bounding box for the ellipse core. More...
 
ParameterVector const getParameterVector () const
 Return the core parameters as a vector. More...
 
void setParameterVector (ParameterVector const &vector)
 Set the core parameters from a vector. More...
 
bool operator== (BaseCore const &other) const
 Compare two ellipse cores for equality. More...
 
bool operator!= (BaseCore const &other) const
 Compare two ellipse cores for inequality. More...
 
Jacobian dAssign (BaseCore const &other)
 Assign other to this and return the derivative of the conversion, d(this)/d(other). More...
 
template<typename Output >
Converter< Output > as () const
 Convert this to the core type specified as a template parameter. More...
 
Coordinate transforms

These member functions transform the ellipse by the given lsst::geom::LinearTransform.

The transform can be done in-place by calling inPlace() on the returned expression object, or returned as a new shared_ptr by calling copy().

Transformer transform (lsst::geom::LinearTransform const &transform)
 
Transformer const transform (lsst::geom::LinearTransform const &transform) const
 
Convolve two bivariate Gaussians defined by their 1-sigma ellipses.
Convolution convolve (BaseCore const &other)
 
Convolution const convolve (BaseCore const &other) const
 

Static Public Member Functions

static std::shared_ptr< BaseCoremake (std::string const &name)
 
static std::shared_ptr< BaseCoremake (std::string const &name, ParameterVector const &parameters)
 
static std::shared_ptr< BaseCoremake (std::string const &name, double v1, double v2, double v3)
 
static std::shared_ptr< BaseCoremake (std::string const &name, BaseCore const &other)
 
static std::shared_ptr< BaseCoremake (std::string const &name, Transformer const &other)
 
static std::shared_ptr< BaseCoremake (std::string const &name, Convolution const &other)
 

Protected Member Functions

std::shared_ptr< BaseCore_clone () const override
 
void _assignToQuadrupole (double &ixx, double &iyy, double &ixy) const override
 
void _assignFromQuadrupole (double ixx, double iyy, double ixy) override
 
void _assignToAxes (double &a, double &b, double &theta) const override
 
void _assignFromAxes (double a, double b, double theta) override
 
Jacobian _dAssignToQuadrupole (double &ixx, double &iyy, double &ixy) const override
 
Jacobian _dAssignFromQuadrupole (double ixx, double iyy, double ixy) override
 
Jacobian _dAssignToAxes (double &a, double &b, double &theta) const override
 
Jacobian _dAssignFromAxes (double a, double b, double theta) override
 

Static Protected Member Functions

static void registerSubclass (std::shared_ptr< BaseCore > const &example)
 
static void _assignQuadrupoleToAxes (double ixx, double iyy, double ixy, double &a, double &b, double &theta)
 
static Jacobian _dAssignQuadrupoleToAxes (double ixx, double iyy, double ixy, double &a, double &b, double &theta)
 
static void _assignAxesToQuadrupole (double a, double b, double theta, double &ixx, double &iyy, double &ixy)
 
static Jacobian _dAssignAxesToQuadrupole (double a, double b, double theta, double &ixx, double &iyy, double &ixy)
 

Detailed Description

template<typename Ellipticity_, typename Radius_>
class lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >

An ellipse core with a complex ellipticity and radius parameterization.

Definition at line 44 of file radii.h.

Member Typedef Documentation

◆ Ellipticity

template<typename Ellipticity_, typename Radius_>
typedef Ellipticity_ lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Ellipticity

Definition at line 54 of file Separable.h.

◆ Jacobian

typedef Eigen::Matrix3d lsst::afw::geom::ellipses::BaseCore::Jacobian
inherited

Parameter Jacobian matrix type.

Definition at line 64 of file BaseCore.h.

◆ ParameterVector

typedef Eigen::Vector3d lsst::afw::geom::ellipses::BaseCore::ParameterVector
inherited

Parameter vector type.

Definition at line 61 of file BaseCore.h.

◆ Radius

template<typename Ellipticity_, typename Radius_>
typedef Radius_ lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Radius

Definition at line 55 of file Separable.h.

Member Enumeration Documentation

◆ ParameterEnum

template<typename Ellipticity_, typename Radius_>
enum lsst::afw::geom::ellipses::Separable::ParameterEnum

Constructor & Destructor Documentation

◆ Separable() [1/9]

template<typename Ellipticity_ , typename Radius_ >
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( double  e1 = 0.0,
double  e2 = 0.0,
double  radius = Radius(),
bool  normalize = true 
)
explicit

Construct from parameter values.

Definition at line 78 of file Separable.cc.

79  : _ellipticity(e1, e2), _radius(radius) {
80  if (normalize) this->normalize();
81 }
void normalize() override
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Definition: Separable.cc:44

◆ Separable() [2/9]

template<typename Ellipticity_ , typename Radius_ >
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( std::complex< double > const &  complex,
double  radius = Radius(),
bool  normalize = true 
)
explicit

Construct from parameter values.

Definition at line 84 of file Separable.cc.

86  : _ellipticity(complex), _radius(radius) {
87  if (normalize) this->normalize();
88 }
void normalize() override
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Definition: Separable.cc:44

◆ Separable() [3/9]

template<typename Ellipticity_ , typename Radius_ >
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( Ellipticity const &  ellipticity,
double  radius = Radius(),
bool  normalize = true 
)
explicit

Construct from parameter values.

Definition at line 91 of file Separable.cc.

92  : _ellipticity(ellipticity), _radius(radius) {
93  if (normalize) this->normalize();
94 }
void normalize() override
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Definition: Separable.cc:44

◆ Separable() [4/9]

template<typename Ellipticity_ , typename Radius_ >
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( BaseCore::ParameterVector const &  vector,
bool  normalize = false 
)
explicit

Construct from a parameter vector.

Definition at line 97 of file Separable.cc.

98  : _ellipticity(vector[0], vector[1]), _radius(vector[2]) {
99  if (normalize) this->normalize();
100 }
void normalize() override
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Definition: Separable.cc:44

◆ Separable() [5/9]

template<typename Ellipticity_, typename Radius_>
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( Separable< Ellipticity_, Radius_ > const &  other)
inline

Copy constructor.

Definition at line 111 of file Separable.h.

111 : _ellipticity(other._ellipticity), _radius(other._radius) {}
ItemVariant const * other
Definition: Schema.cc:56

◆ Separable() [6/9]

template<typename Ellipticity_, typename Radius_>
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( Separable< Ellipticity_, Radius_ > &&  other)
inline

Definition at line 114 of file Separable.h.

114 : Separable(other) {}
Separable(double e1=0.0, double e2=0.0, double radius=Radius(), bool normalize=true)
Construct from parameter values.
Definition: Separable.cc:78
ItemVariant const * other
Definition: Schema.cc:56

◆ ~Separable()

template<typename Ellipticity_, typename Radius_>
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::~Separable ( )
overridedefault

◆ Separable() [7/9]

template<typename Ellipticity_, typename Radius_>
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( BaseCore const &  other)
inline

Converting copy constructor.

Definition at line 119 of file Separable.h.

119 { *this = other; }
ItemVariant const * other
Definition: Schema.cc:56

◆ Separable() [8/9]

template<typename Ellipticity_, typename Radius_>
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( BaseCore::Transformer const &  transformer)
inline

Converting copy constructor.

Definition at line 122 of file Separable.h.

122 { transformer.apply(*this); }

◆ Separable() [9/9]

template<typename Ellipticity_, typename Radius_>
lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::Separable ( BaseCore::Convolution const &  convolution)
inline

Converting copy constructor.

Definition at line 125 of file Separable.h.

125 { convolution.apply(*this); }

Member Function Documentation

◆ _assignAxesToQuadrupole()

void lsst::afw::geom::ellipses::BaseCore::_assignAxesToQuadrupole ( double  a,
double  b,
double  theta,
double &  ixx,
double &  iyy,
double &  ixy 
)
staticprotectedinherited

Definition at line 219 of file BaseCore.cc.

220  {
221  a *= a;
222  b *= b;
223  double c = std::cos(theta);
224  double s = std::sin(theta);
225  ixy = (a - b) * c * s;
226  c *= c;
227  s *= s;
228  ixx = c * a + s * b;
229  iyy = s * a + c * b;
230 }
table::Key< int > b
table::Key< int > a
T sin(T... args)
T cos(T... args)
solver_t * s

◆ _assignFromAxes()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_assignFromAxes ( double  a,
double  b,
double  theta 
)
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 152 of file Separable.cc.

152  {
153  double ixx, iyy, ixy;
154  BaseCore::_assignAxesToQuadrupole(a, b, theta, ixx, iyy, ixy);
155  this->_assignFromQuadrupole(ixx, iyy, ixy);
156 }
table::Key< int > b
table::Key< int > a
static void _assignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
Definition: BaseCore.cc:219
void _assignFromQuadrupole(double ixx, double iyy, double ixy) override
Definition: Separable.cc:135

◆ _assignFromQuadrupole()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_assignFromQuadrupole ( double  ixx,
double  iyy,
double  ixy 
)
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 135 of file Separable.cc.

135  {
136  Distortion distortion;
137  _radius.assignFromQuadrupole(ixx, iyy, ixy, distortion);
138  _ellipticity = distortion;
139 }

◆ _assignQuadrupoleToAxes()

void lsst::afw::geom::ellipses::BaseCore::_assignQuadrupoleToAxes ( double  ixx,
double  iyy,
double  ixy,
double &  a,
double &  b,
double &  theta 
)
staticprotectedinherited

Definition at line 184 of file BaseCore.cc.

185  {
186  double xx_p_yy = ixx + iyy;
187  double xx_m_yy = ixx - iyy;
188  double t = std::sqrt(xx_m_yy * xx_m_yy + 4 * ixy * ixy);
189  a = std::sqrt(0.5 * (xx_p_yy + t));
190  b = std::sqrt(0.5 * (xx_p_yy - t));
191  theta = 0.5 * std::atan2(2.0 * ixy, xx_m_yy);
192 }
table::Key< int > b
table::Key< int > a
T atan2(T... args)
T sqrt(T... args)

◆ _assignToAxes()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_assignToAxes ( double &  a,
double &  b,
double &  theta 
) const
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 119 of file Separable.cc.

119  {
120  double ixx, iyy, ixy;
121  this->_assignToQuadrupole(ixx, iyy, ixy);
122  BaseCore::_assignQuadrupoleToAxes(ixx, iyy, ixy, a, b, theta);
123 }
void _assignToQuadrupole(double &ixx, double &iyy, double &ixy) const override
Definition: Separable.cc:103
table::Key< int > b
table::Key< int > a
static void _assignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
Definition: BaseCore.cc:184

◆ _assignToQuadrupole()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_assignToQuadrupole ( double &  ixx,
double &  iyy,
double &  ixy 
) const
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 103 of file Separable.cc.

103  {
104  Distortion distortion(_ellipticity);
105  _radius.assignToQuadrupole(distortion, ixx, iyy, ixy);
106 }

◆ _clone()

template<typename Ellipticity_, typename Radius_>
std::shared_ptr<BaseCore> lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_clone ( ) const
inlineoverrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 128 of file Separable.h.

128 { return std::make_shared<Separable>(*this); }

◆ _dAssignAxesToQuadrupole()

BaseCore::Jacobian lsst::afw::geom::ellipses::BaseCore::_dAssignAxesToQuadrupole ( double  a,
double  b,
double  theta,
double &  ixx,
double &  iyy,
double &  ixy 
)
staticprotectedinherited

Definition at line 232 of file BaseCore.cc.

233  {
234  Jacobian m;
235  m.col(0).setConstant(2 * a);
236  m.col(1).setConstant(2 * b);
237  a *= a;
238  b *= b;
239  m.col(2).setConstant(a - b);
240  double c = std::cos(theta);
241  double s = std::sin(theta);
242  double cs = c * s;
243  ixy = (a - b) * c * s;
244  c *= c;
245  s *= s;
246  ixx = c * a + s * b;
247  iyy = s * a + c * b;
248  m(0, 0) *= c;
249  m(0, 1) *= s;
250  m(0, 2) *= -2.0 * cs;
251  m(1, 0) *= s;
252  m(1, 1) *= c;
253  m(1, 2) *= 2.0 * cs;
254  m(2, 0) *= cs;
255  m(2, 1) *= -cs;
256  m(2, 2) *= (c - s);
257  return m;
258 }
table::Key< int > b
table::Key< int > a
T sin(T... args)
T cos(T... args)
solver_t * s
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64
int m
Definition: SpanSet.cc:49

◆ _dAssignFromAxes()

template<typename Ellipticity_ , typename Radius_ >
BaseCore::Jacobian lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_dAssignFromAxes ( double  a,
double  b,
double  theta 
)
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 159 of file Separable.cc.

159  {
160  double ixx, iyy, ixy;
161  BaseCore::Jacobian rhs = BaseCore::_dAssignAxesToQuadrupole(a, b, theta, ixx, iyy, ixy);
162  BaseCore::Jacobian lhs = this->_dAssignFromQuadrupole(ixx, iyy, ixy);
163  return lhs * rhs;
164 }
static Jacobian _dAssignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
Definition: BaseCore.cc:232
table::Key< int > b
Jacobian _dAssignFromQuadrupole(double ixx, double iyy, double ixy) override
Definition: Separable.cc:142
table::Key< int > a
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64

◆ _dAssignFromQuadrupole()

template<typename Ellipticity_ , typename Radius_ >
BaseCore::Jacobian lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_dAssignFromQuadrupole ( double  ixx,
double  iyy,
double  ixy 
)
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 142 of file Separable.cc.

143  {
144  Distortion distortion;
145  BaseCore::Jacobian rhs = _radius.dAssignFromQuadrupole(ixx, iyy, ixy, distortion);
146  BaseCore::Jacobian lhs = BaseCore::Jacobian::Identity();
147  lhs.block<2, 2>(0, 0) = _ellipticity.dAssign(distortion);
148  return lhs * rhs;
149 }
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64

◆ _dAssignQuadrupoleToAxes()

BaseCore::Jacobian lsst::afw::geom::ellipses::BaseCore::_dAssignQuadrupoleToAxes ( double  ixx,
double  iyy,
double  ixy,
double &  a,
double &  b,
double &  theta 
)
staticprotectedinherited

Definition at line 194 of file BaseCore.cc.

195  {
196  double xx_p_yy = ixx + iyy;
197  double xx_m_yy = ixx - iyy;
198  double t2 = xx_m_yy * xx_m_yy + 4.0 * ixy * ixy;
199  Eigen::Vector3d dt2(2.0 * xx_m_yy, -2.0 * xx_m_yy, 8.0 * ixy);
200  double t = std::sqrt(t2);
201  a = std::sqrt(0.5 * (xx_p_yy + t));
202  b = std::sqrt(0.5 * (xx_p_yy - t));
203  theta = 0.5 * std::atan2(2.0 * ixy, xx_m_yy);
204  Jacobian m = Jacobian::Zero();
205  m(0, 0) = 0.25 * (1.0 + 0.5 * dt2[0] / t) / a;
206  m(0, 1) = 0.25 * (1.0 + 0.5 * dt2[1] / t) / a;
207  m(0, 2) = 0.25 * (0.5 * dt2[2] / t) / a;
208  m(1, 0) = 0.25 * (1.0 - 0.5 * dt2[0] / t) / b;
209  m(1, 1) = 0.25 * (1.0 - 0.5 * dt2[1] / t) / b;
210  m(1, 2) = 0.25 * (-0.5 * dt2[2] / t) / b;
211 
212  m.row(2).setConstant(1.0 / (t * t));
213  m(2, 0) *= -ixy;
214  m(2, 1) *= ixy;
215  m(2, 2) *= xx_m_yy;
216  return m;
217 }
table::Key< int > b
table::Key< int > a
T atan2(T... args)
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64
int m
Definition: SpanSet.cc:49
T sqrt(T... args)

◆ _dAssignToAxes()

template<typename Ellipticity_ , typename Radius_ >
BaseCore::Jacobian lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_dAssignToAxes ( double &  a,
double &  b,
double &  theta 
) const
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 126 of file Separable.cc.

127  {
128  double ixx, iyy, ixy;
129  BaseCore::Jacobian rhs = this->_dAssignToQuadrupole(ixx, iyy, ixy);
130  BaseCore::Jacobian lhs = BaseCore::_dAssignQuadrupoleToAxes(ixx, iyy, ixy, a, b, theta);
131  return lhs * rhs;
132 }
static Jacobian _dAssignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
Definition: BaseCore.cc:194
table::Key< int > b
table::Key< int > a
Jacobian _dAssignToQuadrupole(double &ixx, double &iyy, double &ixy) const override
Definition: Separable.cc:109
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64

◆ _dAssignToQuadrupole()

template<typename Ellipticity_ , typename Radius_ >
BaseCore::Jacobian lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::_dAssignToQuadrupole ( double &  ixx,
double &  iyy,
double &  ixy 
) const
overrideprotectedvirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 109 of file Separable.cc.

110  {
111  Distortion distortion;
112  BaseCore::Jacobian rhs = Jacobian::Identity();
113  rhs.block<2, 2>(0, 0) = distortion.dAssign(_ellipticity);
114  BaseCore::Jacobian lhs = _radius.dAssignToQuadrupole(distortion, ixx, iyy, ixy);
115  return lhs * rhs;
116 }
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64

◆ as()

template<typename Output >
BaseCore::Converter< Output > lsst::afw::geom::ellipses::BaseCore::as ( ) const
inlineinherited

Convert this to the core type specified as a template parameter.

Definition at line 240 of file BaseCore.h.

240  {
241  return Converter<Output>(*this);
242 }

◆ clone()

template<typename Ellipticity_, typename Radius_>
std::shared_ptr<Separable> lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::clone ( ) const
inline

Deep copy the ellipse core.

Definition at line 72 of file Separable.h.

Separable(double e1=0.0, double e2=0.0, double radius=Radius(), bool normalize=true)
Construct from parameter values.
Definition: Separable.cc:78
std::shared_ptr< BaseCore > _clone() const override
Definition: Separable.h:128
T static_pointer_cast(T... args)

◆ computeDimensions()

lsst::geom::Extent2D lsst::afw::geom::ellipses::BaseCore::computeDimensions ( ) const
inherited

Return the size of the bounding box for the ellipse core.

Definition at line 130 of file BaseCore.cc.

130  {
131  double a, b, theta;
132  _assignToAxes(a, b, theta);
133  double c = std::cos(theta);
134  double s = std::sin(theta);
135  c *= c;
136  s *= s;
137  b *= b;
138  a *= a;
139  lsst::geom::Extent2D dimensions(std::sqrt(b * s + a * c), std::sqrt(a * s + b * c));
140  dimensions *= 2;
141  return dimensions;
142 }
afw::table::PointKey< int > dimensions
Definition: GaussianPsf.cc:49
table::Key< int > b
table::Key< int > a
T sin(T... args)
T cos(T... args)
virtual void _assignToAxes(double &a, double &b, double &theta) const =0
solver_t * s
T sqrt(T... args)

◆ convolve() [1/2]

BaseCore::Convolution lsst::afw::geom::ellipses::BaseCore::convolve ( BaseCore const &  other)
inlineinherited

Definition at line 93 of file Convolution.h.

93  {
94  return BaseCore::Convolution(*this, other);
95 }
ItemVariant const * other
Definition: Schema.cc:56

◆ convolve() [2/2]

BaseCore::Convolution const lsst::afw::geom::ellipses::BaseCore::convolve ( BaseCore const &  other) const
inlineinherited

Definition at line 97 of file Convolution.h.

97  {
98  return BaseCore::Convolution(const_cast<BaseCore &>(*this), other);
99 }
ItemVariant const * other
Definition: Schema.cc:56

◆ dAssign()

BaseCore::Jacobian lsst::afw::geom::ellipses::BaseCore::dAssign ( BaseCore const &  other)
inherited

Assign other to this and return the derivative of the conversion, d(this)/d(other).

Definition at line 169 of file BaseCore.cc.

169  {
170  if (getName() == other.getName()) {
171  this->operator=(other);
172  return Jacobian::Identity();
173  }
174  // We use Quadrupole instead of Axes here because the ambiguity of the position angle
175  // in the circular case causes some of the Jacobians to/from Axes to be undefined for
176  // exact circles. Quadrupoles don't have that problem, and the Axes-to-Axes case is
177  // handled by the above if block.
178  double ixx, iyy, ixy;
179  Jacobian rhs = other._dAssignToQuadrupole(ixx, iyy, ixy);
180  Jacobian lhs = _dAssignFromQuadrupole(ixx, iyy, ixy);
181  return lhs * rhs;
182 }
BaseCore & operator=(BaseCore const &other)
Set the parameters of this ellipse core from another.
Definition: BaseCore.cc:156
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Definition: BaseCore.h:64
virtual std::string getName() const =0
Return a string that identifies this parametrization.
ItemVariant const * other
Definition: Schema.cc:56
virtual Jacobian _dAssignFromQuadrupole(double ixx, double iyy, double ixy)=0

◆ getArea()

double lsst::afw::geom::ellipses::BaseCore::getArea ( ) const
inherited

Return the area of the ellipse core.

Definition at line 112 of file BaseCore.cc.

112  {
113  double a, b, theta;
114  _assignToAxes(a, b, theta);
115  return a * b * lsst::geom::PI;
116 }
table::Key< int > b
table::Key< int > a
virtual void _assignToAxes(double &a, double &b, double &theta) const =0
double constexpr PI
The ratio of a circle&#39;s circumference to diameter.
Definition: Angle.h:39

◆ getDeterminantRadius()

double lsst::afw::geom::ellipses::BaseCore::getDeterminantRadius ( ) const
inherited

Return the radius defined as the 4th root of the determinant of the quadrupole matrix.

The determinant radius is equal to the standard radius for a circle, and its square times pi is the area of the ellipse.

Definition at line 118 of file BaseCore.cc.

118  {
119  double a, b, theta;
120  _assignToAxes(a, b, theta);
121  return std::sqrt(a * b);
122 }
table::Key< int > b
table::Key< int > a
virtual void _assignToAxes(double &a, double &b, double &theta) const =0
T sqrt(T... args)

◆ getE1()

template<typename Ellipticity_, typename Radius_>
double const lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getE1 ( ) const
inline

Definition at line 57 of file Separable.h.

57 { return _ellipticity.getE1(); }

◆ getE2()

template<typename Ellipticity_, typename Radius_>
double const lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getE2 ( ) const
inline

Definition at line 60 of file Separable.h.

60 { return _ellipticity.getE2(); }

◆ getEllipticity() [1/2]

template<typename Ellipticity_, typename Radius_>
Ellipticity const& lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getEllipticity ( ) const
inline

Definition at line 68 of file Separable.h.

68 { return _ellipticity; }

◆ getEllipticity() [2/2]

template<typename Ellipticity_, typename Radius_>
Ellipticity& lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getEllipticity ( )
inline

Definition at line 69 of file Separable.h.

69 { return _ellipticity; }

◆ getGridTransform()

BaseCore::GridTransform const lsst::afw::geom::ellipses::BaseCore::getGridTransform ( ) const
inlineinherited

Return the transform that maps the ellipse to the unit circle.

The returned proxy object is implicitly convertible to lsst::geom::LinearTransform and also supports differentiation.

Definition at line 116 of file GridTransform.h.

116  {
117  return BaseCore::GridTransform(*this);
118 }

◆ getName()

template<typename Ellipticity_ , typename Radius_ >
std::string lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getName ( ) const
overridevirtual

Return a string that identifies this parametrization.

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 39 of file Separable.cc.

39  {
40  return "Separable" + Ellipticity_::getName() + Radius_::getName();
41 }

◆ getParameterVector()

BaseCore::ParameterVector const lsst::afw::geom::ellipses::BaseCore::getParameterVector ( ) const
inherited

Return the core parameters as a vector.

Definition at line 144 of file BaseCore.cc.

144  {
145  ParameterVector r;
146  writeParameters(r.data());
147  return r;
148 }
Eigen::Vector3d ParameterVector
Parameter vector type.
Definition: BaseCore.h:61
virtual void writeParameters(double *iter) const =0

◆ getRadius() [1/2]

template<typename Ellipticity_, typename Radius_>
Radius const& lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getRadius ( ) const
inline

Definition at line 63 of file Separable.h.

63 { return _radius; }

◆ getRadius() [2/2]

template<typename Ellipticity_, typename Radius_>
Radius& lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::getRadius ( )
inline

Definition at line 64 of file Separable.h.

64 { return _radius; }

◆ getTraceRadius()

double lsst::afw::geom::ellipses::BaseCore::getTraceRadius ( ) const
inherited

Return the radius defined as the square root of one half the trace of the quadrupole matrix.

The trace radius is equal to the standard radius for a circle.

Definition at line 124 of file BaseCore.cc.

124  {
125  double ixx, iyy, ixy;
126  _assignToQuadrupole(ixx, iyy, ixy);
127  return std::sqrt(0.5 * (ixx + iyy));
128 }
T sqrt(T... args)
virtual void _assignToQuadrupole(double &ixx, double &iyy, double &ixy) const =0

◆ grow()

void lsst::afw::geom::ellipses::BaseCore::grow ( double  buffer)
inherited

Increase the major and minor radii of the ellipse core by the given buffer.

Definition at line 96 of file BaseCore.cc.

96  {
97  double a, b, theta;
98  _assignToAxes(a, b, theta);
99  a += buffer;
100  b += buffer;
101  _assignFromAxes(a, b, theta);
102 }
table::Key< int > b
table::Key< int > a
virtual void _assignFromAxes(double a, double b, double theta)=0
virtual void _assignToAxes(double &a, double &b, double &theta) const =0

◆ make() [1/6]

std::shared_ptr< BaseCore > lsst::afw::geom::ellipses::BaseCore::make ( std::string const &  name)
staticinherited

Definition at line 56 of file BaseCore.cc.

56  {
57  std::shared_ptr<BaseCore> result = getRegistryCopy(name);
58  *result = Quadrupole();
59  return result;
60 }
py::object result
Definition: schema.cc:418

◆ make() [2/6]

std::shared_ptr< BaseCore > lsst::afw::geom::ellipses::BaseCore::make ( std::string const &  name,
ParameterVector const &  parameters 
)
staticinherited

Definition at line 62 of file BaseCore.cc.

62  {
63  std::shared_ptr<BaseCore> result = getRegistryCopy(name);
64  result->setParameterVector(parameters);
65  return result;
66 }
py::object result
Definition: schema.cc:418

◆ make() [3/6]

std::shared_ptr< BaseCore > lsst::afw::geom::ellipses::BaseCore::make ( std::string const &  name,
double  v1,
double  v2,
double  v3 
)
staticinherited

Definition at line 68 of file BaseCore.cc.

68  {
69  std::shared_ptr<BaseCore> result = getRegistryCopy(name);
70  result->setParameterVector(ParameterVector(v1, v2, v3));
71  return result;
72 }
py::object result
Definition: schema.cc:418
Eigen::Vector3d ParameterVector
Parameter vector type.
Definition: BaseCore.h:61

◆ make() [4/6]

std::shared_ptr< BaseCore > lsst::afw::geom::ellipses::BaseCore::make ( std::string const &  name,
BaseCore const &  other 
)
staticinherited

Definition at line 74 of file BaseCore.cc.

74  {
75  std::shared_ptr<BaseCore> result = getRegistryCopy(name);
76  *result = other;
77  return result;
78 }
py::object result
Definition: schema.cc:418
ItemVariant const * other
Definition: Schema.cc:56

◆ make() [5/6]

std::shared_ptr< BaseCore > lsst::afw::geom::ellipses::BaseCore::make ( std::string const &  name,
Transformer const &  other 
)
staticinherited

Definition at line 80 of file BaseCore.cc.

80  {
81  std::shared_ptr<BaseCore> result = getRegistryCopy(name);
82  other.apply(*result);
83  return result;
84 }
py::object result
Definition: schema.cc:418
ItemVariant const * other
Definition: Schema.cc:56

◆ make() [6/6]

std::shared_ptr< BaseCore > lsst::afw::geom::ellipses::BaseCore::make ( std::string const &  name,
Convolution const &  other 
)
staticinherited

Definition at line 86 of file BaseCore.cc.

86  {
87  std::shared_ptr<BaseCore> result = getRegistryCopy(name);
88  other.apply(*result);
89  return result;
90 }
py::object result
Definition: schema.cc:418
ItemVariant const * other
Definition: Schema.cc:56

◆ normalize()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::normalize ( )
overridevirtual

Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normalized.

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 44 of file Separable.cc.

44  {
45  _ellipticity.normalize();
46  _radius.normalize();
47 }

◆ operator!=()

bool lsst::afw::geom::ellipses::BaseCore::operator!= ( BaseCore const &  other) const
inlineinherited

Compare two ellipse cores for inequality.

Ellipses are only equal if they have the same type.

Definition at line 167 of file BaseCore.h.

167 { return !operator==(other); }
ItemVariant const * other
Definition: Schema.cc:56
bool operator==(BaseCore const &other) const
Compare two ellipse cores for equality.
Definition: BaseCore.cc:152

◆ operator=() [1/3]

template<typename Ellipticity_ , typename Radius_ >
Separable< Ellipticity_, Radius_ > & lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::operator= ( Separable< Ellipticity_, Radius_ > const &  other)

Standard assignment.

Definition at line 64 of file Separable.cc.

65  {
66  _ellipticity = other._ellipticity;
67  _radius = other._radius;
68  return *this;
69 }
ItemVariant const * other
Definition: Schema.cc:56

◆ operator=() [2/3]

template<typename Ellipticity_ , typename Radius_ >
Separable< Ellipticity_, Radius_ > & lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::operator= ( Separable< Ellipticity_, Radius_ > &&  other)

Definition at line 73 of file Separable.cc.

74  {
75  return *this = other;
76 }
ItemVariant const * other
Definition: Schema.cc:56

◆ operator=() [3/3]

template<typename Ellipticity_, typename Radius_>
Separable& lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::operator= ( BaseCore const &  other)
inline

Converting assignment.

Definition at line 93 of file Separable.h.

93  {
95  return *this;
96  }
BaseCore & operator=(BaseCore const &other)
Set the parameters of this ellipse core from another.
Definition: BaseCore.cc:156
ItemVariant const * other
Definition: Schema.cc:56

◆ operator==()

bool lsst::afw::geom::ellipses::BaseCore::operator== ( BaseCore const &  other) const
inherited

Compare two ellipse cores for equality.

Ellipse cores are only equal if they have the same type.

Definition at line 152 of file BaseCore.cc.

152  {
153  return getParameterVector() == other.getParameterVector() && getName() == other.getName();
154 }
ParameterVector const getParameterVector() const
Return the core parameters as a vector.
Definition: BaseCore.cc:144
virtual std::string getName() const =0
Return a string that identifies this parametrization.
ItemVariant const * other
Definition: Schema.cc:56

◆ readParameters()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::readParameters ( double const *  iter)
overridevirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 50 of file Separable.cc.

50  {
51  setE1(*iter++);
52  setE2(*iter++);
53  setRadius(*iter++);
54 }
void setRadius(double radius)
Definition: Separable.h:65

◆ registerSubclass()

void lsst::afw::geom::ellipses::BaseCore::registerSubclass ( std::shared_ptr< BaseCore > const &  example)
staticprotectedinherited

Definition at line 92 of file BaseCore.cc.

92  {
93  getRegistry()[example->getName()] = example;
94 }

◆ scale()

void lsst::afw::geom::ellipses::BaseCore::scale ( double  factor)
inherited

Scale the size of the ellipse core by the given factor.

Definition at line 104 of file BaseCore.cc.

104  {
105  double a, b, theta;
106  _assignToAxes(a, b, theta);
107  a *= factor;
108  b *= factor;
109  _assignFromAxes(a, b, theta);
110 }
table::Key< int > b
table::Key< int > a
virtual void _assignFromAxes(double a, double b, double theta)=0
virtual void _assignToAxes(double &a, double &b, double &theta) const =0

◆ setE1()

template<typename Ellipticity_, typename Radius_>
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::setE1 ( double  e1)
inline

Definition at line 58 of file Separable.h.

58 { _ellipticity.setE1(e1); }

◆ setE2()

template<typename Ellipticity_, typename Radius_>
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::setE2 ( double  e2)
inline

Definition at line 61 of file Separable.h.

61 { _ellipticity.setE2(e2); }

◆ setParameterVector()

void lsst::afw::geom::ellipses::BaseCore::setParameterVector ( ParameterVector const &  vector)
inherited

Set the core parameters from a vector.

Definition at line 150 of file BaseCore.cc.

150 { readParameters(p.data()); }
virtual void readParameters(double const *iter)=0

◆ setRadius() [1/2]

template<typename Ellipticity_, typename Radius_>
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::setRadius ( double  radius)
inline

Definition at line 65 of file Separable.h.

65 { _radius = radius; }

◆ setRadius() [2/2]

template<typename Ellipticity_, typename Radius_>
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::setRadius ( Radius const &  radius)
inline

Definition at line 66 of file Separable.h.

66 { _radius = radius; }

◆ transform() [1/2]

BaseCore::Transformer lsst::afw::geom::ellipses::BaseCore::transform ( lsst::geom::LinearTransform const &  transform)
inlineinherited

Definition at line 116 of file Transformer.h.

116  {
117  return BaseCore::Transformer(*this, transform);
118 }

◆ transform() [2/2]

BaseCore::Transformer const lsst::afw::geom::ellipses::BaseCore::transform ( lsst::geom::LinearTransform const &  transform) const
inlineinherited

Definition at line 120 of file Transformer.h.

120  {
121  return BaseCore::Transformer(const_cast<BaseCore &>(*this), transform);
122 }

◆ writeParameters()

template<typename Ellipticity_ , typename Radius_ >
void lsst::afw::geom::ellipses::Separable< Ellipticity_, Radius_ >::writeParameters ( double *  iter) const
overridevirtual

Implements lsst::afw::geom::ellipses::BaseCore.

Definition at line 57 of file Separable.cc.

57  {
58  *iter++ = getE1();
59  *iter++ = getE2();
60  *iter++ = getRadius();
61 }
double const getE1() const
Definition: Separable.h:57
double const getE2() const
Definition: Separable.h:60
Radius const & getRadius() const
Definition: Separable.h:63

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