flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
decay_H_to_lbarl.inc
Go to the documentation of this file.
1template <>
2double CLASSNAME::get_partial_width<Higgs, bar<ChargedLepton>::type, ChargedLepton>(
3 const context_base& context,
4 typename field_indices<Higgs>::type const& indexIn,
5 typename field_indices<bar<ChargedLepton>::type>::type const& indexOut1,
6 typename field_indices<ChargedLepton>::type const& indexOut2)
7{
8
9 const auto indices = concatenate(indexOut1, indexOut2, indexIn);
10 const auto HLLbarVertexDR = Vertex<bar<ChargedLepton>::type, ChargedLepton, Higgs>::evaluate(indices, context);
11 const auto HLLbarVertexDR_S = 0.5*(HLLbarVertexDR.left() + HLLbarVertexDR.right());
12 const auto HLLbarVertexDR_P = 0.5*(HLLbarVertexDR.right() - HLLbarVertexDR.left());
13
14 if (is_zero(HLLbarVertexDR_S) && is_zero(HLLbarVertexDR_S)) {
15 return 0.;
16 }
17
18 const double mHOS = context.physical_mass<Higgs>(indexIn);
19 const double mL1OS = context.physical_mass<bar<ChargedLepton>::type>(indexOut1);
20 const double mL2OS = context.physical_mass<ChargedLepton>(indexOut2);
21
22 // phase space without symmetry factor
23 const auto xOS1 = Sqr(mL1OS/mHOS);
24 const auto xOS2 = Sqr(mL2OS/mHOS);
25 const auto betaOS2_S = 1.0 - Sqr((mL1OS + mL2OS)/mHOS);
26 const auto betaOS2_P = 1.0 - Sqr((mL1OS - mL2OS)/mHOS);
27 const double ps = 1./(8.*Pi)*std::sqrt(KallenLambda(1., xOS1, xOS2));
28 const double flux = 1./(2.*mHOS);
29
30 const double amp2_S = Sqr(mHOS) * betaOS2_S * 2*std::norm(HLLbarVertexDR_S);
31
32 const double amp2_P =
33 info::is_CP_violating_Higgs_sector ? Sqr(mHOS) * betaOS2_P * 2.*std::norm(HLLbarVertexDR_P) : 0.;
34
35 // flux * phase space factor * symmetry factor * |matrix element|^2
36 double res_S = flux * ps * amp2_S;
37 double res_P = flux * ps * amp2_P;
38
39 // higher order corrections
40 if (flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections)) {
41 // 1-loop QED corrections
42 res_S *= 1. + get_alpha(context)/Pi*17./4.;
43 res_P *= 1. + get_alpha(context)/Pi*17./4.;
44 }
45
46 if (flexibledecay_settings.get(FlexibleDecay_settings::call_higgstools) != 0 ||
47 flexibledecay_settings.get(FlexibleDecay_settings::call_lilith) != 0 ||
48 flexibledecay_settings.get(FlexibleDecay_settings::calculate_normalized_effc) != 0
49 ) {
50 const double remove_normalization = flux*ps*2*Sqr(mHOS);
51 neutral_higgs_effc.add_coupling(
52 field_as_string<Higgs>(indexIn),
53 {
54 boost::hana::unpack(bar<ChargedLepton>::pdgids, _to_array<bar<ChargedLepton>::numberOfGenerations>).at(indexOut1.at(0)),
55 boost::hana::unpack(ChargedLepton::pdgids, _to_array<ChargedLepton::numberOfGenerations>).at(indexOut2.at(0))
56 },
57 std::pair<std::string, std::complex<double>> {
58 field_as_string<Higgs>(indexIn) + "-" + field_as_string<bar<ChargedLepton>::type>(indexOut1) + "-" + field_as_string<ChargedLepton>(indexOut2),
59 std::sqrt(res_S/(remove_normalization*betaOS2_S)) + 1i*std::sqrt(res_P/(remove_normalization*betaOS2_P))
60 },
61 res_S + res_P
62 );
63 }
64
65 return res_S + res_P;
66}
bool is_zero(double x) noexcept
Definition ckm.cpp:30
constexpr std::complex< T > Sqr(const std::complex< T > &a) noexcept
Definition wrappers.hpp:633
detail::result_of::concatenate< Args... >::type concatenate(Args &&... args)
T KallenLambda(T x, T y, T z) noexcept
Definition wrappers.hpp:837