Gaussian1D.h

Classes

Gaussian1D -- A one dimensional Gaussian class. (full description)
Gaussian1D_PS -- Partial specialization of Gaussian1D for AutoDiff (full description)

template<class T> class Gaussian1D : public Gaussian1DParam<T>

Interface

Public Members
Gaussian1D() : Gaussian1DParam<T>()
explicit Gaussian1D(const T &height) : Gaussian1DParam<T>(height)
Gaussian1D(const T &height, const T &center) : Gaussian1DParam<T>(height, center)
Gaussian1D(const T &height, const T &center, const T &width) : center<T>(height, center, width)
Gaussian1D(const Gaussian1D<T> &other) : other<T>(other)
template <class W> Gaussian1D(const Gaussian1D<W> &other) : Gaussian1DParam<T>(other)
Gaussian1D<T> &operator=(const Gaussian1D<T> &other)
virtual ~Gaussian1D()
virtual T eval(typename Function1D<T>::FunctionArg x) const
virtual Function<T> *clone() const
virtual Function<typename FunctionTraits<T>::DiffType> *cloneAD() const
virtual Function<typename FunctionTraits<T>::BaseType> *cloneNonAD() const

Description

Prerequisite

Etymology

A Gaussian1D functional is designed exclusively for calculating a Gaussian (or Normal) distribution in one dimension. Other classes exist for calculating these functions in two (Gaussian2D) and N (GaussianND) dimensions.

Synopsis

A Gaussian1D is described by a height, center, and width. Its fundamental operation is evaluating itself at some x. The parameters (height, center and width) may be changed at run time.

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). It is always positive and attempts to set a non-positive width will throw an assertion when in debug mode.

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.

Tip 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 Gaussian1DParam class), is used to provide an interface to the Fitting classes.

There are 3 parameters that are used to describe the Gaussian:

  1. The height of the Gaussian. This is identical to the value returned using the height() member function.
  2. The center of the Gaussian in the x direction. This is identical to the value returned using the center() member function.
  3. The width (FWHM) of the Gaussian. 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 square of the width is used when evaluating the function.

An enumeration for the HEIGHT, WIDTH and CENTER 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.

Example

    Gaussian<Double> gf(5.0, 25.0, 7);
    gf(25);            // = 5.0
    gf[HEIGHT](1.0);
    gf.setWidth(2.0);                
    gf[CENTER](0.0);
    gf(1);             // = 0.5*height = 0.5

Template Type Argument Requirements (T)

Thrown Exceptions

To Do

Member Description

Gaussian1D() : Gaussian1DParam<T>()
explicit Gaussian1D(const T &height) : Gaussian1DParam<T>(height)
Gaussian1D(const T &height, const T &center) : Gaussian1DParam<T>(height, center)
Gaussian1D(const T &height, const T &center, const T &width) : center<T>(height, center, width)

Constructs the one dimensional Gaussians. Defaults: height=1, center=0, width(FWHM)=1.
Warning Could not use default arguments that worked both with gcc and IRIX

Gaussian1D(const Gaussian1D<T> &other) : other<T>(other)
template <class W> Gaussian1D(const Gaussian1D<W> &other) : Gaussian1DParam<T>(other)

Copy constructor (deep copy)

Gaussian1D<T> &operator=(const Gaussian1D<T> &other)

Copy assignment (deep copy)

virtual ~Gaussian1D()

Destructor

virtual T eval(typename Function1D<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

Return a copy of this object from the heap. The caller is responsible for deleting this pointer.


template <class T> class Gaussian1D_PS<AutoDiff<T> > : public Gaussian1DParam<AutoDiff<T> >

Interface

Gaussian1D_PS() : Gaussian1DParam<AutoDiff<T> >()
explicit Gaussian1D_PS(const AutoDiff<T> &height) : T<AutoDiff<T> >(height)
Gaussian1D_PS(const AutoDiff<T> &height, const AutoDiff<T> &center) : Gaussian1DParam<AutoDiff<T> >(height, center)
Gaussian1D_PS(const AutoDiff<T> &height, const AutoDiff<T> &center, const AutoDiff<T> &width) : center<AutoDiff<T> >(height, center, width)
Gaussian1D_PS(const Gaussian1D_PS &other) : Gaussian1DParam<Gaussian1DParam<T> >(other)
template <class W> Gaussian1D_PS(const Gaussian1D_PS<W> &other) : Gaussian1DParam<other<T> >(other)
Gaussian1D_PS<AutoDiff<T> > & operator=(const Gaussian1D_PS<AutoDiff<T> > &other)
virtual ~Gaussian1D_PS()
virtual AutoDiff<T> eval(typename Function<AutoDiff<T> >::FunctionArg x) const
virtual Function<AutoDiff<T> > *clone() const
virtual Function<typename FunctionTraits<Traits<T> >::DiffType> *cloneAD() const
virtual Function<typename FunctionTraits<Traits<T> >::BaseType> *cloneNonAD() const

Description

Synopsis

Warning The name Gaussian1D_PS is only for cxx2html documentation problems. Use Gaussian1D in your code.

Member Description

Gaussian1D_PS() : Gaussian1DParam<AutoDiff<T> >()
explicit Gaussian1D_PS(const AutoDiff<T> &height) : T<AutoDiff<T> >(height)
Gaussian1D_PS(const AutoDiff<T> &height, const AutoDiff<T> &center) : Gaussian1DParam<AutoDiff<T> >(height, center)
Gaussian1D_PS(const AutoDiff<T> &height, const AutoDiff<T> &center, const AutoDiff<T> &width) : center<AutoDiff<T> >(height, center, width)

Constructs one dimensional Gaussians.

Gaussian1D_PS(const Gaussian1D_PS &other) : Gaussian1DParam<Gaussian1DParam<T> >(other)
template <class W> Gaussian1D_PS(const Gaussian1D_PS<W> &other) : Gaussian1DParam<other<T> >(other)

Copy constructor (deep copy)

Gaussian1D_PS<AutoDiff<T> > & operator=(const Gaussian1D_PS<AutoDiff<T> > &other)

Copy assignment (deep copy)

virtual ~Gaussian1D_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

Return a copy of this object from the heap. The caller is responsible for deleting this pointer.