flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
decay_H_to_WpWm.inc
Go to the documentation of this file.
1template <>
2double CLASSNAME::get_partial_width<Higgs, WpBoson, WmBoson>(
3 const context_base& context, typename field_indices<Higgs>::type const& indexIn,
4 typename field_indices<WpBoson>::type const& indexOut1,
5 typename field_indices<WmBoson>::type const& indexOut2)
6{
7
8 const double mHOS = context.physical_mass<Higgs>(indexIn);
9 const double mWOS = context.physical_mass<WpBoson>(indexOut1);
10 const double x = Sqr(mWOS/mHOS);
11 double res = 0;
12
13 const int offshell_VV_decays = flexibledecay_settings.get(FlexibleDecay_settings::offshell_VV_decays);
14 if ((x > 1.0 && offshell_VV_decays != 0) ||
15 (4.*x > 1.0 && offshell_VV_decays == 2)) {
16
17 // integrand
18 static constexpr double GammaW = 2.085; //3*std::norm(ghWW)/(16.*Pi*mWOS);
19 struct hVV_4body_params params = {mHOS, mWOS, GammaW};
20 gsl_monte_function G = { &hVV_4body, 2, &params };
21
22 // setup integration
23 gsl_rng_env_setup ();
24 double xl[2] = {0, 0};
25 double xu[2] = {Sqr(mHOS), Sqr(mHOS)};
26 // this gives relative error < 0.05%
27 static constexpr size_t calls = 1'000'000;
28 double err;
29 const gsl_rng_type *T = gsl_rng_default;
30 gsl_rng *r = gsl_rng_alloc (T);
31 gsl_monte_miser_state *s = gsl_monte_miser_alloc (2);
32 gsl_monte_miser_integrate (&G, xl, xu, 2, calls, r, s,
33 &res, &err);
34
35 // clean-up
36 gsl_monte_miser_free (s);
37 gsl_rng_free (r);
38
39 // prefactor
40 const auto indices = concatenate(indexIn, indexOut1, indexOut2);
41 const auto ghWW =
42 Vertex<Higgs, WpBoson, WmBoson>::evaluate(indices, context).value();
43
44 const double normalization = 1./(64.*Cube(Pi)) * std::norm(ghWW) * Cube(mHOS)/Power4(mWOS);
45 res *= normalization;
46 err *= normalization;
47 const double rel_err = err/res;
48 static constexpr double errorThresholdPerc = 0.1;
49 if (rel_err*100 > errorThresholdPerc) {
50 problems.add_warning(
51 create_process_string<Higgs,WpBoson,WmBoson>(indexIn, indexOut1, indexOut2)
52 + ": Relative integration error > " + std::to_string(errorThresholdPerc) + "%"
53 );
54 }
55 }
56 // three-body decays form mW < mH < 2*mW
57 else if (4 * x > 1.0 && offshell_VV_decays != 0) {
58
59 if (check_3body_Vff_decay<BSMForWdecay, WpBoson>(context, mHOS, indexOut1)) {
60 const std::string index_as_string = indexIn.size() == 0 ? "" : "(" + std::to_string(indexIn.at(0)) + ")";
61 WARNING("Warning in H" + index_as_string + "->WW decays: Single off-shell decays H->Wff' assume no possible BSM particles in the final state. Turning off.");
62 return 0.;
63 }
64 res = 1./(768.*Power3(Pi)*mHOS) * RT(x)/x;
65
66 const auto indices = concatenate(indexIn, indexOut1, indexOut2);
67 const auto ghWW =
68 Vertex<Higgs, WpBoson, WmBoson>::evaluate(indices, context).value();
69
70 // absolute value of baru d W+ vertex (no CKM and no PL projector)
71 const double g2 = context.model.get_g2();
72 const double gWud = g2/std::sqrt(2.0);
73
74 res *= std::norm(ghWW*gWud);
75
76 // multiply by number of final states
77 static constexpr double NLF = 3; // number of lepton flavours
78 static constexpr double Nc = 3; // number of colors
79 static constexpr double NQF = 2; // number of quark flavours
80 res *= NLF + Nc*NQF;
81
82 // two-body decay for mH > 2 mW
83 }
84 else if (4.*x < 1.0) {
85 const double flux = 1. / (2 * mHOS);
86 // phase space without symmetry factor
87 const double ps = 1./(8.*Pi)*std::sqrt(KallenLambda(1., x, x));
88
89 // matrix element squared
90 const auto mat_elem = calculate_amplitude<Higgs, WpBoson, WmBoson>(
91 context, indexIn, indexOut1, indexOut2);
92 const auto mat_elem_sq = mat_elem.square();
93
94 // flux * phase space factor * matrix element squared
95 res = flux * ps * mat_elem_sq;
96 }
97
98 return res;
99}
#define WARNING(msg)
Definition: logger.hpp:63
constexpr T norm(const Complex< T > &z) noexcept
Definition: complex.hpp:66
constexpr Base Power3(Base b) noexcept
Definition: wrappers.hpp:487
double RT(double x) noexcept
Eq.(2.31) of hep-ph/0503172, including edge cases.
std::string to_string(char a)
double hVV_4body(double *q2, size_t, void *params)
Definition: decay.cpp:122
constexpr std::complex< T > Sqr(const std::complex< T > &a) noexcept
Definition: wrappers.hpp:631
detail::result_of::concatenate< Args... >::type concatenate(Args &&... args)
Definition: concatenate.hpp:87
T KallenLambda(T x, T y, T z) noexcept
Definition: wrappers.hpp:835
constexpr Base Power4(Base b) noexcept
Definition: wrappers.hpp:493
static constexpr double Pi
Definition: wrappers.hpp:44
constexpr T Cube(T a) noexcept
Definition: wrappers.hpp:179