11 #ifndef ROOT_TSpectrum2Fit
12 #define ROOT_TSpectrum2Fit
16 class TSpectrum2Fit :
public TNamed {
19 Int_t fNumberIterations;
30 Double_t *fPositionInitX;
31 Double_t *fPositionCalcX;
32 Double_t *fPositionErrX;
33 Double_t *fPositionInitY;
34 Double_t *fPositionCalcY;
35 Double_t *fPositionErrY;
36 Double_t *fPositionInitX1;
37 Double_t *fPositionCalcX1;
38 Double_t *fPositionErrX1;
39 Double_t *fPositionInitY1;
40 Double_t *fPositionCalcY1;
41 Double_t *fPositionErrY1;
95 Bool_t *fFixPositionX;
96 Bool_t *fFixPositionY;
97 Bool_t *fFixPositionX1;
98 Bool_t *fFixPositionY1;
118 kFitOptimChiCounts =0,
119 kFitOptimChiFuncValues =1,
120 kFitOptimMaxLikelihood =2,
129 kFitTaylorOrderFirst =0,
130 kFitTaylorOrderSecond =1,
131 kFitNumRegulCycles =100
134 TSpectrum2Fit(Int_t numberPeaks);
135 virtual ~TSpectrum2Fit();
138 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);
139 Double_t Derampx(Double_t x,Double_t x0,Double_t sigmax,Double_t tx,Double_t sx,Double_t bx);
140 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);
141 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);
142 Double_t Derderi01(Double_t x,Double_t ax,Double_t x0,Double_t sigmax);
143 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);
144 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);
145 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);
146 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);
147 Double_t Derfc(Double_t x);
148 Double_t Deri01(Double_t x,Double_t ax,Double_t x0,Double_t sigmax,Double_t tx,Double_t sx,Double_t bx);
149 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);
150 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);
151 Double_t Derpa2(Double_t sx,Double_t sy,Double_t ro);
152 Double_t Derpro(Double_t a,Double_t sx,Double_t sy,Double_t ro);
153 Double_t Derpsigmax(Double_t a,Double_t sy,Double_t ro);
154 Double_t Derpsigmay(Double_t a,Double_t sx,Double_t ro);
155 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);
156 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);
157 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);
158 Double_t Dersx(Int_t numOfFittedPeaks,Double_t x,
const Double_t *parameter,Double_t sigmax);
159 Double_t Dersxy(Int_t numOfFittedPeaks,Double_t x,Double_t y,
const Double_t *parameter,Double_t sigmax,Double_t sigmay);
160 Double_t Dersy(Int_t numOfFittedPeaks,Double_t x,
const Double_t *parameter,Double_t sigmax);
161 Double_t Dertx(Int_t numOfFittedPeaks,Double_t x,
const Double_t *parameter,Double_t sigmax,Double_t bx);
162 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);
163 Double_t Derty(Int_t numOfFittedPeaks,Double_t x,
const Double_t *parameter,Double_t sigmax,Double_t bx);
164 Double_t Erfc(Double_t x);
165 Double_t Ourpowl(Double_t a,Int_t pw);
166 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);
167 void StiefelInversion(Double_t **a,Int_t size);
168 Double_t Volume(Double_t a,Double_t sx,Double_t sy,Double_t ro);
171 void FitAwmi(Double_t **source);
172 void FitStiefel(Double_t **source);
173 void GetAmplitudes(Double_t *amplitudes, Double_t *amplitudesX1, Double_t *amplitudesY1);
174 void GetAmplitudeErrors(Double_t *amplitudeErrors, Double_t *amplitudeErrorsX1, Double_t *amplitudeErrorsY1);
175 void GetBackgroundParameters(Double_t &a0, Double_t &a0Err, Double_t &ax, Double_t &axErr, Double_t &ay, Double_t &ayErr);
176 Double_t GetChi()
const {
return fChi;}
177 void GetPositions(Double_t *positionsX, Double_t *positionsY, Double_t *positionsX1, Double_t *positionsY1);
178 void GetPositionErrors(Double_t *positionErrorsX, Double_t *positionErrorsY, Double_t *positionErrorsX1, Double_t *positionErrorsY1);
179 void GetRo(Double_t &ro, Double_t &roErr);
180 void GetSigmaX(Double_t &sigmaX, Double_t &sigmaErrX);
181 void GetSigmaY(Double_t &sigmaY, Double_t &sigmaErrY);
182 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);
183 void GetVolumes(Double_t *volumes);
184 void GetVolumeErrors(Double_t *volumeErrors);
185 void SetBackgroundParameters(Double_t a0Init, Bool_t fixA0, Double_t axInit, Bool_t fixAx, Double_t ayInit, Bool_t fixAy);
186 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);
187 void SetPeakParameters(Double_t sigmaX, Bool_t fixSigmaX, Double_t sigmaY, Bool_t fixSigmaY, Double_t ro, Bool_t fixRo,
const Double_t *positionInitX,
const Bool_t *fixPositionX,
const Double_t *positionInitY,
const Bool_t *fixPositionY,
const Double_t *positionInitX1,
const Bool_t *fixPositionX1,
const Double_t *positionInitY1,
const Bool_t *fixPositionY1,
const Double_t *ampInit,
const Bool_t *fixAmp,
const Double_t *ampInitX1,
const Bool_t *fixAmpX1,
const Double_t *ampInitY1,
const Bool_t *fixAmpY1);
188 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);
190 ClassDef(TSpectrum2Fit,1)