GM2Calc 2.3.0
Loading...
Searching...
No Matches
gm2_2loop_B.cpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of GM2Calc.
3//
4// GM2Calc is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published
6// by the Free Software Foundation, either version 3 of the License,
7// or (at your option) any later version.
8//
9// GM2Calc is distributed in the hope that it will be useful, but
10// WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with GM2Calc. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
20#include "gm2_dilog.hpp"
21#include "gm2_ffunctions.hpp"
22#include "gm2_numerics.hpp"
23
24/**
25 * \file gm2_2loop_B.cpp
26 *
27 * Contains functions necessary to calculate the bosonic THDM
28 * contributions for g-2 at the 2-loop level.
29 */
30
31namespace gm2calc {
32
33namespace thdm {
34
35namespace {
36
37const double pi = 3.1415926535897932;
38const double pi2 = 9.8696044010893586; // Pi^2
39
40const double eps_shift = 1e-8; // parameter shift to avoid spurious divergences
41
42/// shift value away from limit, if it is close to the limit
43void shift(double& val, double limit, double eps) noexcept
44{
45 if (is_equal_rel(val, limit, eps)) {
46 val = (1 + eps)*limit;
47 }
48}
49
50/// Eq.(102), arxiv:1607.06292
51double YF1(double u, double w, double cw2) noexcept
52{
53 shift(u, 1.0, eps_shift);
54
55 const auto cw4 = cw2*cw2;
56 const auto c0 = cw2*(-1 + cw2)*(u + 2*w)/u;
57
58 // Note: Phi(w,w,1) == 0.5/w*f_PS(w)*(1 - 4*w)
59 // Note: Phi(u,w,w) == 0.5*u/w*f_PS(w/u)*(u - 4*w)
60
61 return
62 - 72*c0 - 36*c0*std::log(w)
63 + 9*(-8*cw4 - 3*u + 2*cw2*(4 + u))*(u + 2*w)/(2*(u - 1)*u)*std::log(u)
64 + 9./2*(3 - 10*cw2 + 8*cw4)*(u + 2*w)/(u - 1)*f_PS(w)
65 - 9./2*(8*cw4 + 3*u - 2*cw2*(4 + u))*(u + 2*w)/((u - 1)*u)*f_PS(w/u)
66 ;
67}
68
69/// Eq.(121), arxiv:1607.06292
70double YFZ(double u, double cw2) noexcept
71{
72 const auto cw4 = cw2*cw2;
73 const auto u2 = u*u;
74 const auto lu = std::log(u);
75 const auto li = dilog(1.0 - u);
76 const auto phi = 0.5*u*f_PS(1/u)*(u - 4); // Phi(u,1,1);
77
78 const auto z1 = 3*(17 - 48*cw2 + 32*cw4); // Eq.(122)
79 const auto z2 = 5 - 12*cw2 + 8*cw4; // Eq.(123)
80 const auto z3 = 3*(1 - 3*cw2 + 2*cw4); // Eq.(124)
81
82 const double res =
83 + z1*u*li
84 + z2/(2*u2)*(6*(-4 + u)*u + pi2*(4 + 3*u) + 6*u*(4 + u)*lu
85 - 6*(4 + 3*u)*li + 6*u*(2 + u)*phi)
86 + z3*u*(6 + pi2*(-4 + u)*u + 3*lu*(4 + (-4 + u)*u*lu)
87 + 12*(-4 + u)*u*li + 6*(-2 + u)*phi);
88
89 return res;
90}
91
92/// Eq.(125), arxiv:1607.06292
93double YFW(double u, double cw2) noexcept
94{
95 const auto cw4 = cw2*cw2;
96 const auto cw6 = cw4*cw2;
97 const auto u2 = u*u;
98 const auto u3 = u2*u;
99
100 // Note: Phi(u,cw2,cw2) == 0.5*u/cw2*f_PS(cw2/u)*(u - 4*cw2)
101
102 const double res =
103 - 57.0/2*cw2 - 4*cw6*pi2/u2 + 3./4*cw4*(32 - 3*pi2)/u
104 + 3./2*(16*cw6 + 9*cw4*u + 12*cw2*u2 - 19*u3)/u2*dilog(1.0 - u/cw2)
105 + 3./2*cw2*(16*cw2 + 19*u)/u*std::log(cw2/u)
106 - 3./4*(4*cw4 - 50*cw2*u + 19*u2)/cw2*f_PS(cw2/u);
107
108 return res;
109}
110
111/// Eq.(105), arxiv:1607.06292
112double YF2(double u, double cw2) noexcept
113{
114 shift(u, 4*cw2, eps_shift);
115 shift(u, 1.0, eps_shift);
116
117 const auto cw4 = cw2*cw2;
118 const auto cw6 = cw4*cw2;
119 const auto cw8 = cw4*cw4;
120 const auto u2 = u*u;
121 const auto u3 = u2*u;
122
123 const double f0 = 3.0/4*cw4*(-640 + 576*cw2 + 7*pi2); // Eq.(106)
124 const double f1 = 96*cw6*(11 - 53*cw2 + 36*cw4); // Eq.(107)
125 const double f2 = -3.0/4*cw2*(-66*cw2 - 48*cw4 + 672*cw6);// Eq.(108)
126 const double f3 = -3.0/4*cw2*(109 - 430*cw2 + 120*cw4); // Eq.(109)
127 const double f4 = 96*cw6*(-11 + 9*cw2); // Eq.(110)
128 const double f5 = 45.0/2*cw4 + 192*cw6; // Eq.(111)
129 const double f6 = 3.0/4*cw2*(157 + 90*cw2); // Eq.(112)
130 const double f7 = -3.0/4*(18 + 61*cw2); // Eq.(113)
131 const double f8 = -7 + 61*cw2 - 162*cw4 + 96*cw6; // Eq.(114)
132 const double f9 = 1 - 5*cw2 + 10*cw4; // Eq.(115)
133 const double f10 = -1728*cw8*(-1 + cw2); // Eq.(116)
134 const double f11 = 3*cw6*(-899 + 768*cw2); // Eq.(117)
135 const double f12 = 387*cw4 - 363*cw6; // Eq.(118)
136 const double f13 = 9.0/2*cw2*(57 + 106*cw2); // Eq.(119)
137 const double f14 = -15.0/2*(7 + 45*cw2); // Eq.(120)
138
139 // Note: Phi(cw2,cw2,1) == 0.5/cw2*f_PS(cw2)*(1 - 4*cw2)
140 // Note: Phi(u,cw2,cw2) == 0.5*u/cw2*f_PS(cw2/u)*(u - 4*cw2)
141
142 const double res =
143 + 8*cw6*pi2/u2 + f0/u + 393.0/8*cw2
144 + (f1/u + f2 + f3*u)*std::log(cw2)/((4*cw2-1)*(4*cw2-u))
145 + (f4/u + f5 + f6*u + f7*u2)*std::log(u)/((u-1)*(4*cw2-u))
146 - 3.0/2*(32*cw6/u2 + 21*cw4/u + 15*cw2 - 35*u)*dilog(1.0 - u/cw2)
147 + (f8 + f9*u)*9./4*(-3 + 4*cw2)*f_PS(cw2)/((1-4*cw2)*(u-1))
148 + 0.5*(f10/u + f11 + f12*u + f13*u2 + f14*u3 + 105.0/2*u2*u2)*f_PS(cw2/u)
149 /(cw2*(u-4*cw2)*(u-1))
150 ;
151
152 return YFW(u, cw2) + YFZ(u, cw2) + res;
153}
154
155/// Eq.(126), arxiv:1607.06292
156double YF3(double u, double w, double cw2) noexcept
157{
158 shift(u, 4*cw2, eps_shift);
159 shift(w, cw2, eps_shift);
160
161 const auto cw4 = cw2*cw2;
162 const auto cw6 = cw4*cw2;
163 const auto cw8 = cw4*cw4;
164 const auto u2 = u*u;
165 const auto u3 = u2*u;
166 const auto u4 = u2*u2;
167 const auto u5 = u4*u;
168 const auto w2 = w*w;
169 const auto lc = std::log(cw2);
170 const auto lu = std::log(u);
171 const auto lw = std::log(w);
172
173 // Eq.(127)
174 const auto a1 = -9*cw2*u3 + 9*cw2*u2*(3*cw2+w) + 27*cw4*u*(w-cw2)
175 + 9*(cw8 - 4*cw6*w + 3*cw4*w2);
176 // Eq.(128)
177 const auto a2 = 9*cw4*w/2 - 9*u2*(5*cw2 + w) + u*(36*cw4 + 153*cw2*w/4)
178 + 9*u3;
179 // Eq.(129)
180 const auto a3 = 9*cw2*u2 - 9.0/2*cw2*u*(4*cw2 + w);
181 // Eq.(130)
182 const auto a4 = -9.0/2*u2*w*(2*cw4 + 9*cw2*w + 2*w2)
183 + 9.0/8*u*w*(32*cw6 + 13*cw4*w + 35*cw2*w2) + 9*u3*w2;
184 // Eq.(131)
185 const auto a5 = -9*u3*(cw2 + w) - 9*u*(3*cw6 + 2*cw2*w2)
186 + 9*u2*(3*cw4 + 4*cw2*w + w2) + 9.0/2*cw4*(2*cw4 - 6*cw2*w + w2);
187 // Eq.(132)
188 const auto a6 = -9*u4*(9*cw2 + w) + u*(81*cw6*w - 225*cw8) + 9*cw8*(w - cw2)
189 - 9.0/2*u2*(3*cw6 + 37*cw4*w) + u3*(198*cw4 + 72*cw2*w) + 9*u5;
190 // Eq.(133)
191 const auto a7 = -9*cw2*u4 + 18*cw2*u3*(2*cw2 + w) + 36*u*(cw8 - 2*cw6*w)
192 - 9*cw2*u2*(6*cw4 - cw2*w + w2) - 9*cw2*(cw2 - 3*w)*(cw6 - 2*cw4*w + cw2*w2);
193
194 // Note: Phi(u,cw2,cw2) == 0.5*u/cw2*f_PS(cw2/u)*(u - 4*cw2)
195
196 const double res =
197 + 9*u*(2*cw2 - u + w)/w
198 + (a1*(lu - lc) + 9*cw4*(cw4 - 4*cw2*w + 3*w2)*lc)*(lw - lc)/(2*w2*(cw2-w))
199 + a2*lu/(w*(4*cw2-u))
200 + a3*lw/(w*(cw2-w))
201 + a4*lc/(w2*(4*cw2-u)*(cw2-w))
202 + a5/(cw2*w2)*dilog(1.0 - u/cw2)
203 + a6/(sqr(cw2)*(u-4*cw2)*(cw2-w))*0.5*f_PS(cw2/u)
204 + a7/(w2*(cw2-w)*(cw4-2*cw2*(u+w)+sqr(u-w)))*Phi(u,w,cw2)
205 ;
206
207 return res;
208}
209
210/// Eq.(72), arxiv:1607.06292
211double T0(double u, double w, double cw2) noexcept
212{
213 const auto cw4 = cw2*cw2;
214
215 return
216 9/cw4*(u - w)*(cw2*(u - w)*(u + 2*w) - cube(u - w) + cw4*w)
217 /(cw4 + sqr(u - w) - 2*cw2*(u + w))*Phi(u,w,cw2);
218}
219
220/// Eq.(73), arxiv:1607.06292
221double T1(double u, double w, double cw2) noexcept
222{
223 const auto cw4 = cw2*cw2;
224
225 return 9/cw4*(u - w)*(cw2*w - sqr(u - w))*dilog(1.0 - u/w);
226}
227
228/// calculates potentially divergent (a^2 Log[a] - b^2 Log[b])/(a - b)
229double dxlog(double a, double b) noexcept
230{
231 const double lb = std::log(b);
232
233 if (is_equal_rel(a, b, 1e-4)) {
234 return b*(1 + 2*lb) + (a - b)*(1.5 + lb) + sqr(a - b)/(3*b);
235 }
236
237 return (sqr(a)*std::log(a) - sqr(b)*lb)/(a - b);
238}
239
240/**
241 * Calculates the following combination of T2 loop functions, Eq.(74),
242 * arxiv:1607.06292:
243 *
244 * (xA - xH)/(xA - xHp)*T2p[xA, xH] + T2m[xH, xHp] + T2p[xHp, xH] + T2p[xHp, xA]
245 */
246double TX(double xH, double xA, double xHp, double cw2) noexcept
247{
248 const auto cw4 = sqr(cw2);
249 const auto sw2 = 1.0 - cw2;
250 const auto f6 = (7 - 14*cw2 + 4*cw4)/(4*cw2*sw2);
251 const auto f7 = 1 - 6*cw2 + 4*cw4;
252 const auto f8 = (13 - 20*cw2 + 4*cw4)/(cw2*sw2);
253 const auto f9 = 7 - 12*cw2 + 8*cw4;
254 const auto lH = std::log(xH);
255 const auto lA = std::log(xA);
256 const auto xAH = dxlog(xA, xH);
257 const auto xAHp = dxlog(xA, xHp);
258 const auto xHHp = dxlog(xH, xHp);
259
260 return
261 (cw2 + 2*cw4 - 3*f9*xA)*lA/2
262 + (3*cw2*f6 - (3*f8*xA)/2)*(xA - xHp)*lA
263 + 3*f6*sqr(xA - xHp)*lA
264 + (f6*cube(xA - xHp)*lA)/cw2
265 + (cw2 + 2*cw4 - 3*f9*xH)*lH/2
266 + (3*cw2*f6 - (3*f8*xH)/2)*(xH - xHp)*lH
267 + 3*f6*sqr(xH - xHp)*lH
268 + (f6*cube(xH - xHp)*lH)/cw2
269 + 3*(f7*xAH + xAHp + xHHp);
270}
271
272/// Eq.(75), arxiv:1607.06292, prefactor (u-v) has been pulled out
273double T4(double u, double cw2, double xH, double xA) noexcept
274{
275 const auto cw4 = cw2*cw2;
276 const auto sw2 = 1.0 - cw2;
277 const auto f5 = cw2*(5 - 16*cw2 + 8*cw4)/sw2;
278
279 return std::log(u)/4*f5*(xA*(3 + 2*xH) - sqr(xA) + 3*xH - sqr(xH) - 3);
280}
281
282/// Eq.(76), arxiv:1607.06292
283double T5(double u, double w, double cw2) noexcept
284{
285 const auto cw4 = cw2*cw2;
286 const auto sw2 = 1.0 - cw2;
287 const auto f6 = (7 - 14*cw2 + 4*cw4)/(4*cw2*sw2);
288 const auto f8 = (13 - 20*cw2 + 4*cw4)/(cw2*sw2);
289
290 return std::log(u)*(
291 3.0/2*u + f6/cw2*(cube(u - w) + 3*cw2*sqr(u - w) + 3*cw4*(u - w))
292 - 3.0/2*f8*u*(u - w) - cw2/2 - cw4);
293}
294
295/// Eq.(77), arxiv:1607.06292
296double T6(double u, double w, double cw2) noexcept
297{
298 const auto cw4 = cw2*cw2;
299 const auto u2 = u*u;
300
301 return 9.0/2*(
302 (u - w)*(u2 - 2*u*w + w*(w - cw2))/cw4*std::log(u/w)*std::log(w/cw2)
303 + std::log(cw2)/cw2*(2*u2 + u*(cw2 - 4*w) - w*(cw2 - 2*w)));
304}
305
306/**
307 * Eq (78), arxiv:1607.06292
308 *
309 * @note overall factor -1/2 is missing in arxiv:1607.06292v2
310 */
311double T7(double u, double w, double cw2) noexcept
312{
313 const auto cw4 = cw2*cw2;
314 const auto sw2 = 1.0 - cw2;
315 const auto f5 = cw2*(5 - 16*cw2 + 8*cw4)/sw2;
316 const auto ra = std::complex<double>(1 + sqr(u - w) - 2*(u + w), 0.0);
317 const auto s1 = u + w - 1.0 + std::sqrt(ra); // Eq.(79)
318
319 const auto res =
320 -0.5*f5*(2*(u + w) - sqr(u - w) - 1)*std::log(s1/(2*std::sqrt(u*w)))
321 *(u + w - 1 - 4*u*w/s1);
322
323 return std::real(res);
324}
325
326/// Eq.(80), arxiv:1607.06292
327double T8(double u, double w, double cw2) noexcept
328{
329 const auto cw4 = cw2*cw2;
330 const auto sw2 = 1.0 - cw2;
331 const auto f6 = (7 - 14*cw2 + 4*cw4)/(4*cw2*sw2);
332 const auto ra = std::complex<double>(sqr(u + w - cw2) - 4*u*w, 0.0);
333 const auto s2 = u + w - cw2 + std::sqrt(ra); // Eq.(81)
334
335 const auto res =
336 2.0*f6*(4*u*w - sqr(u + w - cw2))*std::log(s2/(2*std::sqrt(u*w)))
337 *((u + w)/cw2 - 4.0*u*w/(cw2*s2) - 1.0);
338
339 return std::real(res);
340}
341
342/// Eq.(103), arxiv:1607.06292
343double T9(double u, double w, double cw2) noexcept
344{
345 shift(w, cw2, eps_shift);
346
347 const auto cw4 = cw2*cw2;
348 const auto u2 = u*u;
349 const auto w2 = w*w;
350
351 // Note: Phi(u,w,w) == 0.5*u/w*f_PS(w/u)*(u - 4*w)
352
353 return
354 - 2*(cw4*w + cw2*(u2 + u*w - 2*w2) - cube(u-w))*Phi(u,w,cw2)
355 /((cw2 - w)*(cw4 - 2*cw2*(u+w) + sqr(u-w)))
356 + cw4*(u2 - 4*u*w + 2*w2)*u*f_PS(w/u)/(w*w2*(w-cw2))
357 - 2*(cw2*u*(u-2*w) + w*sqr(u-w))*dilog(1.0 - u/w)/w2;
358}
359
360/// Eq.(104), arxiv:1607.06292
361double T10(double u, double w, double cw2) noexcept
362{
363 shift(w, cw2, eps_shift);
364
365 const auto u2 = u*u;
366 const auto w2 = w*w;
367 const auto lwu = std::log(w/u);
368 const auto lwc = std::log(w/cw2);
369
370 return
371 (u2 - cw2*w - 2*u*w + w2)/(2*(cw2-w))*lwu*lwc
372 + cw2*(cw2 + 2*u - 2*w)/(2*(cw2-w))*lwc
373 + cw2*(u*lwu + w - u)/w;
374}
375
376/// Eq.(99), arxiv:1607.06292
377double fb(double u, double w, double al, double cw2) noexcept
378{
379 return al*pi/(cw2*(-1.0 + cw2))*(u + 2*w);
380}
381
382/// Eq.(100), arxiv:1607.06292
383double Fm0(double u, double w, double al, double cw2) noexcept
384{
385 return 1.0/(al*pi) * cw2*(-1 + cw2)/(u + 2*w) * YF1(u,w,cw2);
386}
387
388/// Eq.(101), arxiv:1607.06292
389double Fmp(double u, double w, double al, double cw2) noexcept
390{
391 return (-9*(-1 + cw2))/(al*pi) * (T9(u,w,cw2)/2 + T10(u,w,cw2));
392}
393
394} // anonymous namespace
395
396/**
397 * Calculates 2-loop bosonic pure electroweak contributions.
398 *
399 * Eq (49), arxiv:1607.06292
400 */
401double amu2L_B_EWadd(const THDM_B_parameters& thdm) noexcept
402{
403 const double zeta2 = 1.6449340668482264; // Zeta[2]
404 const double mw2 = sqr(thdm.mw);
405 const double mz2 = sqr(thdm.mz);
406 const double cw2 = mw2/mz2;
407 const double cw4 = cw2*cw2;
408 const double cw6 = cw4*cw2;
409 const double cw8 = cw4*cw4;
410 const double cw10 = cw8*cw2;
411 const double cw12 = cw8*cw4;
412 const double cw14 = cw8*cw6;
413 const double mh2 = sqr(thdm.mh(0));
414 const double xh_ = mh2/mz2; // temporary value
415 const double xh = is_equal_rel(1.0, xh_, eps_shift) ? xh_*(1 + eps_shift) : xh_;
416 const double xw = xh/cw2;
417 const double lh = std::log(xh);
418 const double lw = std::log(cw2);
419 const double liw = dilog(1 - xw);
420 const double lih = dilog(1 - xh);
421 const double lh2 = lh*lh;
422 const double phi1 = 3*xh*f_PS(1/xh)*(xh - 4); // Phi(xh,1,1) == 0.5*xh*f_PS(1/xh)*(xh - 4)
423 const double phi3 = 6*(-liw + zeta2);
424 const double phi4 = 6*(lh2/2 + 2*lih + zeta2);
425 const double phi5 = 3/cw2*f_PS(cw2); // Phi(cw2,cw2,1) == 0.5/cw2*f_PS(cw2)*(1 - 4*cw2)
426 const double phi6 = 6*(-lih + zeta2);
427 const double phi7 = 3*cw2*xw*f_PS(1/xw)*(xw - 4); // Phi(xw,1,1) == 0.5*xw*f_PS(1/xw)*(xw - 4)
428
429 const double xm2 = 256*(32*cw10 - 5*cw4 + 32*cw6 - 56*cw8)*phi6
430 - 2304*(5*cw10 - 4*cw12 - cw8)*phi7 - 512*(cw10 - 4*cw12)*phi3;
431
432 const double xm1 = 64*(24*(144*cw12 + 5*cw4 - 32*cw6 + 94*cw8) -
433 2*((5*cw4 - 32*cw6)*(12*lh + phi1) +
434 8*cw10*(330 + 147*lw - 195*lh - 4*phi1 - phi3) +
435 16*cw12*(-54*lw + 54*lh + phi3) +
436 cw8*(-240*lw + 912*lh + 56*phi1 + phi3)) +
437 (-32*cw10 + 10*cw2 - 59*cw4 + 80*cw6 - 8*cw8)*phi6) -
438 4*(3072*cw10 + 907*cw6 - 4396*cw8)*phi7;
439
440 const double x0 = 96*(730*cw10 - 936*cw12 + 384*cw14 + 21*cw6 - 211*cw8)*phi5 +
441 4*(231*cw4 - 1037*cw6 + 452*cw8)*phi7 +
442 16*(-837*cw6 + 852*cw8 + 6672*cw10*lw - 6912*cw12*(2 + lw) +
443 20*cw2*(-12 + 12*lh + phi1) - 5*phi6 + 22*cw2*phi6 -
444 32*cw10*(-468 + 42*lh + 4*phi1 + phi3 + 12*phi6) +
445 2*cw4*(468 - 588*lh - 54*phi1 + 34*phi6) +
446 4*cw8*(306*lw - 141*lh + 24*phi1 - 2*phi3 + 184*phi6 - 6*pi2) +
447 cw6*(-561*lw + 1089*lh + 96*phi1 + 4*phi3 - 464*phi6 + 6*pi2));
448
449 const double x1 = 32*cw2*(54 + 6*lh + 3*phi1 - 19*phi6) + 90*cw2*phi7 +
450 64*cw10*(1824 + 684*lw + 384*lh - 128*phi1 + 627*phi5 - 128*phi6 +
451 128*pi2) - 4*(120*lh + 10*phi1 + 3648*cw12*phi5 - 5*(24 + phi6) +
452 16*cw8*(2853 + 768*lw + 291*lh - 240*phi1 - 4*phi3 + 519*phi5 -
453 272*phi6 + 218*pi2) + cw4*
454 (5190 + 345*lw - 3081*lh - 416*phi1 - 134*phi3 + 252*phi5 - 1096*phi6 +
455 33*phi7 + 412*pi2) - 4*cw6*
456 (3939 + 780*lw - 1158*lh - 560*phi1 - 138*phi3 + 615*phi5 - 808*phi6 -
457 57*phi7 + 598*pi2));
458
459 const double x2 = cw2*(3867 + 426*lw - 2106*lh - 1392*lh2 - 672*phi1 - 262*phi3 +
460 464*phi4 + 126*phi5 - 70*phi7 - 586*pi2) -
461 128*cw10*(144 + 288*lh - 96*lh2 - 72*phi1 + 128*phi4 - 3*phi5 - 32*pi2) +
462 2*cw4*(-5322 - 144*lw + 1434*lh + 2472*lh2 + 1392*phi1 + 256*phi3 -
463 56*phi4 - 561*phi5 + 396*phi7 + 916*pi2) -
464 4*(-5*(-30 + 18*lh + phi1 + 3*phi6) + 8*phi7 +
465 4*cw8*(72*lw - 3264*lh + 960*lh2 + 752*phi1 - 1664*phi4 + 201*phi5 +
466 320*(-3 + pi2)) + cw6*(-4104 + 696*lw + 2892*lh + 48*lh2 - 192*phi1 -
467 536*phi3 + 2672*phi4 - 867*phi5 + 672*pi2));
468
469 const double x3 = -24 - 60*lh + 102*lh2 + 68*phi1 - 3072*cw10*phi1 + 32*phi3 -
470 34*phi4 + 15360*cw10*phi4 - 6*(3*cw2 - 19*cw4 + 50*cw6 - 40*cw8)*phi5 +
471 32*phi7 - 16*cw6*(45*lw + 8*(123 + 240*lh - 78*lh2 - 38*phi1 + 5*phi4 -
472 26*pi2)) + 4*cw4*(1683 + 417*lw + 3222*lh - 1056*lh2 - 688*phi1 -
473 262*phi3 + 1216*phi4 - 90*pi2) +
474 256*cw8*(36 + 72*lh - 24*lh2 + 3*phi1 - 73*phi4 - 8*pi2) + 2*pi2 -
475 cw2*(747 + 426*lw + 1350*lh - 120*lh2 - 112*phi1 - 134*phi3 + 808*phi4 +
476 128*phi7 + 94*pi2);
477
478 const double x4 = -2*(-72 - 144*lh + 51*lh2 + 36*phi1 + 16*phi3 - 65*phi4 +
479 1536*cw10*phi4 + 32*(-24*cw8*phi1 + 36*cw8*phi4 +
480 cw6*(18 + 36*lh - 12*lh2 + 33*phi1 - 152*phi4 - 4*pi2)) -
481 8*cw4*(126 + 252*lh - 84*lh2 + 21*phi1 - 284*phi4 - 28*pi2) +
482 4*cw2*(126 + 252*lh - 87*lh2 - 39*phi1 - 16*phi3 - 7*phi4 - 13*pi2) + pi2);
483
484 const double x5 = 24*((-5 + 27*cw2 - 14*cw4 - 72*cw6 + 64*cw8)*phi4
485 + (1 - 7*cw2 + 14*cw4 - 8*cw6)*phi1);
486
487 const double x6 = -24*(-1 + 7*cw2 - 14*cw4 + 8*cw6)*phi4;
488
489 const double res = (xm2/xh + xm1)/xh + x0 + xh*(x1 + xh*(x2 + xh*(x3 + xh*(x4 + xh*(x5 + xh*x6)))));
490
491 const double pref = sqr(thdm.alpha_em*thdm.mm/(48*thdm.mz*pi*cw2*(4*cw2 - xh)*(1 - cw2)))
492 /(2*(-1 + 4*cw2)*(-1 + xh));
493
494 return pref * res * thdm.cos_beta_minus_alpha * thdm.zetal;
495}
496
497/**
498 * Calculates 2-loop bosonic non-Yukawa contributions.
499 *
500 * Eq (71), arxiv:1607.06292
501 */
502double amu2L_B_nonYuk(const THDM_B_parameters& thdm) noexcept
503{
504 const auto mw2 = sqr(thdm.mw);
505 const auto mz2 = sqr(thdm.mz);
506 const auto cw2 = mw2/mz2;
507 const auto cw4 = cw2*cw2;
508 const auto cw6 = cw4*cw2;
509 const auto cw8 = cw4*cw4;
510 const auto sw2 = 1.0 - cw2;
511 const auto sw4 = sw2*sw2;
512 const auto mA2 = sqr(thdm.mA);
513 const auto mH2 = sqr(thdm.mh(1));
514 const auto mHp2 = sqr(thdm.mHp);
515 const auto xH = mH2/mz2;
516 const auto xA = mA2/mz2;
517 const auto xHp = mHp2/mz2;
518
519 const auto f1 = 7.0/2 - 25.0/(2*cw2) + 4*cw2 - 4*cw4;
520 const auto f2 = 2*(17 - 24*cw2 + 56*cw4 - 128*cw6 + 64*cw8);
521 const auto f3 = (25 - 32*cw2 + 4*cw4)/(cw2*sw2);
522 const auto f4 = 13.0/2 - 15*cw2 + 10*cw4;
523 const auto f5 = cw2*(5 - 16*cw2 + 8*cw4)/sw2;
524
525 const double res =
526 + TX(xH, xA, xHp, cw2)
527 + (xA - xH)*(T4(xA, cw2, xH, xA) - T4(xH, cw2, xH, xA))
528 + T5(xHp, xH, cw2)
529 + T5(xHp, xA, cw2)
530 + T6(xA, xHp, cw2)
531 + T6(xH, xHp, cw2)
532 + T7(xA, xH, cw2)
533 + T7(xHp, xHp, cw2)*sqr(1 - 2*cw2)
534 + T8(xA, xHp, cw2)
535 + T8(xH, xHp, cw2)
536 - 16.0/3*cw2*sw2*(1 + 8*cw2 - 8*cw4)
537 + 8*cw4*sw4/(5*xHp)
538 + f2*xHp
539 - f3*sqr(xHp)
540 + f1*(sqr(xA) + sqr(xH))
541 + f3*xHp*(xA + xH)
542 + f4*(xA + xH)
543 - f5*xA*xH
544 + T1(xA, xHp, cw2)
545 + T1(xH, xHp, cw2)
546 + T0(xA, xHp, cw2)
547 + T0(xH, xHp, cw2)
548 ;
549
550 const auto pref = sqr(thdm.alpha_em/(24*pi*cw2*sw2) * thdm.mm/thdm.mz);
551
552 return pref*res;
553}
554
555/**
556 * Calculates 2-loop bosonic Yukawa contributions.
557 *
558 * Eq (52), arxiv:1607.06292
559 */
560double amu2L_B_Yuk(const THDM_B_parameters& thdm) noexcept
561{
562 const auto tb = thdm.tb;
563 const auto sc = tb - 1.0/tb;
564 const auto zetal = thdm.zetal;
565 const auto lambda5 = thdm.lambda5;
566 const auto lambda67 = thdm.lambda67;
567 const auto cos_beta_minus_alpha = thdm.cos_beta_minus_alpha;
568 const auto al = thdm.alpha_em;
569 const auto mhSM2 = sqr(thdm.mhSM);
570 const auto mH2 = sqr(thdm.mh(1));
571 const auto mHp2 = sqr(thdm.mHp);
572 const auto mw2 = sqr(thdm.mw);
573 const auto mz2 = sqr(thdm.mz);
574
575 const auto cw2 = mw2/mz2;
576 const auto xhSM = mhSM2/mz2;
577 const auto xHp = mHp2/mz2;
578 const auto xH = mH2/mz2;
579
580 // Eq.(91), arxiv:1607.06292
581 const auto a000 = fb(xhSM, xHp, al, cw2)*Fm0(xhSM, xHp, al, cw2);
582 // Eq.(92), arxiv:1607.06292
583 const auto a0z0 = -fb(xH, 0.0, al, cw2)*(
584 Fm0(xH, xHp, al, cw2) + Fmp(xH, xHp, al, cw2));
585 // Eq.(93), arxiv:1607.06292
586 const auto a500 = Fm0(xhSM, xHp, al, cw2);
587 // Eq.(94), arxiv:1607.06292
588 const auto a5z0 = -0.5*(
589 Fm0(xH, xHp, al, cw2) + Fmp(xH, xHp, al, cw2));
590 // Eq.(95), arxiv:1607.06292
591 const auto a001 =
592 + fb(xH, 0.0, al, cw2)*Fm0(xH, xHp, al, cw2)
593 - fb(xhSM, 0.0, al, cw2)*Fm0(xhSM, xHp, al, cw2);
594 // Eq.(96), arxiv:1607.06292
595 const auto a0z1 =
596 - (
597 + fb(xH, xHp, al, cw2)*(
598 + Fm0(xH, xHp, al, cw2)
599 + Fmp(xH, xHp, al, cw2)
600 )
601 - YF3(xH, xHp, cw2)
602 // SM contributions with opposite sign:
603 - fb(xhSM, xHp, al, cw2)*(
604 + Fm0(xhSM, xHp, al, cw2)
605 + Fmp(xhSM, xHp, al, cw2)
606 )
607 + YF3(xhSM, xHp, cw2)
608 )
609 + YF2(xH, cw2);
610 // Eq.(97), arxiv:1607.06292
611 const auto a501 =
612 + Fm0(xH, xHp, al, cw2)/2
613 - Fm0(xhSM, xHp, al, cw2)/2;
614 // Eq.(98), arxiv:1607.06292
615 const auto a5z1 =
616 - Fm0(xH, xHp, al, cw2)
617 - Fmp(xH, xHp, al, cw2)
618 + Fm0(xhSM, xHp, al, cw2)
619 + Fmp(xhSM, xHp, al, cw2);
620
621 const double res =
622 + a000
623 + a0z0*sc*zetal
624 + a500*lambda5
625 + a5z0*(sc*lambda5 + lambda67)*zetal
626 + (
627 + a001*sc
628 + a0z1*zetal
629 + a501*(sc*lambda5 + lambda67)
630 + a5z1*lambda5*zetal
631 )*cos_beta_minus_alpha;
632
633 const auto pref = sqr(al/(24*pi*cw2*(1.0 - cw2)) * thdm.mm/thdm.mz);
634
635 return pref*res;
636}
637
638/**
639 * Calculates the sum of the 2-loop bosonic contributions.
640 *
641 * Eq (48), arxiv:1607.06292
642 */
643double amu2L_B(const THDM_B_parameters& thdm) noexcept
644{
645 return amu2L_B_EWadd(thdm) + amu2L_B_nonYuk(thdm) + amu2L_B_Yuk(thdm);
646}
647
648} // namespace thdm
649
650} // namespace gm2calc
double mw2
squared W boson mass
double mz2
squared Z boson mass
double mA2
double amu2L_B(const THDM_B_parameters &thdm) noexcept
Calculates the sum of the 2-loop bosonic contributions.
double amu2L_B_EWadd(const THDM_B_parameters &thdm) noexcept
Calculates 2-loop bosonic pure electroweak contributions.
double amu2L_B_nonYuk(const THDM_B_parameters &thdm) noexcept
Calculates 2-loop bosonic non-Yukawa contributions.
double amu2L_B_Yuk(const THDM_B_parameters &thdm) noexcept
Calculates 2-loop bosonic Yukawa contributions.
double Phi(double x, double y, double z) noexcept
function from arxiv:1607.06292 Eq.
T sqr(T x) noexcept
returns number squared
void svd_eigen(const Eigen::Matrix< Scalar, M, N > &m, Eigen::Array< Real,(((M)<(N)) ?(M) :(N)), 1 > &s, Eigen::Matrix< Scalar, M, M > *u, Eigen::Matrix< Scalar, N, N > *vh)
T cube(T x) noexcept
returns number to the third power
double f_PS(double z) noexcept
Calculates , Eq (70) arXiv:hep-ph/0609168.
bool is_equal_rel(T a, T b, T eps) noexcept
double dilog(double x) noexcept
Real dilogarithm .
Definition gm2_dilog.cpp:75
parameters to be passed to the bosonic contribution functions