flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
decay_H_to_gg.inc
Go to the documentation of this file.
1template <>
2double CLASSNAME::get_partial_width<Higgs, Gluon, Gluon>(
3 const context_base& context,
4 const typename field_indices<Higgs>::type& in_idx,
5 const typename field_indices<Gluon>::type& out1_idx,
6 const typename field_indices<Gluon>::type& out2_idx)
7{
8 const auto amp = calculate_amplitude<Higgs, Gluon, Gluon>(context, in_idx, out1_idx, out2_idx);
9 const double mH = context.physical_mass<Higgs>(in_idx);
10 static constexpr double ps {1./(8.*Pi)};
11 static constexpr double ps_symmetry {1./2.};
12 static constexpr double color_fact = squared_color_generator<Higgs, Gluon, Gluon>();
13 const double flux = 0.5/mH;
14
15 // full LO (SM+BSM) result
16 double result = flux * color_fact * ps * ps_symmetry * amp.square();
17
18 const int Nf = number_of_active_flavours(qedqcd, mH);
19 if (Nf < 5) {
20 problems.add_warning(
21 create_process_string<Higgs,Gluon,Gluon>(in_idx, out1_idx, out2_idx)
22 + ": Scalar Higgs too light (less than 5 active quark flavours). Disabling higher-order corrections."
23 );
24 }
25
26 const double mt {context.mass<UpTypeQuark>({2})};
27 const double tau = Sqr(mH/(2.*mt));
28 // the analytic form o corrections is valid for small tau
29 if (static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections)) && Nf >= 5 && tau < 0.7) {
30 auto qedqcd_ = qedqcd;
31 qedqcd_.to(mH);
32 // 5-flavour SM alpha_s
33 const double alpha_s_5f = qedqcd_.displayAlpha(softsusy::ALPHAS);
34
35 const auto indices = concatenate(std::array<int, 1> {2}, std::array<int, 1> {2}, in_idx);
36 const auto HGGVertex = Vertex<bar<UpTypeQuark>::type, UpTypeQuark, Higgs>::evaluate(indices, context);
37 std::complex<double> const HGGVertexSVal = 0.5*(HGGVertex.left() + HGGVertex.right());
38
39 // eq. 2.46 of 0503172
40 const std::complex<double> A12_H = 2.*(tau + (tau -1)*f(tau))/Sqr(tau);
41
42 // LO width comming only from the top-loop
43 // agrees up to a full double precision with automatically generated one
44 // when compensated for different alpha_s
45 // heavy top limit (tau -> 0)
46 // 3./4.*A12 -> 1
47 // HGGVertexSVal*std::sqrt(tau) is mt independent
48 const double Gamma_SM_LO_S =
49 mH/(18.*Cube(Pi))*std::norm(alpha_s_5f * HGGVertexSVal*std::sqrt(tau) * 3./4.*A12_H);
50
51 const double mu = mH;
52 const double LH = std::log(Sqr(mu/mH));
53 const double Lt = std::log(Sqr(mu/mt));
54
55 // eq. 5 of 0708.0916
56 const double hnlo0 =
57 95./4. - 7./6.*Nf + (33 - 2*Nf)/6.*LH;
58 const double hnlo1 =
59 5803./540. + 77./30.*LH - 14./15.*Lt + Nf*(-29./60. - 7./45.*LH);
60 const double hnlo2 =
61 1029839./189000. + 16973./12600.*LH - 1543./1575.*Lt + Nf*(-89533./378000. - 1543./18900.*LH);
62 const double hnlo3 =
63 9075763./2976750. + 1243./1575*LH - 452./525.*Lt + Nf*(-3763./28350. - 226./4725.*LH);
64 const double hnlo4 =
65 50854463./27783000. + 27677./55125.*LH - 442832./606375.*Lt + Nf*(-10426231./127338750. - 55354./1819125.*LH);
66 const double hnlo5 =
67 252432553361./218513295000. + 730612./2149875.*LH - 2922448./4729725.*Lt + Nf*(-403722799./7449316875. - 1461224./70945875.*LH);
68 const double deltaNLO_S {
69 hnlo0 + tau*(hnlo1 + tau*(hnlo2 + tau*(hnlo3 + tau*(hnlo4 + tau*hnlo5))))
70 };
71
72 // eq. 9 of 0708.0916
73 const double hnnlo0 =
74 149533./288. - 121./16.*Sqr(Pi) - 495./8.*zeta3 + 3301./16.*LH + 363./16.*Sqr(LH) + 19./8.*Lt
75 + Nf*(-4157./72. + 11./12.*Sqr(Pi) + 5./4.*zeta3 - 95./4.*LH - 11./4.*Sqr(LH) + 2./3.*Lt)
76 + Sqr(Nf)*(127./108. - Sqr(Pi)/36. + 7./12.*LH + Sqr(LH)/12);
77 const double hnnlo1 =
78 104358341./1555200. - 847./240*Sqr(Pi) + 7560817./69120.*zeta3 + LH*(203257./2160. - 77./15.*Lt) + 847./80.*Sqr(LH)
79 - 24751./1080.*Lt - 77./180.*Sqr(Lt) + Nf*(-9124273./388800. + 77./180.*Sqr(Pi) + 7./12.*zeta3 + LH*(-67717./6480.
80 + 14./45*Lt) - 77./60.*Sqr(LH) + 586./405.*Lt + 7./90.*Sqr(Lt)) + Sqr(Nf)*(5597./12960. - 7./540.*Sqr(Pi) + 29./120.*LH
81 + 7./180.*Sqr(LH));
82 const double hnnlo2 =
83 -1279790053883./12192768000. - 186703./100800.*Sqr(Pi) + 39540255113./232243200.*zeta3 + LH*(9158957./189000.
84 - 16973./3150.*Lt) + 186703./33600.*Sqr(LH) - 10980293./453600.*Lt + 20059./37800.*Sqr(Lt) + Nf*(-64661429393./5715360000.
85 - 16973./25200.*Sqr(LH) + 16973./75600.*Sqr(Pi) + 1543./5040.*zeta3 + LH*(- 10306537./1944000. + 1543./4725.*Lt)
86 +8973773./6804000.*Lt + 1543./18900.*Sqr(Lt)) + Sqr(Nf)*(3829289./19440000. - 1543./226800.*Sqr(Pi) + 89533./756000.*LH + 1543./75600.*Sqr(LH));
87
88 const double deltaNNLO_S {
89 hnnlo0 + tau*(hnnlo1 + tau*hnnlo2)
90 };
91 // eq. 4.20 from Adam's thesis + conversion to MSbar top mass
92 const double deltaNNNLO_S {467.683620788 - 8/3.*(19/8. + 2/3.*Nf) + (122.440972222 - 2*(19/8. + 2/3.*Nf))*Lt + 10.9409722222*Sqr(Lt)};
93
94 const double alpha_s_red = alpha_s_5f/Pi;
95
96 double scalar_corr = 0;
97 const double Gamma0 = std::norm(3./4*A12_H);
98 switch (static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections))) {
99 case 4:
100 [[fallthrough]];
101 case 3:
102 scalar_corr += deltaNNNLO_S*alpha_s_red;
103 [[fallthrough]];
104 case 2:
105 scalar_corr += deltaNNLO_S;
106 scalar_corr *= alpha_s_red;
107 [[fallthrough]];
108 case 1:
109 scalar_corr += deltaNLO_S;
110 scalar_corr *= alpha_s_red/Gamma0;
111 //convert LO from 6 to 5 flavour scheme
112 scalar_corr += 1. - Sqr(get_alphas(context)/alpha_s_5f);
113 scalar_corr *= Gamma_SM_LO_S;
114 break;
115 default:
116 WARNING("Unknow correcion in Phi->gg");
117 }
118
119 result += scalar_corr;
120
121 if(info::is_CP_violating_Higgs_sector) {
122
123 std::complex<double> const HGGVertexValP = 0.5*(HGGVertex.right()-HGGVertex.left());
124
125 const std::complex<double> A12_A = 2.*f(tau)/tau;
126 // LO width comming only from the top-loop
127 // agrees up to a full double precision with automatically generated one
128 const double Gamma_SM_LO_P = mH/(18.*Power3(Pi))*std::norm(alpha_s_5f * HGGVertexValP*sqrt(tau) * 3./4*A12_A);
129
130 const double deltaNLO_P {
131 97/4. - 7/6.*Nf + (33-2*Nf)/6.*LH
132 };
133
134 const double mt {context.mass<UpTypeQuark>({2})};
135 const double Lt = std::log(Sqr(mu/mt));
136 // eq. D10 of 2207.01032 and 23 of 9807241
137 const double deltaNNLO_P {
138 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)
139 + (3405/16. - 73/3*Nf + 7/12.*Sqr(Nf))*LH
140 + (363/16. - 11/4.*Nf + 1/12.*Sqr(Nf))*Sqr(LH)
141 };
142
143 double pseudoscalar_corr = 0.0;
144 switch (static_cast<int>(flexibledecay_settings.get(FlexibleDecay_settings::include_higher_order_corrections))) {
145 case 4:
146 [[fallthrough]];
147 case 3:
148 [[fallthrough]];
149 case 2:
150 pseudoscalar_corr += deltaNNLO_P*alpha_s_red;
151 [[fallthrough]];
152 case 1:
153 pseudoscalar_corr += deltaNLO_P;
154 pseudoscalar_corr *= alpha_s_red/std::norm(0.5*A12_A);
155 pseudoscalar_corr += 1. - Sqr(get_alphas(context)/alpha_s_5f);
156 pseudoscalar_corr *= Gamma_SM_LO_P;
157 break;
158 default:
159 WARNING("Unknow correcion in Phi->gg");
160 }
161 result += pseudoscalar_corr;
162 }
163 }
164
165 const std::string tag = field_as_string<Higgs>(in_idx) + "-" + field_as_string<Gluon>(out1_idx) + "-" + field_as_string<Gluon>(out2_idx);
166
167 if (flexibledecay_settings.get(FlexibleDecay_settings::print_effc_block)) {
168 effhiggscouplings_block_input.push_back(
169 {
170 fieldPDG<Higgs>(in_idx), 21, 21,
171 std::sqrt(result/(flux * color_fact * ps * ps_symmetry)/(0.5*Power4(mH))),
172 tag
173 }
174 );
175 }
176
177 if (flexibledecay_settings.get(FlexibleDecay_settings::call_higgstools) != 0 ||
178 flexibledecay_settings.get(FlexibleDecay_settings::call_lilith) != 0 ||
179 flexibledecay_settings.get(FlexibleDecay_settings::calculate_normalized_effc) != 0
180 ) {
181 neutral_higgs_effc.add_coupling(
182 field_as_string<Higgs>(in_idx),
183 {21, 21},
184 std::pair<std::string, double> {tag, std::sqrt(result)},
185 result
186 );
187 }
188
189 return result;
190}
191
192
#define WARNING(msg)
Definition logger.hpp:63
constexpr Base Power3(Base b) noexcept
Definition wrappers.hpp:489
std::complex< double > f(double tau) noexcept
unsigned int number_of_active_flavours(softsusy::QedQcd const &qedqcd, double m) noexcept
constexpr std::complex< T > Sqr(const std::complex< T > &a) noexcept
Definition wrappers.hpp:633
detail::result_of::concatenate< Args... >::type concatenate(Args &&... args)
constexpr Base Power4(Base b) noexcept
Definition wrappers.hpp:495
constexpr T Cube(T a) noexcept
Definition wrappers.hpp:181
@ ALPHAS
Definition lowe.h:44