flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
decay_Ah_to_gg.inc
Go to the documentation of this file.
1template <>
2double CLASSNAME::get_partial_width<PseudoscalarHiggs, Gluon, Gluon>(
3 const context_base& context,
4 const typename field_indices<PseudoscalarHiggs>::type& in_idx,
5 const typename field_indices<Gluon>::type& out1_idx,
6 const typename field_indices<Gluon>::type& out2_idx)
7{
8 if (in_idx.at(0) < info::number_of_neutral_goldstones) {
9 throw OutOfBoundsError("Error in " + create_process_string<PseudoscalarHiggs,Gluon,Gluon>(in_idx, out1_idx, out2_idx) + " decay. Decaying particle is a Goldstone.");
10 }
11
12 const auto amp = calculate_amplitude<PseudoscalarHiggs, Gluon, Gluon>(context, in_idx, out1_idx, out2_idx);
13 const double mAh = context.physical_mass<PseudoscalarHiggs>(in_idx);
14 static constexpr double ps {1/(8.*Pi)};
15 static constexpr double ps_symmetry {0.5};
16 static constexpr double color_fact = squared_color_generator<PseudoscalarHiggs, Gluon, Gluon>();
17 const double flux = 0.5/mAh;
18
19 double result = flux * color_fact * ps * ps_symmetry * amp.square();
20
21 // higher order QCD corrections
22 const double tau = Sqr(mAh/(2.*context.mass<UpTypeQuark>({2})));
23 if (static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections)) && tau < 0.7) {
24 // number of active light flavours
25 static constexpr int Nf = 5;
26 auto qedqcd_ = qedqcd;
27 qedqcd_.to(mAh);
28 // 5-flavour SM alpha_s
29 const double alpha_s_5f = qedqcd_.displayAlpha(softsusy::ALPHAS);
30
31 const auto indices = concatenate(std::array<int, 1> {2}, std::array<int, 1> {2}, in_idx);
32 const auto AhGGVertex = Vertex<bar<UpTypeQuark>::type, UpTypeQuark, PseudoscalarHiggs>::evaluate(indices, context);
33 std::complex<double> const AhGGVertexVal = 0.5*(-AhGGVertex.left() + AhGGVertex.right());
34
35 const double tau = Sqr(mAh/(2.*context.mass<UpTypeQuark>({2})));
36
37 const std::complex<double> A12_A = 2.*f(tau)/tau;
38 // LO width comming only from the top-loop
39 // agrees up to a full double precision with autmatically generated one
40 const double Gamma_SM_LO_P = mAh/(18.*Power3(Pi))*std::norm(alpha_s_5f * AhGGVertexVal*sqrt(tau) * 3./4*A12_A);
41
42 const double mu = mAh;
43 const double LH = std::log(Sqr(mu/mAh));
44 const double deltaNLO {
45 97/4. - 7/6.*Nf + (33-2*Nf)/6.*LH
46 };
47
48 const double mt {context.mass<UpTypeQuark>({2})};
49 const double Lt = std::log(Sqr(mu/mt));
50 // eq. D10 of 2207.01032 and 23 of 9807241
51 const double deltaNNLO {
52 51959/96. - 363/8.*zeta2 - 495/8.*zeta3 + Nf*(-473/8. + 11/2.*zeta2 + 5/4.*zeta3 + Lt) + Sqr(Nf)*(251/216. - 1/6.*zeta2)
53 + (3405/16. - 73/3*Nf + 7/12.*Sqr(Nf))*LH
54 + (363/16. - 11/4.*Nf + 1/12.*Sqr(Nf))*Sqr(LH)
55 };
56
57 const double alpha_s_red = alpha_s_5f/Pi;
58
59 double pseudoscalar_corr = 0.0;
60 switch (static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections))) {
61 case 4:
62 [[fallthrough]];
63 case 3:
64 [[fallthrough]];
65 case 2:
66 pseudoscalar_corr += deltaNNLO*alpha_s_red;
67 [[fallthrough]];
68 case 1:
69 pseudoscalar_corr += deltaNLO;
70 pseudoscalar_corr *= alpha_s_red/std::norm(0.5*A12_A);
71 pseudoscalar_corr += 1. - Sqr(get_alphas(context)/alpha_s_5f);
72 pseudoscalar_corr *= Gamma_SM_LO_P;
73 break;
74 default:
75 WARNING("Unknow correcion in Phi->gg");
76 }
77 result += pseudoscalar_corr;
78 }
79
80 if (flexibledecay_settings.get(FlexibleDecay_settings::print_effc_block)) {
81 effhiggscouplings_block_input.push_back(
82 {
83 36 + 10*(in_idx.size()>0 ? in_idx.at(0)-1 : 0), 21, 21,
84 std::sqrt(result/(flux * color_fact * ps * ps_symmetry)/(0.5*Power4(mAh))),
85 field_as_string<PseudoscalarHiggs>(in_idx) + "-" + field_as_string<Gluon>(out1_idx) + "-" + field_as_string<Gluon>(out2_idx)
86 }
87 );
88 }
89
90 return result;
91}
#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
static constexpr double zeta2
Definition: wrappers.hpp:53
std::complex< double > f(double tau) noexcept
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
constexpr Base Power4(Base b) noexcept
Definition: wrappers.hpp:493
Complex< T > log(const Complex< T > &z) noexcept
Definition: complex.hpp:54
static constexpr double Pi
Definition: wrappers.hpp:44
static constexpr double zeta3
Definition: wrappers.hpp:54
@ ALPHAS
Definition: lowe.h:44