evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtVubNLO.hh
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
21 #ifndef EVTVUBNLO_HH
22 #define EVTVUBNLO_HH
23 
25 
26 #include <vector>
27 
28 class EvtParticle;
29 class RandGeneral;
30 
31 // Description:
32 // Class to generate inclusive B to X_u l nu decays according to various
33 // decay models. Implemtented are ACCM, parton-model and a QCD model.
34 // Description: Routine to decay B->Xulnu according to Bosch, Lange, Neubert, and Paz hep-ph/0402094
35 // Equation numbers refer to this paper
36 
37 class EvtVubNLO : public EvtDecayIncoherent {
38  public:
39  EvtVubNLO() = default;
40  ~EvtVubNLO();
41 
42  std::string getName() override;
43 
44  EvtDecayBase* clone() override;
45 
46  void initProbMax() override;
47 
48  void init() override;
49 
50  void decay( EvtParticle* p ) override;
51 
52  private:
53  // cache
54  double _lbar;
55  double _mupi2;
56 
57  double _mb; // the b-quark pole mass in GeV
58  double _mB;
59  double _lambdaSF;
60  double _b; // Parameter for the Fermi Motion
61  double _kpar;
62  double _mui; // renormalization scale (preferred value=1.5 GeV)
63  double _SFNorm; // SF normalization
64  double _dGMax; // max dGamma*p2 value;
65  int _idSF; // which shape function?
66  std::vector<double> _masses;
67  std::vector<double> _weights;
68 
69  double _gmax;
70  int _ngood, _ntot;
71 
72  double tripleDiff( double pp, double pl, double pm );
73  double SFNorm( const std::vector<double>& coeffs );
74  static double integrand( double omega, const std::vector<double>& coeffs );
75  double F10( const std::vector<double>& coeffs );
76  static double F1Int( double omega, const std::vector<double>& coeffs );
77  double F20( const std::vector<double>& coeffs );
78  static double F2Int( double omega, const std::vector<double>& coeffs );
79  double F30( const std::vector<double>& coeffs );
80  static double F3Int( double omega, const std::vector<double>& coeffs );
81  static double g1( double y, double z );
82  static double g2( double y, double z );
83  static double g3( double y, double z );
84 
85  static double Gamma( double z ); // Euler Gamma Function
86  static double dgamma( double t, const std::vector<double>& c )
87  {
88  return pow( t, c[0] - 1 ) * exp( -t );
89  }
90  static double Gamma( double z, double tmax );
91 
92  // theory parameters
93  inline double mu_i() { return _mui; } // intermediate scale
94  inline double mu_bar() { return _mui; }
95  inline double mu_h() { return _mb / sqrt( 2.0 ); } // high scale
96  inline double lambda1() { return -_mupi2; }
97 
98  // expansion coefficients for RGE
99  static double beta0( int nf = 4 ) { return 11. - 2. / 3. * nf; }
100  static double beta1( int nf = 4 ) { return 34. * 3. - 38. / 3. * nf; }
101  static double beta2( int nf = 4 )
102  {
103  return 1428.5 - 5033. / 18. * nf + 325. / 54. * nf * nf;
104  }
105  static double gamma0() { return 16. / 3.; }
106  static double gamma1( int nf = 4 )
107  {
108  return 4. / 3. * ( 49.85498 - 40. / 9. * nf );
109  }
110  static double gamma2( int nf = 4 )
111  {
112  return 64. / 3. * ( 55.07242 - 8.58691 * nf - nf * nf / 27. );
113  } /* zeta3=1.20206 */
114  static double gammap0() { return -20. / 3.; }
115  static double gammap1( int nf = 4 )
116  {
117  return -32. / 3. * ( 6.92653 - 0.9899 * nf );
118  } /* ?? zeta3=1.202 */
119 
120  // running constants
121 
122  static double alphas( double mu );
123  static double C_F( double mu )
124  {
125  return ( 4.0 / 3.0 ) * alphas( mu ) / 4. / EvtConst::pi;
126  }
127 
128  // Shape Functions
129 
130  inline double lambda_SF() { return _lambdaSF; }
131  double lambda_bar( double omega0 );
132  inline double lambda2() { return 0.12; }
133  double mu_pi2( double omega0 );
134  inline double lambda( double ) { return _mB - _mb; }
135 
136  // specail for gaussian SF
137  static double cGaus( double b )
138  {
139  return pow( Gamma( 1 + b / 2. ) / Gamma( ( 1 + b ) / 2. ), 2 );
140  }
141 
142  double M0( double mui, double omega0 );
143  static double shapeFunction( double omega, const std::vector<double>& coeffs );
144  static double expShapeFunction( double omega,
145  const std::vector<double>& coeffs );
146  static double gausShapeFunction( double omega,
147  const std::vector<double>& coeffs );
148  // SSF (not yet implemented)
149  double subS( const std::vector<double>& coeffs );
150  double subT( const std::vector<double>& coeffs );
151  double subU( const std::vector<double>& coeffs );
152  double subV( const std::vector<double>& coeffs );
153 
154  // Sudakov
155 
156  inline double S0( double a, double r )
157  {
158  return -gamma0() / 4 / a / pow( beta0(), 2 ) * ( 1 / r - 1 + log( r ) );
159  }
160  inline double S1( double /*a*/, double r )
161  {
162  return gamma0() / 4. / pow( beta0(), 2 ) *
163  ( pow( log( r ), 2 ) * beta1() / 2. / beta0() +
164  ( gamma1() / gamma0() - beta1() / beta0() ) *
165  ( 1. - r + log( r ) ) );
166  }
167  inline double S2( double a, double r )
168  {
169  return gamma0() * a / 4. / pow( beta0(), 2 ) *
170  ( -0.5 * pow( ( 1 - r ), 2 ) *
171  ( pow( beta1() / beta0(), 2 ) - beta2() / beta0() -
172  beta1() / beta0() * gamma1() / gamma0() +
173  gamma2() / gamma0() ) +
174  ( pow( beta1() / beta0(), 2 ) - beta2() / beta0() ) *
175  ( 1 - r ) * log( r ) +
176  ( beta1() / beta0() * gamma1() / gamma0() - beta2() / beta0() ) *
177  ( 1 - r + r * log( r ) ) );
178  }
179  inline double dSudakovdepsi( double mu1, double mu2 )
180  {
181  return S2( alphas( mu1 ) / ( 4 * EvtConst::pi ),
182  alphas( mu2 ) / alphas( mu1 ) );
183  }
184  inline double Sudakov( double mu1, double mu2, double epsi = 0 )
185  {
186  double fp( 4 * EvtConst::pi );
187  return S0( alphas( mu1 ) / fp, alphas( mu2 ) / alphas( mu1 ) ) +
188  S1( alphas( mu1 ) / fp, alphas( mu2 ) / alphas( mu1 ) ) +
189  epsi * dSudakovdepsi( mu1, mu2 );
190  }
191 
192  // RG
193  inline double dGdepsi( double mu1, double mu2 )
194  {
195  return 1. / 8. / EvtConst::pi * ( alphas( mu2 ) - alphas( mu1 ) ) *
196  ( gamma1() / beta0() - beta1() * gamma0() / pow( beta0(), 2 ) );
197  }
198  inline double aGamma( double mu1, double mu2, double epsi = 0 )
199  {
200  return gamma0() / 2 / beta0() * log( alphas( mu2 ) / alphas( mu1 ) ) +
201  epsi * dGdepsi( mu1, mu2 );
202  }
203  inline double dgpdepsi( double mu1, double mu2 )
204  {
205  return 1. / 8. / EvtConst::pi * ( alphas( mu2 ) - alphas( mu1 ) ) *
206  ( gammap1() / beta0() - beta1() * gammap0() / pow( beta0(), 2 ) );
207  }
208  inline double agammap( double mu1, double mu2, double epsi = 0 )
209  {
210  return gammap0() / 2 / beta0() * log( alphas( mu2 ) / alphas( mu1 ) ) +
211  epsi * dgpdepsi( mu1, mu2 );
212  }
213  inline double U1( double mu1, double mu2, double epsi = 0 )
214  {
215  return exp( 2 * ( Sudakov( mu1, mu2, epsi ) - agammap( mu1, mu2, epsi ) -
216  aGamma( mu1, mu2, epsi ) * log( _mb / mu1 ) ) );
217  }
218  inline double U1lo( double mu1, double mu2 ) { return U1( mu1, mu2 ); }
219  inline double U1nlo( double mu1, double mu2 )
220  {
221  return U1( mu1, mu2 ) *
222  ( 1 + 2 * ( dSudakovdepsi( mu1, mu2 ) - dgpdepsi( mu1, mu2 ) -
223  log( _mb / mu1 ) * dGdepsi( mu1, mu2 ) ) );
224  }
225  inline double alo( double mu1, double mu2 )
226  {
227  return -2 * aGamma( mu1, mu2 );
228  }
229  inline double anlo( double mu1, double mu2 )
230  {
231  return -2 * dGdepsi( mu1, mu2 );
232  }
233 };
234 
235 #endif
int _ntot
Definition: EvtVubNLO.hh:70
static double F1Int(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:434
double dSudakovdepsi(double mu1, double mu2)
Definition: EvtVubNLO.hh:179
static double g1(double y, double z)
Definition: EvtVubNLO.cpp:492
static double gammap1(int nf=4)
Definition: EvtVubNLO.hh:115
double mu_h()
Definition: EvtVubNLO.hh:95
std::vector< double > _weights
Definition: EvtVubNLO.hh:67
double M0(double mui, double omega0)
Definition: EvtVubNLO.cpp:662
double tripleDiff(double pp, double pl, double pm)
Definition: EvtVubNLO.cpp:350
double aGamma(double mu1, double mu2, double epsi=0)
Definition: EvtVubNLO.hh:198
static double g2(double y, double z)
Definition: EvtVubNLO.cpp:506
double S2(double a, double r)
Definition: EvtVubNLO.hh:167
static double beta2(int nf=4)
Definition: EvtVubNLO.hh:101
double _SFNorm
Definition: EvtVubNLO.hh:63
double mu_pi2(double omega0)
Definition: EvtVubNLO.cpp:636
static double C_F(double mu)
Definition: EvtVubNLO.hh:123
double subS(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:597
double lambda(double)
Definition: EvtVubNLO.hh:134
double alo(double mu1, double mu2)
Definition: EvtVubNLO.hh:225
double _mb
Definition: EvtVubNLO.hh:57
static double expShapeFunction(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:693
static double integrand(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:386
static double g3(double y, double z)
Definition: EvtVubNLO.cpp:518
void decay(EvtParticle *p) override
Definition: EvtVubNLO.cpp:171
static double beta0(int nf=4)
Definition: EvtVubNLO.hh:99
double _mupi2
Definition: EvtVubNLO.hh:55
double F20(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:448
static double dgamma(double t, const std::vector< double > &c)
Definition: EvtVubNLO.hh:86
double F10(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:398
double SFNorm(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:564
double mu_i()
Definition: EvtVubNLO.hh:93
double _dGMax
Definition: EvtVubNLO.hh:64
double subV(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:609
static double Gamma(double z)
Definition: EvtVubNLO.cpp:703
static double beta1(int nf=4)
Definition: EvtVubNLO.hh:100
int _ngood
Definition: EvtVubNLO.hh:70
static double gausShapeFunction(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:683
static double gamma2(int nf=4)
Definition: EvtVubNLO.hh:110
double F30(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:475
double _mui
Definition: EvtVubNLO.hh:62
static const double pi
Definition: EvtConst.hh:26
double _gmax
Definition: EvtVubNLO.hh:69
double dGdepsi(double mu1, double mu2)
Definition: EvtVubNLO.hh:193
double U1lo(double mu1, double mu2)
Definition: EvtVubNLO.hh:218
static double alphas(double mu)
Definition: EvtVubNLO.cpp:672
double anlo(double mu1, double mu2)
Definition: EvtVubNLO.hh:229
EvtVubNLO()=default
double U1nlo(double mu1, double mu2)
Definition: EvtVubNLO.hh:219
static double gamma0()
Definition: EvtVubNLO.hh:105
double U1(double mu1, double mu2, double epsi=0)
Definition: EvtVubNLO.hh:213
double subT(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:601
double lambda_SF()
Definition: EvtVubNLO.hh:130
std::vector< double > _masses
Definition: EvtVubNLO.hh:66
static double gammap0()
Definition: EvtVubNLO.hh:114
double S0(double a, double r)
Definition: EvtVubNLO.hh:156
void initProbMax() override
Definition: EvtVubNLO.cpp:166
double lambda_bar(double omega0)
Definition: EvtVubNLO.cpp:614
double Sudakov(double mu1, double mu2, double epsi=0)
Definition: EvtVubNLO.hh:184
double agammap(double mu1, double mu2, double epsi=0)
Definition: EvtVubNLO.hh:208
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:240
double subU(const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:605
double _mB
Definition: EvtVubNLO.hh:58
double _lambdaSF
Definition: EvtVubNLO.hh:59
double mu_bar()
Definition: EvtVubNLO.hh:94
double _kpar
Definition: EvtVubNLO.hh:61
double S1(double, double r)
Definition: EvtVubNLO.hh:160
static double F3Int(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:483
void init() override
Definition: EvtVubNLO.cpp:60
std::string getName() override
Definition: EvtVubNLO.cpp:50
static double cGaus(double b)
Definition: EvtVubNLO.hh:137
double lambda2()
Definition: EvtVubNLO.hh:132
double dgpdepsi(double mu1, double mu2)
Definition: EvtVubNLO.hh:203
int _idSF
Definition: EvtVubNLO.hh:65
static double F2Int(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:466
static double gamma1(int nf=4)
Definition: EvtVubNLO.hh:106
static double shapeFunction(double omega, const std::vector< double > &coeffs)
Definition: EvtVubNLO.cpp:583
double _b
Definition: EvtVubNLO.hh:60
EvtDecayBase * clone() override
Definition: EvtVubNLO.cpp:55
double _lbar
Definition: EvtVubNLO.hh:54
double lambda1()
Definition: EvtVubNLO.hh:96