00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ROOT_TSpectrum2Fit
00012 #define ROOT_TSpectrum2Fit
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 TSpectrum2Fit : public TNamed {
00031 protected:
00032 Int_t fNPeaks;
00033 Int_t fNumberIterations;
00034 Int_t fXmin;
00035 Int_t fXmax;
00036 Int_t fYmin;
00037 Int_t fYmax;
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 *fPositionInitX;
00045 Double_t *fPositionCalcX;
00046 Double_t *fPositionErrX;
00047 Double_t *fPositionInitY;
00048 Double_t *fPositionCalcY;
00049 Double_t *fPositionErrY;
00050 Double_t *fPositionInitX1;
00051 Double_t *fPositionCalcX1;
00052 Double_t *fPositionErrX1;
00053 Double_t *fPositionInitY1;
00054 Double_t *fPositionCalcY1;
00055 Double_t *fPositionErrY1;
00056 Double_t *fAmpInit;
00057 Double_t *fAmpCalc;
00058 Double_t *fAmpErr;
00059 Double_t *fAmpInitX1;
00060 Double_t *fAmpCalcX1;
00061 Double_t *fAmpErrX1;
00062 Double_t *fAmpInitY1;
00063 Double_t *fAmpCalcY1;
00064 Double_t *fAmpErrY1;
00065 Double_t *fVolume;
00066 Double_t *fVolumeErr;
00067 Double_t fSigmaInitX;
00068 Double_t fSigmaCalcX;
00069 Double_t fSigmaErrX;
00070 Double_t fSigmaInitY;
00071 Double_t fSigmaCalcY;
00072 Double_t fSigmaErrY;
00073 Double_t fRoInit;
00074 Double_t fRoCalc;
00075 Double_t fRoErr;
00076 Double_t fTxyInit;
00077 Double_t fTxyCalc;
00078 Double_t fTxyErr;
00079 Double_t fSxyInit;
00080 Double_t fSxyCalc;
00081 Double_t fSxyErr;
00082 Double_t fTxInit;
00083 Double_t fTxCalc;
00084 Double_t fTxErr;
00085 Double_t fTyInit;
00086 Double_t fTyCalc;
00087 Double_t fTyErr;
00088 Double_t fSxInit;
00089 Double_t fSxCalc;
00090 Double_t fSxErr;
00091 Double_t fSyInit;
00092 Double_t fSyCalc;
00093 Double_t fSyErr;
00094 Double_t fBxInit;
00095 Double_t fBxCalc;
00096 Double_t fBxErr;
00097 Double_t fByInit;
00098 Double_t fByCalc;
00099 Double_t fByErr;
00100 Double_t fA0Init;
00101 Double_t fA0Calc;
00102 Double_t fA0Err;
00103 Double_t fAxInit;
00104 Double_t fAxCalc;
00105 Double_t fAxErr;
00106 Double_t fAyInit;
00107 Double_t fAyCalc;
00108 Double_t fAyErr;
00109 Bool_t *fFixPositionX;
00110 Bool_t *fFixPositionY;
00111 Bool_t *fFixPositionX1;
00112 Bool_t *fFixPositionY1;
00113 Bool_t *fFixAmp;
00114 Bool_t *fFixAmpX1;
00115 Bool_t *fFixAmpY1;
00116 Bool_t fFixSigmaX;
00117 Bool_t fFixSigmaY;
00118 Bool_t fFixRo;
00119 Bool_t fFixTxy;
00120 Bool_t fFixSxy;
00121 Bool_t fFixTx;
00122 Bool_t fFixTy;
00123 Bool_t fFixSx;
00124 Bool_t fFixSy;
00125 Bool_t fFixBx;
00126 Bool_t fFixBy;
00127 Bool_t fFixA0;
00128 Bool_t fFixAx;
00129 Bool_t fFixAy;
00130 public:
00131 enum {
00132 kFitOptimChiCounts =0,
00133 kFitOptimChiFuncValues =1,
00134 kFitOptimMaxLikelihood =2,
00135 kFitAlphaHalving =0,
00136 kFitAlphaOptimal =1,
00137 kFitPower2 =2,
00138 kFitPower4 =4,
00139 kFitPower6 =6,
00140 kFitPower8 =8,
00141 kFitPower10 =10,
00142 kFitPower12 =12,
00143 kFitTaylorOrderFirst =0,
00144 kFitTaylorOrderSecond =1,
00145 kFitNumRegulCycles =100
00146 };
00147 TSpectrum2Fit(void);
00148 TSpectrum2Fit(Int_t numberPeaks);
00149 virtual ~TSpectrum2Fit();
00150
00151 protected:
00152 Double_t Deramp2(Double_t x,Double_t y,Double_t x0,Double_t y0,Double_t sigmax,Double_t sigmay,Double_t ro,Double_t txy,Double_t sxy,Double_t bx,Double_t by);
00153 Double_t Derampx(Double_t x,Double_t x0,Double_t sigmax,Double_t tx,Double_t sx,Double_t bx);
00154 Double_t Derbx(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t txy,Double_t tx,Double_t bx,Double_t by);
00155 Double_t Derby(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t txy,Double_t ty,Double_t bx,Double_t by);
00156 Double_t Derderi01(Double_t x,Double_t ax,Double_t x0,Double_t sigmax);
00157 Double_t Derderi02(Double_t x,Double_t y,Double_t a,Double_t x0,Double_t y0,Double_t sigmax,Double_t sigmay,Double_t ro);
00158 Double_t Derderj02(Double_t x,Double_t y,Double_t a,Double_t x0,Double_t y0,Double_t sigmax,Double_t sigmay,Double_t ro);
00159 Double_t Derdersigmax(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t ro);
00160 Double_t Derdersigmay(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t ro);
00161 Double_t Derfc(Double_t x);
00162 Double_t Deri01(Double_t x,Double_t ax,Double_t x0,Double_t sigmax,Double_t tx,Double_t sx,Double_t bx);
00163 Double_t Deri02(Double_t x,Double_t y,Double_t a,Double_t x0,Double_t y0,Double_t sigmax,Double_t sigmay,Double_t ro,Double_t txy,Double_t sxy,Double_t bx,Double_t by);
00164 Double_t Derj02(Double_t x,Double_t y,Double_t a,Double_t x0,Double_t y0,Double_t sigmax,Double_t sigmay,Double_t ro,Double_t txy,Double_t sxy,Double_t bx,Double_t by);
00165 Double_t Derpa2(Double_t sx,Double_t sy,Double_t ro);
00166 Double_t Derpro(Double_t a,Double_t sx,Double_t sy,Double_t ro);
00167 Double_t Derpsigmax(Double_t a,Double_t sy,Double_t ro);
00168 Double_t Derpsigmay(Double_t a,Double_t sx,Double_t ro);
00169 Double_t Derro(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sx,Double_t sy,Double_t r);
00170 Double_t Dersigmax(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t ro,Double_t txy,Double_t sxy,Double_t tx,Double_t sx,Double_t bx,Double_t by);
00171 Double_t Dersigmay(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t ro,Double_t txy,Double_t sxy,Double_t ty,Double_t sy,Double_t bx,Double_t by);
00172 Double_t Dersx(Int_t numOfFittedPeaks,Double_t x,const Double_t *parameter,Double_t sigmax);
00173 Double_t Dersxy(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay);
00174 Double_t Dersy(Int_t numOfFittedPeaks,Double_t x,const Double_t *parameter,Double_t sigmax);
00175 Double_t Dertx(Int_t numOfFittedPeaks,Double_t x,const Double_t *parameter,Double_t sigmax,Double_t bx);
00176 Double_t Dertxy(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t bx,Double_t by);
00177 Double_t Derty(Int_t numOfFittedPeaks,Double_t x,const Double_t *parameter,Double_t sigmax,Double_t bx);
00178 Double_t Erfc(Double_t x);
00179 Double_t Ourpowl(Double_t a,Int_t pw);
00180 Double_t Shape2(Int_t numOfFittedPeaks,Double_t x,Double_t y,const Double_t *parameter,Double_t sigmax,Double_t sigmay,Double_t ro,Double_t a0,Double_t ax,Double_t ay,Double_t txy,Double_t sxy,Double_t tx,Double_t ty,Double_t sx,Double_t sy,Double_t bx,Double_t by);
00181 void StiefelInversion(Double_t **a,Int_t size);
00182 Double_t Volume(Double_t a,Double_t sx,Double_t sy,Double_t ro);
00183
00184 public:
00185 void FitAwmi(Float_t **source);
00186 void FitStiefel(Float_t **source);
00187 void GetAmplitudes(Float_t *amplitudes, Float_t *amplitudesX1, Float_t *amplitudesY1);
00188 void GetAmplitudeErrors(Float_t *amplitudeErrors, Float_t *amplitudeErrorsX1, Float_t *amplitudeErrorsY1);
00189 void GetBackgroundParameters(Double_t &a0, Double_t &a0Err, Double_t &ax, Double_t &axErr, Double_t &ay, Double_t &ayErr);
00190 Double_t GetChi() const {return fChi;}
00191 void GetPositions(Float_t *positionsX, Float_t *positionsY, Float_t *positionsX1, Float_t *positionsY1);
00192 void GetPositionErrors(Float_t *positionErrorsX, Float_t *positionErrorsY, Float_t *positionErrorsX1, Float_t *positionErrorsY1);
00193 void GetRo(Double_t &ro, Double_t &roErr);
00194 void GetSigmaX(Double_t &sigmaX, Double_t &sigmaErrX);
00195 void GetSigmaY(Double_t &sigmaY, Double_t &sigmaErrY);
00196 void GetTailParameters(Double_t &txy, Double_t &txyErr, Double_t &tx, Double_t &txErr, Double_t &ty, Double_t &tyErr, Double_t &bx, Double_t &bxErr, Double_t &by, Double_t &byErr, Double_t &sxy, Double_t &sxyErr, Double_t &sx, Double_t &sxErr, Double_t &sy, Double_t &syErr);
00197 void GetVolumes(Float_t *volumes);
00198 void GetVolumeErrors(Float_t *volumeErrors);
00199 void SetBackgroundParameters(Double_t a0Init, Bool_t fixA0, Double_t axInit, Bool_t fixAx, Double_t ayInit, Bool_t fixAy);
00200 void SetFitParameters(Int_t xmin,Int_t xmax,Int_t ymin,Int_t ymax, Int_t numberIterations, Double_t alpha, Int_t statisticType, Int_t alphaOptim, Int_t power, Int_t fitTaylor);
00201 void SetPeakParameters(Double_t sigmaX, Bool_t fixSigmaX, Double_t sigmaY, Bool_t fixSigmaY, Double_t ro, Bool_t fixRo, const Float_t *positionInitX, const Bool_t *fixPositionX, const Float_t *positionInitY, const Bool_t *fixPositionY, const Float_t *positionInitX1, const Bool_t *fixPositionX1, const Float_t *positionInitY1, const Bool_t *fixPositionY1, const Float_t *ampInit, const Bool_t *fixAmp, const Float_t *ampInitX1, const Bool_t *fixAmpX1, const Float_t *ampInitY1, const Bool_t *fixAmpY1);
00202 void SetTailParameters(Double_t tInitXY, Bool_t fixTxy, Double_t tInitX, Bool_t fixTx, Double_t tInitY, Bool_t fixTy, Double_t bInitX, Bool_t fixBx, Double_t bInitY, Bool_t fixBy, Double_t sInitXY, Bool_t fixSxy, Double_t sInitX, Bool_t fixSx, Double_t sInitY, Bool_t fixSy);
00203
00204 ClassDef(TSpectrum2Fit,1)
00205 };
00206
00207 #endif
00208