33 #include <Eigen/Eigenvalues> 51 double calcSmallestEigenvalue(
const Eigen::Matrix2d& matrix)
53 Eigen::EigenSolver<Eigen::Matrix2d> solver(matrix,
false);
54 const auto eigenvalues = solver.eigenvalues().real().cwiseSqrt();
56 return eigenvalues(0) < eigenvalues(1) ? eigenvalues(0) : eigenvalues(1);
90 int getMotherHierarchy(
int hierarchy)
96 if (hierarchy == -1) {
97 throw std::runtime_error(
"No suitable hierarchy found!");
99 throw std::runtime_error(
"Hierarchy " + std::to_string(hierarchy) +
104 static const auto hierarchyMap = [] {
105 std::array<int, Hierarchies::NUMBER_OF_HIERARCHIES>
a{};
123 return hierarchyMap.at(hierarchy);
131 std::cerr <<
"........................................................................\n";
133 std::cerr <<
"Uses code by\n";
134 std::cerr <<
" P. Slavich et al. (2-loop αt*αs) [hep-ph/0105096]\n";
135 std::cerr <<
" P. Slavich et al. (2-loop αt^2) [hep-ph/0305127]\n";
136 std::cerr <<
" P. Slavich et al. (2-loop αb*ατ) [hep-ph/0406166]\n";
137 std::cerr <<
" P. Slavich et al. (2-loop ατ^2) [hep-ph/0112177]\n";
138 std::cerr <<
"Uses contributions\n";
139 std::cerr <<
" 3-loop αt*αs^2 to Mh^2 of Kant et al. [arXiv:1005.5709]\n";
140 std::cerr <<
" 2-loop αt*αs to λ of Bagnaschi et.al. [arXiv:1407.4081]\n";
141 std::cerr <<
" 2-loop αt^2 to λ of Bagnaschi et.al. [arXiv:1703.08166]\n";
142 std::cerr <<
" 2-loop αs^2 to yt of Bednyakov et.al. [hep-ph/0210258, hep-ph/0507139]\n";
143 std::cerr <<
"........................................................................\n";
156 if (!isInfoPrinted &&
verbose) {
158 isInfoPrinted =
true;
176 INFO_MSG(
"3-loop threshold correction Δλ not available for O(αb*αs^2)!");
178 const int mdrFlag = 0;
198 + ho.
getDMh(2), 0, 0, 1));
209 const double v2 =
calcV2();
210 const double gt = sqrt2*
p.
Mt/std::sqrt(v2);
218 p_mass_ES.
mu2(2,2) = pow2(
p.
MSt(0));
219 p_mass_ES.mq2(2,2) = pow2(
p.
MSt(1));
222 disable_non_as_terms(mh2EFTCalculator);
225 const double mh2_eft = mh2EFTCalculator.getDeltaMh2EFT0Loop();
227 const double pref_1L = oneLoop * pow2(
p.
Mt * gt);
229 const double pref_2L = twoLoop * pow2(
p.
Mt * gt *
p.
g3);
271 Eigen::Vector2d mdrMasses;
272 mdrMasses(0) = ho_mdr.getMDRMasses()(0);
273 mdrMasses(1) = ho_mdr.getMDRMasses()(1);
276 + ho_mdr.getDMh(3) - ho.
getDMh(3));
283 ho.
setDMh2(0, std::get<0>(DMh2)(0));
284 ho.
setDMh2(1, std::get<1>(DMh2)(0));
285 ho.
setDMh2(2, std::get<2>(DMh2)(0));
286 ho.
setDMh2(3, std::get<3>(DMh2)(0));
309 int suitableHierarchy = -1;
311 const double s2b = std::sin(2*
calcBeta());
315 Eigen::Matrix2d treelvl;
316 treelvl(0, 0) = 0.5 * s2b * (pow2(
p.
MZ) / tb + pow2(
p.
MA) * tb);
317 treelvl(1, 0) = 0.5 * s2b * (-pow2(
p.
MZ) - pow2(
p.
MA));
318 treelvl(0, 1) = treelvl(1, 0);
319 treelvl(1, 1) = 0.5 * s2b * (pow2(
p.
MZ) * tb + pow2(
p.
MA) / tb);
336 const double Mh2l = calcSmallestEigenvalue(treelvl + Mt41L + Mt42L);
339 const double Mh2LExpanded = calcSmallestEigenvalue(treelvl + Mt41L +
calculateHierarchy(ho, 0, 1, 0));
342 const double twoLoopError = std::abs((Mh2l - Mh2LExpanded));
350 + Mt41L + Mt42L, 0, 0, 1);
359 const double currError = std::sqrt(pow2(twoLoopError/Mh2l)
360 + pow2(expUncertainty2L/Mh2LExpanded));
366 if (error < 0 || currError < error) {
368 suitableHierarchy = hierarchy;
378 return suitableHierarchy;
394 const double delta = 1.3;
398 if (Mst2 > delta*Msq)
return false;
399 if (Mgl > delta*Msq)
return false;
405 return (Mst2 >= Msq) && (Mst2 >
Mgl);
407 return (Msq > Mst2) && (Mst2 >
Mgl);
409 return (Mst1 < Msq) && (Mst1 >=
Mgl);
411 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mgl - Mst1) < std::abs(Mgl - Mst2)) && (Mst2 < Msq) && (Mst1 >=
Mgl);
413 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mgl - Mst1) < std::abs(Mgl - Mst2)) && (Mst2 < Msq) && (Mgl > Mst1);
415 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mst2 -
Mgl) < std::abs(Mgl - Mst1)) && (Mst2*1.3 < Msq) && (Mst2 >=
Mgl);
417 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mst2 -
Mgl) < std::abs(Mgl - Mst1)) && (Mst2*1.3 < Msq) && (Mgl > Mst2);
419 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mst2 -
Mgl) < std::abs(Mgl - Mst1)) && (Mst2 >= Msq) && (Mst2 >=
Mgl);
421 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mst2 -
Mgl) < std::abs(Mgl - Mst1)) && (Mst2 >= Msq) && (Mgl > Mst2);
423 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mst2 -
Mgl) < std::abs(Mgl - Mst1)) && (Msq > Mst2) && (Mst2 >=
Mgl);
425 return (Mst2 - Mst1 > 0.1*Mst1) && ((Mst2 -
Mgl) < std::abs(Mgl - Mst1)) && (Msq > Mst2) && (Mgl > Mst2);
427 return (Mst2 >= Msq) && ((Mst2 - Mst1) < (Mst1 - Mgl));
429 return (Msq > Mst2) && ((Mst1 - Mst1) < (Mst1 - Mgl));
435 std::array<double, 2>
438 if (loopOrder == 1) {
441 if (loopOrder == 2) {
445 if (loopOrder == 3) {
449 throw std::runtime_error(
"There are no tree-level hierarchies included!");
472 int twoLoopFlagIn,
int threeLoopFlagIn)
const 475 double selfEnergy11 = 0., selfEnergy22 = 0., selfEnergy12 = 0.;
485 const bool onlyThreeLoop = oneLoopFlagIn == 0 && twoLoopFlagIn == 0 && threeLoopFlagIn == 1;
488 const auto calcDlambda = [] (
HierarchyObject&
ho,
const auto& hier,
double lmMsf1) {
489 const double c = hier.calc_coef_at_as2_no_sm_logs_log0();
491 + lmMsf1 * hier.calc_coef_at_as2_no_sm_logs_log1()
492 + pow2(lmMsf1) * hier.calc_coef_at_as2_no_sm_logs_log2()
493 + pow3(lmMsf1) * hier.calc_coef_at_as2_no_sm_logs_log3());
498 bool runThisOrder =
false;
503 const auto setLoopFlags = [oneLoopFlagIn, twoLoopFlagIn, threeLoopFlagIn] (
int loopOrder) {
505 return LoopFlags{
false, 0, 0, 0};
507 const bool runThisOrder = oneLoopFlagIn != 0;
508 return LoopFlags{runThisOrder, 1, 0, 0};
510 const bool runThisOrder = twoLoopFlagIn != 0;
511 return LoopFlags{runThisOrder, 0, 1, 0};
513 const bool runThisOrder = threeLoopFlagIn != 0;
514 return LoopFlags{runThisOrder, 0, 0, 1};
517 throw std::runtime_error(
"setLoopFlags: invalid loop order (must be 1, 2 or 3)");
523 const auto loopFlags = setLoopFlags(
loopOrder);
525 if (loopFlags.runThisOrder) {
530 const double Msf1 = Msf.at(0);
531 const double Msf2 = Msf.at(1);
538 const double Dmsqst1 = pow2(Msq) - pow2(Msf1);
539 const double Dmsf12 = pow2(Msf1) - pow2(Msf2);
542 Dmglst1, Dmsf12, Dmsqst1, lmMf, lmMsf1,
543 p.
MG, Mf, Msf1, Msf2, Msq,
p.
mu, s2f,
544 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
545 selfEnergy11 += hier.getS1();
546 selfEnergy22 += hier.getS2();
547 selfEnergy12 += hier.getS12();
549 calcDlambda(ho, hier, lmMsf1);
556 const double Dmsqst1 = pow2(Msq) - pow2(Msf1);
557 const double Dmsf12 = pow2(Msf1) - pow2(Msf2);
560 Dmglst1, Dmsf12, Dmsqst1, lmMf, lmMsf1,
561 Mf, Msf1, Msf2,
p.
mu, s2f,
562 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
563 selfEnergy11 += hier.getS1();
564 selfEnergy22 += hier.getS2();
565 selfEnergy12 += hier.getS12();
567 calcDlambda(ho, hier, lmMsf1);
574 const double Dmsqst1 = pow2(Msq) - pow2(Msf1);
575 const double Dmsf12 = pow2(Msf1) - pow2(Msf2);
578 Dmglst1, Dmsf12, Dmsqst1, lmMf, lmMsf1,
579 Mf, Msf1, Msf2, Msq,
p.
mu, s2f,
580 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
581 selfEnergy11 += hier.getS1();
582 selfEnergy22 += hier.getS2();
583 selfEnergy12 += hier.getS12();
585 calcDlambda(ho, hier, lmMsf1);
591 const double Msusy = (Msf1 + Msf2 +
p.
MG) / 3.;
597 lmMf, lmMsq, lmMsusy, Mf, Msusy, Msq,
598 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
599 selfEnergy11 += hier.getS1();
600 selfEnergy22 += hier.getS2();
601 selfEnergy12 += hier.getS12();
603 calcDlambda(ho, hier, lmMsf1);
614 lmMf, lmMsf1, lmMsf2, lmMsq, Mf, Msf1,
615 Msf2, Msq,
p.
mu, s2f,
616 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
617 selfEnergy11 += hier.getS1();
618 selfEnergy22 += hier.getS2();
619 selfEnergy12 += hier.getS12();
621 calcDlambda(ho, hier, lmMsf1);
632 lmMf, lmMsf1, lmMsf2, lmMsq,
p.
MG, Mf, Msf1,
633 Msf2, Msq,
p.
mu, s2f,
634 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
635 selfEnergy11 += hier.getS1();
636 selfEnergy22 += hier.getS2();
637 selfEnergy12 += hier.getS12();
639 calcDlambda(ho, hier, lmMsf1);
650 lmMf, lmMsf1, lmMsf2, lmMsq,
651 Mf, Msf1, Msf2, Msq,
p.
mu, s2f,
652 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
653 selfEnergy11 += hier.getS1();
654 selfEnergy22 += hier.getS2();
655 selfEnergy12 += hier.getS12();
657 calcDlambda(ho, hier, lmMsf1);
668 lmMf, lmMsf1, lmMsf2, lmMsq,
669 p.
MG, Mf, Msf1, Msf2, Msq,
p.
mu, s2f,
670 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
671 selfEnergy11 += hier.getS1();
672 selfEnergy22 += hier.getS2();
673 selfEnergy12 += hier.getS12();
675 calcDlambda(ho, hier, lmMsf1);
682 const double Dmsqst2 = Msq - Msf2;
686 Dmsqst2, lmMf, lmMsf1, lmMsf2,
687 Mf, Msf1, Msf2,
p.
mu, s2f,
688 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
689 selfEnergy11 += hier.getS1();
690 selfEnergy22 += hier.getS2();
691 selfEnergy12 += hier.getS12();
693 calcDlambda(ho, hier, lmMsf1);
700 const double Dmsqst2 = Msq - Msf2;
704 Dmsqst2, lmMf, lmMsf1, lmMsf2,
705 p.
MG, Mf, Msf1, Msf2,
p.
mu, s2f,
706 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
707 selfEnergy11 += hier.getS1();
708 selfEnergy22 += hier.getS2();
709 selfEnergy12 += hier.getS12();
711 calcDlambda(ho, hier, lmMsf1);
718 const double Dmsqst2 = Msq - Msf2;
722 Dmsqst2, lmMf, lmMsf1, lmMsf2,
723 Mf, Msf1, Msf2, Msq,
p.
mu, s2f,
724 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
725 selfEnergy11 += hier.getS1();
726 selfEnergy22 += hier.getS2();
727 selfEnergy12 += hier.getS12();
729 calcDlambda(ho, hier, lmMsf1);
736 const double Dmsqst2 = Msq - Msf2;
740 Dmsqst2, lmMf, lmMsf1, lmMsf2,
741 p.
MG, Mf, Msf1,Msf2, Msq,
p.
mu, s2f,
742 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
743 selfEnergy11 += hier.getS1();
744 selfEnergy22 += hier.getS2();
745 selfEnergy12 += hier.getS12();
747 calcDlambda(ho, hier, lmMsf1);
755 const double Dmsf12 = pow2(Msf1) - pow2(Msf2);
756 const double Dmsqst1 = pow2(Msq) - pow2(Msf1);
759 p.
MG, Mf, Msf1, Msf2,
p.
mu, s2f,
760 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
761 selfEnergy11 += hier.getS1();
762 selfEnergy22 += hier.getS2();
763 selfEnergy12 += hier.getS12();
765 calcDlambda(ho, hier, lmMsf1);
773 const double Dmsf12 = pow2(Msf1) - pow2(Msf2);
774 const double Dmsqst1 = pow2(Msq) - pow2(Msf1);
777 p.
MG, Mf, Msf1, Msf2, Msq,
p.
mu, s2f,
778 ho.
getMDRFlag(), loopFlags.oneLoop, loopFlags.twoLoop, loopFlags.threeLoop);
779 selfEnergy11 += hier.getS1();
780 selfEnergy22 += hier.getS2();
781 selfEnergy12 += hier.getS12();
783 calcDlambda(ho, hier, lmMsf1);
789 throw std::runtime_error(
"calculateHierarchy: non-handled hierarchy");
799 Eigen::Vector2d mdrMasses;
800 mdrMasses << Msf.at(0), Msf.at(1);
804 Eigen::Matrix2d higgsMassMatrix;
805 higgsMassMatrix << selfEnergy11, selfEnergy12, selfEnergy12, selfEnergy22;
818 unsigned oneLoopFlag,
819 unsigned twoLoopFlag)
const 833 const double Dmglst2 = Mgl - Mst2;
834 const double mdr2mst1ka = (-8. * twoLoopFlag * pow2(Al4p)
835 * (10 * pow2(Msq) * (-1 + 2 * lmMsq + 2 * z2) + pow2(Mst2)
836 * (-1 + 2 * lmMst2 + 2 * z2))) / (3. * pow2(Mst1));
842 Mst1mod = (1 + mdr2mst1ka);
845 Mst1mod = (144 * oneLoopFlag * Al4p * (1 + lmMgl) * pow2(Mgl) * pow4(Msq) + 27 * (1 + mdr2mst1ka) * pow4(Msq) * pow2(Mst1) +
846 twoLoopFlag * pow2(Al4p) * Mgl * (-5 * (67 + 84 * lmMgl - 84 * lmMsq) * pow5(Mgl) - 40 * (43 + 30 * lmMgl - 30 * lmMsq) * pow3(Mgl) * pow2(Msq) +
847 288 * Dmglst2 * pow4(Msq) * (1 - 2 * z2) + 12 * Mgl * pow4(Msq) * (79 + 144 * pow2(lmMgl) - 150 * lmMsq +
848 90 * pow2(lmMsq) - 90 * lmMgl * (-3 + 2 * lmMsq) + 208 * z2))) / (27. * pow4(Msq) * pow2(Mst1));
851 Mst1mod = (48 * oneLoopFlag * Al4p * (1 + lmMgl) * pow2(Mgl) + 9 * (1 + mdr2mst1ka) * pow2(Mst1) +
852 8 * twoLoopFlag * pow2(Al4p) * (-135 * pow2(Msq) + 12 * Dmglst2 * Mgl * (1 - 22 * z2) +
853 pow2(Mgl) * (77 + 135 * lmMgl + 72 * pow2(lmMgl) - 75 * lmMsq -
854 90 * lmMgl * lmMsq + 45 * pow2(lmMsq) + 104 * z2))) / (9. * pow2(Mst1));
857 Mst1mod = (1 + mdr2mst1ka);
863 return Mst1 * std::sqrt(Mst1mod);
874 unsigned oneLoopFlag,
875 unsigned twoLoopFlag)
const 887 const double Dmglst2 = Mgl - Mst2;
888 const double mdr2mst2ka = (-80. * twoLoopFlag * pow2(Al4p)
889 * pow2(Msq) * (-1 + 2 * lmMsq + 2 * z2)) / (3. * pow2(Mst2));
895 Mst2mod = (1 + mdr2mst2ka);
898 Mst2mod = (144 * oneLoopFlag * Al4p * (1 + lmMgl) * pow2(Mgl) * pow4(Msq) + 27 * (1 + mdr2mst2ka) * pow4(Msq) * pow2(Mst2) +
899 twoLoopFlag * pow2(Al4p) * Mgl * (-5 * (67 + 84 * lmMgl - 84 * lmMsq) * pow5(Mgl) - 40 * (43 + 30 * lmMgl - 30 * lmMsq) * pow3(Mgl) * pow2(Msq) +
900 288 * Dmglst2 * pow4(Msq) * (1 - 2 * z2) + 12 * Mgl * pow4(Msq) * (79 + 144 * pow2(lmMgl) - 150 * lmMsq +
901 90 * pow2(lmMsq) - 90 * lmMgl * (-3 + 2 * lmMsq) + 208 * z2))) / (27. * pow4(Msq) * pow2(Mst2));
904 Mst2mod = (48 * oneLoopFlag * Al4p * (1 + lmMgl) * pow2(Mgl) + 9 * (1 + mdr2mst2ka) * pow2(Mst2) +
905 8 * twoLoopFlag * pow2(Al4p) * (-135 * pow2(Msq) + 12 * Dmglst2 * Mgl * (1 - 22 * z2) +
906 pow2(Mgl) * (77 + 135 * lmMgl + 72 * pow2(lmMgl) - 75 * lmMsq -
907 90 * lmMgl * lmMsq + 45 * pow2(lmMsq) + 104 * z2))) / (9. * pow2(Mst2));
910 Mst2mod = (1 + mdr2mst2ka);
916 return Mst2 * std::sqrt(Mst2mod);
931 const int truncateXt =
946 ? 0 :
p.
Au(2,2) -
p.
mu / tb;
949 const double eps = Mst1 * 0.01;
952 const double Mst12 = pow2(Mst1);
954 const double Mgl2 = pow2(
p.
MG);
956 const double scale2 = pow2(
p.
scale);
957 const double Xt2 = pow2(Xt);
958 const double Mst22 = pow2(Mst2);
959 const double Dmst12 = Mst12 - Mst22;
962 const double lmMst1 =
std::log(scale2 / Mst12);
963 const double lmMst2 =
std::log(scale2 / Mst22);
964 const double lmMsq =
std::log(scale2 / Msq2);
965 const double lmMgl =
std::log(scale2 / Mgl2);
968 bool isDegenerate =
false;
971 if (std::abs(Mst1 - Mst2) < eps) {
972 const double Mst2shift = Mst1 + 0.5*std::sqrt(std::abs(Dmst12));
973 const double lmMst2shift =
std::log(scale2 / pow2(Mst2shift));
975 const double lim = (32*Xt2*(-3*(1 + lmMgl)*pow2(Mgl) + 5*(1 + lmMsq)*Msq2 + (1 +
976 lmMst1)*pow2(Mst1))*pow2(
p.
mu))/(3.*pow6(Mst1));
978 const double exact = (16*Xt2*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 +
979 lmMst1)*pow2(Mst1) + (1 + lmMst2)*pow2(Mst2))*pow2(
p.
mu)*(-4*
std::log(Mst1/
980 Mst2)*pow2(Mst1)*pow2(Mst2) + pow4(Mst1) - pow4(Mst2)))/(pow2(Mst1)*
981 pow2(Mst2)*pow3(pow2(Mst1) - pow2(Mst2)));
983 const double exactShifted = (16*Xt2*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 +
984 lmMst1)*pow2(Mst1) + (1 + lmMst2shift)*pow2(Mst2shift))*pow2(
p.
mu)*(-4*
std::log(Mst1/
985 Mst2shift)*pow2(Mst1)*pow2(Mst2shift) + pow4(Mst1) - pow4(Mst2shift)))/(pow2(Mst1)*
986 pow2(Mst2shift)*pow3(pow2(Mst1) - pow2(Mst2shift)));
988 isDegenerate = std::abs(exactShifted - lim) >= std::abs(exact - lim)
989 || !std::isfinite(exact) || !std::isfinite(exactShifted);
992 Eigen::Matrix2d shift;
996 shift(0, 0) = (32*Xt2*(-3*(1 + lmMgl)*pow2(Mgl) + 5*(1 + lmMsq)*Msq2 + (1 +
997 lmMst1)*pow2(Mst1))*pow2(
p.
mu))/(3.*pow6(Mst1));
998 shift(1, 0) = (-32*
p.
mu*(-3*(1 + lmMgl)*pow2(Mgl) + 5*(1 + lmMsq)*Msq2 + (1 +
999 lmMst1)*pow2(Mst1))*(
p.
mu*Xt2 - 3*tb*Xt*pow2(Mst1) + tb*pow3(Xt)))/
1001 shift(0, 1) = shift(1, 0);
1002 shift(1, 1) = (32*(-3*(1 + lmMgl)*pow2(Mgl) + 5*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1003 pow2(Mst1))*(-6*tb*(
p.
mu*Xt + tb*Xt2)*pow2(Mst1) + Xt2*pow2(
p.
mu) +
1004 truncateXt*pow2(tb)*pow2(Xt2) + 2*
p.
mu*tb*pow3(Xt) + 6*pow2(tb)*
1005 pow4(Mst1)))/(3.*pow2(tb)*pow6(Mst1));
1007 shift(0, 0) = (16*Xt2*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 +
1008 lmMst1)*pow2(Mst1) + (1 + lmMst2)*pow2(Mst2))*pow2(
p.
mu)*(-4*
std::log(Mst1/
1009 Mst2)*pow2(Mst1)*pow2(Mst2) + pow4(Mst1) - pow4(Mst2)))/(pow2(Mst1)*
1010 pow2(Mst2)*pow3(pow2(Mst1) - pow2(Mst2)));
1011 shift(1, 0) = (16*
p.
mu*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 +
1012 lmMst1)*pow2(Mst1) + (1 + lmMst2)*pow2(Mst2))*(4*
std::log(Mst1/Mst2)*pow2(
1013 Mst1)*pow2(Mst2)*(
p.
mu*Xt2 + tb*pow3(Xt)) +
p.
mu*Xt2*(-pow4(Mst1) +
1014 pow4(Mst2)) + tb*Xt*(pow3(pow2(Mst1) - pow2(Mst2)) + pow2(Xt)*(-
1015 pow4(Mst1) + pow4(Mst2)))))/(tb*pow2(Mst1)*pow2(Mst2)*pow3(pow2(
1016 Mst1) - pow2(Mst2)));
1017 shift(0, 1) = shift(1, 0);
1018 shift(1, 1) = (16*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1019 pow2(Mst1) + (1 + lmMst2)*pow2(Mst2))*(-4*
std::log(Mst1/Mst2)*pow2(Mst1)*
1020 pow2(Mst2)*(Xt2*pow2(
p.
mu) + truncateXt*pow2(tb)*pow2(Xt2) + 2*
p.
mu*
1021 tb*pow3(Xt)) + Xt2*(-2*pow2(tb)*pow3(pow2(Mst1) - pow2(Mst2)) +
1022 pow2(
p.
mu)*(pow4(Mst1) - pow4(Mst2))) + tb*(-2*
p.
mu*Xt*pow3(pow2(Mst1) -
1023 pow2(Mst2)) + tb*(pow2(Mst1) + pow2(Mst2))*pow3(pow2(Mst1) - pow2(
1024 Mst2)) + 2*
p.
mu*pow3(Xt)*(pow4(Mst1) - pow4(Mst2))) + truncateXt*pow2(
1025 tb)*pow2(Xt2)*(pow4(Mst1) - pow4(Mst2))))/(pow2(Mst1)*pow2(Mst2)*
1026 pow2(tb)*pow3(pow2(Mst1) - pow2(Mst2)));
1030 const double yt = sqrt2 *
p.
Mt /
p.
vu;
1033 return prefac * shift;
1049 const int truncateXt =
1058 const double Mst1 =
p.
MSt(0);
1059 const double Mst2 =
p.
MSt(1);
1066 const double eps = Mst1 * 0.01;
1069 const double Mst12 = pow2(Mst1);
1071 const double Mgl2 = pow2(
p.
MG);
1073 const double scale2 = pow2(
p.
scale);
1074 const double Xt2 = pow2(Xt);
1075 const double Mst22 = pow2(Mst2);
1076 const double Dmst12 = Mst12 - Mst22;
1079 const double lmMst1 = omitLogs *
std::log(scale2 / Mst12);
1080 const double lmMst2 = omitLogs *
std::log(scale2 / Mst12) -
std::log(Mst22 / Mst12);
1081 const double lmMsq = omitLogs *
std::log(scale2 / Mst12) -
std::log(Msq2 / Mst12);
1082 const double lmMgl = omitLogs *
std::log(scale2 / Mst12) -
std::log(Mgl2 / Mst12);
1085 bool isDegenerate =
false;
1088 if (std::abs(Mst1 - Mst2) < eps) {
1089 const double Mst2shift = Mst1 + 0.5*std::sqrt(std::abs(Dmst12));
1090 const double lmMst2shift =
std::log(scale2 / pow2(Mst2shift));
1092 const double lim = (32*(-3*(1 + lmMgl)*pow2(Mgl) + 5*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1093 pow2(Mst1))*(-6*Xt2*pow2(Mst1) + truncateXt*pow2(Xt2) + 6*pow4(Mst1)))/
1096 const double exact = (16*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1097 pow2(Mst1) + (1 + lmMst2)*pow2(Mst2))*(4*truncateXt*std::log(Mst2/Mst1)*
1098 pow2(Mst1)*pow2(Mst2)*pow2(Xt2) - 2*Xt2*pow3(pow2(Mst1) - pow2(Mst2)) +
1099 (pow2(Mst1) + pow2(Mst2))*pow3(pow2(Mst1) - pow2(Mst2)) + truncateXt*
1100 pow2(Xt2)*(pow4(Mst1) - pow4(Mst2))))/(pow2(Mst1)*pow2(Mst2)*pow3(pow2(
1101 Mst1) - pow2(Mst2)));
1103 const double exactShifted = (16*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1104 pow2(Mst1) + (1 + lmMst2shift)*pow2(Mst2shift))*(4*truncateXt*std::log(Mst2shift/Mst1)*
1105 pow2(Mst1)*pow2(Mst2shift)*pow2(Xt2) - 2*Xt2*pow3(pow2(Mst1) - pow2(Mst2shift)) +
1106 (pow2(Mst1) + pow2(Mst2shift))*pow3(pow2(Mst1) - pow2(Mst2shift)) + truncateXt*
1107 pow2(Xt2)*(pow4(Mst1) - pow4(Mst2shift))))/(pow2(Mst1)*pow2(Mst2shift)*pow3(pow2(
1108 Mst1) - pow2(Mst2shift)));
1110 isDegenerate = std::abs(exactShifted - lim) >= std::abs(exact - lim)
1111 || !std::isfinite(exact) || !std::isfinite(exactShifted);
1117 shift = (32*(-3*(1 + lmMgl)*pow2(Mgl) + 5*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1118 pow2(Mst1))*(-6*Xt2*pow2(Mst1) + truncateXt*pow2(Xt2) + 6*pow4(Mst1)))/
1121 shift = (16*(-6*(1 + lmMgl)*pow2(Mgl) + 10*(1 + lmMsq)*Msq2 + (1 + lmMst1)*
1122 pow2(Mst1) + (1 + lmMst2)*pow2(Mst2))*(4*truncateXt*std::log(Mst2/Mst1)*
1123 pow2(Mst1)*pow2(Mst2)*pow2(Xt2) - 2*Xt2*pow3(pow2(Mst1) - pow2(Mst2)) +
1124 (pow2(Mst1) + pow2(Mst2))*pow3(pow2(Mst1) - pow2(Mst2)) + truncateXt*
1125 pow2(Xt2)*(pow4(Mst1) - pow4(Mst2))))/(pow2(Mst1)*pow2(Mst2)*pow3(pow2(
1126 Mst1) - pow2(Mst2)));
1142 unsigned shiftOneLoop,
1143 unsigned shiftTwoLoop)
const 1147 Eigen::Matrix2d Mt41L;
1149 const double Mst1 =
shiftMst1ToMDR(ho, shiftOneLoop, shiftTwoLoop);
1150 const double Mst2 =
shiftMst2ToMDR(ho, shiftOneLoop, shiftTwoLoop);
1156 Mt41L(0, 0) = (-pow2(Mt) * pow2(
p.
mu) *
1157 (-pow2(Mst1) + pow2(Mst2) + pow2(Mst1) *
log(Mst1) +
1158 pow2(Mst2) *
log(Mst1) - pow2(Mst1) *
log(Mst2) -
1159 pow2(Mst2) *
log(Mst2)) * pow2(s2t)) /
1160 (4. * (pow2(Mst1) - pow2(Mst2)));
1163 (-(pow3(Mt) *
p.
mu * (
log(Mst1) -
log(Mst2)) * s2t) / 2. +
1164 (pow2(Mt) * pow2(
p.
mu) * 1 / tan(beta) *
1165 (-pow2(Mst1) + pow2(Mst2) + pow2(Mst1) *
log(Mst1) +
1166 pow2(Mst2) *
log(Mst1) - pow2(Mst1) *
log(Mst2) -
1167 pow2(Mst2) *
log(Mst2)) * pow2(s2t)) /
1168 (4. * (pow2(Mst1) - pow2(Mst2))) +
1169 (Mt *
p.
mu * (-pow2(Mst1) + pow2(Mst2) + pow2(Mst1) *
log(Mst1) +
1170 pow2(Mst2) *
log(Mst1) - pow2(Mst1) *
log(Mst2) -
1171 pow2(Mst2) *
log(Mst2)) * pow3(s2t)) / 8.);
1173 Mt41L (1,0) = Mt41L(0,1);
1176 (pow4(Mt) * (
log(Mst1) +
log(Mst2) - 2 *
log(Mt)) +
1177 pow3(Mt) *
p.
mu * 1 / tan(beta) * (
log(Mst1) -
log(Mst2)) * s2t +
1178 (pow2(Mt) * pow2(1 / sbeta) *
1179 (pow2(Mst1) * pow2(
p.
mu) * pow2(cbeta) -
1180 pow2(Mst2) * pow2(
p.
mu) * pow2(cbeta) -
1181 pow2(Mst1) * pow2(
p.
mu) * pow2(cbeta) *
log(Mst1) -
1182 pow2(Mst2) * pow2(
p.
mu) * pow2(cbeta) *
log(Mst1) +
1183 pow2(Mst1) * pow2(
p.
mu) * pow2(cbeta) *
log(Mst2) +
1184 pow2(Mst2) * pow2(
p.
mu) * pow2(cbeta) *
log(Mst2) +
1185 2 * pow4(Mst1) *
log(Mst1) * pow2(sbeta) -
1186 4 * pow2(Mst1) * pow2(Mst2) *
log(Mst1) * pow2(sbeta) +
1187 2 * pow4(Mst2) *
log(Mst1) * pow2(sbeta) -
1188 2 * pow4(Mst1) *
log(Mst2) * pow2(sbeta) +
1189 4 * pow2(Mst1) * pow2(Mst2) *
log(Mst2) * pow2(sbeta) -
1190 2 * pow4(Mst2) *
log(Mst2) * pow2(sbeta)) * pow2(s2t)) /
1191 (4. * (pow2(Mst1) - pow2(Mst2))) -
1192 (Mt *
p.
mu * 1 / tan(beta) * (-pow2(Mst1) + pow2(Mst2) +
1193 pow2(Mst1) *
log(Mst1) + pow2(Mst2) *
log(Mst1) -
1194 pow2(Mst1) *
log(Mst2) - pow2(Mst2) *
log(Mst2)) *
1196 ((pow2(Mst1) - pow2(Mst2)) *
1197 (-pow2(Mst1) + pow2(Mst2) + pow2(Mst1) *
log(Mst1) +
1198 pow2(Mst2) *
log(Mst1) - pow2(Mst1) *
log(Mst2) -
1199 pow2(Mst2) *
log(Mst2)) * pow4(s2t)) / 16.);
1213 unsigned shiftOneLoop,
1214 unsigned shiftTwoLoop)
const 1218 const double st = std::sin(theta);
1219 const double ct = std::cos(theta);
1220 const double Mst12 = pow2(
shiftMst1ToMDR(ho, shiftOneLoop, shiftTwoLoop));
1221 const double Mst22 = pow2(
shiftMst2ToMDR(ho, shiftOneLoop, shiftTwoLoop));
1222 const double MG =
p.
MG;
1223 const double scale2 = pow2(
p.
scale);
1224 const double mu = -
p.
mu;
1226 const double v2 =
calcV2();
1227 const double g3 =
p.
g3;
1228 const int include_heavy_higgs = 0;
1231 Mt2, MG, Mst12, Mst22, st, ct, scale2, mu, tanb, v2, g3,
1232 include_heavy_higgs);
1248 bool shiftTwoLoop)
const 1250 Eigen::Matrix2d shift{Eigen::Matrix2d::Zero()};
1290 return std::sqrt(
calcV2());
1296 return pow2(
p.
vu) + pow2(
p.
vd);
1310 return 3. / (2 * pow2(Pi *
p.
vu));
1316 return oneLoop * pow2(
p.
g3);
1342 const double v2 =
calcV2();
1343 const double gt2 = 2 * pow2(
p.
Mt) / v2;
1349 p_mass_ES.
mu2(2,2) = pow2(
p.
MSt(0));
1350 p_mass_ES.mq2(2,2) = pow2(
p.
MSt(1));
1353 disable_non_as_terms(mh2EFTCalculator);
1364 const double subtractionTermH3m = mh2EFTCalculator.getDeltaMh2EFT3Loop(0,1,0);
1365 const double subtractionTermEFT = mh2EFTCalculator.getDeltaMh2EFT3Loop(0,0,0);
1372 const double eftLogs = pref*(
1411 const int xt4Flag = xtOrder == 3 ? 1 : 0;
1428 int oneLoopFlag,
int twoLoopFlag,
int threeLoopFlag)
1437 const auto recomputeMh = [&]() {
1438 return calcSmallestEigenvalue(
1444 const auto recomputeMhWithLowerExpansion =
1448 return recomputeMh();
1455 const double Mh = recomputeMh();
1456 double uncertainty{};
1493 return std::sqrt(uncertainty);
Contains the definition of the MSSM_mass_eigenstates class.
double shiftH3mToDRbarPrimeMh2(const himalaya::HierarchyObject &ho, int omitLogs) const
truncate the expansion depth in At/Ab by one order
void setSuitableHierarchy(int hierarchy)
int compareHierarchies(HierarchyObject &ho)
double calcBeta() const
calculate beta from tan(beta)
truncate the expansion depth in the difference of the stop/sbottom 1 mass and the average squark mass...
double vu
VEV of up Higgs, with v = Sqrt[vu^2 + vd^2] ~ 246 GeV.
void setDLambdaEFT(double deltaLambda)
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
#define Himalaya_VERSION_MINOR
Eigen::Matrix2d calcDRbarToMDRbarShift(const HierarchyObject &ho, bool shiftOneLoop, bool shiftTwoLoop) const
yt_as threshold correction
double getThresholdCorrection(ThresholdCouplingOrders couplingOrder, RenSchemes scheme, int omitLogs) const
double calcAsOver4Pi() const
calculate prefactor as/(4 Pi)
RM33 Ad
trilinear down type squark-Higgs coupling matrix
std::array< double, 2 > calcMsfMDRFlag(const HierarchyObject &ho, int loopOrder) const
calculate sfermion masses shifted to MDR
lambga_at threshold correction
void validate(bool verbose)
validates the parameter set
Eigen::Matrix2d shiftH3mToDRbarPrime(const HierarchyObject &ho) const
lambda_atas2 threshold correction
double getDLambdaH3m() const
double vd
VEV of down Higgs, with v = Sqrt[vu^2 + vd^2] ~ 246 GeV.
void setDMh(int loops, const Eigen::Matrix2d &dMh)
himalaya::HierarchyObject ho
truncate the expansion depth in the difference of the stop/sbottom masses by one order ...
bool isHierarchySuitable(const HierarchyObject &ho) const
void setMDRMasses(const Eigen::Vector2d &mdrMasses)
truncate the expansion depth in the stop/sbottom masses by one order
ExpansionDepth
expansion depth flags
truncate the expansion depth in log(Msusy) by one order
void setMDRFlag(int mdrFlag)
double calcSinBeta() const
calculate sin(beta)
void setXtOrderOfDeltaLambdaAtAs2(int xtOrder)
truncate the expansion depth in the average SUSY mass by one order
truncate the expansion depth in the gluino mass by one order
truncate the expansion depth in the average squark mass by one order
#define Himalaya_VERSION_MAJOR
double theta_t
stop mixing angle
Eigen::Matrix2d getMt42L(const HierarchyObject &ho, unsigned shiftOneLoop, unsigned shiftTwoLoop) const
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)
Implementation of logging macros.
double s2b
sine of 2 times the sbottom mixing angle
double getDLambdaNonLog() const
#define Himalaya_VERSION_RELEASE
double getExpansionUncertainty(const himalaya::HierarchyObject &ho, const Eigen::Matrix2d &massMatrix, int oneLoopFlag, int twoLoopFlag, int threeLoopFlag)
void setDLambda(int loops, double deltaLambda)
double s2t
sine of 2 times the stop mixing angle
HierarchyObject calculateDMh3L(bool isAlphab)
double mu
mu parameter, convention of [Phys.Rept. 117 (1985) 75-263]
double calcCosBeta() const
calculate cos(beta)
double calculateMsq2() const
calculates average light squark mass squared
RM33 mu2
soft-breaking squared right-handed up-squark mass parameters
void setDLambdaH3m(double deltaLambda)
double getDRbarPrimeToMSbarShift(int xtOrder, int omitLogs, int omitXtLogs=1) const
Contains routines to diagonalize mass matrices.
void calcDeltaLambda3L(HierarchyObject &ho, bool omitXtOrders) const
void setDMhDRbarPrimeToH3mShift(const Eigen::Matrix2d &shift)
double theta_b
sbottom mixing angle
double getDeltaMh2EFT0Loop() const
double scale
renormalization scale
truncate the expansion depth in the difference of the average squark mass and the stop/sbottom 2 mass...
void setDMh2EFT(int loops, double deltaMh2)
This class performs a fixed-order calculation of the light CP-even Higgs mass up to 2-loop order...
void setDMh2(int loops, double dMh2)
void setDMhExpUncertainty(int loops, double uncertainty)
Definition of the HierarchyObject, which contains all the calculational results.
truncate the two loop expansion at the three loop expansion depth
double getDeltaMh2EFT2Loop(int omitSMLogs, int omitMSSMLogs) const
truncate the expansion depth in the difference of stop/sbottom 1 mass and the gluino mass by one orde...
double calcHiggsMassMatrixPrefactor() const
calculate prefactor of the Higgs mass matrix
double calcTanBeta() const
calculate tan(beta)
double g3
gauge coupling g3 SU(3)
double calcV() const
calculate v = sqrt(vu^2 + vd^2)
void setDLambdaDRbarPrimeToMSbarShift(int loops, double shift)
function declarations for 2-loop MSSM Higgs contributions
Definition of EFT Higgs mass calculation class.
double calcV2() const
calculate v^2 = vu^2 + vd^2
static bool isInfoPrinted
if true, no info will be printed
Complex< T > log(const Complex< T > &z_) noexcept
void setDLambdaXtUncertainty(double uncertainty)
Eigen::Matrix2d getDMh(int loops) const
std::tuple< V2, V2, V2, V2 > fs_diagonalize_hermitian_perturbatively(const RM22 &m0, const RM22 &m1, const RM22 &m2, const RM22 &m3)
HierarchyCalculator(const Parameters &p_, bool verbose_=true)
double getDLambdaEFT() const
double shiftMst1ToMDR(const HierarchyObject &ho, unsigned oneLoopFlag, unsigned twoLoopFlag) const
void setRelDiff2L(double relDiff2L)
void setDMh2FO(int loops, double deltaMh2)
void setAbsDiff2L(double absDiff2L)
int getSuitableHierarchy() const
lambda_atas threshold correction
void setDMh2FOAt(int loops, double deltaMh2)
double shiftMst2ToMDR(const HierarchyObject &ho, unsigned oneLoopFlag, unsigned twoLoopFlag) const
void setDLambdaNonLog(double deltaLambda)
void setDMhDRbarPrimeToMDRbarPrimeShift(const Eigen::Matrix2d &mdrShift)
std::array< int, 12 > expansionDepth
hierarchy expansion depth
double getDLambda(int loops) const
#define INFO_MSG(message)
Definition of the HierarchyCalculator.
double getDRbarPrimeToMSbarXtTerms(Limits limit, int xtOrder, int omitLogs) const
double getDeltaMh2EFT1Loop(int omitSMLogs, int omitMSSMLogs) const
Parameters p
Himalaya input parameters.
Eigen::Matrix2d calculateHierarchy(himalaya::HierarchyObject &ho, int oneLoopFlagIn, int twoLoopFlagIn, int threeLoopFlagIn) const
truncate the expansion depth in the difference of the stop/sbottom 2 mass and the gluino mass by one ...
std::tuple< double, double, double > calculate_Mh2() const
calculates squared Higgs masses
RM33 Au
trilinear up type squark-Higgs coupling matrix
bool verbose
enable/disable verbose output
double calcMeanMsq() const
mean (non-squared) light squark mass
Eigen::Matrix2d getMt41L(const HierarchyObject &ho, unsigned shiftOneLoop, unsigned shiftTwoLoop) const