casa
$Rev:20696$
|
Multidimensional fitter class for Gaussians. More...
#include <FitGaussian.h>
Public Member Functions | |
FitGaussian () | |
Create the fitter. | |
FitGaussian (uInt dimension) | |
FitGaussian (uInt dimension, uInt numgaussians) | |
void | setDimensions (uInt dimensions) |
Adjust the number of dimensions. | |
void | setNumGaussians (uInt numgaussians) |
Adjust the number of gaussians to fit. | |
void | setFirstEstimate (const Matrix< T > &estimate) |
Set the initial estimate (the starting point of the first fit.) | |
void | setMaxRetries (uInt nretries) |
Set the maximum number of retries. | |
void | setMaxTime (Double maxtime) |
Set the maximum amount of time to spend (in seconds). | |
void | setRetryFactors () |
Set the retry factors, the values that are added/multiplied with the first estimate on subsequent attempts if the first attempt fails. | |
void | setRetryFactors (const Matrix< T > &retryfactors) |
uInt | nRetryFactors () |
Return the number of retry options available. | |
Bool & | mask (uInt gaussian, uInt parameter) |
Mask out some parameters so that they are not modified during fitting. | |
const Bool & | mask (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. | |
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) |
void | correctParameters (Matrix< T > ¶meters) |
Internal function for ensuring that parameters stay within their stated domains (see Gaussian2D and Gaussian3D .) | |
T | chisquared () |
Return the chi squared of the fit. | |
T | RMS () |
Return the RMS of the fit. | |
Bool | converged () |
Returns True if the fit (eventually) converged to a value. | |
Private Member Functions | |
Matrix< T > | defaultRetryMatrix () |
Sets the retry matrix to a default value. | |
void | expandRetryMatrix (uInt rowstoadd) |
Add one or more rows to the retry matrix. | |
uInt | countFreeParameters () |
Find the number of unmasked parameters to be fit. | |
Private Attributes | |
uInt | itsDimension |
uInt | itsNGaussians |
uInt | itsMaxRetries |
Double | itsMaxTime |
T | itsChisquare |
T | itsRMS |
Bool | itsSuccess |
LogIO | os |
Matrix< T > | itsFirstEstimate |
Matrix< T > | itsRetryFctr |
Matrix< Bool > | itsMask |
Multidimensional fitter class for Gaussians.
Fits Gaussians to data.
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.
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;
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.
Definition at line 125 of file FitGaussian.h.
casa::FitGaussian< T >::FitGaussian | ( | ) |
Create the fitter.
The dimension and the number of gaussians to fit can be modified later if necessary.
casa::FitGaussian< T >::FitGaussian | ( | uInt | dimension | ) |
casa::FitGaussian< T >::FitGaussian | ( | uInt | dimension, |
uInt | numgaussians | ||
) |
T casa::FitGaussian< T >::chisquared | ( | ) |
Return the chi squared of the fit.
Bool casa::FitGaussian< T >::converged | ( | ) |
Returns True if the fit (eventually) converged to a value.
void casa::FitGaussian< T >::correctParameters | ( | Matrix< T > & | parameters | ) |
Internal function for ensuring that parameters stay within their stated domains (see Gaussian2D
and Gaussian3D
.)
uInt casa::FitGaussian< T >::countFreeParameters | ( | ) | [private] |
Find the number of unmasked parameters to be fit.
Matrix<T> casa::FitGaussian< T >::defaultRetryMatrix | ( | ) | [private] |
Sets the retry matrix to a default value.
This is done automatically if the retry matrix is not set directly.
void casa::FitGaussian< T >::expandRetryMatrix | ( | uInt | rowstoadd | ) | [private] |
Add one or more rows to the retry matrix.
Matrix<T> casa::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.
Matrix<T> casa::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 |
||
) |
Bool& casa::FitGaussian< T >::mask | ( | uInt | gaussian, |
uInt | parameter | ||
) |
Mask out some parameters so that they are not modified during fitting.
const Bool& casa::FitGaussian< T >::mask | ( | uInt | gaussian, |
uInt | parameter | ||
) | const |
uInt casa::FitGaussian< T >::nRetryFactors | ( | ) | [inline] |
Return the number of retry options available.
Definition at line 162 of file FitGaussian.h.
References casa::FitGaussian< T >::itsRetryFctr.
T casa::FitGaussian< T >::RMS | ( | ) |
Return the RMS of the fit.
void casa::FitGaussian< T >::setDimensions | ( | uInt | dimensions | ) |
Adjust the number of dimensions.
void casa::FitGaussian< T >::setFirstEstimate | ( | const Matrix< T > & | estimate | ) |
Set the initial estimate (the starting point of the first fit.)
void casa::FitGaussian< T >::setMaxRetries | ( | uInt | nretries | ) | [inline] |
Set the maximum number of retries.
Definition at line 147 of file FitGaussian.h.
References casa::FitGaussian< T >::itsMaxRetries.
void casa::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 casa::FitGaussian< T >::itsMaxTime.
void casa::FitGaussian< T >::setNumGaussians | ( | uInt | numgaussians | ) |
Adjust the number of gaussians to fit.
void casa::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.
void casa::FitGaussian< T >::setRetryFactors | ( | const Matrix< T > & | retryfactors | ) |
T casa::FitGaussian< T >::itsChisquare [private] |
Definition at line 199 of file FitGaussian.h.
uInt casa::FitGaussian< T >::itsDimension [private] |
Definition at line 195 of file FitGaussian.h.
Matrix<T> casa::FitGaussian< T >::itsFirstEstimate [private] |
Definition at line 204 of file FitGaussian.h.
Matrix<Bool> casa::FitGaussian< T >::itsMask [private] |
Definition at line 206 of file FitGaussian.h.
uInt casa::FitGaussian< T >::itsMaxRetries [private] |
Definition at line 197 of file FitGaussian.h.
Referenced by casa::FitGaussian< T >::setMaxRetries().
Double casa::FitGaussian< T >::itsMaxTime [private] |
Definition at line 198 of file FitGaussian.h.
Referenced by casa::FitGaussian< T >::setMaxTime().
uInt casa::FitGaussian< T >::itsNGaussians [private] |
Definition at line 196 of file FitGaussian.h.
Matrix<T> casa::FitGaussian< T >::itsRetryFctr [private] |
Definition at line 205 of file FitGaussian.h.
Referenced by casa::FitGaussian< T >::nRetryFactors().
T casa::FitGaussian< T >::itsRMS [private] |
Definition at line 200 of file FitGaussian.h.
Bool casa::FitGaussian< T >::itsSuccess [private] |
Definition at line 201 of file FitGaussian.h.
LogIO casa::FitGaussian< T >::os [private] |
Definition at line 202 of file FitGaussian.h.