26 std::array<double, 5>
B {
34 populate_Q_from_bag(cache.Q_Bd,
B, (*p)(
ParamId{ParameterType::DECAY,
"M0_Mix", 1},
DataType::VALUE), mf2,
true);
44 populate_Q_from_bag(cache.Q_Bs,
B, (*p)(
ParamId{ParameterType::DECAY,
"M0_Mix", 2},
DataType::VALUE), mf2,
true);
53 double f_K = (*p)(
ParamId{
ParameterType::FLAVOR,
"FCONST", {211, 1}},
DataType::VALUE) * (*p)(
ParamId{
ParameterType::FLAVOR,
"FCONSTRATIO", {321, 211, 1, 1}},
DataType::VALUE);
54 mf2 =
pow(cache.m_K * f_K, 2);
55 populate_Q_from_bag(cache.Q_K,
B, (*p)(
ParamId{ParameterType::DECAY,
"M0_Mix", 3},
DataType::VALUE), mf2,
true);
75 return -(64.-68.*x-17.*x*x+11.*x*x*x)/(4.*
pow(1.-x,2.)) + (32.-68.*x+32.*x*x-28.*x*x*x+3.*
pow(x,4.))/(2.*
pow(1.-x,3.))*log(x) + x*x*(4.-7.*x+7.*x*x-2.*x*x*x)/(2.*
pow(1.-x,4.))*
pow(log(x),2.) + 2.*x*(4. - 7.*x - 7.*x*x + x*x*x) /
pow(1.-x,3.) *
Li2(1.-x) + 16./x*(
PI2/6. -
Li2(1.-x));
79 return -x*(4.-39.*x+168.*x*x+11.*x*x*x)/(4.*
pow(1.-x,3.)) - 3.*x*(4.-24.*x+36.*x*x+7.*x*x*x+
pow(x,4.))/(2.*
pow(1.-x,4.))*log(x) + 3.*x*x*x*(13.+4.*x+x*x)/(2.*
pow(1.-x,4.))*
pow(log(x),2.) - 3*x*x*x*(5.+x)/
pow(1.-x,3.)*
Li2(1.-x);
83 return (
S_18(x) + 4. *
S_11(x)) / 3.;
87 return 3.*x*x/(2.*
pow(x-1.,3.)) + x*(-11.+2.*x)/(4.*
pow(x-1.,2.)) + (4.-11.*x+x*x)/(4.*
pow(x-1.,2.)) - x*(4.-11.*x+x*x)/(2.*
pow(x-1.,3.)) + 9.*x*x*log(x)/(2.*
pow(x-1.,3.)) - 9.*x*x*x*log(x)/(2.*
pow(x-1.,4.));
91 return x_c*(std::log(x_t/x_c) - 3.*x_t/(4.*(1-x_t)) -3*x_t*x_t*std::log(x_t)/(4.*std::pow(1.-x_t,2.)));
95 return 8 * x *
dS0_dx(x) * std::log(std::pow(mu_t / m_W, 2)) + 2 *
S0(x) * std::log(std::pow(mu_W / m_W, 2));
98double M0Mixing::Q_i(
int i,
double B_i,
double r_chi,
double mf2,
bool is_B) {
99 double Q_i = N_i.at(i) * mf2 * B_i;
101 Q_i *= is_B ? r_chi + d_i.at(i) : r_chi;
107 for (
size_t i = 0; i < 5; i++) {
108 Q[i] =
Q_i(i,
B[i], r_chi, mf2, is_B);
115 for (
size_t i = 0; i < 8; i++) {
122 for (
size_t i = 0; i < 8; i++) {
123 M_12 += C[i] * Q[i % 5];
126 return M_12 / (2 * m_M);
134 double shift = (gen == 1 ? 0.06e12 : 2.7e12) / 2 *
HBAR;
136 return gen == 1 ? (cache.
C1_Bd_SM * eta_2B * c_RGI_B * cache.
Q_Bd[0] / (2. * cache.
m_Bd) + shift) : (cache.
C1_Bs_SM * eta_2B * c_RGI_B * cache.
Q_Bs[0] / (2 * cache.
m_Bs) + shift);
143 return std::pow(cache.
G_F * cache.
m_W / (2 *
PI), 2) / (2 * cache.
m_K) * c_RGI_K * C_1_sd * cache.
Q_K[0];
157 return std::arg(M_12);
164 return std::tan(std::arg(-M_12 / cache.
G12_s)) * cache.
delta_G_s / (2 * std::abs(M_12) /
HBAR * 1e-12);
171 return cache.
kappa_e / (2 *
RT2) * std::abs(std::imag(M_12) / std::real(M_12));
#define LOG_ERROR(type,...)
Macro for logging error messages and terminating the application.
std::complex< double > complex_t
Convenience alias for std::complex<double>.
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).
std::shared_ptr< IObsQCDProxy > iobs_qcdp
QCD proxy (alpha_s, running masses, constants...).
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.
double S0_ct(double x_c, double x_t)
double Q_i(int i, double B_i, double r_chi, double mf2, bool is_B=false)
double delta_M_B(int gen)
complex_t M_12_B_SM(int gen)
double F_S1(double x, double m_W, double mu_W, double mu_t)
void load_params() override
Load and cache parameters needed by this decay.
void populate_C(std::array< complex_t, 8 > &C, double hadronic_scale, size_t offset=0)
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
complex_t M_12_NP(const std::array< complex_t, 8 > &C, const std::array< double, 5 > &Q, double m_M)
void populate_Q_from_bag(std::array< double, 5 > &Q, const std::array< double, 5 > &B, double r_chi, double mf2, bool is_B)
void set(const ParamId &, scalar_t) override
Assigns an absolute value to a parameter.
static std::vector< WCoef > get_group(WGroup g)
Returns the list of Wilson coefficients belonging to a WGroup.
constexpr double GEV_TO_INV_S
constexpr std::complex< double > I
constexpr double GEV_TO_INV_PS
double Li2(double x)
Computes the dilogarithm function Li2(x).
scalar_t pow(const scalar_t &base, const scalar_t &exp)
double S0(double x)
Wilson special function S0 depending on xt.
Configuration for evaluating the strong coupling constant .
Represents an identifier of a LHA element, possibly containing several sub-ids.
std::array< double, 5 > Q_D
std::array< double, 5 > Q_Bd
std::array< double, 5 > Q_K
std::array< double, 5 > Q_Bs
std::array< complex_t, 8 > C_D
std::array< complex_t, 8 > C_Bs
std::array< complex_t, 8 > C_K
std::array< complex_t, 8 > C_Bd
Configuration for computing a particle mass at a given scale.
Container for a computed observable value, optionally binned.
Composite identifier for a single parameter.
QCDOrder order
Perturbative QCD order used for the evolution and matching of Wilson coefficients....