flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
decay_Ah_to_lbarl.inc
Go to the documentation of this file.
1template <>
2double CLASSNAME::get_partial_width<PseudoscalarHiggs, bar<ChargedLepton>::type, ChargedLepton>(
3 const context_base& context,
4 typename field_indices<PseudoscalarHiggs>::type const& indexIn,
5 typename field_indices<bar<ChargedLepton>::type>::type const& indexOut1,
6 typename field_indices<ChargedLepton>::type const& indexOut2)
7{
8 if (indexIn.at(0) < info::number_of_neutral_goldstones) {
9 throw OutOfBoundsError("Error in " + create_process_string<PseudoscalarHiggs,bar<ChargedLepton>::type, ChargedLepton>(indexIn, indexOut1, indexOut2) + " decay. Decaying particle is a Goldstone.");
10 }
11
12 const double mAhOS = context.physical_mass<PseudoscalarHiggs>(indexIn);
13 const double mL1OS = context.physical_mass<bar<ChargedLepton>::type>(indexOut1);
14 const double mL2OS = context.physical_mass<ChargedLepton>(indexOut2);
15
16 // phase space without symmetry factor
17 const auto xOS1 = Sqr(mL1OS/mAhOS);
18 const auto xOS2 = Sqr(mL2OS/mAhOS);
19 const double ps = 1./(8.*Pi)*std::sqrt(KallenLambda(1., xOS1, xOS2));
20 const double flux = 0.5/mAhOS;
21 const auto betaOS2_P = 1.0 - Sqr((mL1OS - mL2OS)/mAhOS);
22
23 // matrix element squared
24 const auto indices = concatenate(indexOut1, indexOut2, indexIn);
25 const auto HLLbarVertexDR = Vertex<bar<ChargedLepton>::type, ChargedLepton, PseudoscalarHiggs>::evaluate(indices, context);
26 const auto HLLbarVertexDR_P = 0.5*(HLLbarVertexDR.right() - HLLbarVertexDR.left());
27 const double amp2 = Sqr(mAhOS) * betaOS2_P * 2.*std::norm(HLLbarVertexDR_P);
28
29 // flux * phase space factor * symmetry factor * |matrix element|^2
30 double res = flux * ps * amp2;
31
32 // higher order corrections
33
34 if (static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections))) {
35 // 1-loop QED corrections
36 res *= 1. + get_alpha(context)/Pi*17./4.;
37 }
38
39 if (flexibledecay_settings.get(FlexibleDecay_settings::call_higgstools) != 0 ||
40 flexibledecay_settings.get(FlexibleDecay_settings::call_lilith) != 0 ||
41 flexibledecay_settings.get(FlexibleDecay_settings::calculate_normalized_effc) != 0
42 ) {
43 const double remove_normalization = flux*ps*2*Sqr(mAhOS);
44 neutral_higgs_effc.add_coupling(
45 field_as_string<PseudoscalarHiggs>(indexIn),
46 {
47 boost::hana::unpack(bar<ChargedLepton>::pdgids, _to_array<bar<ChargedLepton>::numberOfGenerations>).at(indexOut1.at(0)),
48 boost::hana::unpack(ChargedLepton::pdgids, _to_array<ChargedLepton::numberOfGenerations>).at(indexOut2.at(0))
49 },
50 std::pair<std::string, std::complex<double>> {
51 field_as_string<PseudoscalarHiggs>(indexIn) + "-" + field_as_string<bar<ChargedLepton>::type>(indexOut1) + "-" + field_as_string<ChargedLepton>(indexOut2),
52 1i*std::sqrt(res/(remove_normalization*betaOS2_P))
53 },
54 res
55 );
56 }
57
58 return res;
59}
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