flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
decay_Ah_to_AZ.inc
Go to the documentation of this file.
1template <>
2double CLASSNAME::get_partial_width<PseudoscalarHiggs, Photon, ZBoson>(
3 const context_base& context,
4 const typename field_indices<PseudoscalarHiggs>::type& in_idx,
5 const typename field_indices<Photon>::type& out1_idx,
6 const typename field_indices<ZBoson>::type& out2_idx)
7{
8 if (in_idx.at(0) < info::number_of_neutral_goldstones) {
9 throw OutOfBoundsError("Error in " + create_process_string<PseudoscalarHiggs,Photon,ZBoson>(in_idx, out1_idx, out2_idx) + " decay. Decaying particle is a Goldstone.");
10 }
11
12 const auto amp = calculate_amplitude<PseudoscalarHiggs, Photon, ZBoson>(context, in_idx, out1_idx, out2_idx);
13 const double mAh = context.physical_mass<PseudoscalarHiggs>(in_idx);
14 const double mZ = qedqcd.displayPoleMZ();
15 const double ps = 1./(8.*Pi) * std::sqrt(KallenLambda(1., 0., Sqr(mZ/mAh)));
16 const double flux = 0.5/mAh;
17 auto res = flux * ps * amp.square();
18
19 // use alpha_em in the Thomson limit
20 if (flexibledecay_settings.get(FlexibleDecay_settings::use_Thomson_alpha_in_Phigamgam_and_PhigamZ)) {
21 const double alpha_em_0 = physical_input.get(Physical_input::alpha_em_0);
22 const double alpha_em = get_alpha(context);
23 res *= alpha_em_0/alpha_em;
24 }
25
26 if (flexibledecay_settings.get(FlexibleDecay_settings::print_effc_block)) {
27 effhiggscouplings_block_input.push_back(
28 {
29 36 + 10*(in_idx.size()>0 ? in_idx.at(0) : 0), 22, 23, res,
30 field_as_string<PseudoscalarHiggs>(in_idx) + "-" + field_as_string<Photon>(out1_idx) + "-" + field_as_string<ZBoson>(out2_idx)
31 }
32 );
33 }
34
35 return res;
36}
const double mZ
Definition: consts.hpp:34
constexpr std::complex< T > Sqr(const std::complex< T > &a) noexcept
Definition: wrappers.hpp:631
T KallenLambda(T x, T y, T z) noexcept
Definition: wrappers.hpp:835
static constexpr double Pi
Definition: wrappers.hpp:44