Gaussian2DParam.h
Classes
- Gaussian2DParam -- Parameter handling for 2 dimensional Gaussian class (full description)
Types
- HEIGHT = 0
-
- XCENTER
-
- YCENTER
-
- YWIDTH
-
- RATIO
-
- PANGLE
-
Interface
- Public Members
- Gaussian2DParam()
- Gaussian2DParam(const T &height, const Vector<T> ¢er, const Vector<T> &width, const T &pa)
- Gaussian2DParam(const T &height, const T &xCenter, const T &yCenter, const T &majorAxis, const T &axialRatio, const T &pa)
- Gaussian2DParam(const Gaussian2DParam<T> &other)
- template <class W> Gaussian2DParam(const Gaussian2DParam<W> &other) : Function<T>(other), fwhm2int(T(1.0)/sqrt(log(T(16.0))))
- Gaussian2DParam<T> &operator=(const Gaussian2DParam<T> &other)
- virtual ~Gaussian2DParam()
- virtual uInt ndim() const
- virtual const String &name() const
- T height() const
- void setHeight(const T &height)
- T flux() const
- void setFlux(const T &flux)
- Vector<T> center() const
- void setCenter(const Vector<T> ¢er)
- T xCenter() const
- void setXcenter(const T &cnter)
- T yCenter() const
- void setYcenter(const T &cnter)
- Vector<T> width() const
- void setWidth(const Vector<T> &width)
- T majorAxis() const
- void setMajorAxis(const T &width)
- T minorAxis() const
- void setMinorAxis(const T &width)
- T axialRatio() const
- void setAxialRatio(const T &axialRatio)
- T PA() const
- void setPA(const T &pa)
Review Status
- Reviewed By:
- mwieringa
- Date Reviewed:
- 1996/10/d24
- Programs:
- Tests:
Prerequisite
Etymology
A 2-dimensional Gaussian's parameters.
Synopsis
A Gaussian2D is described by a height, center, and width,
and position angle.
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 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 counter-clockwise, 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.
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.
The parameter interface (see
FunctionParam class),
is used to provide an interface to the
Fitting classes.
There are 6 parameters that are used to describe the Gaussian:
- The height of the Gaussian. This is identical to the value
returned using the height member function.
- The center of the Gaussian in the x direction. This is identical to
the value returned using the xCenter member function.
- The center of the Gaussian in the y direction. This is identical to
the value returned using the yCenter member function.
- The width (FWHM) of the Gaussian on one axis. Initially this will be
the major axis, but if the parameters are adjusted by a Fitting
class, it may become the axis with the smaller width. To aid
convergence of the non-linear fitting routines this parameter is
allowed to be negative. This does not affect the shape of the
Gaussian as the squares of the widths are used when evaluating the
function.
- A modified axial ratio. This parameter is the ratio of the width on
the 'other' axis (which initially is the minor axis) and axis given
by parameter 4. Because these internal widths are allowed to be
negative and because there is no constraints on which axis is the
larger one the modified axial ratio is not constrained to be between
zero and one.
- The rotation angle. This represents the angle (in radians) between
the axis used by parameter 4, and the y axis, measured
counterclockwise. If parameter 4 represents the major axis width
then this parameter will be identical to the position angle,
otherwise it will be different by 90 degrees. The tight constraints
on the value of the rotation angle enforced by the setPA() function
are relaxed so that any value between -6000 and 6000 is allowed. It
is still interpreted in radians.
An enumeration for the HEIGHT, XCENTER,
YCENTER, YWIDTH, RATIO, PANGLE
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.
This class is in general used implicitly by the Gaussian2D
class only.
Other points to bear in mind when fitting this class to measured data
are:
- If you need to fit a circular Gaussian to data you MUST set the
axial ratio to one, and mask the position angle and axial ratio
parameters. This avoids rank deficiency in the fitting routines as
the position angle is meaningless when the major and minor axis are
equal.
- If fitting an elliptical Gaussian your initial model should not be a
circular Gaussian.
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;
Motivation
Gaussian2D objects allow us to represent models of
the sky in a more conventional way than the generic interface used in the
GaussianND class does.
Template Type Argument Requirements (T)
- T should have standard numerical operators and exp() function. Current
implementation only tested for real types (and AutoDiff of them).
Thrown Exceptions
- Assertion in debug mode if attempt is made to set a negative width
- AipsError if incorrect parameter number specified.
To Do
- Gaussians that know about their DFT's could be required eventually.
Member Description
Gaussian2DParam()
Gaussian2DParam(const T &height, const Vector<T> ¢er, const Vector<T> &width, const T &pa)
Gaussian2DParam(const T &height, const T &xCenter, const T &yCenter, const T &majorAxis, const T &axialRatio, const T &pa)
Constructs the two dimensional Gaussians. Defaults:
height=1, center=0, width(FWHM)=1, pa=0.
Gaussian2DParam(const Gaussian2DParam<T> &other)
template <class W> Gaussian2DParam(const Gaussian2DParam<W> &other) : Function<T>(other), fwhm2int(T(1.0)/sqrt(log(T(16.0))))
Copy constructor (deep copy)
Gaussian2DParam<T> &operator=(const Gaussian2DParam<T> &other)
Copy assignment (deep copy)
Destructor
virtual uInt ndim() const
Variable dimensionality
virtual const String &name() const
Give name of function
T height() const
void setHeight(const T &height)
Get or set the peak height of the Gaussian
T flux() const
void setFlux(const T &flux)
Get or set the analytical integrated area underneath the Gaussian.
Use these functions as an alternative to the height functions.
Get or set the center ordinate of the Gaussian
Set or get the FWHM of the Gaussian.
T PA() const
void setPA(const T &pa)
cached values of the cos and sine of thePA