Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
BKsllDecay.h
Go to the documentation of this file.
1#ifndef BKSTARLLDECAY_H
2#define BKSTARLLDECAY_H
3
4#include <thread>
5#include <algorithm>
6
7#include "DecayParent.h"
8#include "Include.h"
9#include "ObsQCDProxy.h"
10#include "DefaultConfig.h"
11#include "BVQCDfCalculator.h"
12#include "BVFFCalculator.h"
13
27
29 std::map<WCoef, complex_t> C;
32
33 double G_F, alpha_em;
34 double mu_b, L_b;
36 double Delta_M;
38 double m_B, m_Ks;
39 double life_B;
41 double kappa;
43 double q2_min, q2_max;
44 double q2_low, q2_high;
45
47
48 // Power corrections, hadronic fit
49 std::array<complex_t, 3> h_p_fit {};
50 std::array<complex_t, 3> h_m_fit {};
51 std::array<complex_t, 3> h_0_fit {};
52
53 // Power corrections, guesstimate
54 std::array<complex_t, 6> a_k_low {};
55 std::array<complex_t, 6> b_k_low {};
56 std::array<complex_t, 8> a_k_high {};
57 std::array<complex_t, 6> phi_k_low {};
58 std::array<complex_t, 6> theta_k_low {};
59 std::array<complex_t, 8> phi_k_high {};
60
61 // NF Corrections, Van Dyk
62 double tp_nf, t0_nf;
64 std::array<complex_t, 3> alpha_perp;
65 std::array<complex_t, 3> alpha_par;
66 std::array<complex_t, 2> alpha_0;
67
68 // NF Corrections, KMPW
69 double q2_bar, q2_Jpsi; // q2bar = 1.0 GeV², q2_Jpsi = m_Jpsi^2
70 std::array<double, 3> DeltaC9_M_qbar;
71 std::array<double, 3> r1_M;
72 std::array<double, 3> r2_M;
73
74 // Lookups
75 static inline constexpr size_t LOOKUP_SIZE = 100;
76 std::array<scalar_t, LOOKUP_SIZE> T_perp_p_lookup;
77 std::array<scalar_t, LOOKUP_SIZE> T_perp_m_lookup;
78 std::array<scalar_t, LOOKUP_SIZE> T_par_m_lookup;
79 std::array<scalar_t, LOOKUP_SIZE> T_perp_p_bar_lookup;
80 std::array<scalar_t, LOOKUP_SIZE> T_perp_m_bar_lookup;
81 std::array<scalar_t, LOOKUP_SIZE> T_par_m_bar_lookup;
82
83 std::array<std::vector<double>, 15> J_i_binned;
84 std::array<std::vector<double>, 15> J_i_bar_binned;
85};
86
90class BKstarllDecay : public DecayParentConfigurable<BKstarllConfig> {
91public:
92 BKstarllDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig& ports) : DecayParentConfigurable(DecayMapper::to_id(Decays::B__Kstar_l_l), matching_scale, hadronic_scale, order, ports) {
95 this->binned = true;
96 }
97
98 void load_params() override;
99 std::vector<ObservableValue> compute_observable(Observables obs) override;
100 std::vector<ObservableValue> compute_observable(ObservableId obs) override;
101
102 void set_config_spe(BKstarllConfig config) override {this->cfg = config;}
103 std::any get_config() const override { return cfg; }
104 void set_n_threads(size_t n_threads) override;
105 size_t get_n_threads() const override { return cfg.n_threads; }
106 bool supports_thread_config() const override { return true; }
107 bool is_observable_binned(ObservableId obs) const override;
108
109private:
110 BKstarllConfig cfg {};
111 BKstarllCache cache;
112
113protected:
114 // Auxiliary
115 void fill_wilson_cache();
118
119 // QCDf
120 complex_t T_perp_p_cached(double q2, bool bar);
121 complex_t T_perp_m_cached(double q2, bool bar);
122 complex_t T_par_m_cached(double q2, bool bar);
123
124 // Nonfactorisable corrections
125 double beta_l(double q2);
126 double lambda(double q2);
127 complex_t N(double q2, bool bar);
128
129 complex_t delta_A_perp_QCDf(double q2, double sign, bool bar);
130 complex_t delta_A_perp_vD(double q2, bool bar);
131 complex_t delta_A_perp_K(double q2, bool bar);
132 complex_t delta_A_perp(double q2, double sign, bool bar);
133
134 complex_t delta_A_par_QCDf(double q2, double sign, bool bar);
135 complex_t delta_A_par_vD(double q2, bool bar);
136 complex_t delta_A_par_K(double q2, bool bar);
137 complex_t delta_A_par(double q2, double sign, bool bar);
138
139 complex_t delta_A_0_QCDf(double q2, double sign, bool bar);
140 complex_t delta_A_0_vD(double q2, bool bar);
141 complex_t delta_A_0_K(double q2, bool bar);
142 complex_t delta_A_0(double q2, double sign, bool bar);
143
144 // Transversity amplitudes
145 complex_t A_perp_low(double q2, double sign, bool bar);
146 complex_t A_par_low(double q2, double sign, bool bar);
147 complex_t A_0_low(double q2, double sign, bool bar);
148 complex_t A_t_low(double q2, bool bar);
149 complex_t A_S_low(double q2, bool bar);
150
151 complex_t C7_eff(double q2, bool bar);
152 complex_t C9_eff(double q2, bool bar);
153 complex_t A_perp_high(double q2, double sign, bool bar);
154 complex_t A_par_high(double q2, double sign, bool bar);
155 complex_t A_0_high(double q2, double sign, bool bar);
156 complex_t A_t_high(double q2, bool bar);
157 complex_t A_S_high(double q2, bool bar);
158
159 complex_t interpolate(double q2, complex_t val_low, complex_t val_high);
160 complex_t A_perp(double q2, double sign, bool bar);
161 complex_t A_par(double q2, double sign, bool bar);
162 complex_t A_0(double q2, double sign, bool bar);
163 complex_t A_t(double q2, bool bar);
164 complex_t A_S(double q2, bool bar);
165
166 // Angular coefficients
167 double J1s(double q2, bool bar);
168 double J1c(double q2, bool bar);
169 double J2s(double q2, bool bar);
170 double J2c(double q2, bool bar);
171 double J3(double q2, bool bar);
172 double J4(double q2, bool bar);
173 double J5(double q2, bool bar);
174 double J6s(double q2, bool bar);
175 double J6c(double q2, bool bar);
176 double J7(double q2, bool bar);
177 double J8(double q2, bool bar);
178 double J9(double q2, bool bar);
179
180 void compute_binned_J_i();
181
182 std::vector<ObservableValue> dBR_dq2_binned(bool bar, Observables id, bool br=true);
183 double dG_dq2_avg_bin(size_t bin);
184 std::vector<ObservableValue> A_FB_binned(Observables id, bool cpv);
186 std::vector<ObservableValue> A_CP_binned(Observables id);
187 std::vector<ObservableValue> F_L_binned(Observables id);
188 std::vector<ObservableValue> F_T_binned(Observables id);
189 std::vector<ObservableValue> A_T_1_binned(Observables id);
190 std::vector<ObservableValue> A_T_2_binned(Observables id);
191 std::vector<ObservableValue> A_T_3_binned(Observables id);
192 std::vector<ObservableValue> A_T_4_binned(Observables id);
193 std::vector<ObservableValue> A_T_5_binned(Observables id);
194 std::vector<ObservableValue> A_T_Re_binned(Observables id);
195 std::vector<ObservableValue> A_T_Re_CPV_binned(Observables id);
196 std::vector<ObservableValue> A_Im_binned(Observables id);
197 std::vector<ObservableValue> alpha_K_binned(Observables id);
198 std::vector<ObservableValue> H_T_1_binned(Observables id);
199 std::vector<ObservableValue> H_T_2_binned(Observables id);
200 std::vector<ObservableValue> H_T_3_binned(Observables id);
201 std::vector<ObservableValue> P_2_binned(Observables id);
202 std::vector<ObservableValue> P_3_binned(Observables id);
203 std::vector<ObservableValue> P_6_binned(Observables id);
204 std::vector<ObservableValue> P_8_binned(Observables id);
205 std::vector<ObservableValue> Pp_i_binned(size_t i, bool cpv, Observables id);
206 std::vector<ObservableValue> S_i_binned(size_t i, bool cpv, Observables id);
207 std::vector<ObservableValue> P_i_CPV_binned(size_t i, Observables id);
208 std::vector<ObservableValue> Rm1_BKstar(Observables id, BKstarllConfig::B_Charge charge);
209
210 // Tests
211 void test_ff();
212 void test_T();
213 void test_J();
215};
216
217#endif // BKSTARLLDECAY_H
BV_FF_Src
Base class for observable/decay computation modules.
Observables
Definition GeneralEnum.h:4
QCDOrder
Decays
@ B__Kstar_l_l
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 and ang...
Definition BKsllDecay.h:90
complex_t delta_A_0_K(double q2, bool bar)
bool supports_thread_config() const override
Whether this decay supports runtime thread configuration.
Definition BKsllDecay.h:106
complex_t A_S(double q2, bool bar)
std::vector< ObservableValue > P_3_binned(Observables id)
std::vector< ObservableValue > S_i_binned(size_t i, bool cpv, Observables id)
double J2s(double q2, bool bar)
complex_t A_perp_low(double q2, double sign, bool bar)
double J2c(double q2, bool bar)
std::vector< ObservableValue > P_6_binned(Observables id)
complex_t A_t_high(double q2, bool bar)
BKstarllDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig &ports)
Definition BKsllDecay.h:92
std::vector< ObservableValue > H_T_2_binned(Observables id)
complex_t delta_A_perp_QCDf(double q2, double sign, bool bar)
complex_t T_par_m_cached(double q2, bool bar)
complex_t delta_A_0_QCDf(double q2, double sign, bool bar)
void fill_wilson_cache()
complex_t delta_A_0(double q2, double sign, bool bar)
void set_config_spe(BKstarllConfig config) override
Strongly-typed configuration setter to implement in derived classes.
Definition BKsllDecay.h:102
double lambda(double q2)
std::vector< ObservableValue > Rm1_BKstar(Observables id, BKstarllConfig::B_Charge charge)
complex_t delta_A_par_vD(double q2, bool bar)
std::any get_config() const override
Return the current decay configuration when the decay has one.
Definition BKsllDecay.h:103
std::vector< ObservableValue > H_T_3_binned(Observables id)
double J7(double q2, bool bar)
void set_lepton_gen_and_charge(BKstarllConfig::Lepton gen, BKstarllConfig::B_Charge charge)
double J3(double q2, bool bar)
void test_binned_obs()
double J1c(double q2, bool bar)
complex_t A_perp(double q2, double sign, bool bar)
std::vector< ObservableValue > A_T_2_binned(Observables id)
std::vector< ObservableValue > P_8_binned(Observables id)
std::vector< ObservableValue > P_i_CPV_binned(size_t i, Observables id)
complex_t A_0(double q2, double sign, bool bar)
complex_t N(double q2, bool bar)
std::vector< ObservableValue > A_T_Re_CPV_binned(Observables id)
complex_t delta_A_perp(double q2, double sign, bool bar)
complex_t A_0_low(double q2, double sign, bool bar)
std::vector< ObservableValue > A_T_3_binned(Observables id)
std::vector< ObservableValue > A_T_1_binned(Observables id)
complex_t delta_A_perp_vD(double q2, bool bar)
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
std::vector< ObservableValue > A_T_4_binned(Observables id)
std::vector< ObservableValue > alpha_K_binned(Observables id)
complex_t A_perp_high(double q2, double sign, bool bar)
std::vector< ObservableValue > dBR_dq2_binned(bool bar, Observables id, bool br=true)
complex_t delta_A_par(double q2, double sign, bool bar)
double J6s(double q2, bool bar)
std::vector< ObservableValue > A_CP_binned(Observables id)
size_t get_n_threads() const override
Return the currently configured worker-thread count.
Definition BKsllDecay.h:105
std::vector< ObservableValue > Pp_i_binned(size_t i, bool cpv, Observables id)
std::vector< ObservableValue > A_Im_binned(Observables id)
complex_t A_par_high(double q2, double sign, bool bar)
bool is_observable_binned(ObservableId obs) const override
Return whether one observable of this decay requires q² bins.
complex_t delta_A_0_vD(double q2, bool bar)
void compute_binned_J_i()
double dG_dq2_avg_bin(size_t bin)
std::vector< ObservableValue > H_T_1_binned(Observables id)
double beta_l(double q2)
std::vector< ObservableValue > F_L_binned(Observables id)
complex_t C7_eff(double q2, bool bar)
double J8(double q2, bool bar)
complex_t A_par(double q2, double sign, bool bar)
complex_t delta_A_par_K(double q2, bool bar)
double J5(double q2, bool bar)
complex_t A_S_low(double q2, bool bar)
std::vector< ObservableValue > A_T_Re_binned(Observables id)
void set_n_threads(size_t n_threads) override
Set the number of worker threads used by decays that support parallel cache filling.
complex_t T_perp_p_cached(double q2, bool bar)
std::vector< ObservableValue > F_T_binned(Observables id)
double J4(double q2, bool bar)
complex_t A_0_high(double q2, double sign, bool bar)
complex_t T_perp_m_cached(double q2, bool bar)
double J9(double q2, bool bar)
std::vector< ObservableValue > A_T_5_binned(Observables id)
complex_t A_S_high(double q2, bool bar)
complex_t delta_A_par_QCDf(double q2, double sign, bool bar)
void load_cfg_dependent_params()
ObservableValue q0(Observables id)
double J6c(double q2, bool bar)
complex_t A_t(double q2, bool bar)
complex_t delta_A_perp_K(double q2, bool bar)
complex_t C9_eff(double q2, bool bar)
std::vector< ObservableValue > A_FB_binned(Observables id, bool cpv)
complex_t interpolate(double q2, complex_t val_low, complex_t val_high)
std::vector< ObservableValue > P_2_binned(Observables id)
complex_t A_par_low(double q2, double sign, bool bar)
complex_t A_t_low(double q2, bool bar)
double J1s(double q2, bool bar)
void load_params() override
Load and cache parameters needed by this decay.
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
std::array< complex_t, 8 > phi_k_high
Definition BKsllDecay.h:59
double z_psi2S_nf
Definition BKsllDecay.h:63
std::array< double, 3 > r2_M
Definition BKsllDecay.h:72
double alpha_s_mu_b
Definition BKsllDecay.h:37
double m_c_mu_b
Definition BKsllDecay.h:35
double life_B
Definition BKsllDecay.h:39
std::array< scalar_t, LOOKUP_SIZE > T_perp_p_lookup
Definition BKsllDecay.h:76
std::array< double, 3 > DeltaC9_M_qbar
Definition BKsllDecay.h:70
complex_t lambda_hat_u
Definition BKsllDecay.h:40
double q2_bar
Definition BKsllDecay.h:69
std::array< double, 3 > r1_M
Definition BKsllDecay.h:71
BVFFCalculator ff_calculator
Definition BKsllDecay.h:30
std::array< complex_t, 6 > b_k_low
Definition BKsllDecay.h:55
std::array< complex_t, 6 > theta_k_low
Definition BKsllDecay.h:58
std::array< std::vector< double >, 15 > J_i_binned
Definition BKsllDecay.h:83
std::array< scalar_t, LOOKUP_SIZE > T_par_m_lookup
Definition BKsllDecay.h:78
double Delta_M
Definition BKsllDecay.h:36
double alpha_em
Definition BKsllDecay.h:33
std::array< complex_t, 3 > h_0_fit
Definition BKsllDecay.h:51
std::array< complex_t, 3 > h_p_fit
Definition BKsllDecay.h:49
complex_t N_0
Definition BKsllDecay.h:42
std::array< scalar_t, LOOKUP_SIZE > T_par_m_bar_lookup
Definition BKsllDecay.h:81
std::array< complex_t, 8 > a_k_high
Definition BKsllDecay.h:56
std::array< complex_t, 3 > alpha_par
Definition BKsllDecay.h:65
std::map< WCoef, complex_t > C
Definition BKsllDecay.h:29
double q2_min
Definition BKsllDecay.h:43
double m_b_mb
Definition BKsllDecay.h:35
std::array< scalar_t, LOOKUP_SIZE > T_perp_m_lookup
Definition BKsllDecay.h:77
std::array< complex_t, 2 > alpha_0
Definition BKsllDecay.h:66
double q2_low
Definition BKsllDecay.h:44
BVQCDfCalculator qcdf_calculator
Definition BKsllDecay.h:31
double m_b_mu_b
Definition BKsllDecay.h:35
double q2_high
Definition BKsllDecay.h:44
std::array< scalar_t, LOOKUP_SIZE > T_perp_p_bar_lookup
Definition BKsllDecay.h:79
double q2_max
Definition BKsllDecay.h:43
std::array< complex_t, 6 > phi_k_low
Definition BKsllDecay.h:57
std::array< complex_t, 6 > a_k_low
Definition BKsllDecay.h:54
double z_Jpsi_nf
Definition BKsllDecay.h:63
std::array< complex_t, 3 > h_m_fit
Definition BKsllDecay.h:50
double m_b_PS
Definition BKsllDecay.h:35
std::array< complex_t, 3 > alpha_perp
Definition BKsllDecay.h:64
static constexpr size_t LOOKUP_SIZE
Definition BKsllDecay.h:75
double q2_Jpsi
Definition BKsllDecay.h:69
std::array< std::vector< double >, 15 > J_i_bar_binned
Definition BKsllDecay.h:84
std::array< scalar_t, LOOKUP_SIZE > T_perp_m_bar_lookup
Definition BKsllDecay.h:80
double q2_lookup_min
Definition BKsllDecay.h:46
size_t n_threads
Definition BKsllDecay.h:25
BV_FF_Src ff_src
Definition BKsllDecay.h:19
Power_Corrections_Impl power_corr_impl
Definition BKsllDecay.h:21
B_FF_Type ff_type
Definition BKsllDecay.h:20
B_Charge charge
Definition BKsllDecay.h:22
Dependency container (“ports”) for observable computations.
Container for a computed observable value, optionally binned.
std::unordered_set< WGroupId > groups
Set of Wilson operator group identifiers to be included in the build.
Definition Configs.h:36