StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
EvtVubBLNPHybrid.hh
1 
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 //
24 
25 
26 #ifndef EVTVUBBLNPHYBRID_HH
27 #define EVTVUBBLNPHYBRID_HH
28 
29 #include <vector>
30 #include "EvtGenBase/EvtDecayIncoherent.hh"
31 
32 class EvtParticle;
33 
35 
36 public:
37 
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