Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
BsPhiDecay.h
Go to the documentation of this file.
1#ifndef __BSPHIDECAY_H__
2#define __BSPHIDECAY_H__
3
4#include <thread>
5
6#include "DecayParent.h"
7#include "General.h"
8#include "DefaultConfig.h"
9#include "ObsQCDProxy.h"
10#include "BVFFCalculator.h"
11#include "BVQCDfCalculator.h"
12
23
25 std::map<WCoef, complex_t> C;
28
29 double G_F, alpha_em;
30 double mu_b, L_b;
33 double m_Bs, m_phi;
34 double life_Bs;
36 double kappa;
37 double Delta_M;
39 double q2_min, q2_max;
40 double q2_low, q2_high;
41 double ys, phi_s;
43
45
46 // Power corrections, guesstimate
47 std::array<complex_t, 6> A_had_err_low_0;
48 std::array<complex_t, 6> A_had_err_low_1;
49 std::array<complex_t, 8> A_had_err_high;
50
51 // Lookups
52 static inline constexpr size_t LOOKUP_SIZE = 100;
53 std::array<scalar_t, LOOKUP_SIZE> T_perp_p_lookup;
54 std::array<scalar_t, LOOKUP_SIZE> T_perp_m_lookup;
55 std::array<scalar_t, LOOKUP_SIZE> T_par_m_lookup;
56 std::array<scalar_t, LOOKUP_SIZE> T_perp_p_bar_lookup;
57 std::array<scalar_t, LOOKUP_SIZE> T_perp_m_bar_lookup;
58 std::array<scalar_t, LOOKUP_SIZE> T_par_m_bar_lookup;
59
60 std::array<std::vector<double>, 15> f_J_i_binned;
61 std::vector<double> bin_widths; // effective integration widths for bin-averaged dBR/dq2 / dGamma/dq2
62};
63
67class BsPhiDecay : public DecayParentConfigurable<BsPhiConfig> {
68private:
69 BsPhiDecayCache cache {};
70 BsPhiConfig cfg {};
71
72protected:
73 // Auxiliary
74 void fill_wilson_cache();
77
78 // QCDf
79 complex_t T_perp_p_cached(double q2, bool bar);
80 complex_t T_perp_m_cached(double q2, bool bar);
81 complex_t T_par_m_cached(double q2, bool bar);
82
83 // Nonfactorisable corrections
84 double beta_l(double q2);
85 double lambda(double q2);
86 complex_t N(double q2, bool bar);
87
88 complex_t delta_A_perp(double q2, double sign, bool bar);
89 complex_t delta_A_par(double q2, double sign, bool bar);
90 complex_t delta_A_0(double q2, double sign, bool bar);
91
92 // Transversity amplitudes
93 complex_t A_perp_low(double q2, double sign, bool bar);
94 complex_t A_par_low(double q2, double sign, bool bar);
95 complex_t A_0_low(double q2, double sign, bool bar);
96 complex_t A_t_low(double q2, bool bar);
97 complex_t A_S_low(double q2, bool bar);
98
99 complex_t C7_eff(double q2, bool bar);
100 complex_t C9_eff(double q2, bool bar);
101 complex_t A_perp_high(double q2, double sign, bool bar);
102 complex_t A_par_high(double q2, double sign, bool bar);
103 complex_t A_0_high(double q2, double sign, bool bar);
104 complex_t A_t_high(double q2, bool bar);
105 complex_t A_S_high(double q2, bool bar);
106
107 complex_t interpolate(double q2, complex_t val_low, complex_t val_high);
108 complex_t A_perp(double q2, double sign, bool bar);
109 complex_t A_par(double q2, double sign, bool bar);
110 complex_t A_0(double q2, double sign, bool bar);
111 complex_t A_t(double q2, bool bar);
112 complex_t A_S(double q2, bool bar);
113
114 // Angular coefficients
115 double J1s(double q2, bool bar);
116 double J1c(double q2, bool bar);
117 double J2s(double q2, bool bar);
118 double J2c(double q2, bool bar);
119 double J3(double q2, bool bar);
120 double J4(double q2, bool bar);
121 double J5(double q2, bool bar);
122 double J6s(double q2, bool bar);
123 double J6c(double q2, bool bar);
124 double J7(double q2, bool bar);
125 double J8(double q2, bool bar);
126 double J9(double q2, bool bar);
127
128 double h1s(double q2);
129 double h1c(double q2);
130 double h2s(double q2);
131 double h2c(double q2);
132 double h3(double q2);
133 double h4(double q2);
134 double h5(double q2);
135 double h6s(double q2);
136 double h6c(double q2);
137 double h7(double q2);
138 double h8(double q2);
139 double h9(double q2);
140
141 double s8(double q2);
142 double s9(double q2);
143
144 void compute_binned_J_i();
145
146 std::vector<ObservableValue> dBR_dq2_binned(bool bar, Observables id, bool br = true);
147 double dG_dq2_avg_bin(size_t bin);
148 std::vector<ObservableValue> F_L(Observables id);
149 std::vector<ObservableValue> A_T_2(Observables id);
150 std::vector<ObservableValue> A_T_Re_CPV(Observables id);
151 std::vector<ObservableValue> A_T_Im_CPV(Observables id);
152 std::vector<ObservableValue> Pp_4(Observables id);
153 std::vector<ObservableValue> Pp_6(Observables id);
154 std::vector<ObservableValue> S_i(int i, Observables id);
155 std::vector<ObservableValue> A_i(int i, Observables id);
156 std::vector<ObservableValue> A_FB_CPV(Observables id);
157 std::vector<ObservableValue> P_2_CPV(Observables id);
158 std::vector<ObservableValue> P_3_CPV(Observables id);
159 std::vector<ObservableValue> Pp_5_CPV(Observables id);
160 std::vector<ObservableValue> Pp_8_CPV(Observables id);
161 std::vector<ObservableValue> Q_8_m(Observables id);
162 std::vector<ObservableValue> Q_8_p(Observables id);
163 std::vector<ObservableValue> Q_9(Observables id);
164 std::vector<ObservableValue> Rm1_BsPhi(Observables id);
165
166public:
167 BsPhiDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig& ports) : DecayParentConfigurable(DecayMapper::to_id(Decays::Bs__phi_l_l), matching_scale, hadronic_scale, order, ports) {
170 this->binned = true;
171 }
172
173 void load_params() override;
174 std::vector<ObservableValue> compute_observable(Observables obs) override;
175 std::vector<ObservableValue> compute_observable(ObservableId obs) override;
176
177 void set_config_spe(BsPhiConfig config) override {this->cfg = config;}
178 std::any get_config() const override { return cfg; }
179 void set_n_threads(size_t n_threads) override;
180 size_t get_n_threads() const override { return cfg.n_threads; }
181 bool supports_thread_config() const override { return true; }
182};
183
184
185#endif // __BSPHIDECAY_H__
BV_FF_Src
Base class for observable/decay computation modules.
Observables
Definition GeneralEnum.h:4
QCDOrder
Decays
@ Bs__phi_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 Bs > phi l+ l- decays.
Definition BsPhiDecay.h:67
complex_t interpolate(double q2, complex_t val_low, complex_t val_high)
complex_t A_par_low(double q2, double sign, bool bar)
std::vector< ObservableValue > Pp_4(Observables id)
void compute_binned_J_i()
complex_t A_t_low(double q2, bool bar)
double J8(double q2, bool bar)
double h1s(double q2)
double h5(double q2)
complex_t A_S_low(double q2, bool bar)
std::vector< ObservableValue > F_L(Observables id)
complex_t A_0_low(double q2, double sign, bool bar)
double lambda(double q2)
std::vector< ObservableValue > Pp_5_CPV(Observables id)
std::any get_config() const override
Return the current decay configuration when the decay has one.
Definition BsPhiDecay.h:178
complex_t delta_A_0(double q2, double sign, bool bar)
complex_t T_par_m_cached(double q2, bool bar)
complex_t A_t(double q2, bool bar)
std::vector< ObservableValue > A_T_Re_CPV(Observables id)
std::vector< ObservableValue > A_T_Im_CPV(Observables id)
double h2c(double q2)
double beta_l(double q2)
complex_t A_S_high(double q2, bool bar)
size_t get_n_threads() const override
Return the currently configured worker-thread count.
Definition BsPhiDecay.h:180
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
complex_t T_perp_m_cached(double q2, bool bar)
void load_params() override
Load and cache parameters needed by this decay.
std::vector< ObservableValue > Q_8_m(Observables id)
std::vector< ObservableValue > A_T_2(Observables id)
std::vector< ObservableValue > Q_9(Observables id)
double J6c(double q2, bool bar)
double h1c(double q2)
std::vector< ObservableValue > S_i(int i, Observables id)
std::vector< ObservableValue > P_2_CPV(Observables id)
complex_t A_0_high(double q2, double sign, bool bar)
std::vector< ObservableValue > A_FB_CPV(Observables id)
double J6s(double q2, bool bar)
void load_cfg_dep_params()
double dG_dq2_avg_bin(size_t bin)
double h2s(double q2)
double J1c(double q2, bool bar)
double J4(double q2, bool bar)
BsPhiDecay(QCDOrder order, double matching_scale, double hadronic_scale, ObservablePortsConfig &ports)
Definition BsPhiDecay.h:167
complex_t delta_A_perp(double q2, double sign, bool bar)
void fill_wilson_cache()
double h9(double q2)
std::vector< ObservableValue > Pp_6(Observables id)
double J2c(double q2, bool bar)
complex_t A_perp(double q2, double sign, bool bar)
void set_n_threads(size_t n_threads) override
Set the number of worker threads used by decays that support parallel cache filling.
std::vector< ObservableValue > dBR_dq2_binned(bool bar, Observables id, bool br=true)
void set_config_spe(BsPhiConfig config) override
Strongly-typed configuration setter to implement in derived classes.
Definition BsPhiDecay.h:177
complex_t A_S(double q2, bool bar)
complex_t A_perp_high(double q2, double sign, bool bar)
double h7(double q2)
complex_t delta_A_par(double q2, double sign, bool bar)
complex_t A_par(double q2, double sign, bool bar)
double h3(double q2)
double J1s(double q2, bool bar)
std::vector< ObservableValue > Pp_8_CPV(Observables id)
complex_t C9_eff(double q2, bool bar)
double J7(double q2, bool bar)
void set_cfg_flags(BsPhiConfig::Lepton gen)
complex_t A_perp_low(double q2, double sign, bool bar)
complex_t A_par_high(double q2, double sign, bool bar)
complex_t C7_eff(double q2, bool bar)
double s8(double q2)
double J3(double q2, bool bar)
bool supports_thread_config() const override
Whether this decay supports runtime thread configuration.
Definition BsPhiDecay.h:181
complex_t A_t_high(double q2, bool bar)
complex_t T_perp_p_cached(double q2, bool bar)
double h6s(double q2)
double h4(double q2)
double J5(double q2, bool bar)
double s9(double q2)
std::vector< ObservableValue > Rm1_BsPhi(Observables id)
complex_t A_0(double q2, double sign, bool bar)
std::vector< ObservableValue > P_3_CPV(Observables id)
double J9(double q2, bool bar)
complex_t N(double q2, bool bar)
double J2s(double q2, bool bar)
std::vector< ObservableValue > Q_8_p(Observables id)
std::vector< ObservableValue > A_i(int i, Observables id)
double h8(double q2)
double h6c(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
B_FF_Type ff_type
Definition BsPhiDecay.h:18
Lepton gen
Definition BsPhiDecay.h:19
size_t n_threads
Definition BsPhiDecay.h:21
BV_FF_Src ff_src
Definition BsPhiDecay.h:17
complex_t up
Definition BsPhiDecay.h:42
std::array< scalar_t, LOOKUP_SIZE > T_par_m_lookup
Definition BsPhiDecay.h:55
std::array< std::vector< double >, 15 > f_J_i_binned
Definition BsPhiDecay.h:60
std::array< scalar_t, LOOKUP_SIZE > T_perp_p_lookup
Definition BsPhiDecay.h:53
complex_t N_0
Definition BsPhiDecay.h:38
complex_t lambda_hat_u
Definition BsPhiDecay.h:35
std::array< scalar_t, LOOKUP_SIZE > T_perp_p_bar_lookup
Definition BsPhiDecay.h:56
BVQCDfCalculator qcdf_calculator
Definition BsPhiDecay.h:27
std::array< scalar_t, LOOKUP_SIZE > T_perp_m_bar_lookup
Definition BsPhiDecay.h:57
std::vector< double > bin_widths
Definition BsPhiDecay.h:61
std::array< complex_t, 6 > A_had_err_low_1
Definition BsPhiDecay.h:48
std::map< WCoef, complex_t > C
Definition BsPhiDecay.h:25
double alpha_s_mu_b
Definition BsPhiDecay.h:32
double q2_lookup_min
Definition BsPhiDecay.h:44
complex_t um
Definition BsPhiDecay.h:42
std::array< complex_t, 8 > A_had_err_high
Definition BsPhiDecay.h:49
std::array< scalar_t, LOOKUP_SIZE > T_perp_m_lookup
Definition BsPhiDecay.h:54
std::array< scalar_t, LOOKUP_SIZE > T_par_m_bar_lookup
Definition BsPhiDecay.h:58
std::array< complex_t, 6 > A_had_err_low_0
Definition BsPhiDecay.h:47
static constexpr size_t LOOKUP_SIZE
Definition BsPhiDecay.h:52
BVFFCalculator ff_calculator
Definition BsPhiDecay.h:26
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