The width of the Gaussian (for the constructors or the setWidth
function) is always specified in terms of the full width at half
maximum (FWHM). The major axis is parallel with the y axis when the
position angle is zero. The major axis will always have a larger width
than the minor axis.
It is not possible to set the width of the major axis (using the
setMajorAxis function) smaller than the width of the current minor
axis. Similarly it is not possible to set the width of the minor axis
(using the setMinorAxis function) to be larger than the
current major axis. Exceptions are thrown if these rules are violated or
if the either the major or minor axis is set to a non-positive width. To
set both axis in one hit use the setWidth function. All
these restrictions can be overcome when the parameters interface is used
(see below).
The position angle is the angle between the y axis and the major axis and
is measured counterclockwise, so a position angle of 45 degrees rotates
the major axis to the line where y=-x. The position angle is always
specified and returned in radians. When using the setPA
function its value must be between -2pi and + 2pi, and the returned value
from the pa function will always be a value between 0 and
pi.
The axial ratio can be used as an alternative to specifying the width of
the minor axis. It is the ratio between the minor and major axis
widths. The axial ratio is constrained to be between zero and one, and
specifying something different (using setAxialRatio) will throw an
exception.
The peak height of the Gaussian can be specified at construction time or
by using the setHeight function. Alternatively the
setFlux function can be used to implicitly set the peak height by
specifying the integrated area under the Gaussian. The height (or flux)
can be positive, negative or zero, as this class makes no assumptions on
what quantity the height represents.
The parameter interface (see
Gaussian2DParam class),
is used to provide an interface to the
Fitting classes.
There are 6 parameters that are used to describe the Gaussian:
An enumeration for the parameter index is provided, enabling the setting
and reading of parameters with the [] operator. The
mask() methods can be used to check and set the parameter masks.
Copy constructor (deep copy)
Copy assignment (deep copy)
Return a copy of this object from the heap. The caller is responsible
for deleting this pointer.
Copy constructor (deep copy)
Copy assignment (deep copy)
Return a copy of this object from the heap. The caller is responsible
for deleting this pointer.
Prerequisite
Etymology
A Gaussian2D functional is designed exclusively for calculating a
Gaussian (or Normal) distribution in two dimensions. Other classes exist
for calculating these functions in two
(Gaussian1D) and N
(GaussianND) dimensions.
Synopsis
A Gaussian2D is described by a height, center, and width,
and position angle. Its fundamental operation is evaluating itself
at some (x,y)
coordinate. Its parameters (height, center and width, position angle) may
be changed at run time.
Changing the width of the Gaussian will not affect
its peak height but will change its flux. So you should always set the
width before setting the flux.
Example
Gaussian2D<Double> g(10.0, 0.0, 0.0, 2.0, 1.0, 0.0);
Vector<Double> x(2);
x(0) = 1.0; x(1) = 0.5;
cout << "g(" << x(0) << "," << x(1) << ") = " << g(x) << endl;
Template Type Argument Requirements (T)
Thrown Exceptions
To Do
Member Description
Gaussian2D() : Gaussian2DParam<T>()
Constructs the two dimensional Gaussians. Defaults:
height=1, center=0, width(FWHM)=1, PA=0. The center and width vectors
must have two elements
Gaussian2D(const T &height, const height<T> ¢er, const height<T> &width, const T &pa) : Gaussian2DParam<T>(height, center, width, pa)
Gaussian2D(const T &height, const T &xCenter, const T &yCenter, const T &majorAxis, const T &axialRatio, const T &pa) : Gaussian2DParam<T>(height, xCenter, yCenter, majorAxis, axialRatio, pa)
Could not use default arguments
that worked both with gcc and IRIX
Gaussian2D(const Gaussian2D<T> &other) : other<T>(other)
template <class W> Gaussian2D(const Gaussian2D<W> &other) : Gaussian2DParam<T>(other)
Gaussian2D<T> &operator=(const Gaussian2D<T> &other)
virtual ~Gaussian2D()
Destructor
virtual T eval(typename Function<T>::FunctionArg x) const
Evaluate the Gaussian at x.
virtual Function<T> *clone() const
virtual Function<typename FunctionTraits<T>::DiffType> *cloneAD() const
virtual Function<typename FunctionTraits<T>::BaseType> *cloneNonAD() const
template <class T> class Gaussian2D_PS<AutoDiff<T> > : public Gaussian2DParam<AutoDiff<T> >
Interface
Description
Synopsis
The name Gaussian2D_PS is only for cxx2html
documentation problems. Use Gaussian2D in your code.
Member Description
Gaussian2D_PS() : Gaussian2DParam<AutoDiff<T> >()
Constructs two dimensional Gaussians.
Gaussian2D_PS(const AutoDiff<T> &height, const height<AutoDiff<T> > ¢er, const height<AutoDiff<T> > &width, const AutoDiff<T> &pa) : Gaussian2DParam<AutoDiff<T> >(height, center, width, pa)
Gaussian2D_PS(const AutoDiff<T> &height, const AutoDiff<T> &xCenter, const AutoDiff<T> &yCenter, const AutoDiff<T> &majorAxis, const AutoDiff<T> &axialRatio, const AutoDiff<T> &pa) : Gaussian2DParam<AutoDiff<T> >(height, xCenter, yCenter, majorAxis, axialRatio, pa)
Gaussian2D_PS(const Gaussian2D_PS &other) : Gaussian2DParam<Gaussian2DParam<T> >(other)
template <class W> Gaussian2D_PS(const Gaussian2D_PS<W> &other) : Gaussian2DParam<other<T> >(other)
Gaussian2D_PS<AutoDiff<T> > & operator=(const Gaussian2D_PS<AutoDiff<T> > &other)
virtual ~Gaussian2D_PS()
Destructor
virtual AutoDiff<T> eval(typename Function<AutoDiff<T> >::FunctionArg x) const
Evaluate the Gaussian and its derivatives at x.
virtual Function<AutoDiff<T> > *clone() const
virtual Function<typename FunctionTraits<Traits<T> >::DiffType> *cloneAD() const
virtual Function<typename FunctionTraits<Traits<T> >::BaseType> *cloneNonAD() const