]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliBtoJPSItoEleCDFfitFCN.h
New file to configure TOF preprocessor for NOISE runs:
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliBtoJPSItoEleCDFfitFCN.h
1 #ifndef ALIBTOJPSITOELECDFFITFCN_H\r
2 #define ALIBTOJPSITOELECDFFITFCN_H\r
3 /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *\r
4  * See cxx source for full Copyright notice                               */\r
5 \r
6 //_________________________________________________________________________\r
7 //                      Class AliBtoJPSItoEleCDFfitFCN\r
8 //                    Definition of main function used in \r
9 //                     unbinned log-likelihood fit for\r
10 //                 the channel B -> JPsi + X -> e+e- + X\r
11 //      \r
12 //                          Origin: C.Di Giglio\r
13 //     Contact: Carmelo.Digiglio@ba.infn.it , Giuseppe.Bruno@ba.infn.it\r
14 //_________________________________________________________________________\r
15 \r
16 #include <TNamed.h>\r
17 #include <TDatabasePDG.h>\r
18 #include "TH1F.h"\r
19 #include "TMath.h"\r
20 #include "TRandom3.h"\r
21 \r
22 enum IntegralType {kBkg, \r
23                    kBkgNorm, \r
24                    kSig, \r
25                    kSigNorm};\r
26 \r
27 enum PtBins       {kallpt, \r
28                    kptbin1,kptbin2,kptbin3,\r
29                    kptbin4,kptbin5,kptbin6,\r
30                    kptbin7,kptbin8,kptbin9};\r
31 //_________________________________________________________________________________________________\r
32 class AliBtoJPSItoEleCDFfitFCN : public TNamed {\r
33  public:\r
34   //\r
35   AliBtoJPSItoEleCDFfitFCN();\r
36   AliBtoJPSItoEleCDFfitFCN(const AliBtoJPSItoEleCDFfitFCN& source); \r
37   AliBtoJPSItoEleCDFfitFCN& operator=(const AliBtoJPSItoEleCDFfitFCN& source);  \r
38   virtual ~AliBtoJPSItoEleCDFfitFCN();\r
39 \r
40   Double_t EvaluateLikelihood(const Double_t* pseudoproperdecaytime,\r
41                               const Double_t* invariantmass, const Int_t ncand);\r
42  \r
43   Double_t GetFPlus()                  const { return fFPlus; }\r
44   Double_t GetFMinus()                 const { return fFMinus; }\r
45   Double_t GetFSym()                   const { return fFSym; }\r
46   Double_t GetRadius()                 const { return fParameters[0]; }\r
47   Double_t GetTheta()                  const { return fParameters[1]; }\r
48   Double_t GetPhi()                    const { return fParameters[2]; }\r
49   Double_t GetLamPlus()                const { return fParameters[3]; }\r
50   Double_t GetLamMinus()               const { return fParameters[4]; }\r
51   Double_t GetLamSym()                 const { return fParameters[5]; }\r
52   Double_t GetMassSlope()              const { return fParameters[6]; }\r
53   Double_t GetFractionJpsiFromBeauty() const { return fParameters[7]; }\r
54   Double_t GetFsig()                   const { return fParameters[8]; }\r
55   Double_t GetCrystalBallMmean()       const { return fParameters[9]; }\r
56   Double_t GetCrystalBallNexp()        const { return fParameters[10]; }\r
57   Double_t GetCrystalBallSigma()       const { return fParameters[11]; }\r
58   Double_t GetCrystalBallAlpha()       const { return fParameters[12]; }\r
59   Double_t GetCrystalBallNorm()        const { return fParameters[13]; }\r
60   Double_t GetSigmaResol()             const { return fParameters[14]; }\r
61   Double_t GetNResol()                 const { return fParameters[15]; }\r
62   Double_t GetIntegral()               const { return fIntegral; }\r
63   Double_t GetIntegralFunB()           const { return fintxFunB; }\r
64   Double_t GetIntegralBkgPos()         const { return fintxDecayTimeBkgPos; }\r
65   Double_t GetIntegralBkgNeg()         const { return fintxDecayTimeBkgNeg; }\r
66   Double_t GetIntegralBkgSym()         const { return fintxDecayTimeBkgSym; }\r
67   Double_t GetIntegralMassSig()        const { return fintmMassSig; }\r
68   Double_t GetIntegralRes()            const { return fintxRes; }\r
69   Double_t GetIntegralMassBkg()        const { return fintmMassBkg; }\r
70   Bool_t GetCrystalBallParam()         const { return fCrystalBallParam; }\r
71 \r
72   void SetFPlus(Double_t plus) {fFPlus = plus;}\r
73   void SetFMinus(Double_t minus) {fFMinus = minus;}\r
74   void SetFSym(Double_t sym) {fFSym = sym;}\r
75   void SetRadius(Double_t radius) {fParameters[0] = radius;}\r
76   void SetTheta(Double_t theta) {fParameters[1] = theta;}\r
77   void SetPhi(Double_t phi) {fParameters[2] = phi;}\r
78   void SetLamPlus(Double_t lamplus) {fParameters[3] = lamplus;}\r
79   void SetLamMinus(Double_t lamminus) {fParameters[4] = lamminus;}\r
80   void SetLamSym(Double_t lamsym) {fParameters[5] = lamsym;}\r
81   void SetMassSlope(Double_t slope) {fParameters[6] = slope;}\r
82   void SetFractionJpsiFromBeauty(Double_t B) {fParameters[7] = B;}\r
83   void SetFsig(Double_t Fsig) {fParameters[8] = Fsig;}\r
84   void SetCrystalBallMmean(Double_t CrystalBallMmean) {fParameters[9] = CrystalBallMmean;}\r
85   void SetCrystalBallNexp(Double_t CrystalBallNexp) {fParameters[10] = CrystalBallNexp;}\r
86   void SetCrystalBallSigma(Double_t CrystalBallSigma) {fParameters[11] = CrystalBallSigma;}\r
87   void SetCrystalBallAlpha(Double_t CrystalBallAlpha) {fParameters[12] = CrystalBallAlpha;}\r
88   void SetCrystalBallNorm(Double_t CrystalBallNorm) {fParameters[13] = CrystalBallNorm;}\r
89   void SetSigmaResol(Double_t SigmaResol) {fParameters[14] = SigmaResol;}\r
90   void SetNResol(Double_t NResol) {fParameters[15] = NResol;}\r
91 \r
92   void SetAllParameters(const Double_t* parameters);\r
93   void SetIntegral(Double_t integral)        { fIntegral = integral; }\r
94   void SetIntegralFunB(Double_t integral)    { fintxFunB = integral; }\r
95   void SetIntegralBkgPos(Double_t integral)  { fintxDecayTimeBkgPos = integral; }\r
96   void SetIntegralBkgNeg(Double_t integral)  { fintxDecayTimeBkgNeg = integral; }\r
97   void SetIntegralBkgSym(Double_t integral)  { fintxDecayTimeBkgSym = integral; }\r
98   void SetIntegralMassSig(Double_t integral) { fintmMassSig = integral; }\r
99   void SetIntegralRes(Double_t integral)     { fintxRes = integral; }\r
100   void SetIntegralMassBkg(Double_t integral) { fintmMassBkg = integral; }\r
101 \r
102   void SetCsiMC(const TH1F* MCtemplate) {fhCsiMC = (TH1F*)MCtemplate->Clone("fhCsiMC");}\r
103 \r
104   void SetResolutionConstants();\r
105   void SetMassWndHigh(Double_t limit) { fMassWndHigh = TDatabasePDG::Instance()->GetParticle(443)->Mass() + limit ;}\r
106   void SetMassWndLow(Double_t limit) { fMassWndLow = TDatabasePDG::Instance()->GetParticle(443)->Mass() - limit ;}\r
107   void SetCrystalBallFunction(Bool_t okCB) {fCrystalBallParam = okCB;}\r
108 \r
109   void ConvertFromSpherical() { fFPlus  = TMath::Power((fParameters[0]*TMath::Cos(fParameters[1])),2.);\r
110                                 fFMinus = TMath::Power((fParameters[0]*TMath::Sin(fParameters[1])*TMath::Sin(fParameters[2])),2.);\r
111                                 fFSym   = TMath::Power((fParameters[0]*TMath::Sin(fParameters[1])*TMath::Cos(fParameters[2])),2.);} \r
112 \r
113   void ComputeIntegral(); \r
114 \r
115   void ReadMCtemplates(Int_t BinNum);\r
116 \r
117   void PrintStatus();\r
118 \r
119  private:  \r
120   //\r
121   Double_t fParameters[16];        /*  par[0]  = fRadius;                \r
122                                        par[1]  = fTheta;\r
123                                        par[2]  = fPhi;\r
124                                        par[3]  = fOneOvLamPlus;\r
125                                        par[4]  = fOneOvLamMinus;\r
126                                        par[5]  = fOneOvLamSym;\r
127                                        par[6]  = fMassBkgSlope;\r
128                                        par[7]  = fFractionJpsiFromBeauty;\r
129                                        par[8]  = fFsig;\r
130                                        par[9]  = fCrystalBallMmean;\r
131                                        par[10] = fCrystalBallNexp;\r
132                                        par[11] = fCrystalBallSigma;\r
133                                        par[12] = fCrystalBallAlpha;\r
134                                        par[13] = fCrystalBallNorm;\r
135                                        par[14] = fSigmaResol;\r
136                                        par[15] = fNResol; */\r
137 \r
138 \r
139   Double_t fFPlus;                     // parameters of the log-likelihood function\r
140   Double_t fFMinus;                    // Slopes of the x distributions of the background \r
141   Double_t fFSym;                      // functions \r
142 \r
143   Double_t fIntegral;                  // integral values of log-likelihood function terms\r
144   Double_t fintxFunB;\r
145   Double_t fintxDecayTimeBkgPos;\r
146   Double_t fintxDecayTimeBkgNeg;\r
147   Double_t fintxDecayTimeBkgSym;\r
148   Double_t fintmMassSig;\r
149   Double_t fintxRes;\r
150   Double_t fintmMassBkg;\r
151   TH1F *fhCsiMC;                       // X distribution used as MC template for JPSI from B\r
152   Double_t fResolutionConstants[5];    // constants for the parametrized resolution function R(X)\r
153   Double_t fMassWndHigh;               // JPSI Mass window higher limit\r
154   Double_t fMassWndLow;                // JPSI Mass window lower limit\r
155   Bool_t fCrystalBallParam;            // Boolean to switch to Crystall Ball parameterisation\r
156 \r
157   ////\r
158 \r
159   Double_t EvaluateCDFfunc(Double_t x, Double_t m) const ;\r
160 \r
161   Double_t EvaluateCDFfuncNorm(Double_t x, Double_t m) const ;\r
162 \r
163   ////\r
164 \r
165   Double_t EvaluateCDFfuncSignalPart(Double_t x, Double_t m) const ;      // Signal part \r
166 \r
167   Double_t EvaluateCDFDecayTimeSigDistr(Double_t x) const ;\r
168 \r
169   Double_t EvaluateCDFInvMassSigDistr(Double_t m) const ;\r
170 \r
171   Double_t EvaluateCDFfuncBkgPart(Double_t x,Double_t m) const ;          // Background part\r
172 \r
173   Double_t EvaluateCDFDecayTimeBkgDistr(Double_t x) const ;\r
174  \r
175   Double_t EvaluateCDFInvMassBkgDistr(Double_t m) const ;\r
176 \r
177   ////\r
178 \r
179   Double_t FunB(Double_t x) const ;\r
180 \r
181   Double_t FunP(Double_t x) const ;\r
182 \r
183   Double_t CsiMC(Double_t x) const ;\r
184 \r
185   Double_t FunBkgPos(Double_t x) const ;\r
186 \r
187   Double_t FunBkgNeg(Double_t x) const ;\r
188 \r
189   Double_t FunBkgSym(Double_t x) const ;\r
190 \r
191   Double_t ResolutionFunc(Double_t x) const ;\r
192   //\r
193   ClassDef (AliBtoJPSItoEleCDFfitFCN,1);         // Unbinned log-likelihood fit \r
194 \r
195 };\r
196 \r
197 #endif\r