Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
BKllDecay.h
Go to the documentation of this file.
1// #ifndef __BKLLDECAY_H__
2// #define __BKLLDECAY_H__
3
4// #include "DecayParent.h"
5// #include "Include.h"
6// #include "ObsQCDProxy.h"
7// #include "DefaultConfig.h"
8// #include "BPQCDfCalculator.h"
9// #include "BPFFCalculator.h"
10
11// struct BKllConfig : public DecayConfig {
12// enum class B_Charge {B_0, B_PLUS};
13// enum class Lepton {E, MU, TAU};
14
15// BP_FF_Src ff_src {BP_FF_Src::AS};
16// B_FF_Type ff_type {B_FF_Type::FULL};
17// B_Charge charge {B_Charge::B_PLUS};
18// Lepton gen {Lepton::MU};
19// };
20
21// struct BKllCache {
22// std::map<WCoef, complex_t> C;
23// BPFFCalculator ff_calculator;
24// BPQCDfCalculator qcdf_calculator;
25
26// double G_F, alpha_em;
27// double mu_b, L_b;
28// double m_l, m_s, m_c_mu_b, m_b_PS, m_b_mu_b, m_b_m_b;
29// double alpha_s_mu_b;
30// double m_B, m_K;
31// double life_B;
32// double Delta_M;
33// complex_t lambda_hat_u;
34// double N_0;
35// double q2_min, q2_max;
36// double q2_low, q2_high;
37
38// // Power corrections, guesstimate
39// std::array<complex_t, 4> A_had_err_low_0;
40// std::array<complex_t, 4> A_had_err_low_1;
41// std::array<complex_t, 4> A_had_err_high;
42
43// // Lookups
44// static inline constexpr size_t LOOKUP_SIZE = 50;
45// std::array<scalar_t, LOOKUP_SIZE> T_P_lookup;
46// std::array<std::vector<double>, 3> abc_binned;
47// };
48
49// /**
50// * @brief Decay parent for the exclusive B > K l+ l- decays. Implements the integrated branching ratio, forward-backward asymmetry and flat term in several q² bins.
51// */
52// class BKllDecay : public DecayParentConfigurable<BKllConfig> {
53// public:
54// BKllDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig& ports) : DecayParentConfigurable(DecayMapper::to_id(Decays::B__K_l_l), matching_scale, hadronic_scale, order, ports) {
55// this->w_config.groups = {GroupMapper::to_id(WGroup::B), GroupMapper::to_id(WGroup::BPrime), GroupMapper::to_id(WGroup::BScalar)};
56// this->max_order = QCDOrder::NNLO;
57// }
58
59// void load_params() override;
60// std::vector<ObservableValue> compute_observable(Observables obs) override;
61// std::vector<ObservableValue> compute_observable(ObservableId obs) override;
62
63// void set_config_spe(BKllConfig config) override {this->cfg = config;}
64
65
66// private:
67// BKllConfig cfg {};
68// BKllCache cache;
69
70// const static std::unordered_set<ObservableId> dG_dq2_ids;
71// const static std::unordered_set<ObservableId> dBR_dq2_ids;
72// const static std::unordered_set<ObservableId> A_FB_ids;
73// const static std::unordered_set<ObservableId> F_H_ids;
74// const static std::map<Observables, std::pair<BKllConfig::Lepton, BKllConfig::B_Charge>> cfg_map;
75
76// protected:
77// // Auxiliary
78// void fill_wilson_cache();
79// void load_cfg_dependent_params();
80// void set_lepton_gen_and_charge(BKllConfig::Lepton gen, BKllConfig::B_Charge charge);
81
82// // QCDf
83// complex_t T_P_cached(double q2);
84
85// // Nonfactorisable corrections
86// double beta_l(double q2);
87// double lambda(double q2);
88// double N(double q2);
89
90// // Helicity amplitudes
91// complex_t F_V_low(double q2);
92// complex_t F_A_low(double q2);
93// complex_t F_P_low(double q2);
94// complex_t F_S_low(double q2);
95
96// complex_t C7_eff(double q2);
97// complex_t C9_eff(double q2);
98// complex_t F_V_high(double q2);
99// complex_t F_A_high(double q2);
100// complex_t F_P_high(double q2);
101// complex_t F_S_high(double q2);
102
103// complex_t interpolate(double q2, complex_t val_low, complex_t val_high);
104// complex_t F_V(double q2);
105// complex_t F_A(double q2);
106// complex_t F_P(double q2);
107// complex_t F_S(double q2);
108
109// // Angular coefficients
110// double a(double q2);
111// double b(double q2);
112// double c(double q2);
113
114// void compute_binned_abc();
115
116// // Observables
117// std::vector<ObservableValue> dBR_dq2(Observables oid, bool br);
118// std::vector<ObservableValue> A_FB(Observables oid);
119// std::vector<ObservableValue> F_H(Observables oid);
120// std::vector<ObservableValue> Rm1_BK(Observables id, BKllConfig::B_Charge charge);
121// };
122
123
124// #endif // __BKLLDECAY_H__
125
126#ifndef __BKLLDECAY_H__
127#define __BKLLDECAY_H__
128
129#include <thread>
130
131#include "DecayParent.h"
132#include "Include.h"
133#include "ObsQCDProxy.h"
134#include "DefaultConfig.h"
135#include "BPQCDfCalculator.h"
136#include "BPFFCalculator.h"
137
149
150struct BKllCache {
151 std::map<WCoef, complex_t> C;
154
155 double G_F, alpha_em;
156 double mu_b, L_b;
159 double m_B, m_K;
160 double life_B;
161 double Delta_M;
163 double N_0;
164 double q2_min, q2_max;
167
168 // Power corrections, guesstimate
169 std::array<complex_t, 4> A_had_err_low_0;
170 std::array<complex_t, 4> A_had_err_low_1;
171 std::array<complex_t, 4> A_had_err_high;
172
173 // Lookups
174 static inline constexpr size_t LOOKUP_SIZE = 50;
175 std::array<scalar_t, LOOKUP_SIZE> T_P_lookup;
176 std::array<std::vector<double>, 3> abc_binned;
177 std::vector<double> bin_widths; // effective integration widths used for bin-averaged dBR/dq2 / dGamma/dq2
178};
179
183class BKllDecay : public DecayParentConfigurable<BKllConfig> {
184public:
185 BKllDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig& ports) : DecayParentConfigurable(DecayMapper::to_id(Decays::B__K_l_l), matching_scale, hadronic_scale, order, ports) {
188 this->binned = true;
189 }
190
191 void load_params() override;
192 std::vector<ObservableValue> compute_observable(Observables obs) override;
193 std::vector<ObservableValue> compute_observable(ObservableId obs) override;
194
195 void set_config_spe(BKllConfig config) override {this->cfg = config;}
196 std::any get_config() const override { return cfg; }
197 void set_n_threads(size_t n_threads) override;
198 size_t get_n_threads() const override { return cfg.n_threads; }
199 bool supports_thread_config() const override { return true; }
200
201
202private:
203 BKllConfig cfg {};
204 BKllCache cache;
205
206 const static std::unordered_set<ObservableId> dG_dq2_ids;
207 const static std::unordered_set<ObservableId> dBR_dq2_ids;
208 const static std::unordered_set<ObservableId> A_FB_ids;
209 const static std::unordered_set<ObservableId> F_H_ids;
210 const static std::map<Observables, std::pair<BKllConfig::Lepton, BKllConfig::B_Charge>> cfg_map;
211
212protected:
213 // Auxiliary
214 void fill_wilson_cache();
217
218 // QCDf
219 complex_t T_P_cached(double q2);
220
221 // Nonfactorisable corrections
222 double beta_l(double q2);
223 double lambda(double q2);
224 double N(double q2);
225
226 // Helicity amplitudes
227 complex_t F_V_low(double q2);
228 complex_t F_A_low(double q2);
229 complex_t F_P_low(double q2);
230 complex_t F_S_low(double q2);
231
232 complex_t C7_eff(double q2);
233 complex_t C9_eff(double q2);
234 complex_t F_V_high(double q2);
235 complex_t F_A_high(double q2);
236 complex_t F_P_high(double q2);
237 complex_t F_S_high(double q2);
238
239 complex_t interpolate(double q2, complex_t val_low, complex_t val_high);
240 complex_t F_V(double q2);
241 complex_t F_A(double q2);
242 complex_t F_P(double q2);
243 complex_t F_S(double q2);
244
245 // Angular coefficients
246 double a(double q2);
247 double b(double q2);
248 double c(double q2);
249
250 void compute_binned_abc();
251
252 // Observables
253 std::vector<ObservableValue> dBR_dq2(Observables oid, bool br);
254 std::vector<ObservableValue> A_FB(Observables oid);
255 std::vector<ObservableValue> F_H(Observables oid);
256 std::vector<ObservableValue> Rm1_BK(Observables id, BKllConfig::B_Charge charge);
257};
258
259
260#endif // __BKLLDECAY_H__
BP_FF_Src
Base class for observable/decay computation modules.
Observables
Definition GeneralEnum.h:4
QCDOrder
Decays
Default observable-layer implementation of IObsQCDProxy.
std::complex< double > complex_t
Convenience alias for std::complex<double>.
Definition Utils.h:35
Decay parent for the exclusive B > K l+ l- decays. Implements the integrated branching ratio,...
Definition BKllDecay.h:183
double a(double q2)
complex_t F_A_low(double q2)
std::any get_config() const override
Return the current decay configuration when the decay has one.
Definition BKllDecay.h:196
void fill_wilson_cache()
double beta_l(double q2)
void set_n_threads(size_t n_threads) override
Set the number of worker threads used by decays that support parallel cache filling.
void load_params() override
Load and cache parameters needed by this decay.
Definition BKllDecay.cpp:81
complex_t F_S_low(double q2)
double b(double q2)
complex_t F_P_high(double q2)
double c(double q2)
complex_t C7_eff(double q2)
void set_config_spe(BKllConfig config) override
Strongly-typed configuration setter to implement in derived classes.
Definition BKllDecay.h:195
complex_t F_P_low(double q2)
size_t get_n_threads() const override
Return the currently configured worker-thread count.
Definition BKllDecay.h:198
complex_t F_A(double q2)
complex_t F_S_high(double q2)
complex_t F_V_low(double q2)
void load_cfg_dependent_params()
complex_t F_S(double q2)
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
complex_t F_P(double q2)
double lambda(double q2)
BKllDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig &ports)
Definition BKllDecay.h:185
std::vector< ObservableValue > dBR_dq2(Observables oid, bool br)
void set_lepton_gen_and_charge(BKllConfig::Lepton gen, BKllConfig::B_Charge charge)
std::vector< ObservableValue > Rm1_BK(Observables id, BKllConfig::B_Charge charge)
complex_t interpolate(double q2, complex_t val_low, complex_t val_high)
complex_t F_V(double q2)
complex_t C9_eff(double q2)
complex_t T_P_cached(double q2)
complex_t F_A_high(double q2)
std::vector< ObservableValue > F_H(Observables oid)
void compute_binned_abc()
complex_t F_V_high(double q2)
bool supports_thread_config() const override
Whether this decay supports runtime thread configuration.
Definition BKllDecay.h:199
std::vector< ObservableValue > A_FB(Observables oid)
double N(double q2)
Mapper for decay names, dynamic ids and observable membership.
Definition decay_ids.hpp:88
Typed configuration adapter for DecayParent using std::any.
bool binned
Whether this decay requires q² bins before its observables can be computed.
WilsonBuildConfig w_config
Wilson build configuration used when enabling this decay (scales, order, groups).
ObservablePortsConfig & ports
Reference to the ports/configuration wiring this decay to the framework.
Definition DecayParent.h:93
QCDOrder max_order
Maximum QCD order supported by this decay module (default: LO).
Definition DecayParent.h:90
double alpha_s_mu_b
Definition BKllDecay.h:158
double m_b_PS
Definition BKllDecay.h:157
std::array< std::vector< double >, 3 > abc_binned
Definition BKllDecay.h:176
double q2_high
Definition BKllDecay.h:165
double q2_max
Definition BKllDecay.h:164
std::array< complex_t, 4 > A_had_err_low_1
Definition BKllDecay.h:170
double m_K
Definition BKllDecay.h:159
static constexpr size_t LOOKUP_SIZE
Definition BKllDecay.h:174
double q2_lookup_min
Definition BKllDecay.h:166
std::vector< double > bin_widths
Definition BKllDecay.h:177
BPFFCalculator ff_calculator
Definition BKllDecay.h:152
double m_b_mu_b
Definition BKllDecay.h:157
double L_b
Definition BKllDecay.h:156
double q2_low
Definition BKllDecay.h:165
double alpha_em
Definition BKllDecay.h:155
double life_B
Definition BKllDecay.h:160
BPQCDfCalculator qcdf_calculator
Definition BKllDecay.h:153
double m_s
Definition BKllDecay.h:157
double m_B
Definition BKllDecay.h:159
std::array< complex_t, 4 > A_had_err_low_0
Definition BKllDecay.h:169
double N_0
Definition BKllDecay.h:163
double m_b_m_b
Definition BKllDecay.h:157
double q2_min
Definition BKllDecay.h:164
double m_c_mu_b
Definition BKllDecay.h:157
complex_t lambda_hat_u
Definition BKllDecay.h:162
double Delta_M
Definition BKllDecay.h:161
double m_l
Definition BKllDecay.h:157
std::array< complex_t, 4 > A_had_err_high
Definition BKllDecay.h:171
double mu_b
Definition BKllDecay.h:156
std::map< WCoef, complex_t > C
Definition BKllDecay.h:151
std::array< scalar_t, LOOKUP_SIZE > T_P_lookup
Definition BKllDecay.h:175
double G_F
Definition BKllDecay.h:155
Lepton gen
Definition BKllDecay.h:145
BP_FF_Src ff_src
Definition BKllDecay.h:142
size_t n_threads
Definition BKllDecay.h:147
B_FF_Type ff_type
Definition BKllDecay.h:143
B_Charge charge
Definition BKllDecay.h:144
Dependency container (“ports”) for observable computations.
std::unordered_set< WGroupId > groups
Set of Wilson operator group identifiers to be included in the build.
Definition Configs.h:36