o Add fitter for B -> J/psi analysis (Annalisa)
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronBtoJPSItoEleCDFfitFCNfitter.h
1 #ifndef ALIDIELECTRONBTOJPSITOELECDFFITFCNFITTER_H
2 #define ALIDIELECTRONBTOJPSITOELECDFFITFCNFITTER_H
3 /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //_________________________________________________________________________
7 //                      Class AliDielectronBtoJPSItoEleCDFfitFCNfitter
8 //                          Origin: A. Mastroserio
9 //     Interface class to fit invariant mass and pseudoproperdecay length separately
10 //     Contact: Annalisa.Mastroserio@ba.infn.it
11 //_________________________________________________________________________
12
13
14 #include "AliDielectronBtoJPSItoEleCDFfitFCN.h"
15 class TF1;
16 class TF2;
17 class TH1F;
18 class TH2F;
19 class TArrayD;
20
21 class AliDielectronBtoJPSItoEleCDFfitFCNfitter {
22
23  public:                
24   AliDielectronBtoJPSItoEleCDFfitFCNfitter();           
25   virtual ~AliDielectronBtoJPSItoEleCDFfitFCNfitter();
26
27
28   // INVARIANT MASS
29   enum {kInvMassSignal=5, kInvMassBkg=4, kInvMassTotal=9};
30
31   void SetInvMassParameters(const Double_t massPar[kInvMassTotal]);
32   void GetInvMassParameters(TArrayD &massPar);
33   void SetInvMassSignalParameters(const Double_t massPar[kInvMassSignal]);
34   void GetInvMassSignalParameters(TArrayD &massPar);
35   void SetInvMassBkgParameters(const Double_t massPar[kInvMassBkg]);
36   void GetInvMassBkgParameters(TArrayD &massPar);               
37
38   Double_t CDFInvMassSignal(const Double_t *x, const Double_t *par);
39   Double_t CDFInvMassBkg(const Double_t *x, const Double_t *par);
40   Double_t CDFInvMassTotal(const Double_t *x, const Double_t *par);
41   void SetInvMass(TH1F *mass) {fInvMass=mass;}  
42   void SetParameterToFixInInvMass(Bool_t fixed[kInvMassTotal]) {for(Int_t i=0; i<kInvMassTotal; i++) 
43    fParameterInvMassToFix[i]=fixed[i];}
44   TH1F * FitInvMass(Double_t norm[2], Double_t mMin=0, Double_t mMax=0);
45   TH1F * FitInvMassSignal( Double_t norm=1, Double_t mMin=0, Double_t mMax=0);
46
47
48   // RESOLUTION FUNC
49   // use SetResolutionConstants to set the parameters for FF, FS, SS            
50   enum {kPseudo=9, kPseudoBkg=7};
51   void SetPseudoProper(TH1F *hX) {if(fX)delete fX; fX=hX;}
52   void GetPseudoProperParameters(TArrayD &xPar, Int_t type);
53   Double_t CDFResolutionFunction(const Double_t *x, const Double_t *par);
54   Double_t PsProperBackFitFunc(const Double_t* x, const Double_t* par);
55
56
57   void SetParameterToFixInX(Bool_t fixed[kPseudo]) {for(Int_t i=0; i<kPseudo; i++) 
58    fParameterXToFix[i]=fixed[i];}       
59   void SetPseudoProperBkg(TH2F *hX2D) {fX2D=hX2D;}
60   void SetPseudoProperBkgParameters(Double_t xBkgPar[kPseudoBkg]);
61   void GetPseudoProperBkgParameters(TArrayD& bkgParam);
62   void SetParameterToFixInXbkg(Bool_t fixed[kPseudoBkg]) {for(Int_t i=0; i<kPseudoBkg; i++) fParameterXbkgToFix[i]=fixed[i];}
63   TH1F *FitResolutionFunction(Double_t xmin, Double_t xmax, Int_t type, Double_t norm=1);       
64   TH2F *FitBkgPsudoProper(Double_t xMin, Double_t xMax, Double_t norm);
65
66
67   // GENERAL
68   void SetFitOption(char *opt) {fFitOpt=opt;}
69   void SetCrystalBallFunction(Bool_t isCB) {fFCN->SetCrystalBallFunction(isCB);} 
70   void PrintParamStatus() {fFCN->PrintStatus();}
71   AliDielectronBtoJPSItoEleCDFfitFCN * GetFCN() {return fFCN;}
72
73  protected :
74
75   TH1F *fInvMass; // 1D inv mass distribution
76   TH1F *fX;       // 1D X distribution
77   TH2F *fX2D;     // 2D X distribution
78   AliDielectronBtoJPSItoEleCDFfitFCN *fFCN;  // fitter
79
80   TString fFitOpt; // fit options
81   Bool_t fParameterInvMassToFix[kInvMassTotal]; // booleans to fix single parameters
82   Bool_t fParameterXToFix[kPseudo];              // booleans to fix single parameters
83   Bool_t fParameterXbkgToFix[kPseudoBkg];        // booleans to fix single parameters
84
85   AliDielectronBtoJPSItoEleCDFfitFCNfitter(const AliDielectronBtoJPSItoEleCDFfitFCNfitter& source); 
86   AliDielectronBtoJPSItoEleCDFfitFCNfitter& operator=(const AliDielectronBtoJPSItoEleCDFfitFCNfitter& source);  
87
88   ClassDef (AliDielectronBtoJPSItoEleCDFfitFCNfitter,1);     
89 };
90
91 #endif