24 #define CALC_IF(cond,expr) ((cond) ? (expr) : 0) 31 double discardNaN(
double var,
const std::string& msg =
"")
33 if (std::isnan(var)) {
34 WARNING_MSG(
"NaN appeared in calculation of threshold correction" 35 << (msg.empty() ?
"" :
" " + msg) <<
"!");
42 double fB(
double s,
double x,
double q2) noexcept
62 const double eps = 1e-10;
65 if (std::abs(
p.
g1) < eps) {
74 if (std::abs(
p.
g2) < eps) {
81 if (std::abs(
p.
Mt) < eps) {
92 if (std::abs(
p.
Mb) < eps) {
105 if (std::abs(
p.
Mtau) < eps) {
140 if (flag < 0 || flag > 1)
141 ERROR_MSG(
"You can only enable (1) or disable (0) corrections!");
167 const double v2 =
calcV2();
168 const double gt = sqrt2 *
p.
Mt /
calcV();
171 const double pref_at = oneLoop * pow2(
p.
Mt * gt);
173 const double q2 = pow2(
p.
Mt);
176 const double c2beta = std::cos(2 * beta);
178 const double mhtree2 = pow2(c2beta *
p.
MZ);
179 const double yt = sqrt2 *
p.
Mt /
p.
vu;
180 const double yb = sqrt2 *
p.
Mb /
p.
vd;
181 const double ytau = sqrt2 *
p.
Mtau /
p.
vd;
185 const double dlambdayb2g12 =
191 const double dlambdag14 =
197 const double dlambdaregg14 =
203 const double dlambdachig14 =
214 const double dlambdachig24 =
220 const double dlambdag24 =
231 const double dlambdaregg24 =
237 const double dlambdag12g22 =
243 const double dlambdaregg12g22 =
249 const double dlambdachig12g22 =
255 const double dlambdayb2g22 =
261 const double dlambdayb4 =
267 const double dlambdayt2g12 =
273 const double dlambdayt2g22 =
279 const double dlambdaytau2g12 =
285 const double dlambdaytau2g22 =
291 const double dlambdaytau4 =
297 const double dvg12 = 0.;
304 const double dvg22 = 0.;
329 const double bbhDR = fB(mhtree2, mhtree2, q2);
330 const double bbwDR = fB(mhtree2, pow2(
p.
MW), q2);
331 const double bbzDR = fB(mhtree2, pow2(
p.
MZ), q2);
332 const double B00DR = fB(mhtree2, 0., q2);
335 const double dmh2g12g22 = discardNaN(
338 (24 + 40 * dlambdachig12g22 + 40 * dlambdag12g22 +
339 40 * dlambdaregg12g22 - 36 * lmMt + 40 * dvg12 * pow2(c2beta) +
340 24 * dvg22 * pow2(c2beta) + 36 * lmMt * pow2(c2beta) -
341 12 * lmMt * Xi * pow2(c2beta) -
342 6 * bbwDR * (-2 + pow2(c2beta)) * pow2(c2beta) - 6 * pow4(c2beta) -
343 27 * bbhDR * pow4(c2beta) - 36 * lmMt * pow4(c2beta) -
344 3 * bbzDR * (12 - 4 * pow2(c2beta) + pow4(c2beta)))) /
348 const double dmh2g14 = discardNaN(
350 (-(v2 * (-4 * (18 + 100 * dlambdachig14 + 100 * dlambdag14 +
351 100 * dlambdaregg14 - 27 * lmMt) +
352 6 * (40 * dg1g1 - 40 * dvg12 + 3 * lmMt * (-3 + Xi)) *
354 9 * (9 * bbhDR + 2 * (1 + bbwDR + 6 * lmMt)) * pow4(c2beta) +
355 9 * bbzDR * (12 - 4 * pow2(c2beta) + pow4(c2beta)))) /
359 const double dmh2g24 = discardNaN(
361 (-(v2 * (-24 - 16 * dlambdachig24 - 16 * dlambdag24 -
362 16 * dlambdaregg24 + 36 * lmMt + 16 * dg2g2 * pow2(c2beta) -
363 16 * dvg22 * pow2(c2beta) - 18 * lmMt * pow2(c2beta) +
364 6 * lmMt * Xi * pow2(c2beta) + 2 * pow4(c2beta) +
365 9 * bbhDR * pow4(c2beta) + 12 * lmMt * pow4(c2beta) +
366 2 * bbwDR * (12 - 4 * pow2(c2beta) + pow4(c2beta)) +
367 bbzDR * (12 - 4 * pow2(c2beta) + pow4(c2beta)))) /
371 const double dmh2g12yb2 =
373 (((10 * dlambdayb2g12 -
374 3 * (3 * B00DR - 2 * dvyb2 + 3 * lmMt) * pow2(c2beta)) *
379 const double dmh2g22yb2 =
381 (((2 * dlambdayb2g22 +
382 (-3 * B00DR + 2 * dvyb2 - 3 * lmMt) * pow2(c2beta)) *
387 const double dmh2yb4 = discardNaN(
389 (((12 * B00DR + dlambdayb4 + 12 * lmMt) * v2 * pow4(cbeta)) / 2.),
392 const double dmh2g12yt2 = discardNaN(
394 (((10 * dlambdayt2g12 + (6 + 6 * dvyt2 - 9 * lmMt) * pow2(c2beta)) *
399 const double dmh2g22yt2 = discardNaN(
401 (((2 * dlambdayt2g22 + (2 + 2 * dvyt2 - 3 * lmMt) * pow2(c2beta)) *
406 const double dmh2yt4 = discardNaN(
413 const double dmh2g12ytau2 =
415 (-((-10 * dlambdaytau2g12 + 3 * B00DR * pow2(c2beta) +
416 3 * (-2 * dvytau2 + lmMt) * pow2(c2beta)) *
421 const double dmh2g22ytau2 =
423 (-((-2 * dlambdaytau2g22 + B00DR * pow2(c2beta) +
424 (-2 * dvytau2 + lmMt) * pow2(c2beta)) *
429 const double dmh2ytau4 = discardNaN(
431 (((4 * B00DR + dlambdaytau4 + 4 * lmMt) * v2 * pow4(cbeta)) / 2.),
434 return dmh2yt4 + oneLoop * (
435 pow2(
p.
g1 *
p.
g2) * dmh2g12g22 + pow4(
p.
g1) * dmh2g14 + pow4(
p.
g2) *
436 dmh2g24 + pow2(
p.
g1 * yb) * dmh2g12yb2 + pow2(
p.
g2 * yb) * dmh2g22yb2 + pow4(yb) *
437 dmh2yb4 + pow2(
p.
g1 * ytau) * dmh2g12ytau2 + pow2(
p.
g2 * ytau) * dmh2g22ytau2 +
438 pow4(ytau) * dmh2ytau4 + pow2(
p.
g1 * yt) * dmh2g12yt2 + pow2(
p.
g2 * yt) * dmh2g22yt2);
453 const double v2 =
calcV2();
454 const double gt = sqrt2 *
p.
Mt /
calcV();
455 const double g32 = pow2(
p.
g3);
456 const double yt2 = 2*pow2(
p.
Mt /
p.
vu);
457 const double yb2 = 2*pow2(
p.
Mb /
p.
vd);
458 const double ytau2 = 2*pow2(
p.
Mtau /
p.
vd);
459 const double yt4 = pow2(yt2);
460 const double yb4 = pow2(yb2);
461 const double yt6 = pow3(yt2);
462 const double yb6 = pow3(yb2);
463 const double ytau4 = pow2(ytau2);
464 const double ytau6 = pow3(ytau2);
470 const double pref = twoLoop * pow2(
p.
Mt * gt *
p.
g3);
471 const double B00DR = 0.;
479 const double dlambdayb4g32 =
485 const double dlambdayb4 =
CALC_IF(
493 const double dlambdayb6 =
499 const double dlambdayt4 =
CALC_IF(
510 const double dlambdayt6 =
527 const double dlambdaytau4 =
CALC_IF(
533 const double dlambdaytau6 =
539 const double dlambdayt2yb4 =
545 const double dlambdayt4yb2 =
574 const double dlambdayb4ytau2 =
580 const double dlambdayb2ytau4 =
602 const double dmh2yt4g32 = discardNaN(
604 (pref * (96 * pow2(lmMt) + (-32 + 48 * dytas) * lmMt - 24 * dytas +
610 const double dmh2yb4g32 = discardNaN(
612 ((dlambdayb4g32 + 16 * (3 * B00DR * (dybas + 16 * lmMt) +
613 lmMt * (-2 + 3 * dybas + 24 * lmMt))) *
618 const double dmh2yb6 = discardNaN(
620 (-((-144 * dybyb * (B00DR + lmMt) +
622 (-49 - 3 * dlambdayb6 + 72 * dvyb2 - 72 * B00DR * dvyb2 -
623 60 * lmbMt + 234 * lmMt + 1296 * B00DR * lmMt -
625 dlambdayb4 * (-9 + 9 * B00DR - 6 * dvyb2 + 9 * lmMt) +
626 36 * pow2(lmbMt) + 648 * pow2(lmMt) - 6 * pow2(Pi))) *
631 const double dmh2yt6 = discardNaN(
634 (4 * dytyt * (-6 + dlambdayt4 + 12 * lmMt) +
635 (-12 + dlambdayt6 + dlambdayt4 * (2 + 2 * dvyt2 - 3 * lmMt) +
636 24 * dvyt2 * (-1 + lmMt) - 18 * lmMt * (1 + 3 * lmMt) -
643 const double dmh2yb4ytau2 = discardNaN(
645 (((dlambdayb4ytau2 - 96 * B00DR * lmMt -
646 dlambdayb4 * (-1 + B00DR + lmMt) +
647 2 * dvytau2 * (-12 + 12 * B00DR + dlambdayb4 + 12 * lmMt) -
653 const double dmh2yb2ytau4 = discardNaN(
655 (((4 * dytauyb * (4 * B00DR + dlambdaytau4 + 4 * lmMt) +
657 (dlambdayb2ytau4 - 8 * dvyb2 + 8 * B00DR * dvyb2 +
658 dlambdaytau4 * (3 - 3 * B00DR + 2 * dvyb2 - 3 * lmMt) -
659 6 * lmMt - 24 * B00DR * lmMt + 8 * dvyb2 * lmMt -
665 const double dmh2ytau6 = discardNaN(
667 (-((-12 * dytauytau * (4 * B00DR + dlambdaytau4 + 4 * lmMt) +
670 3 * dlambdaytau4 * (-1 + B00DR - 2 * dvytau2 + lmMt) +
671 2 * (6 + 30 * (1 + B00DR) * lmMt -
672 12 * dvytau2 * (-1 + B00DR + lmMt) + 15 * pow2(lmMt) +
678 const double dmh2yt2yb4 = discardNaN(
680 (((48 * dybyt * lmMt +
681 (dlambdayt2yb4 + dlambdayb4 * (2 + 2 * dvyt2 - 3 * lmMt) +
682 3 * (-15 + 8 * lmbMt + 8 * dvyt2 * (-1 + lmMt) + 18 * lmMt -
683 24 * pow2(lmMt) - 2 * pow2(Pi))) *
685 12 * B00DR * (4 * dybyt + (2 * dvyt2 - 9 * lmMt) * pow2(sbeta))) *
690 const double dmh2yt4yb2 = discardNaN(
692 (((4 * dytyb * (-6 + dlambdayt4 + 12 * lmMt) +
695 dlambdayt4 * (3 - 3 * B00DR + 2 * dvyb2 - 3 * lmMt) -
696 6 * (4 * dvyb2 + lmMt + 6 * B00DR * lmMt - 4 * dvyb2 * lmMt +
697 3 * pow2(lmMt) - pow2(Pi)))) *
702 return twoLoop * (g32 * yb4 * dmh2yb4g32 + yb6 * dmh2yb6 + yt6 * dmh2yt6 + yb4 * ytau2
703 * dmh2yb4ytau2 + yb2 * ytau4 * dmh2yb2ytau4 + ytau6 * dmh2ytau6 + yt2 * yb4
704 * dmh2yt2yb4 + yt4 * yb2 * dmh2yt4yb2) + dmh2yt4g32;
716 int omitSMLogs,
int omitMSSMLogs,
int omitDeltaLambda3L)
const 720 const double catas2 = 248.1215180432007;
732 const double gt = sqrt2 *
p.
Mt / std::sqrt(
calcV2());
737 return pref * (736 * pow3(lmMt) + (160 + 192 * dg3as + 384 * dytas) * pow2(lmMt)
738 + (-128 * z3 - 2056 / 3. + -64 * dg3as - 512 * dytas + 72 * pow2(dytas)
739 + 48 * dytas2) * lmMt + 64 * dytas - 84 * pow2(dytas) - 24 * dytas2
757 double scale,
double mst1,
double Xt,
int omitlogs)
const 759 const double LS = omitlogs *
std::log(pow2(scale /
p.
MSt(0)))
763 const double v2 =
calcV2();
765 const double gt = sqrt2 *
p.
Mt /
calcV();
770 const double xt = Xt / mst1;
771 const double catas2 = 248.1215180432007;
773 const double deltaLambda3L = 2 / 27.*pref * (6082 - 27832 * LS + 14856 * pow2(LS)
774 - 4032 * pow3(LS) - 15408 * z3 + 1728 * z3 * LS - 27 * catas2 / 2.
775 + xt * (7616 * LS - 11712 * pow2(LS) + 32 * (-940 + 477 * z3))
776 + pow2(xt) * (28848 - 2640 * LS + 1008 * pow2(LS) - 11880 * z3)
777 + pow3(xt) * (160 * LS + 864 * pow2(LS) + 8 * (2722 - 2259 * z3))) / v2;
779 return deltaLambda3L;
794 return std::sqrt(
calcV2());
799 return pow2(
p.
vu) + pow2(
p.
vd);
823 ostr <<
"=========================\n" 824 <<
"Himalaya Mh2EFTCalculator\n" 825 <<
"=========================\n" 832 ostr <<
"Mh^2_EFT_0L = " << dmh2_0l <<
" GeV^2 O(g1^2, g2^2)\n";
833 ostr <<
"ΔMh^2_EFT_1L = " << dmh2_1l <<
" GeV^2 O(full)\n";
834 ostr <<
"ΔMh^2_EFT_2L = " << dmh2_2l <<
" GeV^2 O((αt+αb)*αs + (αt+αb)^2 + αb*ατ + ατ^2)\n";
double calcBeta() const
calculate beta
lambda_chi_g14 threshold correction
lambda_yt2_g22 threshold correction
double vu
VEV of up Higgs, with v = Sqrt[vu^2 + vd^2] ~ 246 GeV.
void setCorrectionFlag(CouplingOrders::CouplingOrders order, int flag)
Definition of threshold corrections class to express the Higgs mass calculation in terms of SM MS-bar...
double getDeltaMh2EFT3Loop(int omitSMLogs, int omitMSSMLogs, int omitDeltaLambda3L=1) const
yt_as threshold correction
double getThresholdCorrection(ThresholdCouplingOrders couplingOrder, RenSchemes scheme, int omitLogs) const
lambga_at threshold correction
void validate(bool verbose)
validates the parameter set
double b0xx(double p2, double m2, double q2) noexcept
B0(s,x,x,q2) Passarino-Veltman function.
lambda_atas2 threshold correction
double vd
VEV of down Higgs, with v = Sqrt[vu^2 + vd^2] ~ 246 GeV.
ytau_ytau threshold correction
ytau6 threshold correction
lambda_g14 threshold correction
double g2
gauge coupling g2
Mh2EFTCalculator(const Parameters &p_, bool verbose=true)
CouplingOrders
Coupling orders for calculation.
#define WARNING_MSG(message)
yt_yb threshold correction
lambda_reg_g14 threshold correction
g2_g2 threshold correction
Declaration of real Passarino-Veltman loop functions with squared arguments.
ytau2_yb4 threshold correction
yb4_g32 threshold correction
double calcCosBeta() const
calculate cos(beta)
lambda_yb2_g22 threshold correction
yt2_yb4 threshold correction
g3_as threshold correction
Implementation of logging macros.
double calcSinBeta() const
calculate sin(beta)
lambda_g12_g22 threshold correction
#define CALC_IF(cond, expr)
ytau_yb threshold correction
double getDeltaLambdaDegenerate(double scale, double mst1, double Xt, int omitlogs) const
Parameters p
The HimalayaInterface struct.
ytau4_yb2 threshold correction
HimalayaErrorMessage [s_] s
lambda_ytau2_g22 threshold correction
lambda_yt2_g12 threshold correction
lambda_g24 threshold correction
double getDeltaMh2EFT0Loop() const
double scale
renormalization scale
double calcTanBeta() const
calculate tan(beta)
lambda_chi_g24 threshold correction
lambda_ytau2_g12 threshold correction
lambda_reg_g24 threshold correction
truncate the two loop expansion at the three loop expansion depth
double getDeltaMh2EFT2Loop(int omitSMLogs, int omitMSSMLogs) const
double calcV() const
calculate v
vev_yb2 threshold correction
double g3
gauge coupling g3 SU(3)
double g1
GUT-normalized gauge coupling g1, with gY = g1*Sqrt[3/5].
Definition of EFT Higgs mass calculation class.
Complex< T > log(const Complex< T > &z_) noexcept
yt4_yb2 threshold correction
lambda_atas threshold correction
#define ERROR_MSG(message)
yb6s threshold correction
lambda_yb4 threshold correction
g1_g1 threshold correction
lambda_chi_g12_g22 threshold correction
friend std::ostream & operator<<(std::ostream &, const Mh2EFTCalculator &)
prints loop corrections for v^2 << MS^2
lambda_reg_g12_g22 threshold correction
double getDeltaMh2EFT1Loop(int omitSMLogs, int omitMSSMLogs) const
lambda_yb2_g12 threshold correction
std::array< int, CouplingOrders::NUMBER_OF_COUPLING_ORDERS > orders
holds all CouplingOrders to enable/disable certain corrections
vev_yt2 threshold correction
double calcV2() const
calculate v^2
vev_ytau2 threshold correction
lambda_ytau4 threshold correction
yt_yt threshold correction
yt_as^2 threshold correction