Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
EWHelper.cpp
Go to the documentation of this file.
1#include "EWHelper.h"
2
3#include <stdexcept>
4
6 LOG_DEBUG("Init EW dependent block");
7 std::unordered_map<ParameterType, std::vector<std::string>> src = {
8 {ParameterType::SM, {"SMINPUTS", "QCD"}},
9 {ParameterType::WILSON, {"B_SCALE", "D_SCALE"}}
10 };
11
12 auto func = [] (const BlockSrc& src, std::shared_ptr<DependentBlock> dep_block) {
13 double inv_alpha_m_Z = src.get_val("SMINPUTS", 1);
14 double m_Z = src.get_val("SMINPUTS", 4);
15 double m_b_pole = src.get_val("QCD", {5, 2});
16 double mu_b = src.get_val("B_SCALE", 1);
17 double mu_c = src.get_val("D_SCALE", 1);
18
19 double alpha_Z = 1 / inv_alpha_m_Z;
20 double alpha_b = alpha_5_mu_b(inv_alpha_m_Z, m_Z, mu_b);
21 double alpha_c = alpha_4_mu_c(inv_alpha_m_Z, m_Z, m_b_pole, mu_b, mu_c);
22 double alpha_0 = 1 / 137.036; // MAJ : Store somewhere
23
24 dep_block->store_or_assign({1, 1}, std::make_shared<Parameter>(ParamId{ParameterType::SM, "EW", {1, 1}}, alpha_Z, 0., 0.));
25 dep_block->store_or_assign({1, 2}, std::make_shared<Parameter>(ParamId{ParameterType::SM, "EW", {1, 2}}, alpha_b, 0., 0.));
26 dep_block->store_or_assign({1, 3}, std::make_shared<Parameter>(ParamId{ParameterType::SM, "EW", {1, 3}}, alpha_c, 0., 0.));
27 dep_block->store_or_assign({1, 4}, std::make_shared<Parameter>(ParamId{ParameterType::SM, "EW", {1, 4}}, alpha_0, 0., 0.));
28 };
29
31}
32
33double EWHelper::alpha_em(double) {
34 throw std::logic_error(
35 "EWHelper::alpha_em running is not implemented; use the precomputed EW block values"
36 );
37}
38
39double EWHelper::I_s(int k, double mu_low, double mu_high) {
40 auto f = [k] (double s) {
41 return QCDHelper::alpha_s(std::sqrt(s)) / s;
42 };
43
44 return integrate(f, std::pow(mu_low, 2), std::pow(mu_high, 2), 1e-3);
45}
46
47double EWHelper::delta_lept(double mu_low, double mu_high, double alpha) {
48 return 3 * (1 + 3. / 4 * alpha / PI) * std::log(std::pow(mu_high / mu_low, 2));
49}
50
51double EWHelper::delta_part(double mu_low, double mu_high, int n_f, double alpha) {
52 double a = 2. + n_f /3.0;
53 double b = 5. / 6 + n_f / 36.0;
54 return (a + b * alpha / PI) * std::log(std::pow(mu_high / mu_low, 2));
55}
56
57double EWHelper::delta_had(double mu_low, double mu_high, int n_f, double alpha) {
58 double a_1 = n_f == 4 ? 10. / 3 - 17. / 34 * alpha / PI : 11. / 3 - 35. / 108 * alpha / PI;
59 double a_2 = n_f == 4 ? 10. / 3 * 287. / 144 : 11. / 3 * 265. / 144;
60 double a_3 = n_f == 4 ? 200675. / 23328 - 335. / 81 * ZETA3 : 257543. / 46656 - 620. / 81 * ZETA3;
61
62 return a_1 * I_s(1, mu_low, mu_high) + a_2 * I_s(2, mu_low, mu_high) + a_3 * I_s(3, mu_low, mu_high);
63}
64
65double EWHelper::pi_heavy(double mu, double e_q, double m_q_pole, double n_l, double alpha) {
66 double l_mu = std::log(std::pow(mu / m_q_pole, 2));
67 double a_s = QCDHelper::alpha_s(mu) / PI;
68 double pi_0_0 = l_mu;
69 double pi_1_0 = e_q * e_q * (45. / 16 + 3. / 4 * l_mu);
70 double pi_0_1 = 15. / 4 + l_mu;
71 double pi_0_2 = 41219. / 2592 - 917. / 1296 * n_l + (4 + 4. / 3 * std::log(2) - 2. / 3 * n_l) * PI2 / 6 + 607. / 144 * ZETA3 + (437. / 36 - 7. / 9 * n_l) * l_mu + (31. / 24 - 1. / 12 * n_l) * l_mu * l_mu;
72
73 return pi_0_0 + alpha / PI * pi_1_0 + a_s * pi_0_1 + a_s * a_s * pi_0_2;
74}
75
76double EWHelper::pi_light_heavy(double mu, double m_q_pole, double n_l) {
77 double l_mu = std::log(std::pow(mu / m_q_pole, 2));
78 double a_s = QCDHelper::alpha_s(mu) / PI;
79 double Q_factor = 2 * (4. / 9) + (n_l - 2) * (1. / 9);
80 return a_s * a_s * 3 * Q_factor * (295. / 1296 - 11. / 72 * l_mu - 1. / 12 * l_mu * l_mu);
81}
82
83double EWHelper::alpha_5_mu_b(double inv_alpha_m_Z, double m_Z, double mu_b) {
84 double delta_lept_bZ = delta_lept(mu_b, m_Z, 1 / inv_alpha_m_Z);
85 double delta_part_bZ = delta_part(mu_b, m_Z, 5, 1 / inv_alpha_m_Z);
86 double delta_had_bZ = delta_had(mu_b, m_Z, 5, 1 / inv_alpha_m_Z);
87 double inv_alpha_b = inv_alpha_m_Z + 1. / (3 * PI) * (delta_lept_bZ + delta_part_bZ + delta_had_bZ);
88 return 1 / inv_alpha_b;
89}
90
91double EWHelper::alpha_4_mu_b(double inv_alpha_m_Z, double m_Z, double m_b_pole, double mu_b) {
92 double alpha_5 = alpha_5_mu_b(inv_alpha_m_Z, m_Z, mu_b);
93 double delta_b = 4 / 3 * pi_heavy(mu_b, -2. / 3, m_b_pole, 4, 1 / inv_alpha_m_Z) + pi_light_heavy(mu_b, m_b_pole, 4);
94 double inv_alpha_4 = 1 / alpha_5 + delta_b / (3 * PI);
95 return 1 / inv_alpha_4;
96}
97
98double EWHelper::alpha_4_mu_c(double inv_alpha_m_Z, double m_Z, double m_b_pole, double mu_b, double mu_c) {
99 double alpha_b = alpha_4_mu_b(inv_alpha_m_Z, m_Z, m_b_pole, mu_b);
100 double delta_lept_cb = delta_lept(mu_c, mu_b, 1 / inv_alpha_m_Z);
101 double delta_part_cb = delta_part(mu_c, mu_b, 4, 1 / inv_alpha_m_Z);
102 double delta_had_cb = delta_had(mu_c, mu_b, 4, 1 / inv_alpha_m_Z);
103 double inv_alpha_mu_c = 1 / alpha_b + 1. / (3 * PI) * (delta_lept_cb + delta_part_cb + delta_had_cb);
104 return 1 / inv_alpha_mu_c;
105}
Electroweak helper utilities and dependent-block initialization.
#define LOG_DEBUG(...)
Macro for logging debug messages.
Definition Logger.h:45
Lightweight view over a set of source blocks.
Definition SourcesView.h:71
static void addDependentBlock(std::string name, std::unordered_map< ParameterType, std::vector< std::string > > source_names, ParameterType dest, DepUpdateFunc recalculateFunc)
Adds a DependentBlock with multiple sources coming from various Parameters instances.
static void Init()
Initializes the EW dependent block.
Definition EWHelper.cpp:5
static double alpha_em(double mu)
Returns at a given scale.
Definition EWHelper.cpp:33
static double alpha_s(double mu, MassType mass_b_type=MassType::POLE, MassType mass_t_type=MassType::POLE)
Computes the strong coupling constant α_s at scale μ.
Definition QCDHelper.cpp:52
constexpr double PI
Definition constants.h:7
constexpr double PI2
Definition constants.h:8
constexpr double ZETA3
Definition constants.h:14
double integrate(RealValuedFunction f, double l, double u, double prec)
Performs numerical integration of a real-valued function of a real variable.
double f(double x)
Wilson special function f depending on x.
Composite identifier for a single parameter.
Definition ParamID.h:57