EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
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
28class EvtParticle;
29class 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
38 public:
39 EvtVubNLO() = default;
40 ~EvtVubNLO();
41
42 std::string getName() const override;
43
44 EvtDecayBase* clone() const 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 m_lbar;
55 double m_mupi2;
56
57 double m_mb; // the b-quark pole mass in GeV
58 double m_mB;
59 double m_lambdaSF;
60 double m_b; // Parameter for the Fermi Motion
61 double m_kpar;
62 double m_mui; // renormalization scale (preferred value=1.5 GeV)
63 double m_SFNorm; // SF normalization
64 double m_dGMax; // max dGamma*p2 value;
65 int m_idSF; // which shape function?
66 std::vector<double> m_masses;
67 std::vector<double> m_weights;
68
69 double m_gmax;
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 m_mui; } // intermediate scale
94 inline double mu_bar() { return m_mui; }
95 inline double mu_h() { return m_mb / sqrt( 2.0 ); } // high scale
96 inline double lambda1() { return -m_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 m_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 m_mB - m_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( m_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( m_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
EvtComplex exp(const EvtComplex &c)
static const double pi
Definition EvtConst.hh:26
EvtDecayBase()=default
double m_mB
Definition EvtVubNLO.hh:58
double m_kpar
Definition EvtVubNLO.hh:61
double S1(double, double r)
Definition EvtVubNLO.hh:160
double alo(double mu1, double mu2)
Definition EvtVubNLO.hh:225
std::vector< double > m_weights
Definition EvtVubNLO.hh:67
static double integrand(double omega, const std::vector< double > &coeffs)
EvtDecayBase * clone() const override
Definition EvtVubNLO.cpp:54
double anlo(double mu1, double mu2)
Definition EvtVubNLO.hh:229
static double alphas(double mu)
double m_mui
Definition EvtVubNLO.hh:62
double Sudakov(double mu1, double mu2, double epsi=0)
Definition EvtVubNLO.hh:184
static double F3Int(double omega, const std::vector< double > &coeffs)
double m_SFNorm
Definition EvtVubNLO.hh:63
double mu_pi2(double omega0)
double F30(const std::vector< double > &coeffs)
void initProbMax() override
static double beta0(int nf=4)
Definition EvtVubNLO.hh:99
double subT(const std::vector< double > &coeffs)
double M0(double mui, double omega0)
double m_mupi2
Definition EvtVubNLO.hh:55
double lambda2()
Definition EvtVubNLO.hh:132
double m_lambdaSF
Definition EvtVubNLO.hh:59
double m_mb
Definition EvtVubNLO.hh:57
static double dgamma(double t, const std::vector< double > &c)
Definition EvtVubNLO.hh:86
static double expShapeFunction(double omega, const std::vector< double > &coeffs)
EvtVubNLO()=default
void init() override
Definition EvtVubNLO.cpp:59
static double Gamma(double z)
static double F2Int(double omega, const std::vector< double > &coeffs)
static double g1(double y, double z)
double subU(const std::vector< double > &coeffs)
double SFNorm(const std::vector< double > &coeffs)
static double gammap1(int nf=4)
Definition EvtVubNLO.hh:115
int m_ngood
Definition EvtVubNLO.hh:70
double U1(double mu1, double mu2, double epsi=0)
Definition EvtVubNLO.hh:213
double S2(double a, double r)
Definition EvtVubNLO.hh:167
static double C_F(double mu)
Definition EvtVubNLO.hh:123
double lambda(double)
Definition EvtVubNLO.hh:134
double S0(double a, double r)
Definition EvtVubNLO.hh:156
double U1lo(double mu1, double mu2)
Definition EvtVubNLO.hh:218
double m_dGMax
Definition EvtVubNLO.hh:64
double dSudakovdepsi(double mu1, double mu2)
Definition EvtVubNLO.hh:179
double mu_h()
Definition EvtVubNLO.hh:95
static double cGaus(double b)
Definition EvtVubNLO.hh:137
double U1nlo(double mu1, double mu2)
Definition EvtVubNLO.hh:219
static double gausShapeFunction(double omega, const std::vector< double > &coeffs)
double lambda1()
Definition EvtVubNLO.hh:96
double m_gmax
Definition EvtVubNLO.hh:69
static double F1Int(double omega, const std::vector< double > &coeffs)
double mu_bar()
Definition EvtVubNLO.hh:94
static double g2(double y, double z)
static double gamma1(int nf=4)
Definition EvtVubNLO.hh:106
double lambda_SF()
Definition EvtVubNLO.hh:130
double aGamma(double mu1, double mu2, double epsi=0)
Definition EvtVubNLO.hh:198
double tripleDiff(double pp, double pl, double pm)
static double gamma0()
Definition EvtVubNLO.hh:105
void decay(EvtParticle *p) override
static double gammap0()
Definition EvtVubNLO.hh:114
static double beta2(int nf=4)
Definition EvtVubNLO.hh:101
double F10(const std::vector< double > &coeffs)
static double g3(double y, double z)
double subV(const std::vector< double > &coeffs)
std::vector< double > m_masses
Definition EvtVubNLO.hh:66
static double shapeFunction(double omega, const std::vector< double > &coeffs)
double subS(const std::vector< double > &coeffs)
double m_lbar
Definition EvtVubNLO.hh:54
std::string getName() const override
Definition EvtVubNLO.cpp:49
double F20(const std::vector< double > &coeffs)
double mu_i()
Definition EvtVubNLO.hh:93
static double beta1(int nf=4)
Definition EvtVubNLO.hh:100
double lambda_bar(double omega0)
double dGdepsi(double mu1, double mu2)
Definition EvtVubNLO.hh:193
double m_b
Definition EvtVubNLO.hh:60
double dgpdepsi(double mu1, double mu2)
Definition EvtVubNLO.hh:203
static double gamma2(int nf=4)
Definition EvtVubNLO.hh:110
double agammap(double mu1, double mu2, double epsi=0)
Definition EvtVubNLO.hh:208