]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliBtoJPSItoEleCDFfitFCN.h
Faster calculation of invariant mass (Yifei)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliBtoJPSItoEleCDFfitFCN.h
CommitLineData
7b54a483 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
f9fd1412 20#include "TRandom3.h"\r
7b54a483 21\r
22enum IntegralType {kBkg, \r
23 kBkgNorm, \r
24 kSig, \r
25 kSigNorm};\r
26\r
27enum PtBins {kallpt, \r
28 kptbin1,kptbin2,kptbin3,\r
29 kptbin4,kptbin5,kptbin6,\r
30 kptbin7,kptbin8,kptbin9};\r
31//_________________________________________________________________________________________________\r
32class 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
f9fd1412 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
7b54a483 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
f9fd1412 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
7b54a483 91\r
92 void SetAllParameters(const Double_t* parameters);\r
f9fd1412 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
7b54a483 102 void SetCsiMC(const TH1F* MCtemplate) {fhCsiMC = (TH1F*)MCtemplate->Clone("fhCsiMC");}\r
f9fd1412 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
7b54a483 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
f9fd1412 121 Double_t fParameters[16]; /* par[0] = fRadius; \r
7b54a483 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
f9fd1412 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
7b54a483 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
f9fd1412 193 ClassDef (AliBtoJPSItoEleCDFfitFCN,1); // Unbinned log-likelihood fit \r
7b54a483 194\r
195};\r
196\r
197#endif\r