Himalaya
HierarchyCalculator.hpp
Go to the documentation of this file.
1 // ====================================================================
2 // This file is part of Himalaya.
3 //
4 // Himalaya is licenced under the GNU General Public License (GNU GPL)
5 // version 3.
6 // ====================================================================
7 
8 #pragma once
9 
12 #include <array>
13 #include <Eigen/Core>
14 
15 /**
16  * @file HierarchyCalculator.hpp
17  *
18  * @brief Definition of the HierarchyCalculator.
19  *
20  * Definition of the HierarchyCalculatur, which selects the best
21  * suited hierarchy for the given MSSM parameter point and calculates
22  * the loop corrections.
23  */
24 
25 namespace himalaya {
26  /**
27  * The HierarchyCalculatur class
28  */
30  public:
31  /**
32  * Constructor
33  * @param p_ Himalaya input parameters
34  * @param verbose_ suppress informative output during the calculation, if set to false
35  */
36  HierarchyCalculator(const Parameters& p_, bool verbose_ = true);
37  /**
38  * Calculates the 3-loop mass matrix and other information of the hierarchy selection process.
39  * @param isAlphab a bool which determines if the returned object is proportinal to alpha_b.
40  * @return A HierarchyObject which holds all information of the calculation.
41  */
42  HierarchyObject calculateDMh3L(bool isAlphab);
43  /**
44  * Compares deviation of all hierarchies with the exact two-loop result and returns the hierarchy which minimizes the error.
45  * @param ho a HierarchyObject with constant isAlphab.
46  * @return An integer which is identified with the suitable hierarchy.
47  */
49  /**
50  * Calculates the hierarchy contributions for a specific hierarchy at a specific loop order.
51  * @param ho a HierarchyObject with constant isAlphab.
52  * @param oneLoopFlagIn an integer flag which is 0 or 1 in order to add or omit the expanded one-loop results to the returned value, respectivley.
53  * @param twoLoopFlagIn an integer flag which is 0 or 1 in order to add or omit the expanded two-loop results to the returned value, respectivley.
54  * @param threeLoopFlagIn an integer flag which is 0 or 1 in order to add or omit the expanded three-loop results to the returned value, respectivley.
55  * @throws runtime_error Throws a runtime_error if the tree-level is requested in terms of hierarchies.
56  * @return The loop corrected Higgs mass matrix which contains the expanded corrections at the given order.
57  */
58  Eigen::Matrix2d calculateHierarchy(himalaya::HierarchyObject& ho, int oneLoopFlagIn, int twoLoopFlagIn, int threeLoopFlagIn) const;
59  /**
60  * Calculates the contribution to the order (alpha_x) and (alpha_s alpha_x) as the difference
61  * of the Higgs mass matrices of the MDR and DR scheme. Here, x can be t or b.
62  * @param ho a HierarchyObject with constant isAlphab.
63  * @param shiftOneLoop a bool to shift the terms at one-loop level.
64  * @param shiftTwoLoop a bool to shift the terms at two-loop level.
65  * @return The loop corrected Higgs mass matrix difference of the MDR and DR scheme at the given order.
66  */
67  Eigen::Matrix2d calcDRbarToMDRbarShift(const HierarchyObject& ho, bool shiftOneLoop, bool shiftTwoLoop) const;
68  /**
69  * Calculates the loop corrected Higgs mass matrix at the order O(alpha_x). Here, x can be t or b.
70  * @param ho a HierarchyObject with constant isAlphab.
71  * @param shiftOneLoop An integer flag which is 0 or 1 in order to shift the one-loop terms to the MDR scheme.
72  * @param shiftTwoLoop An integer flag which is 0 or 1 in order to shift the two-loop terms to the MDR scheme.
73  * @return The loop corrected Higgs mass matrix at the order O(alpha_x).
74  */
75  Eigen::Matrix2d getMt41L(const HierarchyObject& ho, unsigned shiftOneLoop, unsigned shiftTwoLoop) const;
76  /**
77  * Calculates the loop corrected Higgs mass matrix at the order O(alpha_x*alpha_s). Here, x can be t or b.
78  * @param ho a HierarchyObject with constant isAlphab.
79  * @param shiftOneLoop An integer flag which is 0 or 1 in order to shift the one-loop terms to the MDR scheme.
80  * @param shiftTwoLoop An integer flag which is 0 or 1 in order to shift the two-loop terms to the MDR scheme.
81  * @return The loop corrected Higgs mass matrix at the order O(alpha_x*alpha_s).
82  */
83  Eigen::Matrix2d getMt42L(const HierarchyObject& ho, unsigned shiftOneLoop, unsigned shiftTwoLoop) const;
84  /**
85  * Shifts Msx1 according to the hierarchy to the MDR scheme.
86  * @param ho a HierarchyObject with constant isAlphab.
87  * @param oneLoopFlag an integer flag which is 0 or 1 in order to shift the order O(alpha_s).
88  * @param twoLoopFlag an integer flag which is 0 or 1 in order to shift the order O(alpha_s^2).
89  * @return A double which is the MDR sx_1 mass.
90  */
91  double shiftMst1ToMDR(const HierarchyObject& ho, unsigned oneLoopFlag, unsigned twoLoopFlag) const;
92  /**
93  * Shifts Mst2 according to the hierarchy to the MDR scheme.
94  * @param ho a HierarchyObject with constant isAlphab.
95  * @param oneLoopFlag an integer flag which is 0 or 1 in order to shift the order O(alpha_s).
96  * @param twoLoopFlag an integer flag which is 0 or 1 in order to shift the order O(alpha_s^2).
97  * @return A double which is the MDR stop_2 mass.
98  */
99  double shiftMst2ToMDR(const HierarchyObject& ho, unsigned oneLoopFlag, unsigned twoLoopFlag) const;
100  /**
101  * Estimates the uncertainty of the expansion at a given order.
102  * @param ho a HierarchyObject with constant isAlphab.
103  * @param massMatrix the CP-even Higgs mass matrix without the corrections whose uncertainty should be estimated.
104  * @param oneLoopFlag an integer flag which is 0 or 1 in order to estimate the uncertainty of the one-loop expansion terms.
105  * @param twoLoopFlag an integer flag which is 0 or 1 in order to estimate the uncertainty of the two-loop expansion terms.
106  * @param threeLoopFlag an integer flag which is 0 or 1 in order to estimte the uncertainty of the three-loop expansion terms.
107  * @return A double which is the estimated uncertainty.
108  */
109  double getExpansionUncertainty(const himalaya::HierarchyObject& ho, const Eigen::Matrix2d& massMatrix,
110  int oneLoopFlag, int twoLoopFlag, int threeLoopFlag);
111  private:
112  Parameters p{}; ///< Himalaya input parameters
113  bool verbose{true}; ///< enable/disable verbose output
114  std::array<int, 12> expansionDepth{}; ///< hierarchy expansion depth
115  /**
116  * Checks if a hierarchy is suitable to the given mass spectrum.
117  * @param ho a HierarchyObject with constant isAlphab and a hierarchy candidate.
118  * @returns A bool if the hierarchy candidate is suitable to the given mass spectrum.
119  */
120  bool isHierarchySuitable(const HierarchyObject& ho) const;
121  /**
122  * Shifts the H3m renormalization scheme to DR' scheme
123  * @param ho a HierarchyObject with constant isAlphab
124  * @return A matrix which shifts the H3m scheme to the DR' scheme at three-loop level
125  *
126  */
127  Eigen::Matrix2d shiftH3mToDRbarPrime(const HierarchyObject& ho) const;
128  /**
129  * Shifts the H3m renormalization scheme to DR' scheme
130  * @param ho a HierarchyObject with constant isAlphab
131  * @param omitLogs a flag to omit logarithmic contributions: (0) omit logs, (1) add them
132  * @return A double which shifts the H3m scheme to the DR' scheme at three-loop level
133  *
134  */
135  double shiftH3mToDRbarPrimeMh2(const himalaya::HierarchyObject& ho, int omitLogs) const;
136  /**
137  * Fills in delta_lambda @ 3L to the given HierarchyObject
138  * @param ho a HierrachyObject
139  * @param omitXtOrders a bool to omit xtOrders of delta_lambda_EFT
140  */
141  void calcDeltaLambda3L(HierarchyObject& ho, bool omitXtOrders) const;
142  /// calculate sin(beta)
143  double calcSinBeta() const;
144  /// calculate cos(beta)
145  double calcCosBeta() const;
146  /// calculate tan(beta)
147  double calcTanBeta() const;
148  /// calculate beta from tan(beta)
149  double calcBeta() const;
150  /// calculate v = sqrt(vu^2 + vd^2)
151  double calcV() const;
152  /// calculate v^2 = vu^2 + vd^2
153  double calcV2() const;
154  /// calculate prefactor of the Higgs mass matrix
155  double calcHiggsMassMatrixPrefactor() const;
156  /// calculate prefactor as/(4 Pi)
157  double calcAsOver4Pi() const;
158  /// mean (non-squared) light squark mass
159  double calcMeanMsq() const;
160  /// calculate sfermion masses shifted to MDR
161  std::array<double, 2> calcMsfMDRFlag(const HierarchyObject& ho, int loopOrder) const;
162  };
163 } // himalaya
double shiftH3mToDRbarPrimeMh2(const himalaya::HierarchyObject &ho, int omitLogs) const
int compareHierarchies(HierarchyObject &ho)
double calcBeta() const
calculate beta from tan(beta)
Eigen::Matrix2d calcDRbarToMDRbarShift(const HierarchyObject &ho, bool shiftOneLoop, bool shiftTwoLoop) const
Definition: H3.cpp:14
double calcAsOver4Pi() const
calculate prefactor as/(4 Pi)
std::array< double, 2 > calcMsfMDRFlag(const HierarchyObject &ho, int loopOrder) const
calculate sfermion masses shifted to MDR
Eigen::Matrix2d shiftH3mToDRbarPrime(const HierarchyObject &ho) const
Definition of the MSSM input parameters.
bool isHierarchySuitable(const HierarchyObject &ho) const
double calcSinBeta() const
calculate sin(beta)
Eigen::Matrix2d getMt42L(const HierarchyObject &ho, unsigned shiftOneLoop, unsigned shiftTwoLoop) const
double getExpansionUncertainty(const himalaya::HierarchyObject &ho, const Eigen::Matrix2d &massMatrix, int oneLoopFlag, int twoLoopFlag, int threeLoopFlag)
HierarchyObject calculateDMh3L(bool isAlphab)
double calcCosBeta() const
calculate cos(beta)
void calcDeltaLambda3L(HierarchyObject &ho, bool omitXtOrders) const
Definition of the HierarchyObject, which contains all the calculational results.
double calcHiggsMassMatrixPrefactor() const
calculate prefactor of the Higgs mass matrix
double calcTanBeta() const
calculate tan(beta)
double calcV() const
calculate v = sqrt(vu^2 + vd^2)
double calcV2() const
calculate v^2 = vu^2 + vd^2
HierarchyCalculator(const Parameters &p_, bool verbose_=true)
double shiftMst1ToMDR(const HierarchyObject &ho, unsigned oneLoopFlag, unsigned twoLoopFlag) const
double shiftMst2ToMDR(const HierarchyObject &ho, unsigned oneLoopFlag, unsigned twoLoopFlag) const
std::array< int, 12 > expansionDepth
hierarchy expansion depth
Parameters p
Himalaya input parameters.
Eigen::Matrix2d calculateHierarchy(himalaya::HierarchyObject &ho, int oneLoopFlagIn, int twoLoopFlagIn, int threeLoopFlagIn) const
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