25 #ifndef LSST_AFW_GEOM_ELLIPSES_BaseCore_h_INCLUDED 26 #define LSST_AFW_GEOM_ELLIPSES_BaseCore_h_INCLUDED 60 template <
typename Output>
91 void grow(
double buffer);
94 void scale(
double factor);
183 template <
typename Output>
195 template <
typename T>
217 virtual void _assignToAxes(
double& a,
double& b,
double& theta)
const = 0;
223 virtual Jacobian
_dAssignToAxes(
double& a,
double& b,
double& theta)
const = 0;
227 template <
typename Output>
233 operator Output()
const {
return Output(input); }
237 template <
typename Output>
246 #endif // !LSST_AFW_GEOM_ELLIPSES_BaseCore_h_INCLUDED static Jacobian _dAssignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
Jacobian dAssign(BaseCore const &other)
Assign other to this and return the derivative of the conversion, d(this)/d(other).
static Jacobian _dAssignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
std::shared_ptr< Output > copy() const
virtual Jacobian _dAssignToQuadrupole(double &ixx, double &iyy, double &ixy) const =0
virtual Jacobian _dAssignToAxes(double &a, double &b, double &theta) const =0
static void _assignQuadrupoleToAxes(double ixx, double iyy, double ixy, double &a, double &b, double &theta)
ItemVariant const * other
GridTransform const getGridTransform() const
Return the transform that maps the ellipse to the unit circle.
std::shared_ptr< BaseCore > clone() const
Deep-copy the Core.
lsst::geom::Extent2D computeDimensions() const
Return the size of the bounding box for the ellipse core.
double getTraceRadius() const
Return the radius defined as the square root of one half the trace of the quadrupole matrix...
static std::shared_ptr< BaseCore > make(std::string const &name)
void setParameterVector(ParameterVector const &vector)
Set the core parameters from a vector.
Converter< Output > as() const
Convert this to the core type specified as a template parameter.
ParameterVector const getParameterVector() const
Return the core parameters as a vector.
BaseCore & operator=(BaseCore const &other)
Set the parameters of this ellipse core from another.
A base class for image defects.
void grow(double buffer)
Increase the major and minor radii of the ellipse core by the given buffer.
virtual ~BaseCore()=default
Eigen::Vector3d ParameterVector
Parameter vector type.
Convolution convolve(BaseCore const &other)
virtual void _assignFromAxes(double a, double b, double theta)=0
void scale(double factor)
Scale the size of the ellipse core by the given factor.
static void _assignAxesToQuadrupole(double a, double b, double theta, double &ixx, double &iyy, double &ixy)
double getArea() const
Return the area of the ellipse core.
virtual void _assignToAxes(double &a, double &b, double &theta) const =0
bool operator!=(BaseCore const &other) const
Compare two ellipse cores for inequality.
virtual void normalize()=0
Put the parameters into a "standard form", and throw InvalidParameterError if they cannot be normaliz...
Eigen::Matrix3d Jacobian
Parameter Jacobian matrix type.
Transformer transform(lsst::geom::LinearTransform const &transform)
virtual std::shared_ptr< BaseCore > _clone() const =0
Converter(BaseCore const &input_)
A base class for parametrizations of the "core" of an ellipse - the ellipticity and size...
virtual void readParameters(double const *iter)=0
A functor that returns points on the boundary of the ellipse as a function of a parameter that runs b...
virtual std::string getName() const =0
Return a string that identifies this parametrization.
virtual Jacobian _dAssignFromAxes(double a, double b, double theta)=0
virtual Jacobian _dAssignFromQuadrupole(double ixx, double iyy, double ixy)=0
double getDeterminantRadius() const
Return the radius defined as the 4th root of the determinant of the quadrupole matrix.
static void registerSubclass(std::shared_ptr< BaseCore > const &example)
bool operator==(BaseCore const &other) const
Compare two ellipse cores for equality.
virtual void _assignToQuadrupole(double &ixx, double &iyy, double &ixy) const =0
A temporary-only expression object for ellipse core convolution.
virtual void writeParameters(double *iter) const =0
virtual void _assignFromQuadrupole(double ixx, double iyy, double ixy)=0