44const double pi = 3.1415926535897932;
45const double sqrt2_inv = 0.70710678118654752;
50#define CLASSNAME THDM_mass_eigenstates
52void CLASSNAME::do_force_output(
bool flag)
57bool CLASSNAME::do_force_output()
const
67int CLASSNAME::solve_ewsb_tree_level()
74 m112 = (0.25*(2*m122*v2 + 2*v2*m122 - 2*lambda1*
cube(v1) - lambda7*
75 cube(v2) - lambda7*
cube(v2) - 3*lambda6*v2*
sqr(v1) - 3*v2*lambda6*
sqr(v1)
76 - 2*lambda3*v1*
sqr(v2) - 2*lambda4*v1*
sqr(v2) - lambda5*v1*
sqr(v2)
77 - v1*lambda5*
sqr(v2)))/v1;
78 m222 = (0.25*(2*m122*v1 + 2*v1*m122 - lambda6*
cube(v1) - lambda6
79 *
cube(v1) - 2*lambda2*
cube(v2) - 2*lambda3*v2*
sqr(v1) - 2*lambda4*v2*
sqr(v1)
80 - lambda5*v2*
sqr(v1) - v2*lambda5*
sqr(v1) - 3*lambda7*v1*
sqr(v2) - 3*
81 v1*lambda7*
sqr(v2)))/v2;
83 const bool is_finite = std::isfinite(m112) && std::isfinite(m222);
94int CLASSNAME::solve_ewsb()
96 return solve_ewsb_tree_level();
99void CLASSNAME::print(std::ostream&
ostr)
const
101 ostr <<
"========================================\n"
103 "========================================\n";
105 ostr <<
"----------------------------------------\n"
107 "----------------------------------------\n";
108 ostr <<
"Mhh = {" << Mhh(0) <<
", " << Mhh(1) <<
"} GeV\n";
109 ostr <<
"MAh = {" << MAh(0) <<
", " << MAh(1) <<
"} GeV\n";
110 ostr <<
"MHm = {" << MHm(0) <<
", " << MHm(1) <<
"} GeV\n";
111 ostr <<
"MFu = {" << MFu(0) <<
", " << MFu(1) <<
", " << MFu(2) <<
"} GeV\n";
112 ostr <<
"MFd = {" << MFd(0) <<
", " << MFd(1) <<
", " << MFd(2) <<
"} GeV\n";
113 ostr <<
"MFv = {" << MFv(0) <<
", " << MFv(1) <<
", " << MFv(2) <<
"} GeV\n";
114 ostr <<
"MFe = {" << MFe(0) <<
", " << MFe(1) <<
", " << MFe(2) <<
"} GeV\n";
115 ostr <<
"MVWm = " << MVWm <<
" GeV\n";
116 ostr <<
"MVZ = " << MVZ <<
" GeV\n";
118 ostr <<
"----------------------------------------\n"
120 "----------------------------------------\n";
121 ostr <<
"ZH =\n" << ZH <<
'\n';
122 ostr <<
"ZA =\n" << ZA <<
'\n';
123 ostr <<
"ZP =\n" << ZP <<
'\n';
124 ostr <<
"Vd =\n" << Vd <<
'\n';
125 ostr <<
"Ud =\n" << Ud <<
'\n';
126 ostr <<
"Vu =\n" << Vu <<
'\n';
127 ostr <<
"Uu =\n" << Uu <<
'\n';
128 ostr <<
"Ve =\n" << Ve <<
'\n';
129 ostr <<
"Ue =\n" << Ue <<
'\n';
131 ostr <<
"----------------------------------------\n"
132 "Derived parameters:\n"
133 "----------------------------------------\n";
134 ostr <<
"v = " << get_v() <<
" GeV\n";
135 ostr <<
"theta_w = " << ThetaW() <<
'\n';
136 ostr <<
"alpha_h = " << get_alpha_h() <<
'\n';
137 ostr <<
"beta = " << get_beta() <<
'\n';
138 ostr <<
"sin(beta - alpha_h) = " << get_sin_beta_minus_alpha() <<
'\n';
139 ostr <<
"cos(beta - alpha_h) = " << get_cos_beta_minus_alpha() <<
'\n';
140 ostr <<
"eta = " << get_eta() <<
'\n';
141 ostr <<
"tan(beta) = " << get_tan_beta() <<
'\n';
147void CLASSNAME::calculate_MSbar_masses()
149 calculate_boson_masses();
150 calculate_fermion_masses();
156void CLASSNAME::calculate_boson_masses()
161 solve_ewsb_tree_level();
169 reorder_MSbar_masses();
175void CLASSNAME::calculate_fermion_masses()
189void CLASSNAME::reorder_MSbar_masses()
195Eigen::Matrix<double,3,3> CLASSNAME::get_mass_matrix_Fv()
const
197 return Eigen::Matrix<double,3,3>::Zero();
200void CLASSNAME::calculate_MFv()
205Eigen::Matrix<double,2,2> CLASSNAME::get_mass_matrix_hh()
const
209 mass_matrix_hh(0,0) = m112 + 1.5*lambda6*v1*v2 + 1.5*v1*v2*lambda6 +
210 1.5*lambda1*
sqr(v1) + 0.5*lambda3*
sqr(v2) + 0.5*lambda4*
sqr(v2) + 0.25*
211 lambda5*
sqr(v2) + 0.25*lambda5*
sqr(v2);
212 mass_matrix_hh(0,1) = -0.5*m122 + lambda3*v1*v2 + lambda4*v1*v2 + 0.5*
213 lambda5*v1*v2 + 0.5*v1*v2*lambda5 - 0.5*m122 + 0.75*lambda6*
214 sqr(v1) + 0.75*lambda6*
sqr(v1) + 0.75*lambda7*
sqr(v2) + 0.75*
216 mass_matrix_hh(1,1) = m222 + 1.5*lambda7*v1*v2 + 1.5*v1*v2*lambda7 +
217 0.5*lambda3*
sqr(v1) + 0.5*lambda4*
sqr(v1) + 0.25*lambda5*
sqr(v1) + 0.25*
218 lambda5*
sqr(v1) + 1.5*lambda2*
sqr(v2);
225void CLASSNAME::calculate_Mhh()
231 if (Mhh.minCoeff() < 0.) {
232 problems.flag_tachyon(
"hh");
235 Mhh =
sqrt(Mhh.cwiseAbs());
238Eigen::Matrix<double,2,2> CLASSNAME::get_mass_matrix_Ah()
const
243 const double rt = std::sqrt(1 +
tw*
tw);
245 const double cw = 1/
rt;
247 mass_matrix_Ah(0,0) = m112 + 0.5*lambda6*v1*v2 + 0.5*v1*v2*lambda6 +
248 0.5*lambda1*
sqr(v1) + 0.3872983346207417*g1*g2*
cw*
sw*
sqr(v1) +
249 0.5*lambda3*
sqr(v2) + 0.5*lambda4*
sqr(v2) - 0.25*lambda5*
sqr(
252 mass_matrix_Ah(0,1) = -0.5*m122 + 0.5*lambda5*v1*v2 + 0.5*v1*v2*lambda5
253 - 0.5*m122 + 0.3872983346207417*g1*g2*v1*v2*
cw*
sw + 0.25*lambda6*
sqr(v1)
254 + 0.25*lambda6*
sqr(v1) + 0.25*
255 lambda7*
sqr(v2) + 0.25*lambda7*
sqr(v2) + 0.25*v1*v2*
sqr(g2)*
sqr(
cw) +
257 mass_matrix_Ah(1,1) = m222 + 0.5*lambda7*v1*v2 + 0.5*v1*v2*lambda7 +
258 0.5*lambda3*
sqr(v1) + 0.5*lambda4*
sqr(v1) - 0.25*lambda5*
sqr(v1) - 0.25*
259 lambda5*
sqr(v1) + 0.5*lambda2*
sqr(v2) + 0.3872983346207417*g1*g2*
267void CLASSNAME::calculate_MAh()
273 if (MAh.minCoeff() < 0.) {
274 problems.flag_tachyon(
"Ah");
277 MAh =
sqrt(MAh.cwiseAbs());
280Eigen::Matrix<double,2,2> CLASSNAME::get_mass_matrix_Hm()
const
284 mass_matrix_Hm(0,0) = m112 + 0.5*lambda6*v1*v2 + 0.5*v1*v2*lambda6 +
285 0.5*lambda1*
sqr(v1) + 0.25*
sqr(g2)*
sqr(v1) + 0.5*lambda3*
sqr(v2);
286 mass_matrix_Hm(0,1) = 0.5*lambda4*v1*v2 + 0.5*lambda5*v1*v2 - m122 +
287 0.25*v1*v2*
sqr(g2) + 0.5*lambda6*
sqr(v1) + 0.5*lambda7*
sqr(v2
289 mass_matrix_Hm(1,0) = -m122 + 0.5*lambda4*v1*v2 + 0.5*v1*v2*lambda5 +
290 0.25*v1*v2*
sqr(g2) + 0.5*lambda6*
sqr(v1) + 0.5*lambda7*
sqr(v2);
291 mass_matrix_Hm(1,1) = m222 + 0.5*lambda7*v1*v2 + 0.5*v1*v2*lambda7 +
292 0.5*lambda3*
sqr(v1) + 0.5*lambda2*
sqr(v2) + 0.25*
sqr(g2)*
sqr(v2);
297void CLASSNAME::calculate_MHm()
303 if (MHm.minCoeff() < 0.) {
304 problems.flag_tachyon(
"Hm");
307 MHm =
sqrt(MHm.cwiseAbs());
310Eigen::Matrix<std::complex<double>,3,3> CLASSNAME::get_mass_matrix_Fd()
const
315void CLASSNAME::calculate_MFd()
321Eigen::Matrix<std::complex<double>,3,3> CLASSNAME::get_mass_matrix_Fu()
const
326void CLASSNAME::calculate_MFu()
332Eigen::Matrix<std::complex<double>,3,3> CLASSNAME::get_mass_matrix_Fe()
const
337void CLASSNAME::calculate_MFe()
343double CLASSNAME::get_mass_matrix_VWm()
const
349void CLASSNAME::calculate_MVWm()
355double CLASSNAME::get_mass_matrix_VZ()
const
358 const double rt = std::sqrt(1 +
tw*
tw);
360 const double cw = 1/
rt;
368void CLASSNAME::calculate_MVZ()
374double CLASSNAME::get_ewsb_eq_hh_1()
const
376 double result = m112*v1 - 0.5*m122*v2 - 0.5*v2*m122 + 0.5*lambda1*
cube
377 (v1) + 0.25*lambda7*
cube(v2) + 0.25*lambda7*
cube(v2) + 0.75*lambda6*v2
378 *
sqr(v1) + 0.75*v2*lambda6*
sqr(v1) + 0.5*lambda3*v1*
sqr(v2) + 0.5*
379 lambda4*v1*
sqr(v2) + 0.25*lambda5*v1*
sqr(v2) + 0.25*v1*lambda5*
sqr(v2);
384double CLASSNAME::get_ewsb_eq_hh_2()
const
386 double result = -0.5*m122*v1 + m222*v2 - 0.5*v1*m122 + 0.25*lambda6*
387 cube(v1) + 0.25*lambda6*
cube(v1) + 0.5*lambda2*
cube(v2) + 0.5*lambda3*
388 v2*
sqr(v1) + 0.5*lambda4*v2*
sqr(v1) + 0.25*lambda5*v2*
sqr(v1) + 0.25*v2*
389 lambda5*
sqr(v1) + 0.75*lambda7*v1*
sqr(v2) + 0.75*v1*lambda7*
sqr(v2);
402double CLASSNAME::get_beta()
const
404 return std::atan(get_tan_beta());
407double CLASSNAME::get_sin_beta()
const
409 const double tb = get_tan_beta();
410 return tb/std::sqrt(1.0 +
sqr(tb));
413double CLASSNAME::get_cos_beta()
const
415 const double tb = get_tan_beta();
416 return 1.0/std::sqrt(1.0 +
sqr(tb));
419double CLASSNAME::get_tan_beta()
const
432double CLASSNAME::get_alpha_h()
const
434 double alpha_h = std::asin(ZH(1,1));
437 const double eps = 10*std::numeric_limits<double>::epsilon();
445double CLASSNAME::get_sin_beta_minus_alpha()
const
447 return std::sin(get_beta() - get_alpha_h());
450double CLASSNAME::get_cos_beta_minus_alpha()
const
452 return std::cos(get_beta() - get_alpha_h());
455double CLASSNAME::get_alpha_em()
const
459 return e2/12.566370614359173;
471double CLASSNAME::get_eta()
const
473 return pi/2 + get_alpha_h() - get_beta();
480double CLASSNAME::get_LambdaFive()
const
482 const double tb = get_tan_beta();
483 const double sbcb = tb/(1.0 +
sqr(tb));
484 return 2*get_m122()/(get_v_sqr() *
sbcb);
490double CLASSNAME::get_LambdaSixSeven()
const
492 const double sb = get_sin_beta();
493 const double cb = get_cos_beta();
497double CLASSNAME::ThetaW()
const
502double CLASSNAME::get_v()
const
504 return std::sqrt(get_v_sqr());
507double CLASSNAME::get_v_sqr()
const
512void CLASSNAME::set_alpha_em_and_cw(
double alpha_em,
double cw)
514 const double e = std::sqrt(alpha_em*4*
pi);
515 const double sw = std::sqrt(1 -
sqr(
cw));
520void CLASSNAME::set_tan_beta_and_v(
double tan_beta,
double v)
522 const double sq = std::sqrt(1.0 +
sqr(tan_beta));
523 const double sb = tan_beta/
sq;
524 const double cb = 1/
sq;
contains class for general THDM model with routines needed to solve EWSB and determine the masses and...
void print(std::ostream &) const
contains problem and warning flags
void move_goldstone_to(int idx, double mass, Eigen::ArrayBase< DerivedArray > &v, Eigen::MatrixBase< DerivedMatrix > &z)
The element of v, which is closest to mass, is moved to the position idx.
double abs_sqrt(double x) noexcept
returns square root of absolute of number
T sqr(T x) noexcept
returns number squared
void svd_eigen(const Eigen::Matrix< Scalar, M, N > &m, Eigen::Array< Real,(((M)<(N)) ?(M) :(N)), 1 > &s, Eigen::Matrix< Scalar, M, M > *u, Eigen::Matrix< Scalar, N, N > *vh)
T cube(T x) noexcept
returns number to the third power
std::ostream & operator<<(std::ostream &os, const MSSMNoFV_onshell &model)
streaming operator
constexpr RAII_save< T > make_raii_save(T &var)
void symmetrize(Eigen::MatrixBase< Derived > &m)