32constexpr double sqrt2 = 1.4142135623730950;
33constexpr double inv_sqrt2 = 0.70710678118654752;
36double calc_xi(
double zeta,
double tan_beta)
noexcept
38 return (tan_beta +
zeta)/(1 - tan_beta*
zeta);
47 switch (yukawa_type) {
55 throw ESetupError(std::string(
"invalid Yukawa type: ")
56 + std::to_string(yukawa_type)
57 +
" (allowed values: 1,...,6)");
64 , yukawa_type(
basis.yukawa_type)
65 , zeta_u(
basis.zeta_u)
66 , zeta_d(
basis.zeta_d)
67 , zeta_l(
basis.zeta_l)
68 , Delta_u(
basis.Delta_u)
69 , Delta_d(
basis.Delta_d)
70 , Delta_l(
basis.Delta_l)
73 init_gauge_couplings();
79 , yukawa_type(
basis.yukawa_type)
80 , zeta_u(
basis.zeta_u)
81 , zeta_d(
basis.zeta_d)
82 , zeta_l(
basis.zeta_l)
83 , Delta_u(
basis.Delta_u)
84 , Delta_d(
basis.Delta_d)
85 , Delta_l(
basis.Delta_l)
88 init_gauge_couplings();
93Eigen::Matrix<double,3,1> THDM::get_mu(
double scale)
const
95 Eigen::Matrix<double,3,1>
mu = sm.
get_mu();
107Eigen::Matrix<double,3,1> THDM::get_md(
double scale)
const
109 Eigen::Matrix<double,3,1> md = sm.
get_md();
112 const double mb_mb = md(2);
122Eigen::Matrix<double,3,1> THDM::get_ml(
double scale)
const
124 Eigen::Matrix<double,3,1> ml = sm.
get_ml();
135void THDM::init_gauge_couplings()
143void THDM::init_yukawas()
145 const Eigen::Matrix<double,3,3>
mu = sm.
get_mu().asDiagonal();
146 const Eigen::Matrix<double,3,3> md = sm.
get_md().asDiagonal();
147 const Eigen::Matrix<double,3,3> ml = sm.
get_ml().asDiagonal();
148 const Eigen::Matrix<std::complex<double>,3,3>
vckm_adj = sm.
get_ckm().adjoint();
150 switch (yukawa_type) {
202 switch (yukawa_type) {
213 throw ESetupError(
"Bug: unhandled case in get_zeta_u.");
219 switch (yukawa_type) {
233 throw ESetupError(
"Bug: unhandled case in get_zeta_d.");
239 switch (yukawa_type) {
253 throw ESetupError(
"Bug: unhandled case in get_zeta_l.");
256Eigen::Matrix<std::complex<double>,3,3> THDM::get_rho_u(
const Eigen::Matrix<double,3,3>&
mu)
const
268Eigen::Matrix<std::complex<double>,3,3> THDM::get_rho_d(
const Eigen::Matrix<double,3,3>& md)
const
280Eigen::Matrix<std::complex<double>,3,3> THDM::get_rho_l(
const Eigen::Matrix<double,3,3>& ml)
const
297 const Eigen::Matrix<double,3,3>
mu = get_mu(
get_Mhh(0)).asDiagonal();
307 const Eigen::Matrix<double,3,3>
mu = get_mu(
get_Mhh(1)).asDiagonal();
314 const Eigen::Matrix<double,3,3>
mu = get_mu(
get_MAh(1)).asDiagonal();
320 const Eigen::Matrix<double,3,3>
mu = get_mu(
get_MHm(1)).asDiagonal();
321 return -get_rho_u(
mu).adjoint()*sm.
get_ckm();
329 const Eigen::Matrix<double,3,3> md = get_md(
get_Mhh(0)).asDiagonal();
339 const Eigen::Matrix<double,3,3> md = get_md(
get_Mhh(1)).asDiagonal();
346 const Eigen::Matrix<double,3,3> md = get_md(
get_MAh(1)).asDiagonal();
352 const Eigen::Matrix<double,3,3> md = get_md(
get_MHm(1)).asDiagonal();
353 return sm.
get_ckm()*get_rho_d(md);
361 const Eigen::Matrix<double,3,3> ml = get_ml(
get_Mhh(0)).asDiagonal();
371 const Eigen::Matrix<double,3,3> ml = get_ml(
get_Mhh(1)).asDiagonal();
378 const Eigen::Matrix<double,3,3> ml = get_ml(
get_MAh(1)).asDiagonal();
384 const Eigen::Matrix<double,3,3> ml = get_ml(
get_MHm(1)).asDiagonal();
385 return get_rho_l(ml);
390 if (
basis.tan_beta <= 0) {
391 const char*
err =
"tan(beta) must be greater than zero.";
395 throw EInvalidInput(
err);
427void THDM::set_basis(
const thdm::Mass_basis&
basis)
430 const char*
err =
"mh must be less than or equal to mH.";
434 throw EInvalidInput(
err);
438 if (
basis.tan_beta <= 0) {
439 const char*
err =
"tan(beta) must be greater than zero.";
443 throw EInvalidInput(
err);
447 if (std::abs(
basis.sin_beta_minus_alpha) > 1) {
448 const char*
err =
"|sin(beta - alpha_h)| must be less than or equal to 1.";
452 throw EInvalidInput(
err);
457 const char*
err =
"mh must be greater than or equal to zero.";
461 throw EInvalidInput(
err);
466 const char*
err =
"mH must be greater than or equal to zero.";
470 throw EInvalidInput(
err);
475 const char*
err =
"mA must be greater than or equal to zero.";
479 throw EInvalidInput(
err);
484 const char*
err =
"mHp must be greater than or equal to zero.";
488 throw EInvalidInput(
err);
492 const double sba =
basis.sin_beta_minus_alpha;
493 const double tb =
basis.tan_beta;
494 const double ctb = 1/tb;
495 const double rtb = std::sqrt(1 +
sqr(tb));
496 const double sb = tb/
rtb;
497 const double cb = 1/
rtb;
500 const double alpha = -std::asin(
sba) + std::atan(tb);
501 const double sa = std::sin(
alpha);
502 const double ca = std::cos(
alpha);
503 const double mh =
basis.mh;
504 const double mH =
basis.mH;
505 const double mA =
basis.mA;
506 const double mHp =
basis.mHp;
510 const double v = sm.
get_v();
550 ostr <<
"Yukawa type: " << yukawa_type_to_string() <<
'\n';
573const char* THDM::yukawa_type_to_string()
const
575 switch (yukawa_type) {
595 throw ESetupError(
"Bug: unhandled case in yukawa_type_to_string.");
598void THDM::validate()
const
607 WARNING(
"Value of zeta_u = " << zeta_u <<
" ignored, because Yukawa type is " << yukawa_type_to_string());
610 WARNING(
"Value of zeta_d = " << zeta_d <<
" ignored, because Yukawa type is " << yukawa_type_to_string());
613 WARNING(
"Value of zeta_l = " << zeta_l <<
" ignored, because Yukawa type is " << yukawa_type_to_string());
619 if (Delta_u.cwiseAbs().maxCoeff() != 0) {
620 WARNING(
"Value of Delta_u ignored, because Yukawa type is " << yukawa_type_to_string());
622 if (Delta_d.cwiseAbs().maxCoeff() != 0) {
623 WARNING(
"Value of Delta_d ignored, because Yukawa type is " << yukawa_type_to_string());
625 if (Delta_l.cwiseAbs().maxCoeff() != 0) {
626 WARNING(
"Value of Delta_l ignored, because Yukawa type is " << yukawa_type_to_string());
637 WARNING(
"Value of Pi_u ignored, because Yukawa type is " << yukawa_type_to_string());
640 WARNING(
"Value of Pi_d ignored, because Yukawa type is " << yukawa_type_to_string());
643 WARNING(
"Value of Pi_l ignored, because Yukawa type is " << yukawa_type_to_string());
Spectrum generator was not setup correctly.
const Eigen::Matrix< std::complex< double >, 3, 3 > & get_ckm() const
const Eigen::Matrix< double, 3, 1 > & get_ml() const
double get_alpha_s_mz() const
double get_alpha_em_mz() const
const Eigen::Matrix< double, 3, 1 > & get_mu() const
const Eigen::Matrix< double, 3, 1 > & get_md() const
void calculate_MSbar_masses()
routine which finds the MSbar mass eigenstates and mixings.
double get_cos_beta() const
cos(beta)
void set_alpha_em_and_cw(double, double)
set alpha_em and cos(theta_w)
void print(std::ostream &) const
void set_tan_beta_and_v(double, double)
set tan(beta) and vacuum expectation value
Eigen::Matrix< std::complex< double >, 3, 3 > Gamma_u
void set_lambda5(double lambda5_)
void set_Gamma_u(const Eigen::Matrix< std::complex< double >, 3, 3 > &Gamma_u_)
Eigen::Matrix< std::complex< double >, 3, 3 > Pi_l
void set_lambda7(double lambda7_)
const Eigen::Matrix< std::complex< double >, 3, 3 > & get_Pi_d() const
Eigen::Matrix< std::complex< double >, 3, 3 > Pi_u
Eigen::Matrix< std::complex< double >, 3, 3 > Pi_d
void set_lambda4(double lambda4_)
void set_Pi_u(const Eigen::Matrix< std::complex< double >, 3, 3 > &Pi_u_)
const Eigen::Matrix< std::complex< double >, 3, 3 > & get_Pi_l() const
const Eigen::Matrix< std::complex< double >, 3, 3 > & get_Pi_u() const
void set_Pi_d(const Eigen::Matrix< std::complex< double >, 3, 3 > &Pi_d_)
Eigen::Matrix< std::complex< double >, 3, 3 > Gamma_l
void set_m122(double m122_)
void set_lambda3(double lambda3_)
void set_Gamma_d(const Eigen::Matrix< std::complex< double >, 3, 3 > &Gamma_d_)
void set_lambda6(double lambda6_)
void set_Pi_l(const Eigen::Matrix< std::complex< double >, 3, 3 > &Pi_l_)
Eigen::Matrix< std::complex< double >, 3, 3 > Gamma_d
void set_lambda2(double lambda2_)
void set_Gamma_l(const Eigen::Matrix< std::complex< double >, 3, 3 > &Gamma_l_)
void set_lambda1(double lambda1_)
Contains routines to determine the THDM parameters.
const THDM_problems & get_problems() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydH() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylH() const
const Eigen::Array< double, 2, 1 > & get_MHm() const
Goldstone and charged Higgs boson masses (in that order)
double get_zeta_u() const
Table 1, arxiv:1607.06292.
double get_zeta_l() const
Table 1, arxiv:1607.06292.
double get_sin_beta_minus_alpha() const
sin(beta - alpha_h)
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuA() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydA() const
double get_cos_beta_minus_alpha() const
cos(beta - alpha_h)
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylHp() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuH() const
const SM & get_sm() const
double get_tan_beta() const
tan(beta) = ratio of VEVs v2/v1
void print(std::ostream &) const
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuHp() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuh() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylh() const
const Eigen::Array< double, 2, 1 > & get_MAh() const
Goldstone and CP-odd Higgs boson masses (in that order)
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydHp() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydh() const
THDM(const thdm::Gauge_basis &, const SM &sm_=SM{}, const thdm::Config &cfg=thdm::Config{})
const Eigen::Array< double, 2, 1 > & get_Mhh() const
CP-even Higgs boson masses.
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylA() const
double get_zeta_d() const
Table 1, arxiv:1607.06292.
double get_v() const
SM-like VEV.
void set_tan_beta(double)
Yukawa_type int_to_cpp_yukawa_type(int yukawa_type)
convert int to thdm::Yukawa_type
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)
std::ostream & operator<<(std::ostream &os, const MSSMNoFV_onshell &model)
streaming operator
double calculate_mtau_SM6_MSbar(double mtau_pole, double alpha_em_mz, double scale) noexcept
Calculates the running tau lepton MS-bar mass mtau(SM(6),Q) in the SM(6) at the scale Q.
double calculate_mb_SM6_MSbar(double mb_mb, double mt_pole, double alpha_s_mz, double mz, double scale) noexcept
Calculates the running bottom quark MS-bar mass mb(SM(6),Q) in the SM(6) at the scale Q.
double calculate_mt_SM6_MSbar(double mt_pole, double alpha_s_mz, double mz, double scale) noexcept
Calculates the running top quark MS-bar mass mt(SM(6),Q) at the scale Q.
Configuration options for the THDM.
bool running_couplings
use running couplings
bool force_output
force output