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)