28 cache.C_F = (*iobs_qcdp).get_constants()->C_F;
29 cache.Nc = (*iobs_qcdp).get_constants()->Nc;
34 load_cfg_dependent_params();
77 for (
const auto& [
id, val] : b_wilsons) {
80 for (
auto id : bp_cached) {
81 cache.
C[
id] = bp_wilsons.at(
id);
89 for (
const auto& [
id, val] : b_wilsons_trad) {
107 cfg.
charge == Charge::B_0 ? 511 : 521,
108 cfg.
charge == Charge::B_0 ? 313 : 323,
114 cfg.
charge == Charge::B_0 ? 511 : 521,
115 cfg.
charge == Charge::B_0 ? 313 : 323,
127 cache.
N_prime = -(*p)(
ParamId{
ParameterType::SM,
"SMINPUTS", 2},
DataType::VALUE) * cache.
m_B * std::conj((*
p)(
ParamId{
ParameterType::SM,
"VCKM", {2, 1}},
DataType::VALUE)) * (*p)(
ParamId{
ParameterType::SM,
"VCKM", {2, 2}},
DataType::VALUE) * cache.
alpha_em / (
PI *
RT2);
132 if (cfg.
charge != charge) {
140 if (bar) pref = -std::conj(pref);
148 return pref * (
C7 * T1_0 + (T_perp_m - sign * T_perp_p) / 2.0);
158 + F_p * log(cache.
mu_b / cache.
mu_0) * (
180 double pref = (std::pow(cache.
m_B, 2) - std::pow(cache.
m_Ks, 2)) / 16. /
PI / std::pow(cache.
m_B, 3);
181 double gamma = pref * (std::pow(std::abs(
H_V(1,
false)), 2) + std::pow(std::abs(
H_V(-1,
false)), 2));
182 double gamma_bar = pref * (std::pow(std::abs(
H_V(1,
true)), 2) + std::pow(std::abs(
H_V(-1,
true)), 2));
184 return cache.
tau_B * (gamma + gamma_bar) / 2;
199 return std::real(bd - bu);
#define LOG_ERROR(type,...)
Macro for logging error messages and terminating the application.
std::complex< double > complex_t
Convenience alias for std::complex<double>.
complex_t H_V(double sign, bool bar)
void set_cfg_flags(BKstarGammaConfig::B_Charge charge)
void load_cfg_dependent_params()
void load_params() override
Load and cache parameters needed by this decay.
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
double get(BV_FF a, double q2) override
double X_perp(double s_hat)
complex_t T_perp_m(double q2, bool bar)
double F_perp(double s_hat)
complex_t T_perp_p(double q2, bool bar)
DecayId id
Unique decay identifier.
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.
void set(const ParamId &, scalar_t) override
Assigns an absolute value to a parameter.
constexpr std::complex< double > I
complex_t G2(double z, double L_b)
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 .
std::map< WCoef, complex_t > C
BVFFCalculator ff_calculator
BVQCDfCalculator qcdf_calculator
std::map< WCoef, complex_t > C_trad
Configuration for computing a particle mass at a given scale.
Container for a computed observable value, optionally binned.
Composite identifier for a single parameter.
double hadronic_scale
Hadronic scale (in GeV) at which the Wilson coefficients are evaluated in the effective theory.
QCDOrder order
Perturbative QCD order used for the evolution and matching of Wilson coefficients....