31 template <
typename T> T constexpr sqr(T
a) {
return a *
a; }
32 template <
typename T> T sqrtabs(T a) {
return std::sqrt(std::abs(a)); }
33 template <
typename T> T logabs(T x) {
return std::log(std::abs(x)); }
36 Eigen::Matrix<double, 2, 2> delta_mh2_2loop_at_as_st_0_mst1_eq_mst2(
37 double mt2,
double mg,
double mst12,
double ,
38 double ,
double ,
double scale2,
double mu,
39 double tanb,
double vev2,
double g3,
int )
41 constexpr
double Pi2 = M_PI * M_PI;
42 constexpr
double Pi4 = M_PI * M_PI * M_PI * M_PI;
43 const double g = sqr(mg);
44 const double g2 = sqr(g);
45 const double q = scale2;
47 const double tsq = sqr(t);
48 const double T = mst12;
49 const double Tsq = sqr(mst12);
50 const double del = g2 + tsq + Tsq - 2*(g*t + g*T + t*T);
51 const double rdel = sqrtabs(del);
52 const double sb = std::sin(std::atan(tanb));
53 const double ht2 = 2./vev2*mt2/sqr(sb);
55 Eigen::Matrix<double, 2, 2> result;
59 result(0,1) = (sqr(g3)*ht2*mg*mt2*mu* (-1 + logabs(t/q) -
60 (T*((2*del* (-(logabs(t/g)/T) - (2*(g + t - T +
61 g*sqrtabs(del/g2))* logabs((g + t - T - g*sqrtabs(del/g2))/
62 (2.*g)))/ (g*sqrtabs(del/g2)* (t - T + g*(-1 +
63 sqrtabs(del/g2)))) + (2*logabs((g - t + T - g*sqrtabs(del/g2))/
64 (2.*g)))/(g*sqrtabs(del/g2)) - (2*((g + t - T +
65 g*sqrtabs(del/g2))* logabs((g + t - T + g*sqrtabs(del/g2))/
66 (2.*g)) + (g - t + T - g*sqrtabs(del/g2))* logabs((g - t + T +
67 g*sqrtabs(del/g2))/ (2.*g))))/ (g*sqrtabs(del/g2)* (t - T +
68 g*(-1 + sqrtabs(del/g2))))))/ g2 + (2*(g + t - T)*(Pi2 -
69 3*logabs(t/g)*logabs(T/g) + 6*logabs((g + t - T -
70 g*sqrtabs(del/g2))/(2.*g))*logabs((g - t + T -
71 g*sqrtabs(del/g2))/(2.*g)) - 6*
li2((g + t - T -
72 g*sqrtabs(del/g2))/(2.*g)) - 6*
li2((g - t + T -
73 g*sqrtabs(del/g2))/(2.*g))))/ (3.*g2)))/(2.*std::pow(std::abs(del)/g2,1.5))))/
76 result(1,0) = result(0,1);
78 result(1,1) = (sqr(g3)*ht2*mt2*(-2 - (8*(g + t)*(-1 +
79 logabs(g/q)))/T + 8*logabs(t/g) + 6*(-1 + logabs(t/q)) +
80 8*sqr(logabs(t/q)) - 4*logabs(T/g) + (4*((g2*T - sqr(t - T)*(2*t
81 + T) + 2*g*t*(t + 5*T))*logabs(t/g) +
82 4*g2*T*logabs(T/g)))/(del*T) + 2*logabs(T/q) -
83 8*sqr(logabs(T/q)) + 5*logabs(Tsq/tsq) + sqr(logabs(Tsq/tsq)) +
84 (4*g2*(g + t - T)*(Pi2 - 6*
li2((g + t - T -
85 g*sqrtabs(del/g2))/ (2.*g)) - 6*
li2((g - t + T -
86 g*sqrtabs(del/g2))/(2.*g)) - 3*logabs(t/g)*logabs(T/g) +
87 6*logabs((-rdel + g + t - T)/(2.*g))* logabs((-rdel + g - t +
88 T)/(2.*g))))/(3.*std::pow(std::abs(del),1.5)) + (4*g*(g + t - T)*(Pi2 -
89 6*
li2((g + t - T - g*sqrtabs(del/g2))/(2.*g)) - 6*
li2((g - t
90 + T - g*sqrtabs(del/g2))/ (2.*g)) - 3*logabs(t/g)*logabs(T/g) +
91 6*logabs((g + t - T - g*sqrtabs(del/g2))/(2.*g))* logabs((g - t
92 + T - g*sqrtabs(del/g2))/(2.*g))))/ (3.*del*sqrtabs(del/g2)) +
93 (8*mg*mu*(1/T - logabs(t/q)/T + (g*(g + t - T)* (Pi2 -
94 6*
li2((g + t - T - g*sqrtabs(del/g2))/(2.*g)) - 6*
li2((g - t
95 + T - g*sqrtabs(del/g2))/ (2.*g)) - 3*logabs(t/g)*logabs(T/g) +
96 6*logabs((-rdel + g + t - T)/(2.*g))*logabs((-rdel + g - t +
97 T)/(2.*g))))/ (3.*std::pow(std::abs(del),1.5)) + (g*(-(logabs(t/g)/T) -
98 (2*(-(g*logabs(4.)) + (rdel + g + t - T)*logabs((-rdel + g + t -
99 T)/g) + (-rdel + g - t + T)*logabs((-rdel + g - t + T)/g)))/
100 (rdel*(rdel - g + t - T)) - 2*(((rdel + g + t - T)* logabs((g +
101 t - T + g*sqrtabs(del/g2))/ (2.*g)))/ (rdel*(t - T + g*(-1 +
102 sqrtabs(del/g2)))) - ((rdel - g - t + T)* logabs((g - t + T +
103 g*sqrtabs(del/g2))/ (2.*g)))/ (rdel*(-t + T + g*(-1 +
104 sqrtabs(del/g2)))))))/ rdel))/tanb))/(32.*Pi4);
110 Eigen::Matrix<double, 2, 2> delta_mh2_2loop_at_as_general(
111 double mt2,
double mg,
double mst12,
double mst22,
112 double sxt,
double cxt,
double scale2,
double mu,
113 double tanb,
double vev2,
double g3,
int scheme)
115 Eigen::Matrix<double, 2, 2> result;
117 dszhiggs_(&mt2, &mg, &mst12, &mst22, &sxt, &cxt, &scale2, &mu,
118 &tanb, &vev2, &g3, &scheme,
119 &result(0,0), &result(1,1), &result(0,1));
121 result(1,0) = result(0,1);
126 Eigen::Matrix<double, 2, 2> rotate_by(
double dm2,
double tanb)
128 const double tanb2 = sqr(tanb);
129 const double sinb = tanb / sqrtabs(1. + tanb2);
130 const double cosb = 1. / sqrtabs(1. + tanb2);
132 Eigen::Matrix<double, 2, 2> result;
134 result(0,0) = dm2 * sqr(sinb);
135 result(0,1) = - dm2 * sinb * cosb;
136 result(1,0) = result(0,1);
137 result(1,1) = dm2 * sqr(cosb);
142 double calc_At(
double mt2,
double mst12,
double mst22,
143 double sxt,
double cxt,
double mu,
double tanb)
145 const double s2t = 2*cxt*sxt;
146 const double Xt = (mst12 - mst22)*s2t/2./sqrtabs(mt2);
147 const double At = Xt - mu/tanb;
152 double phi(
double x,
double y,
double z)
154 const double u = x/z, v = y/z;
155 const double lambda = sqrtabs(sqr(1 - u - v) - 4*u*v);
156 const double xp = 0.5 * (1 + (u - v) - lambda);
157 const double xm = 0.5 * (1 - (u - v) - lambda);
159 return 1./lambda * (2*logabs(xp)*logabs(xm) - logabs(u)*logabs(v) -
160 2*(
li2(xp) +
li2(xm)) + M_PI*M_PI/3.);
164 double dphi_010(
double t,
double T,
double g)
166 constexpr
double Pi2 = M_PI * M_PI;
167 const double g2 = sqr(g);
168 const double abbr = (-4*t*T)/g2 + sqr(1 - t/g - T/g);
169 const double rabbr = sqrtabs(abbr);
171 return ((g + t - T)*(Pi2 - 6*
li2((g - rabbr*g + t - T)/(2.*g)) -
172 6*
li2((g - rabbr*g - t + T)/(2.*g)) -
173 3*logabs(t/g)*logabs(T/g) + 6*logabs((g - rabbr*g + t -
174 T)/(2.*g))*logabs((g - rabbr*g - t + T)/(2.*g))) + (3*rabbr*g* (
175 rabbr*g*((-1 + rabbr)*g + t - T)*logabs(t/g) +
176 2*T*(-2*g*logabs(4.) + (g + rabbr*g + t - T)*logabs((g - rabbr*g
177 + t - T)/g) + (g + rabbr*g + t - T)*logabs((g + rabbr*g + t -
178 T)/g) + g*logabs((g - rabbr*g - t + T)/g) - rabbr*g*logabs((g -
179 rabbr*g - t + T)/g) - t*logabs((g - rabbr*g - t + T)/g) +
180 T*logabs((g - rabbr*g - t + T)/g) + g*logabs((g + rabbr*g - t +
181 T)/g) - rabbr*g*logabs((g + rabbr*g - t + T)/g) - t*logabs((g +
182 rabbr*g - t + T)/g) + T*logabs((g + rabbr*g - t + T)/g)) ) ) /
183 (T*(g - rabbr*g - t + T)))/(3.*std::pow(std::abs(abbr),1.5)*g2);
189 double mt2,
double mg,
double mst12,
double mst22,
190 double sxt,
double cxt,
double scale2,
double mu,
191 double tanb,
double vev2,
double g3)
193 constexpr
double Pi2 = M_PI * M_PI;
194 const double g = sqr(mg);
195 const double g2 = sqr(g);
196 const double q = scale2;
197 const double q2 = sqr(scale2);
198 const double t = mt2;
199 const double T = mst12;
200 const double sb = std::sin(std::atan(tanb));
201 const double ht2 = 2./vev2*mt2/sqr(sb);
202 const double At = calc_At(mt2, mst12, mst22, sxt, cxt, mu, tanb);
204 const double result = (-2*(g*(2*At*g + 2*At*t - At*T + mg*T + mg*(g
205 - t)*logabs(g/t) - At*T*logabs(g/q)*logabs(t/q) -
206 mg*T*logabs(g/q)*logabs(t/q) - 4*mg*T*logabs(T/q) -
207 2*At*T*sqr(logabs(T/q)) + logabs((g*t)/q2)*(-(At*(g + t - T)) +
208 mg*T + (At + mg)*T*logabs(T/q))) - 2*(At + mg)*(g + t -
209 T)*T*
phi(t,T,g) + T*(At*(g2 + sqr(t - T) - 2*g*T) + mg*(g2 +
210 sqr(t - T) - 2*g*(t + T)))*dphi_010(t,T,g)))/ (g*T);
212 const double pref = 4*sqr(g3)/sqr(16*Pi2) * ht2*mu*(1./tanb + tanb);
214 return pref * result;
218 double mt2,
double mg,
double mst12,
double mst22,
219 double sxt,
double cxt,
double scale2,
double mu,
220 double tanb,
double vev2,
double g3)
224 dszodd_(&mt2, &mg, &mst12, &mst22, &sxt, &cxt, &scale2, &mu,
225 &tanb, &vev2, &g3, &result);
232 double mt2,
double mg,
double mst12,
double mst22,
233 double sxt,
double cxt,
double scale2,
double mu,
234 double tanb,
double vev2,
double g3)
236 if (std::abs((mst12 - mst22)/mst12) < 1e-8) {
237 const double At = calc_At(mt2, mst12, mst22, sxt, cxt, mu, tanb);
240 if (std::abs(At) < std::numeric_limits<double>::epsilon())
244 mt2, mg, mst12, mst22, sxt, cxt, scale2, mu, tanb, vev2, g3);
248 mt2, mg, mst12, mst22, sxt, cxt, scale2, mu, tanb, vev2, g3);
252 double mt2,
double mb2,
double mA2,
double mst12,
253 double mst22,
double msb12,
double msb22,
254 double sxt,
double cxt,
double sxb,
double cxb,
255 double scale2,
double mu,
double tanb,
double vev2,
int atat)
260 std::lock_guard<std::mutex> lg(mtx);
262 ddsodd_(&mt2, &mb2, &mA2, &mst12, &mst22, &msb12, &msb22,
263 &sxt, &cxt, &sxb, &cxb, &scale2, &mu, &tanb, &vev2, &result, &atat);
270 double mt2,
double mg,
double mst12,
double mst22,
271 double sxt,
double cxt,
double scale2,
double mu,
272 double tanb,
double vev2,
double g3,
273 int include_heavy_higgs)
275 Eigen::Matrix<double, 2, 2> result;
277 if (std::abs((mst12 - mst22)/mst12) < 1e-8) {
278 result = delta_mh2_2loop_at_as_st_0_mst1_eq_mst2(
279 mt2, mg, mst12, mst22, sxt, cxt, scale2, mu, tanb, vev2, g3, 0);
281 result = delta_mh2_2loop_at_as_general(
282 mt2, mg, mst12, mst22, sxt, cxt, scale2, mu, tanb, vev2, g3, 0);
285 const double dMA = include_heavy_higgs
287 mt2, mg, mst12, mst22, sxt, cxt, scale2, mu, tanb, vev2, g3)
290 return result + rotate_by(dMA, tanb);
294 double mt2,
double mb2,
double mA2,
double mst12,
295 double mst22,
double msb12,
double msb22,
296 double sxt,
double cxt,
double sxb,
double cxb,
297 double scale2,
double mu,
double tanb,
double vev2,
298 int include_heavy_higgs,
int atat)
300 Eigen::Matrix<double, 2, 2> result;
303 std::lock_guard<std::mutex> lg(mtx);
305 ddshiggs_(&mt2, &mb2, &mA2, &mst12, &mst22, &msb12, &msb22,
306 &sxt, &cxt, &sxb, &cxb, &scale2, &mu, &tanb, &vev2,
307 &result(0,0), &result(0,1), &result(1,1), &atat);
310 result(1,0) = result(0,1);
312 const double dMA = include_heavy_higgs
314 mt2, mb2, mA2, mst12, mst22, msb12, msb22,
315 sxt, cxt, sxb, cxb, scale2, mu, tanb, vev2, atat)
318 return result + rotate_by(dMA, tanb);
322 double mb2,
double mg,
double msb12,
double msb22,
323 double sxb,
double cxb,
double scale2,
double mu,
324 double cotb,
double vev2,
double g3,
325 int include_heavy_higgs)
328 mb2, mg, msb12, msb22, sxb, cxb, scale2, mu,
329 cotb, vev2, g3, include_heavy_higgs));
331 std::swap(result(0,0), result(1,1));
337 double mtau2,
double mA2,
double msv2,
double mstau12,
338 double mstau22,
double sintau,
double costau,
double scale2,
339 double mu,
double tanb,
double vev2)
343 tausqodd_(&mtau2, &mA2, &msv2, &mstau12, &mstau22, &sintau,
344 &costau, &scale2, &mu, &tanb, &vev2, &result);
350 double mtau2,
double mA2,
double msv2,
double mstau12,
351 double mstau22,
double sintau,
double costau,
double scale2,
352 double mu,
double tanb,
double vev2,
353 int include_heavy_higgs)
356 Eigen::Matrix<double, 2, 2> result;
358 tausqhiggs_(&mtau2, &mA2, &msv2, &mstau12, &mstau22, &sintau,
359 &costau, &scale2, &mu, &tanb, &vev2, &scheme,
360 &result(0,0), &result(1,1), &result(0,1));
362 result(1,0) = result(0,1);
364 const double dMA = include_heavy_higgs
366 mtau2, mA2, msv2, mstau12, mstau22, sintau, costau, scale2,
370 return result + rotate_by(dMA, tanb);
374 double mtau2,
double mb2,
375 double mstau12,
double mstau22,
double msb12,
double msb22,
376 double sintau,
double costau,
double sxb,
double cxb,
377 double scale2,
double mu,
double tanb,
double vev2)
382 &mstau12, &mstau22, &msb12, &msb22,
383 &sintau, &costau, &sxb, &cxb,
384 &scale2, &mu, &tanb, &vev2, &result);
390 double mtau2,
double mb2,
391 double mstau12,
double mstau22,
double msb12,
double msb22,
392 double sintau,
double costau,
double sxb,
double cxb,
393 double scale2,
double mu,
double tanb,
double vev2,
394 int include_heavy_higgs)
396 Eigen::Matrix<double, 2, 2> result;
399 &mstau12, &mstau22, &msb12, &msb22,
400 &sintau, &costau, &sxb, &cxb,
401 &scale2, &mu, &tanb, &vev2,
402 &result(0,0), &result(1,1), &result(0,1));
404 result(1,0) = result(0,1);
406 const double dMA = include_heavy_higgs
408 mtau2, mb2, mstau12, mstau22, msb12, msb22, sintau, costau, sxb, cxb,
409 scale2, mu, tanb, vev2)
412 return result + rotate_by(dMA, tanb);
truncate the expansion depth in At/Ab by one order
int dszodd_(double *t, double *g, double *T1, double *T2, double *st, double *ct, double *q, double *mu, double *tanb, double *vv, double *gs, double *dma)
Eigen::Matrix< double, 2, 2 > delta_mh2_2loop_at_at(double mt2, double mb2, double mA2, double mst12, double mst22, double msb12, double msb22, double sxt, double cxt, double sxb, double cxb, double scale2, double mu, double tanb, double vev2, int include_heavy_higgs, int atat)
2-loop CP-even Higgs contribution O(at^2)
double delta_ma2_2loop_atau_atau(double mtau2, double mA2, double msv2, double mstau12, double mstau22, double sintau, double costau, double scale2, double mu, double tanb, double vev2)
Eigen::Matrix< double, 2, 2 > delta_mh2_2loop_ab_as(double mb2, double mg, double msb12, double msb22, double sxb, double cxb, double scale2, double mu, double cotb, double vev2, double g3, int include_heavy_higgs)
2-loop CP-even Higgs contribution O(ab*as)
double g(double r) noexcept
double delta_ma2_2loop_at_as_general(double mt2, double mg, double mst12, double mst22, double sxt, double cxt, double scale2, double mu, double tanb, double vev2, double g3)
Eigen::Matrix< double, 2, 2 > delta_mh2_2loop_ab_atau(double mtau2, double mb2, double mstau12, double mstau22, double msb12, double msb22, double sintau, double costau, double sxb, double cxb, double scale2, double mu, double tanb, double vev2, int include_heavy_higgs)
2-loop CP-even Higgs contribution O(ab*atau)
int taubot_(double *t, double *b, double *T1, double *T2, double *B1, double *B2, double *st, double *ct, double *sb, double *cb, double *q, double *mu, double *tanb, double *vv, double *S11, double *S22, double *S12)
Eigen::Matrix< double, 2, 2 > delta_mh2_2loop_atau_atau(double mtau2, double mA2, double msv2, double mstau12, double mstau22, double sintau, double costau, double scale2, double mu, double tanb, double vev2, int include_heavy_higgs)
2-loop CP-even Higgs contribution O(atau^2)
Eigen::Matrix< double, 2, 2 > delta_mh2_2loop_at_as(double mt2, double mg, double mst12, double mst22, double sxt, double cxt, double scale2, double mu, double tanb, double vev2, double g3, int include_heavy_higgs)
2-loop CP-even Higgs contribution O(at*as)
int ddshiggs_(double *t, double *b, double *A0, double *T1, double *T2, double *B1, double *B2, double *st, double *ct, double *sb, double *cb, double *q, double *mu, double *tanb, double *vv, double *S11, double *S12, double *S22, int *atat)
double delta_ma2_2loop_ab_atau(double mtau2, double mb2, double mstau12, double mstau22, double msb12, double msb22, double sintau, double costau, double sxb, double cxb, double scale2, double mu, double tanb, double vev2)
Contains two-loop routines from Slavich et al.
int taubotodd_(double *t, double *b, double *T1, double *T2, double *B1, double *B2, double *st, double *ct, double *sb, double *cb, double *q, double *mu, double *tanb, double *vv, double *dma)
int tausqodd_(double *t, double *A0, double *BL, double *T1, double *T2, double *st, double *ct, double *q, double *mu, double *tanb, double *vv, double *dma)
double li2(double x)
real dilogarithm from FORTRAN module
double delta_ma2_2loop_at_at(double mt2, double mb2, double mA2, double mst12, double mst22, double msb12, double msb22, double sxt, double cxt, double sxb, double cxb, double scale2, double mu, double tanb, double vev2, int atat)
function declarations for 2-loop MSSM Higgs contributions
Complex< T > log(const Complex< T > &z_) noexcept
double delta_ma2_2loop_at_as_mst1_eq_mst2(double mt2, double mg, double mst12, double mst22, double sxt, double cxt, double scale2, double mu, double tanb, double vev2, double g3)
int tausqhiggs_(double *t, double *A0, double *BL, double *T1, double *T2, double *st, double *ct, double *q, double *mu, double *tanb, double *vv, int *OS, double *S11, double *S22, double *S12)
double delta_ma2_2loop_at_as(double mt2, double mg, double mst12, double mst22, double sxt, double cxt, double scale2, double mu, double tanb, double vev2, double g3)
2-loop contribution to CP-odd Higgs O(at*as)
int ddsodd_(double *t, double *b, double *A0, double *T1, double *T2, double *B1, double *B2, double *st, double *ct, double *sb, double *cb, double *q, double *mu, double *tanb, double *vv, double *dma, int *atat)
int dszhiggs_(double *t, double *g, double *T1, double *T2, double *st, double *ct, double *q, double *mu, double *tanb, double *vv, double *gs, int *OS, double *S11, double *S22, double *S12)
double precision function phi(x, y, z)