Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
KllDecay.cpp
Go to the documentation of this file.
1#include "KllDecay.h"
2
4 cache.G_F = (*p)(ParamId{ParameterType::SM, "SMINPUTS", 2}, DataType::VALUE);
5 cache.alpha_em = (*p)(ParamId{ParameterType::SM, "EW", {1, 1}}, DataType::VALUE);
6 cache.alpha_em_0 = (*p)(ParamId{ParameterType::SM, "EW", {1, 4}}, DataType::VALUE);
7 cache.alpha_s_m_Z = (*p)(ParamId{ParameterType::SM, "SMINPUTS", 3}, DataType::VALUE);
8 cache.sw2 = (*p)(ParamId{ParameterType::SM, "SMINPUTS", {7, 1}}, DataType::VALUE);
9 cache.m_l = (*p)(ParamId{ParameterType::SM, "MASS", 9 + 2 * cfg.gen}, DataType::VALUE);
10 cache.m_c_m_c = (*p)(ParamId{ParameterType::SM, "MASS", 4}, DataType::VALUE);
11 cache.m_pi = (*p)(ParamId{ParameterType::FLAVOR, "FMASS", 111}, DataType::VALUE);
12 cache.m_rho = (*p)(ParamId{ParameterType::FLAVOR, "FMASS", 113}, DataType::VALUE);
13 cache.m_K = (*p)(ParamId{ParameterType::FLAVOR, "FMASS", 311}, DataType::VALUE);
14 cache.f_K = (*p)(ParamId{ParameterType::FLAVOR, "FCONST", {311, 1}}, DataType::VALUE);
15 cache.tau_L = (*p)(ParamId{ParameterType::FLAVOR, "FLIFE", 130}, DataType::VALUE) / HBAR;
16 cache.tau_S = (*p)(ParamId{ParameterType::FLAVOR, "FLIFE", 310}, DataType::VALUE) / HBAR;
17 cache.lambda_c = (*p)(ParamId{ParameterType::SM, "VCKM", {1, 0}}, DataType::VALUE) * std::conj((*p)(ParamId{ParameterType::SM, "VCKM", {1, 1}}, DataType::VALUE));
18 cache.lambda_t = (*p)(ParamId{ParameterType::SM, "VCKM", {2, 0}}, DataType::VALUE) * std::conj((*p)(ParamId{ParameterType::SM, "VCKM", {2, 1}}, DataType::VALUE));
19 cache.lambda = (*p)(ParamId{ParameterType::SM, "VCKMIN", 1}, DataType::VALUE);
20 cache.x = cache.m_l / cache.m_K;
21 cache.r_chi = cache.m_K / ((*p)(ParamId{ParameterType::SM, "MASS", 1}, DataType::VALUE) + (*p)(ParamId{ParameterType::SM, "MASS", 3}, DataType::VALUE));
22 cache.beta = std::sqrt(1. - 4. * std::pow(cache.x, 2));
25 cache.alpha_exp = (*p)(ParamId{ParameterType::DECAY, "K_ll", 3}, DataType::VALUE);
27 cache.mu_b = 5 + 1e-10; // MAJ : Make it a param in block Kll
28
32
33 // cache.C10 = -4.01480;
34
35 // printf("C10m = %.5e\n", cache.C10);
36 // printf("CQ1m = %.5e\n", cache.CQ1);
37 // printf("CQ2m = %.5e\n", cache.CQ2);
38}
39
41 complex_t x = (b - 1) / (b + 1);
42 return 1 / b * (CLi2(x) + PI2 / 3 + 0.25 * std::pow(std::log(x), 2));
43}
44
46 double sign = this->cfg.N_L_sign / std::abs(this->cfg.N_L_sign);
47 double L_mu_rho = std::log(cache.m_l / cache.m_rho);
48 double chi_gg = -3 * cache.alpha_exp + std::pow(cache.m_K / cache.m_rho, 2) * (1. / 3 + cache.alpha_exp * (1 + 12 * L_mu_rho) / 18) - cache.delta_lambda;
49 complex_t chi = chi_gg - 2.5 + 3.0 * L_mu_rho + C_gg(cache.beta);
50 double N0 = 4 * cache.alpha_em_0 * cache.m_l / (PI * cache.f_K * std::pow(cache.m_K, 2))
51 * std::sqrt(2 * PI * cache.BR_KL_gg_exp / (cache.m_K * cache.tau_L));
52
53 return sign * N0 * chi;
54}
55
57 complex_t I_S_mu = {-2.821, 1.216}; // MAJ : perform integration over 3D space (VEGAS)
58 complex_t I_S_e = {2.11, -40.41}; // MAJ : perform integration over 3D space (VEGAS)
59 complex_t I_S = cfg.gen == 1 ? I_S_e : I_S_mu;
60 double r_pi = cache.m_pi / cache.m_K;
61 double N0 = 2 * cache.alpha_em_0 * cache.m_l / (PI * cache.f_K * std::pow(cache.m_K, 2) * std::abs(KP::H(0.0, r_pi)))
62 * std::sqrt(2 * PI * cache.BR_KS_gg_exp / (cache.m_K * cache.tau_S));
63 return N0 * I_S;
64}
65
66double KllDecay::P_c() {
67 double kappa100 = -0.4499;
68 double kappa010 = -5.9221;
69 double kappa001 = 0.0114;
70 double kappa110 = 3.9957;
71 double kappa011 = -0.0658;
72 double kappa200 = -0.1767;
73 double kappa020 = 16.4465;
74 double K = 0.9622;
75
76 double L_c = log(cache.m_c_m_c / 1.3);
77 double L_a = log(cache.alpha_s_m_Z / 0.1187);
78 double L_b = log(cache.mu_b / 5.);
79
80 return pow(0.225 / cache.lambda, 4.) * (0.1198 * pow(cache.m_c_m_c / 1.3, 2.3595) * pow(cache.alpha_s_m_Z/ 0.1187, 6.6055) * (
81 K
82 + kappa100 * L_c + kappa010 * L_a + kappa001 * L_b
83 + kappa110 * L_c * L_a + kappa011 * L_a * L_b + kappa200 * L_c * L_c + kappa020 * L_a * L_a)
84 );
85}
86
88 complex_t C_A = (cache.G_F * cache.alpha_em) / RT2 / PI * (-cache.lambda_c * std::pow(cache.lambda, 4) * P_c() / cache.sw2 + cache.lambda_t * cache.C10);
89 complex_t A_L = RT2 * PI / (cache.G_F * cache.alpha_em) * N_L()
90 - 2 * cache.x * std::real(-cache.lambda_c * std::pow(cache.lambda, 4) * P_c() / cache.sw2 + cache.lambda_t * cache.C10)
91 - cache.r_chi * std::real(cache.lambda_t * cache.CQ2);
92
93 complex_t B_L = cache.r_chi * std::imag(cache.lambda_t * cache.CQ1);
94
95 // printf("lambda_c = %.4e + %.4e i\n", real(cache.lambda_c), imag(cache.lambda_c));
96 // printf("lambda_t = %.4e + %.4e i\n", real(cache.lambda_t), imag(cache.lambda_t));
97 // printf("lambda = %.4e + %.4e i\n", real(cache.lambda), imag(cache.lambda));
98 // printf("P_c = %.4e + %.4e i\n", real(P_c()), imag(P_c()));
99
100 // printf("N_L = %.4e + %.4e i\n", real(N_L()), imag(N_L()));
101 // printf("A_L = %.4e + %.4e i\n", real(A_L), imag(A_L));
102 // printf("B_L = %.4e + %.4e i\n", real(B_L), imag(B_L));
103
104 // printf("C_A = %.4e + %.4e i\n", real(C_A), imag(C_A));
105
106 return cache.tau_L * std::pow(cache.f_K * cache.G_F * cache.alpha_em, 2) * std::pow(cache.m_K, 3) * cache.beta / (32 * PI3) * (
107 std::pow(cache.beta * std::abs(
108 cache.r_chi * std::imag(cache.lambda_t * cache.CQ1)
109 ), 2)
110 + std::pow(std::abs(
111 RT2 * PI / (cache.G_F * cache.alpha_em) * N_L()
112 - 2 * cache.x * std::real(-cache.lambda_c * std::pow(cache.lambda, 4) * P_c() / cache.sw2 + cache.lambda_t * cache.C10)
113 - cache.r_chi * std::real(cache.lambda_t * cache.CQ2)
114 ), 2)
115 );
116}
117
119 return cache.tau_S * std::pow(cache.f_K * cache.G_F * cache.alpha_em, 2) * std::pow(cache.m_K, 3) * cache.beta / (32 * PI3) * (
120 std::pow(cache.beta * std::abs(
121 RT2 * PI / (cache.G_F * cache.alpha_em) * N_S()
122 - cache.r_chi * std::real(cache.lambda_t * cache.CQ1)
123 ), 2)
124 + std::pow(std::abs(
125 2 * cache.x * std::imag(-cache.lambda_c * std::pow(cache.lambda, 4) * P_c() / cache.sw2 + cache.lambda_t * cache.C10)
126 + cache.r_chi * std::imag(cache.lambda_t * cache.CQ2)
127 ), 2)
128 );
129}
130
131std::vector<ObservableValue> KllDecay::compute_observable(Observables obs) {
132 double value;
133 switch (obs) {
135 value = BR_L();
136 break;
138 value = BR_S();
139 break;
140 default:
141 LOG_ERROR("IndexError", "Observable", ObservableMapper::str(obs), "doesn't belong to the decay", DecayMapper::str(this->id));
142 }
143
144 return {ObservableValue(ObservableMapper::to_id(obs), value)};
145}
146
147std::vector<ObservableValue> KllDecay::compute_observable(ObservableId obs) {
149}
Observables
Definition GeneralEnum.h:4
#define LOG_ERROR(type,...)
Macro for logging error messages and terminating the application.
Definition Logger.h:41
std::complex< double > complex_t
Convenience alias for std::complex<double>.
Definition Utils.h:35
WilsonBuildConfig w_config
Wilson build configuration used when enabling this decay (scales, order, groups).
std::shared_ptr< IObsParameterProxy< ParamId, DataType, std::string, LhaID > > p
Parameter proxy for SM-like quantities used by the decay (may be SM/BSM depending on wiring).
std::shared_ptr< IObsWilsonProxy > w_proxy
Wilson proxy used at compute-time to query coefficients (matching/run).
Definition DecayParent.h:99
static std::optional< Observables > enum_of(const IdOf< ObservableTag > &id)
Attempts to recover the enum value associated with an identifier.
static IdOf< ObservableTag > to_id(Observables e)
Converts an enum value to an IdOf<Tag>.
static std::string str(const IdOf< ObservableTag > &id)
Returns the string representation of an identifier.
complex_t N_L()
Definition KllDecay.cpp:45
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
Definition KllDecay.cpp:131
complex_t C_gg(double b)
Definition KllDecay.cpp:40
double P_c()
Definition KllDecay.cpp:66
double BR_S()
Definition KllDecay.cpp:118
void load_params() override
Load and cache parameters needed by this decay.
Definition KllDecay.cpp:3
complex_t N_S()
Definition KllDecay.cpp:56
double BR_L()
Definition KllDecay.cpp:87
constexpr double PI
Definition constants.h:7
constexpr double HBAR
Definition constants.h:23
constexpr double PI3
Definition constants.h:9
constexpr double PI2
Definition constants.h:8
constexpr double RT2
Definition constants.h:15
complex_t H(double z, double r_P)
scalar_t CLi2(scalar_t x)
Computes the complex dilogarithm function.
Definition polylog.cpp:1312
scalar_t pow(const scalar_t &base, const scalar_t &exp)
Definition scalar.cpp:75
double alpha_em
Definition KllDecay.h:15
complex_t lambda_c
Definition KllDecay.h:27
double mu_b
Definition KllDecay.h:33
double BR_KS_gg_exp
Definition KllDecay.h:36
double m_c_m_c
Definition KllDecay.h:20
complex_t CQ1
Definition KllDecay.h:41
double BR_KL_gg_exp
Definition KllDecay.h:35
complex_t CQ2
Definition KllDecay.h:42
double tau_S
Definition KllDecay.h:26
double m_rho
Definition KllDecay.h:22
double alpha_exp
Definition KllDecay.h:37
double sw2
Definition KllDecay.h:18
double m_l
Definition KllDecay.h:19
double beta
Definition KllDecay.h:32
double m_pi
Definition KllDecay.h:21
double lambda
Definition KllDecay.h:29
double G_F
Definition KllDecay.h:14
double f_K
Definition KllDecay.h:24
double alpha_em_0
Definition KllDecay.h:16
complex_t lambda_t
Definition KllDecay.h:28
complex_t C10
Definition KllDecay.h:40
double tau_L
Definition KllDecay.h:25
double m_K
Definition KllDecay.h:23
double alpha_s_m_Z
Definition KllDecay.h:17
double delta_lambda
Definition KllDecay.h:38
double r_chi
Definition KllDecay.h:31
Container for a computed observable value, optionally binned.
Composite identifier for a single parameter.
Definition ParamID.h:57
QCDOrder order
Perturbative QCD order used for the evolution and matching of Wilson coefficients....
Definition Configs.h:54