25 #ifndef LSST_AFW_MATH_SHAPELETS_SHAPELETFUNCTION_H
26 #define LSST_AFW_MATH_SHAPELETS_SHAPELETFUNCTION_H
32 #include "lsst/afw/geom.h"
33 #include "lsst/afw/geom/ellipses.h"
34 #include "lsst/afw/image/Image.h"
38 namespace lsst {
namespace shapelet {
40 class ShapeletFunctionEvaluator;
68 typedef std::shared_ptr<ShapeletFunction>
Ptr;
69 typedef std::shared_ptr<ShapeletFunction const>
ConstPtr;
79 afw::geom::ellipses::Ellipse
const &
getEllipse()
const {
return _ellipse; }
82 afw::geom::ellipses::Ellipse &
getEllipse() {
return _ellipse; }
85 void setEllipse(afw::geom::ellipses::Ellipse
const & ellipse) { _ellipse = ellipse; }
93 _basisType = basisType;
103 ndarray::Array<double const,1,1>
const getCoefficients()
const {
return _coefficients; }
113 _ellipse.getCenter() += offset;
118 _ellipse.transform(transform).inPlace();
127 ndarray::Array<double,1,1>
const & coefficients
132 afw::geom::Point2D
const & center=afw::geom::Point2D());
136 int order,
BasisTypeEnum basisType,
double radius, afw::geom::Point2D
const & center,
137 ndarray::Array<double,1,1>
const & coefficients
142 afw::geom::ellipses::Ellipse
const & ellipse);
147 afw::geom::ellipses::Ellipse
const & ellipse,
148 ndarray::Array<double const,1,1>
const & coefficients
164 lsst::afw::geom::ellipses::Ellipse _ellipse;
165 ndarray::Array<double,1,1> _coefficients;
180 typedef std::shared_ptr<ShapeletFunctionEvaluator>
Ptr;
181 typedef std::shared_ptr<ShapeletFunctionEvaluator const>
ConstPtr;
185 return this->
operator()(afw::geom::Point2D(x, y));
190 return _normalization * _h.
sumEvaluation(_coefficients, _transform(point));
195 return _normalization * _h.
sumEvaluation(_coefficients, _transform(point));
200 ndarray::Array<double const,1>
const & x,
201 ndarray::Array<double const,1>
const & y
206 ndarray::Array<double,2,1>
const & array,
207 afw::geom::Point2I
const & xy0 = afw::geom::Point2I()
233 void _computeRawMoments(
double & q0, Eigen::Vector2d & q1, Eigen::Matrix2d & q2)
const;
235 double _normalization;
236 ndarray::Array<double const,1,1> _coefficients;
237 afw::geom::AffineTransform _transform;
247 #endif // !defined(LSST_AFW_MATH_SHAPELETS_SHAPELETFUNCTION_H)
void setEllipse(afw::geom::ellipses::Ellipse const &ellipse)
Set the ellipse.
double sumIntegration(ndarray::Array< double const, 1 > const &coeff, int xMoment=0, int yMoment=0) const
Integrate a simple unscaled shapelet expansion.
afw::geom::ellipses::Ellipse computeMoments() const
Return the unweighted dipole and quadrupole moments of the function as an ellipse.
double operator()(afw::geom::Extent2D const &point) const
Evaluate at the given point.
afw::geom::ellipses::Ellipse const & getEllipse() const
Get the ellipse (const).
ndarray::Array< double const, 1, 1 > const getCoefficients() const
Return the coefficient vector (const).
std::shared_ptr< ShapeletFunctionEvaluator > Ptr
ShapeletFunction convolve(ShapeletFunction const &other) const
Convolve the shapelet function.
void update(ShapeletFunction const &function)
Update the evaluator from the given function.
Constants, typedefs, and general-purpose functions for shapelets library.
void changeBasisType(BasisTypeEnum basisType)
Change the basis type and convert coefficients in-place correspondingly.
void addToImage(ndarray::Array< double, 2, 1 > const &array, afw::geom::Point2I const &xy0=afw::geom::Point2I()) const
Add the function to the given image-like array.
A class to evaluate HERMITE shapelet-related quantities.
double operator()(afw::geom::Point2D const &point) const
Evaluate at the given point.
ndarray::Array< double, 1, 1 > const getCoefficients()
Return the coefficient vector.
double sumEvaluation(ndarray::Array< double const, 1 > const &coeff, double x, double y, double *dx=0, double *dy=0) const
Evaluate a simple unscaled shapelet expansion at the given point.
ShapeletFunctionEvaluator(ShapeletFunction const &function)
Construct an evaluator for the given function.
Evaluates a MultiShapeletFunction.
BasisTypeEnum getBasisType() const
Return the basis type (HERMITE or LAGUERRE).
void transformInPlace(afw::geom::AffineTransform const &transform)
Transform the shapelet function by transforming the basis ellipse.
std::shared_ptr< ShapeletFunctionEvaluator const > ConstPtr
double operator()(double x, double y) const
Evaluate at the given point.
Evaluates a ShapeletFunction.
afw::geom::ellipses::Ellipse & getEllipse()
Get the ellipse (non-const).
void normalize(double value=1.0)
Normalize the integral of the shapelet function to the given value.
BasisTypeEnum
An enum that sets whether to use real-valued polar shapelets or Cartesian shapelets.
std::shared_ptr< ShapeletFunction const > ConstPtr
void shiftInPlace(afw::geom::Extent2D const &offset)
Shift the shapelet function by shifting the basis ellipse.
void addToImage(afw::image::Image< double > &image) const
Evaluate the function on the given image.
Evaluator evaluate() const
Construct a helper object that can efficiently evaluate the function.
std::shared_ptr< ShapeletFunction > Ptr
static void convertCoefficientVector(ndarray::Array< double, 1 > const &array, BasisTypeEnum input, BasisTypeEnum output, int order)
Convert a coefficient vector between basis types in-place.
ShapeletFunctionEvaluator Evaluator
static double const FLUX_FACTOR
ShapeletFunction()
Default constructor to appease SWIG (used by std::list). Not for use by users.
int getOrder() const
Return the maximum order (inclusive), either or .
A 2-d function defined by an expansion onto a Gauss-Laguerre or Gauss-Hermite basis.
double integrate() const
Compute the definite integral or integral moments.
ShapeletFunction & operator=(ShapeletFunction const &other)
Assignment (deep).