Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
BDstarlnuDecay.cpp
Go to the documentation of this file.
1#include "BDstarlnuDecay.h"
2
4 if (cfg.charge != charge) {
5 cfg.charge = charge;
7 }
8}
9
12
13 cache.G_F = (*p)(ParamId{ParameterType::SM, "SMINPUTS", 2}, DataType::VALUE);
14 cache.m_e = (*p)(ParamId{ParameterType::SM, "MASS", 11}, DataType::VALUE);
15 cache.m_tau = (*p)(ParamId{ParameterType::SM, "MASS", 15}, DataType::VALUE);
16 cache.h_A1_1 = (*p)(ParamId{ParameterType::DECAY, "B_Dslnu", 1}, DataType::VALUE);
17 cache.rho_D2 = (*p)(ParamId{ParameterType::DECAY, "B_Dslnu", 2}, DataType::VALUE);
18 cache.R_11 = (*p)(ParamId{ParameterType::DECAY, "B_Dslnu", 3}, DataType::VALUE);
19 cache.R_21 = (*p)(ParamId{ParameterType::DECAY, "B_Dslnu", 4}, DataType::VALUE);
20
22
23 // printf("m_B = %.4e\n", cache.m_B);
24 // printf("m_D = %.4e\n", cache.m_D_star);
25 // printf("hA_1(1) = %.4e\n", cache.h_A1_1);
26 // printf("R1(1) = %.4e\n", cache.R_11);
27 // printf("R2(1) = %.4e\n", cache.R_21);
28 // printf("R3(1) = %.4e\n", R3_1);
29}
30
34 cache.C_A = cache.C_V1 - cache.C_V2;
37 cache.C_V1_flag = !fpeq(std::abs(cache.C_V1), 0.0);
38 cache.C_V2_flag = !fpeq(std::abs(cache.C_V2), 0.0);
39 cache.C_A_flag = !fpeq(std::abs(cache.C_A), 0.0);
40 cache.C_P_flag = !fpeq(std::abs(cache.C_P), 0.0);
41 cache.C_T_flag = !fpeq(std::abs(cache.C_T), 0.0);
42}
43
45 double V_cb2 = std::pow(std::abs((*p)(ParamId{ParameterType::SM, "VCKM", {1, 2}}, DataType::VALUE)), 2);
46 cache.m_B = (*p)(ParamId{ParameterType::FLAVOR, "FMASS", cfg.charge == BDstarlnuConfig::B_Charge::B_0 ? 511 : 521}, DataType::VALUE);
49 cache.r_D = cache.m_D_star / cache.m_B;
50 cache.sqrt_rD = std::sqrt(cache.r_D);
51 cache.one_m_rD2 = 1. - std::pow(cache.r_D, 2);
52 cache.r_e = cache.m_e / cache.m_B;
53 cache.r_tau = cache.m_tau / cache.m_B;
54 double m_b = (*iobs_qcdp)(MassConfig(5, cache.m_B, MassType::POLE, MassType::POLE));
55 double m_c = (*iobs_qcdp)(MassConfig(4, cache.m_B, MassType::POLE, MassType::POLE));
56 cache.r_qp = (m_b + m_c) / cache.m_B;
57 cache.r_qm = (m_b - m_c) / cache.m_B;
58 cache.w_e = w_max(cache.r_e);
59 cache.w_tau = w_max(cache.r_tau);
60 cache.BR_pref = std::pow(cache.G_F * cache.m_B * cache.m_B * cache.h_A1_1, 2) * cache.m_D_star * cache.tau_B * V_cb2 / (96 * PI3 * HBAR);
61 cache.Gamma_p = 0.0;
62 cache.Gamma_m = 0.0;
63}
64
65double BDstarlnuDecay::t(double w) {
66 return 1 + cache.r_D * (cache.r_D - 2 * w);
67}
68
69double BDstarlnuDecay::lambda_D(double w) {
70 return 4 * cache.r_D * cache.r_D * (w * w - 1);
71}
72
73double BDstarlnuDecay::x_l(double rl, double w) {
74 return rl * rl / t(w);
75}
76
77double BDstarlnuDecay::phi(double rl, double w) {
78 return t(w) * std::sqrt(lambda_D(w)) * std::pow((1 - x_l(rl, w)) * h_A1(w), 2);
79}
80
81double BDstarlnuDecay::w_max(double rl) {
82 return (1 + cache.r_D * cache.r_D - rl * rl) / (2 * cache.r_D);
83}
84
85double BDstarlnuDecay::h_A1(double w) {
86 double z = (std::sqrt(1 + w) - RT2) / (std::sqrt(1 + w) + RT2);
87 return 1 + z * (-8 * cache.rho_D2 + z * ((53 * cache.rho_D2 - 15) - z * (231 * cache.rho_D2 - 91)));
88}
89
90double BDstarlnuDecay::R_1(double w) {
91 double u = w - 1;
92 return cache.R_11 + u * (-0.12 + 0.05 * u);
93}
94
95double BDstarlnuDecay::R_2(double w) {
96 double u = w - 1;
97 return cache.R_21 + u * (-0.11 - 0.06 * u);
98}
99
100double BDstarlnuDecay::R_3(double w) {
101 double u = w - 1;
102 return 0.97 + u * (-0.052 + 0.026 * u);
103}
104
105double BDstarlnuDecay::H_Vp(double w) {
106 return cache.sqrt_rD * (w + 1 - R_1(w) * std::sqrt(w * w - 1));
107}
108
109double BDstarlnuDecay::H_Vm(double w) {
110 return cache.sqrt_rD * (w + 1 + R_1(w) * std::sqrt(w * w - 1));
111}
112
113double BDstarlnuDecay::H_V0(double w) {
114 return cache.sqrt_rD / std::sqrt(t(w)) * ((cache.r_D - w) * (1 + w) + R_2(w) * (w * w - 1));
115}
116
117double BDstarlnuDecay::H_Vt(double w) {
118 return std::sqrt((w * w - 1) / t(w)) / (2 * cache.sqrt_rD) * (-2 * cache.r_D * (1 + w) + cache.one_m_rD2 * R_2(w) - t(w) * R_3(w));
119}
120
121double BDstarlnuDecay::H_S(double w) {
122 return std::sqrt(w * w - 1) / (2 * cache.sqrt_rD * cache.r_qp) * (-2 * cache.r_D * (1 + w) + cache.one_m_rD2 * R_2(w) - t(w) * R_3(w));
123}
124
125double BDstarlnuDecay::H_Tp(double w) {
126 return cache.sqrt_rD / std::sqrt(t(w)) * (cache.r_qp * std::sqrt(w * w - 1) * R_1(w) + cache.r_qm * (1 + w));
127}
128
129double BDstarlnuDecay::H_Tm(double w) {
130 return cache.sqrt_rD / std::sqrt(t(w)) * (cache.r_qp * std::sqrt(w * w - 1) * R_1(w) - cache.r_qm * (1 + w));
131}
132
133double BDstarlnuDecay::H_T0(double w) {
134 return cache.sqrt_rD * (1 + w) / (cache.one_m_rD2 * t(w)) * (2 * cache.r_qp * cache.one_m_rD2 * (w - 1) * R_1(w)
135 - cache.r_qm * (w - 1) * t(w) * (R_3(w) - 1)
136 - cache.r_qm * (1 + cache.r_D) * (std::pow(1 - cache.r_D, 2) + 2 * (w - 1)));
137}
138
139double BDstarlnuDecay::F_V0_1(double rl, double w_m) {
140 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
141 auto f = [this, rl] (double w) { return phi(rl, w) * std::pow(H_V0(w), 2); };
142 return integrate(f, 1, w_m, 1e-3);
143}
144
145double BDstarlnuDecay::F_V0_2(double rl, double w_m) {
146 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
147
148 auto f = [this, rl] (double w) {
149 return phi(rl, w) * x_l(rl, w) * std::pow(H_V0(w), 2);
150 };
151
152 return integrate(f, 1, w_m, 1e-3);
153}
154
155double BDstarlnuDecay::F_Vp_1(double rl, double w_m) {
156 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
157
158 auto f = [this, rl] (double w) {
159 return phi(rl, w) * std::pow(H_Vp(w), 2);
160 };
161
162 return integrate(f, 1, w_m, 1e-3);
163}
164
165double BDstarlnuDecay::F_Vp_2(double rl, double w_m) {
166 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
167
168 auto f = [this, rl] (double w) {
169 return phi(rl, w) * x_l(rl, w) * std::pow(H_Vp(w), 2);
170 };
171
172 return integrate(f, 1, w_m, 1e-3);
173}
174
175double BDstarlnuDecay::F_Vm_1(double rl, double w_m) {
176 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
177
178 auto f = [this, rl] (double w) {
179 return phi(rl, w) * std::pow(H_Vm(w), 2);
180 };
181
182 return integrate(f, 1, w_m, 1e-3);
183}
184
185double BDstarlnuDecay::F_Vm_2(double rl, double w_m) {
186 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
187
188 auto f = [this, rl] (double w) {
189 return phi(rl, w) * x_l(rl, w) * std::pow(H_Vm(w), 2);
190 };
191
192 return integrate(f, 1, w_m, 1e-3);
193}
194
195double BDstarlnuDecay::F_Vt(double rl, double w_m) {
196 if (!cache.C_V1_flag && !cache.C_V2_flag) return 0;
197
198 auto f = [this, rl] (double w) {
199 return phi(rl, w) * x_l(rl, w) * std::pow(H_Vt(w), 2);
200 };
201
202 return integrate(f, 1, w_m, 1e-3);
203}
204
205double BDstarlnuDecay::F_S(double rl, double w_m) {
206 if (!cache.C_P_flag) return 0;
207
208 auto f = [this, rl] (double w) {
209 return phi(rl, w) * std::pow(H_S(w), 2);
210 };
211
212 return integrate(f, 1, w_m, 1e-3);
213}
214
215double BDstarlnuDecay::F_T0_1(double rl, double w_m) {
216 if (!cache.C_T_flag) return 0;
217
218 auto f = [this, rl] (double w) {
219 return phi(rl, w) * std::pow(H_T0(w), 2);
220 };
221
222 return integrate(f, 1, w_m, 1e-3);
223}
224
225double BDstarlnuDecay::F_T0_2(double rl, double w_m) {
226 if (!cache.C_T_flag) return 0;
227
228 auto f = [this, rl] (double w) {
229 return phi(rl, w) * x_l(rl, w) * std::pow(H_T0(w), 2);
230 };
231
232 return integrate(f, 1, w_m, 1e-3);
233}
234
235double BDstarlnuDecay::F_Tp_1(double rl, double w_m) {
236 if (!cache.C_T_flag) return 0;
237
238 auto f = [this, rl] (double w) {
239 return phi(rl, w) * std::pow(H_Tp(w), 2);
240 };
241
242 return integrate(f, 1, w_m, 1e-3);
243}
244
245double BDstarlnuDecay::F_Tp_2(double rl, double w_m) {
246 if (!cache.C_T_flag) return 0;
247
248 auto f = [this, rl] (double w) {
249 return phi(rl, w) * x_l(rl, w) * std::pow(H_Tp(w), 2);
250 };
251
252 return integrate(f, 1, w_m, 1e-3);
253}
254
255double BDstarlnuDecay::F_Tm_1(double rl, double w_m) {
256 if (!cache.C_T_flag) return 0;
257
258 auto f = [this, rl] (double w) {
259 return phi(rl, w) * std::pow(H_Tm(w), 2);
260 };
261
262 return integrate(f, 1, w_m, 1e-3);
263}
264
265double BDstarlnuDecay::F_Tm_2(double rl, double w_m) {
266 if (!cache.C_T_flag) return 0;
267
268 auto f = [this, rl] (double w) {
269 return phi(rl, w) * x_l(rl, w) * std::pow(H_Tm(w), 2);
270 };
271
272 return integrate(f, 1, w_m, 1e-3);
273}
274
275double BDstarlnuDecay::G_Vp_Vm_1(double rl, double w_m) {
276 if (!cache.C_V1_flag || !cache.C_V2_flag) return 0;
277
278 auto f = [this, rl] (double w) {
279 return phi(rl, w) * H_Vp(w) * H_Vm(w);
280 };
281
282 return integrate(f, 1, w_m, 1e-3);
283}
284
285double BDstarlnuDecay::G_Vp_Vm_2(double rl, double w_m) {
286 if (!cache.C_V1_flag || !cache.C_V2_flag) return 0;
287
288 auto f = [this, rl] (double w) {
289 return phi(rl, w) * x_l(rl, w) * H_Vp(w) * H_Vm(w);
290 };
291
292 return integrate(f, 1, w_m, 1e-3);
293}
294
295double BDstarlnuDecay::G_Vp_Tp(double rl, double w_m) {
296 if (!cache.C_V1_flag || !cache.C_T_flag) return 0;
297
298 auto f = [this, rl] (double w) {
299 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_Vp(w) * H_Tp(w);
300 };
301
302 return integrate(f, 1, w_m, 1e-3);
303}
304
305double BDstarlnuDecay::G_Vp_Tm(double rl, double w_m) {
306 if (!cache.C_T_flag || !cache.C_V2_flag) return 0;
307
308 auto f = [this, rl] (double w) {
309 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_Vp(w) * H_Tm(w);
310 };
311
312 return integrate(f, 1, w_m, 1e-3);
313}
314
315double BDstarlnuDecay::G_Vm_Tp(double rl, double w_m) {
316 if (!cache.C_T_flag || !cache.C_V2_flag) return 0;
317
318 auto f = [this, rl] (double w) {
319 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_Vm(w) * H_Tp(w);
320 };
321
322 return integrate(f, 1, w_m, 1e-3);
323}
324
325double BDstarlnuDecay::G_Vm_Tm(double rl, double w_m) {
326 if (!cache.C_V1_flag || !cache.C_T_flag) return 0;
327
328 auto f = [this, rl] (double w) {
329 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_Vm(w) * H_Tm(w);
330 };
331
332 return integrate(f, 1, w_m, 1e-3);
333}
334
335double BDstarlnuDecay::G_V0_Vt(double rl, double w_m) {
336 if (!cache.C_A_flag) return 0;
337
338 auto f = [this, rl] (double w) {
339 return phi(rl, w) * x_l(rl, w) * H_V0(w) * H_Vt(w);
340 };
341
342 return integrate(f, 1, w_m, 1e-3);
343}
344
345double BDstarlnuDecay::G_V0_S(double rl, double w_m) {
346 if (!cache.C_A_flag || !cache.C_P_flag) return 0;
347
348 auto f = [this, rl] (double w) {
349 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_V0(w) * H_S(w);
350 };
351
352 return integrate(f, 1, w_m, 1e-3);
353}
354
355double BDstarlnuDecay::G_V0_T0(double rl, double w_m) {
356 if (!((cache.C_V1_flag && cache.C_T_flag) || (cache.C_V2_flag && cache.C_T_flag))) return 0;
357
358 auto f = [this, rl] (double w) {
359 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_V0(w) * H_T0(w);
360 };
361
362 return integrate(f, 1, w_m, 1e-3);
363}
364
365double BDstarlnuDecay::G_Vt_S(double rl, double w_m) {
366 if (!cache.C_A_flag || !cache.C_P_flag) return 0;
367
368 auto f = [this, rl] (double w) {
369 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_Vt(w) * H_S(w);
370 };
371
372 return integrate(f, 1, w_m, 1e-3);
373}
374
375double BDstarlnuDecay::G_Vt_T0(double rl, double w_m) {
376 if (!((cache.C_V1_flag && cache.C_T_flag) || (cache.C_V2_flag && cache.C_T_flag))) return 0;
377
378 auto f = [this, rl] (double w) {
379 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_Vt(w) * H_T0(w);
380 };
381
382 return integrate(f, 1, w_m, 1e-3);
383}
384
385double BDstarlnuDecay::G_S_T0(double rl, double w_m) {
386 if (!cache.C_T_flag || !cache.C_P_flag) return 0;
387
388 auto f = [this, rl] (double w) {
389 return phi(rl, w) * std::sqrt(x_l(rl, w)) * H_S(w) * H_T0(w);
390 };
391
392 return integrate(f, 1, w_m, 1e-3);
393}
394
395double BDstarlnuDecay::Gamma_tau_m(double rl, double w_m) {
396 double c_vsq = std::pow(std::abs(cache.C_V1), 2) + std::pow(std::abs(cache.C_V2), 2);
397 double c_vv = -2 * std::real(cache.C_V1 * std::conj(cache.C_V2));
398 double c_tt = 16 * std::pow(std::abs(cache.C_T), 2);
399 double c_v1t = -8 * std::real(cache.C_V1 * std::conj(cache.C_T));
400 double c_v2t = 8 * std::real(cache.C_V2 * std::conj(cache.C_T));
401
402 double f_v0_1 = F_V0_1(rl, w_m);
403 double g_v0_t0 = G_V0_T0(rl, w_m);
404 return c_vsq * (F_Vp_1(rl, w_m) + F_Vm_1(rl, w_m) + f_v0_1)
405 + c_vv * (f_v0_1 + 2 * G_Vp_Vm_1(rl, w_m))
406 + c_tt * (F_Tp_2(rl, w_m) + F_Tm_2(rl, w_m) + F_T0_2(rl, w_m))
407 + c_v1t * (g_v0_t0 + G_Vp_Tp(rl, w_m) - G_Vm_Tm(rl, w_m))
408 + c_v2t * (g_v0_t0 + G_Vm_Tp(rl, w_m) - G_Vp_Tm(rl, w_m));
409}
410
411double BDstarlnuDecay::Gamma_tau_p(double rl, double w_m) {
412 double c_vsq = 0.5 * std::pow(std::abs(cache.C_V1), 2) + std::pow(std::abs(cache.C_V2), 2);
413 double c_vv = -std::real(cache.C_V1 * std::conj(cache.C_V2));
414 double c_ss = 1.5 * std::pow(std::abs(cache.C_P), 2);
415 double c_tt = 8 * std::pow(std::abs(cache.C_T), 2);
416 double c_vs = 3 * std::real(cache.C_A * std::conj(cache.C_P));
417 double c_v1t = -4 * std::real(cache.C_V1 * std::conj(cache.C_T));
418 double c_v2t = 4 * std::real(cache.C_V2 * std::conj(cache.C_T));
419
420 double f_v0_2 = F_V0_2(rl, w_m);
421 double g_v0_t0 = G_V0_T0(rl, w_m);
422 return c_vsq * (F_Vp_2(rl, w_m) + F_Vm_2(rl, w_m) + f_v0_2 + 3 * F_Vt(rl, w_m))
423 + c_vv * (f_v0_2 + 2 * G_Vp_Vm_2(rl, w_m) + 3 * F_Vt(rl, w_m))
424 + c_ss * F_S (rl, w_m)
425 + c_tt * (F_Tp_1(rl, w_m) + F_Tm_1(rl, w_m) + F_T0_1(rl, w_m))
426 + c_vs * G_Vt_S(rl, w_m)
427 + c_v1t * (g_v0_t0 + G_Vp_Tp(rl, w_m) - G_Vm_Tm(rl, w_m))
428 + c_v2t * (g_v0_t0 + G_Vm_Tp(rl, w_m) - G_Vp_Tm(rl, w_m));
429}
430
432 if (cache.Gamma_p == 0)
433 cache.Gamma_p = Gamma_tau_p(cache.r_tau, cache.w_tau);
434
435 if (cache.Gamma_m == 0)
436 cache.Gamma_m = Gamma_tau_m(cache.r_tau, cache.w_tau);
437
438 return cache.BR_pref * (cache.Gamma_p + cache.Gamma_m);
439}
440
442 double c_vv = 0.75 * std::pow(std::abs(cache.C_V1), 2) - std::pow(std::abs(cache.C_V2), 2);
443 double c_aa = 1.5 * std::pow(std::abs(cache.C_A), 2);
444 double c_tt = 12 * std::pow(std::abs(cache.C_T), 2);
445 double c_ap = 1.5 * std::real(cache.C_A * std::conj(cache.C_P));
446 double c_v1t = -6 * std::real(cache.C_V1 * std::conj(cache.C_T));
447 double c_v2t = 6 * std::real(cache.C_V2 * std::conj(cache.C_T));
448 double c_pt = -6 * std::real(cache.C_P * std::conj(cache.C_T));
449
450 double g_vt_t0 = G_Vt_T0(cache.r_tau, cache.w_tau);
451 double b_theta = c_vv * (F_Vp_1(cache.r_tau, cache.w_tau) - F_Vm_1(cache.r_tau, cache.w_tau))
452 + c_aa * G_V0_Vt(cache.r_tau, cache.w_tau)
453 + c_tt * (F_Tp_2(cache.r_tau, cache.w_tau) - F_Tm_2(cache.r_tau, cache.w_tau))
454 + c_ap * G_V0_S(cache.r_tau, cache.w_tau)
455 + c_v1t * (g_vt_t0 + G_Vp_Tp(cache.r_tau, cache.w_tau) + G_Vm_Tm(cache.r_tau, cache.w_tau))
456 + c_v2t * (g_vt_t0 + G_Vm_Tp(cache.r_tau, cache.w_tau) + G_Vp_Tm(cache.r_tau, cache.w_tau))
457 + c_pt * G_S_T0(cache.r_tau, cache.w_tau);
458
459 if (cache.Gamma_p == 0)
460 cache.Gamma_p = Gamma_tau_p(cache.r_tau, cache.w_tau);
461
462 if (cache.Gamma_m == 0)
463 cache.Gamma_m = Gamma_tau_m(cache.r_tau, cache.w_tau);
464
465 return b_theta / (cache.Gamma_p + cache.Gamma_m);
466}
467
469 if (cache.Gamma_p == 0)
470 cache.Gamma_p = Gamma_tau_p(cache.r_tau, cache.w_tau);
471
472 if (cache.Gamma_m == 0)
473 cache.Gamma_m = Gamma_tau_m(cache.r_tau, cache.w_tau);
474
475 double gamma_e = Gamma_tau_p(cache.r_e, cache.w_e) + Gamma_tau_m(cache.r_e, cache.w_e);
476
477 return (cache.Gamma_p + cache.Gamma_m) / gamma_e;
478}
479
481 if (cache.Gamma_p == 0)
482 cache.Gamma_p = Gamma_tau_p(cache.r_tau, cache.w_tau);
483
484 if (cache.Gamma_m == 0)
485 cache.Gamma_m = Gamma_tau_m(cache.r_tau, cache.w_tau);
486
487 return (cache.Gamma_p - cache.Gamma_m) / (cache.Gamma_p + cache.Gamma_m);
488}
489
491 double c_aa = 0.5 * std::pow(std::abs(cache.C_A), 2);
492 double c_pp = 1.5 * std::pow(std::abs(cache.C_P), 2);
493 double c_tt = 8 * std::pow(std::abs(cache.C_T), 2);
494 double c_ap = 3 * std::real(cache.C_A * std::conj(cache.C_P));
495 double c_at = -12 * std::real(cache.C_A * std::conj(cache.C_T));
496
497 double gamma_D_0 = c_aa * (2 * F_V0_1(cache.r_tau, cache.w_tau) + F_V0_2(cache.r_tau, cache.w_tau) + 3 * F_Vt(cache.r_tau, cache.w_tau))
498 + c_pp * F_S(cache.r_tau, cache.w_tau)
499 + c_tt * (F_T0_1(cache.r_tau, cache.w_tau) + 2 * F_T0_2(cache.r_tau, cache.w_tau))
500 + c_ap * G_Vt_S(cache.r_tau, cache.w_tau)
501 + c_at * G_V0_T0(cache.r_tau, cache.w_tau);
502
503 if (cache.Gamma_p == 0)
504 cache.Gamma_p = Gamma_tau_p(cache.r_tau, cache.w_tau);
505
506 if (cache.Gamma_m == 0)
507 cache.Gamma_m = Gamma_tau_m(cache.r_tau, cache.w_tau);
508
509 return gamma_D_0 / (cache.Gamma_p + cache.Gamma_m);
510}
511
512
513std::vector<ObservableValue> BDstarlnuDecay::compute_observable(Observables obs) {
514 double value;
515 switch (obs) {
518 value = BR();
519 break;
522 value = A_FB();
523 break;
526 value = R_Dstar();
527 break;
530 value = P_tau();
531 break;
534 value = P_D();
535 break;
538 value = BR();
539 break;
542 value = A_FB();
543 break;
546 value = R_Dstar();
547 break;
550 value = P_tau();
551 break;
554 value = P_D();
555 break;
556 default:
557 LOG_ERROR("IndexError", "Observable", ObservableMapper::str(obs), "doesn't belong to the decay", DecayMapper::str(this->id));
558 }
559
560 return {ObservableValue(ObservableMapper::to_id(obs), value)};
561}
562
563std::vector<ObservableValue> BDstarlnuDecay::compute_observable(ObservableId obs) {
565}
Observables
Definition GeneralEnum.h:4
@ P_D_B0__DSTAR_TAU_NU
@ A_FB_B__DSTAR0_TAU_NU
@ P_TAU_B__DSTAR0_TAU_NU
@ P_D_B__DSTAR0_TAU_NU
@ P_TAU_B0__DSTAR_TAU_NU
@ A_FB_B0__DSTAR_TAU_NU
#define LOG_ERROR(type,...)
Macro for logging error messages and terminating the application.
Definition Logger.h:41
double F_Tm_1(double rl, double w_m)
double G_Vt_T0(double rl, double w_m)
double G_Vm_Tp(double rl, double w_m)
double F_V0_1(double rl, double w_m)
double F_S(double rl, double w_m)
double F_Vp_2(double rl, double w_m)
double F_T0_2(double rl, double w_m)
double F_Vp_1(double rl, double w_m)
double Gamma_tau_m(double rl, double w_m)
double G_Vp_Vm_2(double rl, double w_m)
double G_Vt_S(double rl, double w_m)
double H_V0(double w)
double lambda_D(double w)
double G_Vm_Tm(double rl, double w_m)
double F_Tp_1(double rl, double w_m)
double H_Tm(double w)
double Gamma_tau_p(double rl, double w_m)
double G_V0_Vt(double rl, double w_m)
double x_l(double rl, double w)
double F_Tm_2(double rl, double w_m)
std::vector< ObservableValue > compute_observable(Observables obs) override
Compute an observable given a public observable enum.
double h_A1(double w)
double G_S_T0(double rl, double w_m)
double R_1(double w)
double F_Vm_2(double rl, double w_m)
double phi(double rl, double w)
double t(double w)
void set_cfg_flags(BDstarlnuConfig::B_Charge charge)
double H_S(double w)
double H_T0(double w)
double H_Tp(double w)
double w_max(double rl)
double H_Vp(double w)
double H_Vt(double w)
void load_params() override
Load and cache parameters needed by this decay.
double G_Vp_Vm_1(double rl, double w_m)
double F_Vm_1(double rl, double w_m)
double R_2(double w)
double R_3(double w)
double G_V0_T0(double rl, double w_m)
double G_Vp_Tp(double rl, double w_m)
double F_Tp_2(double rl, double w_m)
double F_V0_2(double rl, double w_m)
double G_V0_S(double rl, double w_m)
double F_T0_1(double rl, double w_m)
double G_Vp_Tm(double rl, double w_m)
double F_Vt(double rl, double w_m)
double H_Vm(double w)
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).
Definition DecayParent.h:99
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.
constexpr double HBAR
Definition constants.h:23
constexpr double PI3
Definition constants.h:9
constexpr double RT2
Definition constants.h:15
double integrate(RealValuedFunction f, double l, double u, double prec)
Performs numerical integration of a real-valued function of a real variable.
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.
double f(double x)
Wilson special function f depending on x.
Configuration for computing a particle mass at a given scale.
Definition Configs.h:242
Container for a computed observable value, optionally binned.
Composite identifier for a single parameter.
Definition ParamID.h:57