9 std::shared_ptr<IObsQCDProxy> iobs_qcdp) :
10 mu_b(mu_b), C(C), ff_tp(ff_tp), iobs_qcdp(iobs_qcdp)
13 LOG_ERROR(
"ValueError",
"Wrong meson PDG code in BaseQCDfCalculator constructor:", B_id,
",", X_id);
17 this->
delta_qu = double (B_id == 521);
20 double beta_0 =
iobs_qcdp->get_constants()->beta[4][0];
21 auto run = [
this, beta_0] (
double value_1gev,
double eta,
double gamma) {
return value_1gev *
pow(eta, gamma / beta_0); };
24 double mu_f = sqrt(this->mu_b * this->
Lambda_h);
51 this->
z_c = std::pow(this->
m_c_pole / this->m_b_PS, 2);
53 this->
L_b = std::log(this->mu_b / this->m_b_PS);
56 this->
pref_par =
PI2 * this->f_B * this->f_X_par / (Nc * this->
m_B);
68 bool isV = (X_id == 313 || X_id == 323 || X_id == 333);
91 double C2 = -1.5 + 7.5 * x * x;
93 return 6 * u * (1 - u) * (1 + a1 *
C1 + a2 *
C2);
108 double mB2 = this->
m_Bd * this->
m_Bd;
111 if (
fpeq(m_q, 0.))
return 4./(1.-u);
115 return 4./(1.-u)*(1.+2.*m_q*m_q/(1.-u)/mB2*(
BV::L_1(xp)+
BV::L_1(xm)));
117 double s_hat = q2 / mB2;
118 double mq_hat = m_q /
m_Bd;
119 return 2.*
m_Bd/(1.-u)/E_Kstar*
BV::I_1(u,s_hat,mq_hat)+q2/(1.-u)/(1.-u)/E_Kstar/E_Kstar*(
BV::B_0((1.-u)*mB2+u*q2,m_q)-
BV::B_0(q2,m_q));
124 double mB2 = this->
m_Bd * this->
m_Bd;
125 double s_hat = q2 / mB2;
126 double mq_hat = m_q / this->
m_Bd;
128 return 2.*this->m_Bd/(1.-u)/E_Kstar*
BV::I_1(u,s_hat,mq_hat)+((1.-u)*mB2+u*q2)/(1.-u)/(1.-u)/E_Kstar/E_Kstar*(
BV::B_0((1.-u)*mB2+u*q2,m_q)-
BV::B_0(q2,m_q));
138 for (
size_t i = 0; i < 6; i++) {
139 this->
C_bar[b_ids[i]] = 0;
140 for (
size_t j = 0; j < 6; j++) {
141 this->
C_bar[b_ids[i]] +=
P_bar[i][j] * this->
C[b_ids[j]];
165 if (
fpeq(q2, 0.0))
return 1.0;
167 double mb2 = std::pow(this->
m_b_PS, 2);
168 return (q2 - mb2) * std::log(1. - q2 / mb2) / q2;
174 if (bar)
C7 = std::conj(
C7);
178 if (
fpeq(q2, 0.0))
return 0.0;
179 return q2 * l_u *
Y_u(q2) / (2. * this->
m_b_PS * this->
m_B);
181 if (
fpeq(q2, 0.0))
return C7;
182 return C7 + q2 * (
Y(q2) + l_u *
Y_u(q2)) / (2. * this->
m_b_PS * this->
m_B);
189 if (bar)
C7 = std::conj(
C7);
192 return -this->
m_B * l_u *
Y_u(q2) / (2. * this->
m_b_PS);
194 return -C7 - this->
m_B * (
Y(q2) + l_u *
Y_u(q2)) / (2. * this->
m_b_PS);
202 if (bar)
C7 = std::conj(
C7);
211 if (bar)
C7 = std::conj(
C7);
229 + q2 / (2. * this->
m_b_PS * this->
m_B) * (
264 if (bar)
C7 = std::conj(
C7);
265 return 2. * this->
m_B / (1. - u) / this->
E(q2) *
C7;
270 if (bar)
C7 = std::conj(
C7);
271 return 2. * this->
m_B / (1. - u) / this->
E(q2) *
C7;
275 double E = this->
E(q2);
282 return c8_term + this->m_B / (2 * this->
m_b_PS) * (
295 double E = this->
E(q2);
314 double v = this->
m_B * this->
m_B * (1 - u) + q2 * u;
320 double omega_0 = 2. * (this->
m_B - this->
m_b_PS) / 3.;
321 double x = q2 / (this->
m_B * omega_0);
322 return std::exp(-x) / omega_0 * (
I *
PI -
Ei(x));
329 auto f_soft = [q2, bar,
this] (
double u) {
334 auto f_full = [q2, bar,
this] (
double u) {
345 auto f_soft = [q2, bar,
this] (
double u) {
350 auto f_full = [q2, bar,
this] (
double u) {
359 auto f_soft = [q2, bar,
this] (
double u) {
367 auto f_full = [q2, bar,
this] (
double u) {
379 auto f_soft = [q2, bar,
this] (
double u) {
387 auto f_full = [q2, bar,
this] (
double u) {
#define LOG_ERROR(type,...)
Macro for logging error messages and terminating the application.
std::complex< double > complex_t
Convenience alias for std::complex<double>.
void fill_wilson_bar_cache()
complex_t t_perp(double u, double m_q, double q2, double E_Kstar)
complex_t inv_lambda_B_m(double q2)
complex_t I_perp_m(double q2, bool bar)
BaseQCDfCalculator()=default
complex_t C_par_0(double q2, double sign, bool bar)
double phi_X(double u, double a1, double a2)
complex_t C_par_nf(double q2, bool bar)
complex_t T_par_m_nf(double u, double q2, bool bar)
static constexpr double e_u
complex_t T_par_p_p_f(double u, double q2, bool bar)
std::shared_ptr< IObsQCDProxy > iobs_qcdp
complex_t n_T_par_m_0_bar
static constexpr double e_d
complex_t T_perp_p_p_f(double u, double q2, bool bar)
std::map< WCoef, complex_t > C_bar
double gv_dga_4(double u)
static constexpr std::array< std::array< double, 6 >, 6 > P_bar
complex_t C_perp_0(double q2, double sign, bool bar)
complex_t T_par_m_0(bool bar)
complex_t I_par_p(double q2, bool bar)
complex_t F_V(double v, bool bar)
complex_t C_perp_nf(double q2, bool bar)
complex_t T_perp_p_nf(double u, double q2, bool bar)
complex_t t_par(double u, double m_q, double q2, double E_Kstar)
complex_t T_par_p_nf(double u, double q2, bool bar)
complex_t C_par_f(double q2, double sign, bool bar)
complex_t T_perp_p_m_f(double u, double q2, bool bar)
complex_t I_par_m(double q2, bool bar)
std::map< WCoef, complex_t > C
complex_t I_perp_p(double q2, bool bar)
complex_t T_par_p_m_f(double u, double q2, bool bar)
complex_t C_perp_f(double q2, double sign, bool bar)
static const std::map< LhaID, std::string > allowed_decays
static const std::vector< WCoef > & B_group()
B-group (C1–C10) Wilson coefficients.
constexpr std::complex< double > I
double Ei(double x)
Computes the exponential integral function Ei(x).
scalar_t c_integrate(ComplexValuedFunction f, double l, double u, double prec)
Performs numerical integration of a complex-valued function of a real variable.
complex_t h(double s, double m_q, double mu_b)
complex_t I_1(double u, double s_hat, double m_q_hat)
complex_t f_19_u(double s_hat, double L_b)
complex_t f_27_u(double s_hat, double L_b)
complex_t f_19_PS(double s_hat, double L_b, double z, size_t max_pow=20)
complex_t f_27(double s_hat, double L_b, double z, size_t max_pow=20)
complex_t B_0(double s, double m_q)
complex_t f_29_u(double s_hat, double L_b)
complex_t f_87(double s_hat, double L_b)
complex_t L_1(complex_t x)
complex_t f_29_PS(double s_hat, double L_b, double z, size_t max_pow=20)
complex_t f_89(double s_hat)
scalar_t pow(const scalar_t &base, const scalar_t &exp)
std::enable_if_t< not std::numeric_limits< T >::is_integer, bool > fpeq(T, T, std::size_t n=10)
Compares two floating point numbers with a given precision.
Configuration for evaluating the strong coupling constant .
Configuration for computing a particle mass at a given scale.
Composite identifier for a single parameter.