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)
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.");
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;
19 double result = flux * color_fact * ps * ps_symmetry * amp.square();
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) {
25 static constexpr int Nf = 5;
26 auto qedqcd_ = qedqcd;
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());
35 const double tau =
Sqr(mAh/(2.*context.mass<UpTypeQuark>({2})));
37 const std::complex<double> A12_A = 2.*
f(tau)/tau;
40 const double Gamma_SM_LO_P = mAh/(18.*
Power3(
Pi))*
std::norm(alpha_s_5f * AhGGVertexVal*sqrt(tau) * 3./4*A12_A);
42 const double mu = mAh;
44 const double deltaNLO {
45 97/4. - 7/6.*Nf + (33-2*Nf)/6.*LH
48 const double mt {context.mass<UpTypeQuark>({2})};
51 const double deltaNNLO {
53 + (3405/16. - 73/3*Nf + 7/12.*
Sqr(Nf))*LH
54 + (363/16. - 11/4.*Nf + 1/12.*
Sqr(Nf))*
Sqr(LH)
57 const double alpha_s_red = alpha_s_5f/
Pi;
59 double pseudoscalar_corr = 0.0;
60 switch (
static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections))) {
66 pseudoscalar_corr += deltaNNLO*alpha_s_red;
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;
75 WARNING(
"Unknow correcion in Phi->gg");
77 result += pseudoscalar_corr;
80 if (flexibledecay_settings.get(FlexibleDecay_settings::print_effc_block)) {
81 effhiggscouplings_block_input.push_back(
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)
constexpr T norm(const Complex< T > &z) noexcept
constexpr Base Power3(Base b) noexcept
static constexpr double zeta2
std::complex< double > f(double tau) noexcept
constexpr std::complex< T > Sqr(const std::complex< T > &a) noexcept
detail::result_of::concatenate< Args... >::type concatenate(Args &&... args)
constexpr Base Power4(Base b) noexcept
Complex< T > log(const Complex< T > &z) noexcept
static constexpr double Pi
static constexpr double zeta3