00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ROOT_TSpectrumFit
00012 #define ROOT_TSpectrumFit
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef ROOT_TNamed
00027 #include "TNamed.h"
00028 #endif
00029
00030 class TH1;
00031
00032 class TSpectrumFit : public TNamed {
00033 protected:
00034 Int_t fNPeaks;
00035 Int_t fNumberIterations;
00036 Int_t fXmin;
00037 Int_t fXmax;
00038 Int_t fStatisticType;
00039 Int_t fAlphaOptim;
00040 Int_t fPower;
00041 Int_t fFitTaylor;
00042 Double_t fAlpha;
00043 Double_t fChi;
00044 Double_t *fPositionInit;
00045 Double_t *fPositionCalc;
00046 Double_t *fPositionErr;
00047 Double_t *fAmpInit;
00048 Double_t *fAmpCalc;
00049 Double_t *fAmpErr;
00050 Double_t *fArea;
00051 Double_t *fAreaErr;
00052 Double_t fSigmaInit;
00053 Double_t fSigmaCalc;
00054 Double_t fSigmaErr;
00055 Double_t fTInit;
00056 Double_t fTCalc;
00057 Double_t fTErr;
00058 Double_t fBInit;
00059 Double_t fBCalc;
00060 Double_t fBErr;
00061 Double_t fSInit;
00062 Double_t fSCalc;
00063 Double_t fSErr;
00064 Double_t fA0Init;
00065 Double_t fA0Calc;
00066 Double_t fA0Err;
00067 Double_t fA1Init;
00068 Double_t fA1Calc;
00069 Double_t fA1Err;
00070 Double_t fA2Init;
00071 Double_t fA2Calc;
00072 Double_t fA2Err;
00073 Bool_t *fFixPosition;
00074 Bool_t *fFixAmp;
00075 Bool_t fFixSigma;
00076 Bool_t fFixT;
00077 Bool_t fFixB;
00078 Bool_t fFixS;
00079 Bool_t fFixA0;
00080 Bool_t fFixA1;
00081 Bool_t fFixA2;
00082
00083 public:
00084 enum {
00085 kFitOptimChiCounts =0,
00086 kFitOptimChiFuncValues =1,
00087 kFitOptimMaxLikelihood =2,
00088 kFitAlphaHalving =0,
00089 kFitAlphaOptimal =1,
00090 kFitPower2 =2,
00091 kFitPower4 =4,
00092 kFitPower6 =6,
00093 kFitPower8 =8,
00094 kFitPower10 =10,
00095 kFitPower12 =12,
00096 kFitTaylorOrderFirst =0,
00097 kFitTaylorOrderSecond =1,
00098 kFitNumRegulCycles =100
00099 };
00100 TSpectrumFit(void);
00101 TSpectrumFit(Int_t numberPeaks);
00102 virtual ~TSpectrumFit();
00103
00104
00105 protected:
00106 Double_t Area(Double_t a,Double_t sigma,Double_t t,Double_t b);
00107 Double_t Dera1(Double_t i);
00108 Double_t Dera2(Double_t i);
00109 Double_t Deramp(Double_t i,Double_t i0,Double_t sigma,Double_t t,Double_t s,Double_t b);
00110 Double_t Derb(Int_t num_of_fitted_peaks,Double_t i,const Double_t* parameter,Double_t sigma,Double_t t,Double_t b);
00111 Double_t Derderi0(Double_t i,Double_t amp,Double_t i0,Double_t sigma);
00112 Double_t Derdersigma(Int_t num_of_fitted_peaks,Double_t i,const Double_t* parameter,Double_t sigma);
00113 Double_t Derfc(Double_t x);
00114 Double_t Deri0(Double_t i,Double_t amp,Double_t i0,Double_t sigma,Double_t t,Double_t s,Double_t b);
00115 Double_t Derpa(Double_t sigma,Double_t t,Double_t b);
00116 Double_t Derpb(Double_t a,Double_t sigma,Double_t t,Double_t b);
00117 Double_t Derpsigma(Double_t a,Double_t t,Double_t b);
00118 Double_t Derpt(Double_t a,Double_t sigma,Double_t b);
00119 Double_t Ders(Int_t num_of_fitted_peaks,Double_t i,const Double_t* parameter,Double_t sigma);
00120 Double_t Dersigma(Int_t num_of_fitted_peaks,Double_t i,const Double_t* parameter,Double_t sigma,Double_t t,Double_t s,Double_t b);
00121 Double_t Dert(Int_t num_of_fitted_peaks,Double_t i,const Double_t* parameter,Double_t sigma,Double_t b);
00122 Double_t Erfc(Double_t x);
00123 Double_t Ourpowl(Double_t a,Int_t pw);
00124 Double_t Shape(Int_t num_of_fitted_peaks,Double_t i,const Double_t *parameter,Double_t sigma,Double_t t,Double_t s,Double_t b,Double_t a0,Double_t a1,Double_t a2);
00125 void StiefelInversion(Double_t **a,Int_t rozmer);
00126
00127 public:
00128 void FitAwmi(float *source);
00129 void FitStiefel(float *source);
00130 Double_t *GetAmplitudes() const {return fAmpCalc;}
00131 Double_t *GetAmplitudesErrors() const {return fAmpErr;}
00132 Double_t *GetAreas() const {return fArea;}
00133 Double_t *GetAreasErrors() const {return fAreaErr;}
00134 void GetBackgroundParameters(Double_t &a0, Double_t &a0Err, Double_t &a1, Double_t &a1Err, Double_t &a2, Double_t &a2Err);
00135 Double_t GetChi() const {return fChi;}
00136 Double_t *GetPositions() const {return fPositionCalc;}
00137 Double_t *GetPositionsErrors() const {return fPositionErr;}
00138 void GetSigma(Double_t &sigma, Double_t &sigmaErr);
00139 void GetTailParameters(Double_t &t, Double_t &tErr, Double_t &b, Double_t &bErr, Double_t &s, Double_t &sErr);
00140 void SetBackgroundParameters(Double_t a0Init, Bool_t fixA0, Double_t a1Init, Bool_t fixA1, Double_t a2Init, Bool_t fixA2);
00141 void SetFitParameters(Int_t xmin,Int_t xmax, Int_t numberIterations, Double_t alpha, Int_t statisticType, Int_t alphaOptim, Int_t power, Int_t fitTaylor);
00142 void SetPeakParameters(Double_t sigma, Bool_t fixSigma, const Float_t *positionInit, const Bool_t *fixPosition, const Float_t *ampInit, const Bool_t *fixAmp);
00143 void SetTailParameters(Double_t tInit, Bool_t fixT, Double_t bInit, Bool_t fixB, Double_t sInit, Bool_t fixS);
00144
00145 ClassDef(TSpectrumFit,1)
00146 };
00147
00148 #endif
00149