35 template <
typename Ellipticity_,
typename Radius_>
36 BaseCore::Registrar<Separable<Ellipticity_, Radius_> > Separable<Ellipticity_, Radius_>::registrar;
38 template <
typename Ellipticity_,
typename Radius_>
40 return "Separable" + Ellipticity_::getName() + Radius_::getName();
43 template <
typename Ellipticity_,
typename Radius_>
45 _ellipticity.normalize();
49 template <
typename Ellipticity_,
typename Radius_>
56 template <
typename Ellipticity_,
typename Radius_>
60 *iter++ = getRadius();
63 template <
typename Ellipticity_,
typename Radius_>
66 _ellipticity = other._ellipticity;
67 _radius = other._radius;
72 template <
typename Ellipticity_,
typename Radius_>
77 template <
typename Ellipticity_,
typename Radius_>
79 : _ellipticity(e1, e2), _radius(radius) {
83 template <
typename Ellipticity_,
typename Radius_>
86 : _ellipticity(complex), _radius(radius) {
90 template <
typename Ellipticity_,
typename Radius_>
92 : _ellipticity(ellipticity), _radius(radius) {
96 template <
typename Ellipticity_,
typename Radius_>
98 : _ellipticity(vector[0], vector[1]), _radius(vector[2]) {
102 template <
typename Ellipticity_,
typename Radius_>
105 _radius.assignToQuadrupole(distortion, ixx, iyy, ixy);
108 template <
typename Ellipticity_,
typename Radius_>
113 rhs.block<2, 2>(0, 0) = distortion.
dAssign(_ellipticity);
118 template <
typename Ellipticity_,
typename Radius_>
120 double ixx, iyy, ixy;
125 template <
typename Ellipticity_,
typename Radius_>
127 double& theta)
const {
128 double ixx, iyy, ixy;
134 template <
typename Ellipticity_,
typename Radius_>
137 _radius.assignFromQuadrupole(ixx, iyy, ixy, distortion);
138 _ellipticity = distortion;
141 template <
typename Ellipticity_,
typename Radius_>
147 lhs.block<2, 2>(0, 0) = _ellipticity.dAssign(distortion);
151 template <
typename Ellipticity_,
typename Radius_>
153 double ixx, iyy, ixy;
158 template <
typename Ellipticity_,
typename Radius_>
160 double ixx, iyy, ixy;
void _assignFromAxes(double a, double b, double theta) override
static Jacobian _dAssignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
static Jacobian _dAssignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
void _assignToQuadrupole(double &ixx, double &iyy, double &ixy) const override
Jacobian _dAssignFromQuadrupole(double ixx, double iyy, double ixy) override
Jacobian _dAssignFromAxes(double a, double b, double theta) override
static void _assignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
Jacobian _dAssignToAxes(double &a, double &b, double &theta) const override
ItemVariant const * other
void writeParameters(double *iter) const override
Jacobian _dAssignToQuadrupole(double &ixx, double &iyy, double &ixy) const override
std::string getName() const override
Return a string that identifies this parametrization.
void normalize() override
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Jacobian dAssign(Distortion const &other)
A base class for image defects.
Separable(double e1=0.0, double e2=0.0, double radius=Radius(), bool normalize=true)
Construct from parameter values.
Eigen::Vector3d ParameterVector
Parameter vector type.
static void _assignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
An ellipse core with a complex ellipticity and radius parameterization.
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
void readParameters(double const *iter) override
void _assignFromQuadrupole(double ixx, double iyy, double ixy) override
Separable & operator=(Separable const &other)
Standard assignment.
A complex ellipticity with magnitude .
void _assignToAxes(double &a, double &b, double &theta) const override