FittingFunction.h

Go to the documentation of this file.
00001 // FittingFunction.h: interface for the FittingFunction class.
00002 //
00004 
00005 #if !defined(AFX_FITTINGFUNCTION_H__149D497B_E840_4939_B085_53F191C2ACA6__INCLUDED_)
00006 #define AFX_FITTINGFUNCTION_H__149D497B_E840_4939_B085_53F191C2ACA6__INCLUDED_
00007 
00008 #if _MSC_VER > 1000
00009 #pragma once
00010 #endif // _MSC_VER > 1000
00011 
00012 #include <gsl/gsl_linalg.h>
00013 #include <gsl/gsl_blas.h>
00014 #include <gsl/gsl_multifit.h>
00015 #include <gsl/gsl_multifit_nlin.h>
00016 
00017 #include <string>
00018 #include <map>
00019 
00020 #include <iostream>
00021 
00022 #define DEBUG_FIT
00023 #define FIT(i) gsl_vector_get(s->x, i)
00024 #define ERR(i) sqrt(gsl_matrix_get(covar,i,i))
00025 
00026 //##ModelId=43849A030059
00027 typedef enum    {GAUSSIAN,LORENTZIAN}   FittingFunctionType;
00028 //##ModelId=43849A030064
00029 typedef enum    {LMDER,LMSDER}                  FittingFunctionAlgorithm;
00030 //##ModelId=43849A030066
00031 typedef enum    {POSITION,WIDTH,HEIGHT} FittingFunctionParameter;
00032 
00033 using namespace std;
00034 //##ModelId=43849A030074
00035 typedef map <string, int, less <string>, allocator <int> > STRING2INT;
00036 
00037 //##ModelId=43849A030082
00038 struct FittingData 
00039 {
00040         //##ModelId=43849A030084
00041   size_t   n;
00042         //##ModelId=43849A0300D0
00043   double  *x;
00044         //##ModelId=43849A0300D1
00045   double  *y;
00046         //##ModelId=43849A0300E0
00047   double  *sigma;
00048 };
00049 
00050 //##ModelId=43849A0300E1
00051 typedef int (*PtrFunction)                              (const gsl_vector*, void *, gsl_vector *);  
00052 //##ModelId=43849A0300F0
00053 typedef int (*PtrFunctionDerivate)              (const gsl_vector*, void *, gsl_matrix *);
00054 //##ModelId=43849A0300F2
00055 typedef int (*PtrFunctionAndDerivate)   (const gsl_vector*, void *, gsl_vector *, gsl_matrix *);
00056 
00057 //##ModelId=43849A03011F
00058 class FittingFunction  
00059 {
00060 public:
00061         
00062         //##ModelId=43849A03012E
00063         FittingFunction();
00064         //##ModelId=43849A03012F
00065         virtual ~FittingFunction();
00066 
00067         //##ModelId=43849A030131
00068         virtual PtrFunction                             getFunction(void) const=0;
00069         //##ModelId=43849A030134
00070         virtual PtrFunctionDerivate             getFunctionDerivate(void) const=0;
00071         //##ModelId=43849A030137
00072         virtual PtrFunctionAndDerivate  getFunctionAndDerivate(void) const=0;
00073         //##ModelId=43849A03013A
00074         virtual int doFit(long points, gsl_vector *x,gsl_vector *y, gsl_vector *sigma,gsl_vector *guess, bool bEstimateGuess, int iSearchStoppingMethod, bool bUseScaled)=0;
00075         //##ModelId=43849A030145
00076         virtual int generateFunctionFit(double dValMinX,double dResolutionX,long lNbPoints,gsl_vector* funcX,gsl_vector* funcY)=0;
00077 
00078         virtual int generateFunctionFit(long lNbPoints, gsl_vector *x, gsl_vector* funcX,gsl_vector* funcY)=0;
00079         
00080 //      virtual int estimateInitialGuess(long points, gsl_vector *x,gsl_vector *y, gsl_vector *sigma)=0;
00081 
00082         //##ModelId=43849A030150
00083         double  getParameter(std::string sParameterName) const;
00084         //##ModelId=43849A030153
00085         double  getParameter(int iIndiceParameter) const;
00086         //##ModelId=43849A030156
00087         double* getAllParameters() const;
00088 
00089         //##ModelId=43849A03015D
00090         double  getParameterError(std::string sParameterName) const;
00091         //##ModelId=43849A030160
00092         double  getParameterError(int iIndiceParameter) const;
00093         //##ModelId=43849A030163
00094         double* getAllParametersErrors() const;
00095 
00096         //##ModelId=43849A030165
00097         inline  int             getNumberOfParameters() const   {return _iNbParameters;}
00098         //##ModelId=43849A030167
00099         inline  double  getQualityFactor()              const   {return _dQualityFactor;}
00100         //##ModelId=43849A03016E
00101         inline  double  getSigma()                              const   {return _dSigma;}
00102         //##ModelId=43849A030170
00103         inline  double  getFHWM()                               const   {return _dFHWM;}
00104         inline  double  getHWHM()                               const   {return _dHWHM;}
00105         //##ModelId=43849A030172
00106         inline  double  getSearchLimit()                const   {return _dSearchLimit;}
00107         //##ModelId=43849A030174
00108         inline  long    getNbMaxIteration()             const   {return _lNbMaxIteration;}
00109         //##ModelId=43849A03017C
00110         inline  int             getNbParameters()               const   {return _iNbParameters;}
00111         inline  long            getNbIterations()       const   {return _lNbIterations;}
00112         //##ModelId=43849A03017E
00113         inline  void    setNumberOfParameters(int iNbParameters)                {_iNbParameters = iNbParameters;}
00114         //##ModelId=43849A030180
00115         inline  void    setSearchLimit(double dSearchValue)                             {_dSearchLimit = dSearchValue;}
00116         //##ModelId=43849A030182
00117         inline  void    setNbMaxIteration(long lNbMaxIterationValue)    {_lNbMaxIteration = lNbMaxIterationValue;}
00118         
00119         double                  computeStandardDeviation();
00120         double                  getStandardDeviation();
00121         virtual double  computeValue(double dX,double dPosition, double dWidth, double dHeight, double dBackground)=0;
00122         virtual double  computeDerivateValue(double dX,double dPosition, double dWidth, double dHeight)=0;
00123         
00124         virtual void    initializeInitialsParameters(gsl_vector* vExperimentalDataX,gsl_vector* vExperimentalDataY,gsl_vector* vInitialGuess,bool bEstimate)=0;
00125 
00126         virtual void    estimateInitialGuess(gsl_vector* vExperimentalDataX,gsl_vector* vExperimentalDataY)=0;
00127 
00128 
00129         //Must check the index
00130         double                  getInitialGuess(int iParameterIndex) {return gsl_vector_get(_vInitialGuess,iParameterIndex);};
00131 
00132 
00133         double                  computeMean(gsl_vector* vVector);
00134         double                  computeVariance(gsl_vector* vVector);
00135         double                  computeResidual(gsl_vector* vVectorExp,gsl_vector* vVectorPred);
00136         double                  computeDeterminationCoefficient(gsl_vector* vExperimentalDataY,gsl_vector* vFittedDataY);
00137         double                  computeObservedFStatistic(gsl_vector* vExperimentalDataY,gsl_vector* vFittedDataY);
00138         int                             getIndexValue(double dWantedValue,gsl_vector* vVector);
00139 //      void                    WriteFittedDataInFile(const std::string sFilePath,const std::string sFileName/*,FittingData* pFittedData*/);
00140 //      void                    WriteExperimentalDataInFile(const std::string sFilePath,const std::string sFileName/*,FittingData* pFittedData*/);
00141 
00142 //      inline double   getDeterminationCoefficient() const {return 100.0*_dDeterminationCoeff;};
00143 //      inline double   getObservedFStatisticCoefficient() const {return _dObservedStatisticCoeff;};
00144 
00145 
00146         virtual std::string     getEquation() const=0;
00147 
00148 protected :
00149         
00150         //##ModelId=43849A03018E
00151         STRING2INT          _mFunctionMap;
00152         //##ModelId=43849A03019E
00153         int                             _iNbParameters;
00154         //##ModelId=43849A03019F
00155         double*                 _pParameters;
00156         //##ModelId=43849A0301AB
00157         double*                 _pParametersErrors;
00158         
00159         //##ModelId=43849A0301AC
00160         double                  _dQualityFactor;
00161         //##ModelId=43849A0301AD
00162         double                  _dSigma;
00163         //##ModelId=43849A0301BB
00164         double                  _dHWHM;
00165         double                  _dFHWM;
00166 
00167         //##ModelId=43849A0301BC
00168         double                  _dSearchLimit;
00169         //##ModelId=43849A0301BD
00170         long                    _lNbMaxIteration;
00171 
00172         double                  _dStandardDeviation;
00173         
00174         long                    _lNbIterations;
00175         //Data to be fitted
00176         //##ModelId=43849A0301CB
00177         FittingData*    _cData;
00178         //##ModelId=43849A0301D0
00179         FittingData*    _cDataFitted;
00180 
00181         gsl_vector*             _vInitialGuess;
00182 
00183         gsl_vector*             _vExperimentalDataX;
00184         gsl_vector*             _vExperimentalDataY;
00185 
00186 //      double                  _dDeterminationCoeff;
00187 //      double                  _dObservedStatisticCoeff;
00188 
00189 };
00190 
00191 #endif // !defined(AFX_FITTINGFUNCTION_H__149D497B_E840_4939_B085_53F191C2ACA6__INCLUDED_)

Generated on Tue Apr 14 09:34:27 2009 for Data Fitting Library by  doxygen 1.4.5