Fix for definitions for CINT
[u/mrichter/AliRoot.git] / TEvtGen / EvtGen / EvtGenModels / EvtVubBLNPHybrid.hh
1
2 //////////////////////////////////////////////////////////////////////
3 //
4 // Module: EvtVubBLNPHybrid.hh
5 //
6 //
7 // tripleDiff from BLNPHybrid's notebook, based on hep-ph/0504071
8 // 
9 // Description:
10 // Class to generate inclusive B to X_u l nu decays.
11 // This class is based on EvtVubBLNP by Sheila Mclachlin with an update to
12 // generate the inclusive decays in such a way that the right
13 // mix of inclusive and exclusive decays is obtained.
14 // 
15 //NOTE:
16 // - A set of weights (for bins in the kinematic variables mX, q2, El)
17 //   is read from DECAY.DEC. This set of weights must be consistent
18 //   with the other parameters specified (excl. BF, non-res BF, mb, a).
19 // - If no binning/weights are specified in DECAY.DEC the hybrid
20 //   reweighting is not activated
21 //
22 //
23 //////////////////////////////////////////////////////////////////
24
25
26 #ifndef EVTVUBBLNPHYBRID_HH
27 #define EVTVUBBLNPHYBRID_HH
28
29 #include <vector>
30 #include "EvtGenBase/EvtDecayIncoherent.hh"
31
32 class EvtParticle;
33
34 class EvtVubBLNPHybrid:public  EvtDecayIncoherent  {
35
36 public:
37   
38   EvtVubBLNPHybrid(); 
39   virtual ~EvtVubBLNPHybrid();
40   
41   std::string getName();
42   
43   EvtDecayBase* clone();
44
45   void initProbMax();
46
47   void init();
48
49   void decay(EvtParticle *Bmeson); 
50
51   void readWeights(int startArg=0);
52   
53   double getWeight(double mX, double q2, double El);
54
55 private:
56   //Input for hybrid modell
57   enum { nParameters = 10, nVariables = 3 };
58   bool _noHybrid;
59   bool _storeWhat;
60   int    _nbins_mX;
61   int    _nbins_q2;
62   int    _nbins_El;
63   int    _nbins;
64   double _masscut;
65   double * _bins_mX;
66   double * _bins_q2;
67   double * _bins_El;
68   double * _weights;
69   
70   // Input parameters
71   double mBB;
72   double lambda2;
73
74   // Shape function parameters
75   double b;
76   double Lambda;
77   double Ecut;
78   double wzero;
79
80   // SF and SSF modes
81   int itype;
82   double dtype;
83   int isubl;
84
85   // flags
86   int flag1;
87   int flag2;
88   int flag3;
89
90   // Quark mass
91   double mb;
92
93   // Matching scales
94   double muh;
95   double mui;
96   double mubar;
97
98   // Perturbative quantities
99   double CF;
100   double CA;
101
102   double beta0;
103   double beta1;
104   double beta2;
105
106   double zeta3;
107
108   double Gamma0;
109   double Gamma1;
110   double Gamma2;
111
112   double gp0;
113   double gp1;
114
115   double Lbar;
116   double mupisq;
117   double moment2;
118
119   int flagpower;
120   int flag2loop;
121
122   int maxLoop;
123   double precision;
124
125   std::vector<double> gvars;
126   
127   double rate3(double Pp, double Pl, double Pm);
128   double F1(double Pp, double Pm, double muh, double mui, double mubar, double doneJS, double done1);
129   double F2(double Pp, double Pm, double muh, double mui, double mubar, double done3);
130   double F3(double Pp, double Pm, double muh, double mui, double mubar, double done2);
131   double DoneJS(double Pp, double Pm, double mui);
132   double Done1(double Pp, double Pm, double mui);
133   double Done2(double Pp, double Pm, double mui);
134   double Done3(double Pp, double Pm, double mui);
135   static double IntJS(double what, const std::vector<double> &vars);
136   static double Int1(double what, const std::vector<double> &vars);
137   static double Int2(double what, const std::vector<double> &vars);
138   static double Int3(double what, const std::vector<double> &vars);
139   static double g1(double w, const std::vector<double> &vars);
140   static double g2(double w, const std::vector<double> &vars);
141   static double g3(double w, const std::vector<double> &vars);
142   static double Shat(double w, const std::vector<double> &vars);
143   static double Mzero(double muf, double mu, double mupisq, const std::vector<double> &vars);
144   double wS(double w);
145   double t(double w);
146   double u(double w);
147   double v(double w);
148   double myfunction(double w, double Lbar, double mom2);
149   double myfunctionBIK(double w, double Lbar, double mom2);
150   double dU1nlo(double muh, double mui);
151   double U1lo(double muh, double mui);
152   double Sfun(double mu1, double mu2, double epsilon);
153   double S0(double a1, double r);
154   double S1(double a1, double r);
155   double S2(double a1, double r);
156   double aGamma(double mu1, double mu2, double epsilon);
157   double agp(double mu1, double mu2, double epsilon);
158   double alo(double muh, double mui);
159   double anlo(double muh, double mui);   // d/depsilon of aGamma
160   static double alphas(double mu, const std::vector<double> &vars);
161   double PolyLog(double v, double z);
162   static double Gamma(double z);
163   static double Gamma(double a, double x);
164   static double gamser(double a, double x, double LogGamma);
165   static double gammcf(double a, double x, double LogGamma);
166   double findBLNPWhat();
167   std::vector<double> _pf;
168 };
169
170 #endif
171