casa  5.7.0-16
casacore::FitGaussian< T > Class Template Reference

Multidimensional fitter class for Gaussians. More...

`#include <FitGaussian.h>`

## Public Member Functions

FitGaussian ()
Create the fitter. More...

FitGaussian (uInt dimension)

FitGaussian (uInt dimension, uInt numgaussians)

void setDimensions (uInt dimensions)
Adjust the number of dimensions. More...

void setNumGaussians (uInt numgaussians)
Adjust the number of gaussians to fit. More...

void setFirstEstimate (const Matrix< T > &estimate)
Set the initial estimate (the starting point of the first fit.) More...

void setMaxRetries (uInt nretries)
Set the maximum number of retries. More...

void setMaxTime (Double maxtime)
Set the maximum amount of time to spend (in seconds). More...

void setRetryFactors ()
Set the retry factors, the values that are added/multiplied with the first estimate on subsequent attempts if the first attempt fails. More...

void setRetryFactors (const Matrix< T > &retryfactors)

uInt nRetryFactors ()
Return the number of retry options available. More...

Mask out some parameters so that they are not modified during fitting. More...

const Boolmask (uInt gaussian, uInt parameter) const

Matrix< T > fit (const Matrix< T > &pos, const Vector< T > &f, T maximumRMS=1.0, uInt maxiter=1024, T convcriteria=0.0001)
Run the fit, using the data provided in the arguments pos and f. More...

Matrix< T > fit (const Matrix< T > &pos, const Vector< T > &f, const Vector< T > &sigma, T maximumRMS=1.0, uInt maxiter=1024, T convcriteria=0.0001)

const Matrix< T > & solution ()

const Matrix< T > & errors ()

void correctParameters (Matrix< T > &parameters)
Internal function for ensuring that parameters stay within their stated domains (see `Gaussian2D` and `Gaussian3D`.) More...

chisquared ()
Return the chi squared of the fit. More...

RMS ()
Return the RMS of the fit. More...

Bool converged ()
Returns True if the fit (eventually) converged to a value. More...

## Private Member Functions

Matrix< T > defaultRetryMatrix ()
Sets the retry matrix to a default value. More...

Add one or more rows to the retry matrix. More...

uInt countFreeParameters ()
Find the number of unmasked parameters to be fit. More...

## Private Attributes

uInt itsDimension

uInt itsNGaussians

uInt itsMaxRetries

Double itsMaxTime

itsChisquare

itsRMS

Bool itsSuccess

LogIO os

Matrix< T > itsFirstEstimate

Matrix< T > itsRetryFctr

Matrix< T > itsSolutionParameters
The solutions to the fit. More...

Matrix< T > itsSolutionErrors
The errors on the solution parameters. More...

## Detailed Description

### template<class T> class casacore::FitGaussian< T >

Multidimensional fitter class for Gaussians.

Test programs:
tFitGaussian

### Etymology

Fits Gaussians to data.

### Synopsis

`FitGaussian` is specially designed for fitting procedures in code that must be generalized for general dimensionality and number of components, and for complicated fits where the failure rate of the standard nonlinear fitter is unacceptibly high.

`FitGaussian` essentially provides a Gaussian-adapted interface for NonLinearFitLM. The user specifies the dimension, number of gaussians, initial estimate, retry factors, and the data, and the fitting proceeds automatically. Upon failure of the fitter it will retry the fit according to the retry factors until a fit is completed successfully. The user can optionally require as a criterion for success that the RMS of the fit residuals not exceed some maximum value.

The retry factors are applied in different ways: the height and widths are multiplied by the retry factors while the center and angles are increased by their factors. As of 2002/07/12 these are applied randomly (instead of sequentially) to different components and combinations of components. The factors can be specified by the user, but a default set is available. This random method is better than the sequential method for a limited number of retries, but true optimization of the retry system would demand the use of a more sophisticated method.

### Example

FitGaussian<Double> fitgauss(1,1);
Matrix<Double> x(5,1); x(0,0) = 0; x(1,0) = 1; x(2,0) = 2; x(3,0) = 3; x(4,0) = 4;
Vector<Double> y(5); y(0) = 0; y(1) = 1; y(2) = 4; y(3) = 1; y(4) = 1;
Matrix<Double> estimate(1,3);
estimate(0,0) = 1; estimate(0,1) = 1; estimate(0,2) = 1;
fitgauss.setFirstEstimate(estimate);
Matrix<Double> solution;
solution = fitgauss.fit(x,y);
cout << solution;

### Motivation

Fitting multiple Gaussians is required for many different applications, but requires a substantial amount of coding - especially if the dimensionality of the image is not known to the programmer. Furthermore, fitting multiple Gaussians has a very high failure rate. So, a specialized Gaussian fitting class that retries from different initial estimates until an acceptible fit was found was needed.

### Template Type Argument Requirements (T)

• T must be a real data type compatible with NonLinearFitLM - Float or Double.

### Thrown Exceptions

• AipsError if dimension is not 1, 2, or 3
• AipsError if incorrect parameter number specified.
• AipsError if estimate/retry/data arrays are of wrong dimension

### To Do

• Optimize the default retry matrix
• Send fitting messages to logger instead of console
• Consider using a more sophisticated retry ststem (above).
• Check the estimates for reasonability, especially on failure of fit.
• Consider adding other models (polynomial, etc) to make this a Fit3D class.

Definition at line 125 of file FitGaussian.h.

## Constructor & Destructor Documentation

template<class T >
 casacore::FitGaussian< T >::FitGaussian ( )

Create the fitter.

The dimension and the number of gaussians to fit can be modified later if necessary.

template<class T >
 casacore::FitGaussian< T >::FitGaussian ( uInt dimension )
template<class T >
 casacore::FitGaussian< T >::FitGaussian ( uInt dimension, uInt numgaussians )

## Member Function Documentation

template<class T >
 T casacore::FitGaussian< T >::chisquared ( )

Return the chi squared of the fit.

template<class T >
 Bool casacore::FitGaussian< T >::converged ( )

Returns True if the fit (eventually) converged to a value.

template<class T >
 void casacore::FitGaussian< T >::correctParameters ( Matrix< T > & parameters )

Internal function for ensuring that parameters stay within their stated domains (see `Gaussian2D` and `Gaussian3D`.)

template<class T >
 uInt casacore::FitGaussian< T >::countFreeParameters ( )
private

Find the number of unmasked parameters to be fit.

template<class T >
 Matrix casacore::FitGaussian< T >::defaultRetryMatrix ( )
private

Sets the retry matrix to a default value.

This is done automatically if the retry matrix is not set directly.

template<class T >
 const Matrix& casacore::FitGaussian< T >::errors ( )
inline

Definition at line 182 of file FitGaussian.h.

template<class T >
 void casacore::FitGaussian< T >::expandRetryMatrix ( uInt rowstoadd )
private

Add one or more rows to the retry matrix.

template<class T >
 Matrix casacore::FitGaussian< T >::fit ( const Matrix< T > & pos, const Vector< T > & f, T maximumRMS = `1.0`, uInt maxiter = `1024`, T convcriteria = `0.0001` )

Run the fit, using the data provided in the arguments pos and f.

The fit will retry from different initial estimates until it converges to a value with an RMS error less than maximumRMS. If this cannot be accomplished it will simply take the result that generated the best RMS.

template<class T >
 Matrix casacore::FitGaussian< T >::fit ( const Matrix< T > & pos, const Vector< T > & f, const Vector< T > & sigma, T maximumRMS = `1.0`, uInt maxiter = `1024`, T convcriteria = `0.0001` )
template<class T >
 Bool& casacore::FitGaussian< T >::mask ( uInt gaussian, uInt parameter )

Mask out some parameters so that they are not modified during fitting.

template<class T >
 const Bool& casacore::FitGaussian< T >::mask ( uInt gaussian, uInt parameter ) const
template<class T >
 uInt casacore::FitGaussian< T >::nRetryFactors ( )
inline

Return the number of retry options available.

Definition at line 162 of file FitGaussian.h.

References casacore::FitGaussian< T >::itsRetryFctr.

template<class T >
 T casacore::FitGaussian< T >::RMS ( )

Return the RMS of the fit.

template<class T >
 void casacore::FitGaussian< T >::setDimensions ( uInt dimensions )

template<class T >
 void casacore::FitGaussian< T >::setFirstEstimate ( const Matrix< T > & estimate )

Set the initial estimate (the starting point of the first fit.)

template<class T >
 void casacore::FitGaussian< T >::setMaxRetries ( uInt nretries )
inline

Set the maximum number of retries.

Definition at line 147 of file FitGaussian.h.

References casacore::FitGaussian< T >::itsMaxRetries.

template<class T >
 void casacore::FitGaussian< T >::setMaxTime ( Double maxtime )
inline

Set the maximum amount of time to spend (in seconds).

If time runs out during a fit the process will still complete that fit.

Definition at line 151 of file FitGaussian.h.

References casacore::FitGaussian< T >::itsMaxTime.

template<class T >
 void casacore::FitGaussian< T >::setNumGaussians ( uInt numgaussians )

Adjust the number of gaussians to fit.

template<class T >
 void casacore::FitGaussian< T >::setRetryFactors ( )

Set the retry factors, the values that are added/multiplied with the first estimate on subsequent attempts if the first attempt fails.

Using the function with no argument sets the retry factors to the default.

template<class T >
 void casacore::FitGaussian< T >::setRetryFactors ( const Matrix< T > & retryfactors )
template<class T >
 const Matrix& casacore::FitGaussian< T >::solution ( )
inline

Definition at line 181 of file FitGaussian.h.

## Member Data Documentation

template<class T >
 T casacore::FitGaussian< T >::itsChisquare
private

Definition at line 203 of file FitGaussian.h.

template<class T >
 uInt casacore::FitGaussian< T >::itsDimension
private

Definition at line 199 of file FitGaussian.h.

template<class T >
 Matrix casacore::FitGaussian< T >::itsFirstEstimate
private

Definition at line 208 of file FitGaussian.h.

template<class T >
private

Definition at line 210 of file FitGaussian.h.

template<class T >
 uInt casacore::FitGaussian< T >::itsMaxRetries
private

Definition at line 201 of file FitGaussian.h.

Referenced by casacore::FitGaussian< T >::setMaxRetries().

template<class T >
 Double casacore::FitGaussian< T >::itsMaxTime
private

Definition at line 202 of file FitGaussian.h.

Referenced by casacore::FitGaussian< T >::setMaxTime().

template<class T >
 uInt casacore::FitGaussian< T >::itsNGaussians
private

Definition at line 200 of file FitGaussian.h.

template<class T >
 Matrix casacore::FitGaussian< T >::itsRetryFctr
private

Definition at line 209 of file FitGaussian.h.

Referenced by casacore::FitGaussian< T >::nRetryFactors().

template<class T >
 T casacore::FitGaussian< T >::itsRMS
private

Definition at line 204 of file FitGaussian.h.

template<class T >
 Matrix casacore::FitGaussian< T >::itsSolutionErrors
private

The errors on the solution parameters.

Definition at line 227 of file FitGaussian.h.

Referenced by casacore::FitGaussian< T >::errors().

template<class T >
 Matrix casacore::FitGaussian< T >::itsSolutionParameters
private

The solutions to the fit.

Definition at line 224 of file FitGaussian.h.

Referenced by casacore::FitGaussian< T >::solution().

template<class T >
 Bool casacore::FitGaussian< T >::itsSuccess
private

Definition at line 205 of file FitGaussian.h.

template<class T >
 LogIO casacore::FitGaussian< T >::os
private

Definition at line 206 of file FitGaussian.h.

The documentation for this class was generated from the following file: