Himalaya
HierarchyObject.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 
10 #include <array>
11 #include <iosfwd>
12 #include <string>
13 #include <Eigen/Core>
14 
15 /**
16  * @file HierarchyObject.hpp
17  *
18  * @brief Definition of the HierarchyObject, which contains all
19  * the calculational results.
20  */
21 
22 namespace himalaya {
23  /**
24  * The HierarchyObject class.
25  */
27  public:
28  /**
29  * A constructor.
30  * @param isAlphab the boolean which determines wether the members are proportinal to alpha_b or alpha_t.
31  */
33  /**
34  * @return the value of isAlphab.
35  */
36  bool getIsAlphab() const;
37  /**
38  * @return The key to the suitable hierarchy
39  */
40  int getSuitableHierarchy() const;
41  /**
42  * @return The absolute difference of the exact and expanded Higgs masses at two-loop level at the order O(alpha_x + alpha_x*alpha_s).
43  */
44  double getAbsDiff2L() const;
45  /**
46  * @return The relative difference of the exact and expanded Higgs masses at two-loop level at the order O(alpha_x + alpha_x*alpha_s).
47  */
48  double getRelDiff2L() const;
49  /**
50  * @param loops an integer which can be 1, 2 or 3.
51  * @return A double which is the expansion uncertainty for the given loop order.
52  */
53  double getDMhExpUncertainty(int loops) const;
54  /**
55  * @param loops an integer which can be 0, 1, 2, 3. Here, 0 corresponds to the tree-level matrix.
56  * @return The CP-even Higgs mass matrix at the given loop order.
57  */
58  Eigen::Matrix2d getDMh(int loops) const;
59  /**
60  * @param loops an integer which can be 0, 1, 2, 3. Here, 0 corresponds to the tree-level matrix.
61  * @return The correction to squared CP-even Higgs mass at the given loop order.
62  */
63  double getDMh2(int loops) const;
64  /**
65  * @return The matrix M(MDR') - M(DR') at the order O(alpha_x + alpha_x*alpha_s)
66  */
67  Eigen::Matrix2d getDMhDRbarPrimeToMDRbarPrimeShift() const;
68  /**
69  * @return A vector of the MDR stop/sbottom masses. The 0th entry corresponds to the lighter particle.
70  */
71  Eigen::Vector2d getMDRMasses() const;
72  /**
73  * @return the MDRFlag integer.
74  */
75  int getMDRFlag() const;
76  /**
77  * @return Renormalization scheme key
78  */
79  int getRenormalizationScheme() const;
80  /**
81  * @return 3-loop delta_lambda with H3m logs
82  */
83  double getDLambdaH3m() const;
84  /**
85  * @return 3-loop delta_lambda with EFT logs
86  */
87  double getDLambdaEFT() const;
88  /**
89  * @return 3-loop non-logarithmic part of delta_lambda
90  */
91  double getDLambdaNonLog() const;
92  /**
93  * @return the uncertainty of delta_lambda
94  * @param loops an integer, could be 0 (tree), 1 (1L), ..., 3 (3L)
95  */
96  double getDLambdaUncertainty(int loops) const;
97  /**
98  * @return delta_lambda
99  * @param loops an integer, could be 0 (tree), 1 (1L), ..., 3 (3L)
100  */
101  double getDLambda(int loops) const;
102  /**
103  * @return shift to convert delta_lambda from DR' to MS scheme. This shift has to be added to the 1L result
104  * @param loops an integer, could be 0 (tree), 1 (1L), ..., 3 (3L)
105  */
106  double getDLambdaDRbarPrimeToMSbarShift(int loops) const;
107  /**
108  * @return Delta_Mh2_EFT (only contributions that go with αt)
109  * @param loops an integer, could be 0 (tree), 1 (1L), ..., 3 (3L)
110  */
111  double getDMh2EFTAt(int loops) const;
112  /**
113  * @return Delta_Mh2_FO
114  * @param loops an integer, could be 0 (tree), 1 (1L), ..., 3 (3L)
115  */
116  double getDMh2FO(int loops) const;
117  /**
118  * @return Delta_Mh2_FO (only contributions that go with αt)
119  * @param loops an integer, could be 0 (tree), 1 (1L), ..., 3 (3L)
120  */
121  double getDMh2FOAt(int loops) const;
122  /**
123  * Sets the suitable hierarchy
124  * @param hierarchy the integer key of the hierarchy.
125  */
127  /**
128  * Sets the absolute difference of the Higgs masses at two-loop level
129  * @param absDiff2L the absolute difference of the Higgs masses as a double.
130  */
131  void setAbsDiff2L(double absDiff2L);
132  /**
133  * Sets the relative difference ot the Higgs masses at two-loop level
134  * @param relDiff2L the relative difference of the Higgs masses as a double.
135  */
136  void setRelDiff2L(double relDiff2L);
137  /**
138  * Sets the uncertainty of the expansion at a given loop level.
139  * @param loops the integer value of the corresponding loops. Can be 1, 2 or 3.
140  * @param uncertainty the expansion untertainty at the given loop order as a double.
141  */
142  void setDMhExpUncertainty(int loops, double uncertainty);
143  /**
144  * Sets the DR' -> MDR' shift
145  * @param mdrShift the DR' -> MDR' shiftet matrix of the form M(MDR') - M(DR').
146  */
147  void setDMhDRbarPrimeToMDRbarPrimeShift(const Eigen::Matrix2d& mdrShift);
148  /**
149  * Sets the MDR masses
150  * @param mdrMasses a vector containting the MDR masses with the lightest particle at position 0.
151  */
152  void setMDRMasses(const Eigen::Vector2d& mdrMasses);
153  /**
154  * Sets the delta of the CP-even Higgs mass matrix
155  * @param loops the integer value of the corresponding loops. Can be 0, 1, 2 or 3. 0 corresponds to the tree-level.
156  * @param dMh the delta of the mass matrix.
157  */
158  void setDMh(int loops, const Eigen::Matrix2d& dMh);
159  /**
160  * Sets the delta of the squared CP-even Higgs mass
161  * @param loops the integer value of the corresponding loops. Can be 0, 1, 2 or 3. 0 corresponds to the tree-level.
162  * @param dMh2 the delta of the squared mass.
163  */
164  void setDMh2(int loops, double dMh2);
165  /**
166  * Sets the mdrFlag to calculate the corretions in the without MDR (0) or with MDR (1) shifts
167  * @param mdrFlag an int. (0) for H3m (DR')- and (1) for MDR-scheme.
168  * @throws runtime_exception if the flag is neither 0 or 1 an exception is thrown.
169  */
170  void setMDRFlag(int mdrFlag);
171  /**
172  * Sets the renormalization scheme accodring to the RenScheme enum
173  * @param renScheme an int according to the RenScheme enum.
174  * @throws runtime_exception if the flag is not in {0,1,2,3} an exception is thrown
175  */
176  void setRenormalizationScheme(int renScheme);
177  /**
178  * Sets the Delta_lambda at loops-loop
179  * @param loops an integer, could be 0 (tree), ..., 3 (3L Delta_lambda_EFT)
180  * @param deltaLambda delta_lambda at tree-level
181  */
182  void setDLambda(int loops, double deltaLambda);
183  /**
184  * Sets the DR' to MS shift for delta_lambda at loops-loop
185  * @param loops an integer, could be 0(tree), ..., 3 (3L Delta_lambda_EFT shift)
186  * @param shift the shift
187  */
188  void setDLambdaDRbarPrimeToMSbarShift(int loops, double shift);
189  /**
190  * Sets the delta_lambda at 3-loop order with H3m logs.
191  * This variable is only used in the hierarchy selection process.
192  * @param deltaLambda delta_lambda at 3-loop order.
193  */
194  void setDLambdaH3m(double deltaLambda);
195  /**
196  * Sets the delta_lambda at 3-loop order with EFT logs
197  * @param deltaLambda delta_lambda at 3-loop order.
198  */
199  void setDLambdaEFT(double deltaLambda);
200  /**
201  * Sets the non-logarithmic part of delta_lambda at 3-loop order.
202  * @param deltaLambda constant part of delta_lambda at 3-loop order.
203  */
204  void setDLambdaNonLog(double deltaLambda);
205  /**
206  * Sets the Xt parts of the uncertainty of delta_lambda_EFT
207  * @param uncertainty of 3-loop delta_lambda
208  */
209  void setDLambdaXtUncertainty(double uncertainty);
210  /**
211  * Returns the H3m notation of a given hierarchy.
212  * @param hierarchy An integer of a Himalaya hierarchy.
213  * @return Returns the corresponding H3m notation of the given hierarchy as a string.
214  */
215  std::string getH3mHierarchyNotation(int hierarchy) const;
216  /**
217  * Sets the DR' -> H3m shift which should be added to the DR' result
218  * @param shift the DR' -> H3m shift
219  */
220  void setDMhDRbarPrimeToH3mShift(const Eigen::Matrix2d& shift);
221  /**
222  * Returns the DR' -> H3m shift which should be added to the DR' result
223  * @return Returns the DR' -> H3m shift
224  */
225  Eigen::Matrix2d getDMhDRbarPrimeToH3mShift() const;
226  /**
227  * Sets Delta_Mh2_EFT at loops-loop (only contributions that go with αt)
228  * @param loops an integer, could be 0 (tree), ..., 3 (3L with Delta_lambda_EFT)
229  * @param deltaMh2 delta_Mh^2
230  */
231  void setDMh2EFT(int loops, double deltaMh2);
232  /**
233  * Sets Delta_Mh2_FO at loops-loop
234  * @param loops an integer, could be 0 (tree), ..., 3 (3L)
235  * @param deltaMh2 delta_Mh^2
236  */
237  void setDMh2FO(int loops, double deltaMh2);
238  /**
239  * Sets Delta_Mh2_FO at loops-loop (only contributions that go with αt)
240  * @param loops an integer, could be 0 (tree), ..., 3 (3L)
241  * @param deltaMh2 delta_Mh^2
242  */
243  void setDMh2FOAt(int loops, double deltaMh2);
244  private:
245  bool isAlphab{false}; ///< the bool isAlphab
246  int hierarchy{}; ///< the suitable hierarchy
247  int mdrFlag{}; ///< the MDR-scheme flag
248  int renormalizationScheme{}; ///< the renormalization scheme flag
249  double absDiff2L{}; ///< the absolute difference of the two loop Higgs masses
250  double relDiff2L{}; ///< the relative difference of the two loop Higgs masses
251  std::array<double,4> expUncertainties{}; ///< holds the expansion uncertainties, the keys are the loop order: 0, 1, 2, 3
252  std::array<Eigen::Matrix2d,4> dMhMap{ {Eigen::Matrix2d::Zero(),
253  Eigen::Matrix2d::Zero(),
254  Eigen::Matrix2d::Zero(),
255  Eigen::Matrix2d::Zero()} }; ///< holds all mass matrices at the given loop order
256  std::array<double,4> dMh2Map{}; ///< holds loop corretions to squared CP-even Higgs mass
257  Eigen::Matrix2d mdrShift{Eigen::Matrix2d::Zero()}; ///< the mass matrix of the difference of the MDR - DR contributions of the order alpha_x + alpha_x*alpha_s
258  Eigen::Vector2d mdrMasses{Eigen::Vector2d::Zero()}; ///< the 'array' which holds the MDR masses
259  double dLambdaH3m{}; ///< delta_lambda 3-loop with H3m logs
260  double dLambdaEFT{}; ///< delta_lambda 3-loop with EFT logs
261  double dLambdaNonLog{}; ///< delta_lambda 3-loop, non-logarithmic part
262  double dLambdaXtUncertainty{}; ///< The uncertainty of delta_lambda_EFT due to mising Xt terms
263  Eigen::Matrix2d h3mShift{Eigen::Matrix2d::Zero()}; ///< The DR' -> H3m shift which should be added to the DR' result
264  std::array<double,4> dLambdaMap{}; ///< holds all delta_lambda corrections multiplied with prefactors
265  std::array<double,4> dLambdaDRbarPrimeToMSbarShiftMap{}; ///< holds all DR' -> MS shifts for delta_lambda corrections multiplied with prefactors
266  std::array<double,4> dMh2EFTMap{}; ///< holds all delta_Mh2_EFT corrections
267  std::array<double,4> dMh2FOMap{}; ///< holds all delta_Mh2_FO corrections
268  std::array<double,4> dMh2FOAtMap{}; ///< holds all delta_Mh2_FO corrections (only contributions that go with αt)
269  };
270  /**
271  * Prints out all information of the HierarchyObject
272  */
273  std::ostream& operator<<(std::ostream&, const HierarchyObject&);
274 } // himalaya
void setSuitableHierarchy(int hierarchy)
Eigen::Matrix2d getDMhDRbarPrimeToMDRbarPrimeShift() const
void setDLambdaEFT(double deltaLambda)
Eigen::Vector2d mdrMasses
the &#39;array&#39; which holds the MDR masses
int hierarchy
the suitable hierarchy
Definition: H3.cpp:14
std::array< double, 4 > expUncertainties
holds the expansion uncertainties, the keys are the loop order: 0, 1, 2, 3
Eigen::Vector2d getMDRMasses() const
double getDMhExpUncertainty(int loops) const
int mdrFlag
the MDR-scheme flag
std::array< double, 4 > dLambdaMap
holds all delta_lambda corrections multiplied with prefactors
std::array< double, 4 > dMh2EFTMap
holds all delta_Mh2_EFT corrections
double dLambdaEFT
delta_lambda 3-loop with EFT logs
double relDiff2L
the relative difference of the two loop Higgs masses
void setDMh(int loops, const Eigen::Matrix2d &dMh)
void setMDRMasses(const Eigen::Vector2d &mdrMasses)
std::array< double, 4 > dMh2FOMap
holds all delta_Mh2_FO corrections
double getDMh2FO(int loops) const
double dLambdaNonLog
delta_lambda 3-loop, non-logarithmic part
void setMDRFlag(int mdrFlag)
Eigen::Matrix2d h3mShift
The DR&#39; -> H3m shift which should be added to the DR&#39; result.
Eigen::Matrix2d getDMhDRbarPrimeToH3mShift() const
double absDiff2L
the absolute difference of the two loop Higgs masses
void setRenormalizationScheme(int renScheme)
std::string getH3mHierarchyNotation(int hierarchy) const
int renormalizationScheme
the renormalization scheme flag
double getDMh2FOAt(int loops) const
void setDLambda(int loops, double deltaLambda)
double getDLambdaDRbarPrimeToMSbarShift(int loops) const
void setDLambdaH3m(double deltaLambda)
bool isAlphab
the bool isAlphab
void setDMhDRbarPrimeToH3mShift(const Eigen::Matrix2d &shift)
double getDLambdaUncertainty(int loops) const
void setDMh2EFT(int loops, double deltaMh2)
void setDMh2(int loops, double dMh2)
void setDMhExpUncertainty(int loops, double uncertainty)
void setDLambdaDRbarPrimeToMSbarShift(int loops, double shift)
std::ostream & operator<<(std::ostream &ostr, const HierarchyObject &ho)
void setDLambdaXtUncertainty(double uncertainty)
Eigen::Matrix2d getDMh(int loops) const
double dLambdaXtUncertainty
The uncertainty of delta_lambda_EFT due to mising Xt terms.
std::array< double, 4 > dLambdaDRbarPrimeToMSbarShiftMap
holds all DR&#39; -> MS shifts for delta_lambda corrections multiplied with prefactors ...
void setRelDiff2L(double relDiff2L)
void setDMh2FO(int loops, double deltaMh2)
void setAbsDiff2L(double absDiff2L)
void setDMh2FOAt(int loops, double deltaMh2)
void setDLambdaNonLog(double deltaLambda)
void setDMhDRbarPrimeToMDRbarPrimeShift(const Eigen::Matrix2d &mdrShift)
double getDMh2(int loops) const
double getDLambda(int loops) const
std::array< double, 4 > dMh2Map
holds loop corretions to squared CP-even Higgs mass
std::array< double, 4 > dMh2FOAtMap
holds all delta_Mh2_FO corrections (only contributions that go with αt)
Eigen::Matrix2d mdrShift
the mass matrix of the difference of the MDR - DR contributions of the order alpha_x + alpha_x*alpha_...
double getDMh2EFTAt(int loops) const
double dLambdaH3m
delta_lambda 3-loop with H3m logs
std::array< Eigen::Matrix2d, 4 > dMhMap
holds all mass matrices at the given loop order