GM2Calc 2.3.0
Loading...
Searching...
No Matches
THDM.cpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of GM2Calc.
3//
4// GM2Calc is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published
6// by the Free Software Foundation, either version 3 of the License,
7// or (at your option) any later version.
8//
9// GM2Calc is distributed in the hope that it will be useful, but
10// WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with GM2Calc. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
19#include "gm2calc/THDM.hpp"
20#include "gm2calc/gm2_error.hpp"
21#include "gm2_log.hpp"
22#include "gm2_mf.hpp"
23#include "gm2_numerics.hpp"
24
25#include <cmath>
26#include <string>
27
28namespace gm2calc {
29
30namespace {
31
32constexpr double sqrt2 = 1.4142135623730950; // Sqrt[2]
33constexpr double inv_sqrt2 = 0.70710678118654752; // 1/Sqrt[2]
34
35/// Eq.(6) arxiv:0908.1554 and arxiv:1001.0293, solved for xi_f
36double calc_xi(double zeta, double tan_beta) noexcept
37{
38 return (tan_beta + zeta)/(1 - tan_beta*zeta);
39}
40
41} // anonymous namespace
42
43namespace thdm {
44
46{
47 switch (yukawa_type) {
48 case 1: return thdm::Yukawa_type::type_1;
49 case 2: return thdm::Yukawa_type::type_2;
50 case 3: return thdm::Yukawa_type::type_X;
51 case 4: return thdm::Yukawa_type::type_Y;
52 case 5: return thdm::Yukawa_type::aligned;
53 case 6: return thdm::Yukawa_type::general;
54 }
55 throw ESetupError(std::string("invalid Yukawa type: ")
56 + std::to_string(yukawa_type)
57 + " (allowed values: 1,...,6)");
58}
59
60} // namespace thdm
61
63 : sm(sm_)
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)
71 , config(cfg)
72{
73 init_gauge_couplings();
74 set_basis(basis);
75}
76
78 : sm(sm_)
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)
86 , config(cfg)
87{
88 init_gauge_couplings();
89 set_basis(basis);
90}
91
92/// returns the up-type quark masses
93Eigen::Matrix<double,3,1> THDM::get_mu(double scale) const
94{
95 Eigen::Matrix<double,3,1> mu = sm.get_mu();
96
97 if (config.running_couplings && scale > 0) {
98 const double mt_pole = mu(2);
99 // replace mt_pole by mt(SM(6), MS-bar, Q = scale)
100 mu(2) = calculate_mt_SM6_MSbar(mt_pole, sm.get_alpha_s_mz(), sm.get_mz(), scale);
101 }
102
103 return mu;
104}
105
106/// returns the down-type quark masses
107Eigen::Matrix<double,3,1> THDM::get_md(double scale) const
108{
109 Eigen::Matrix<double,3,1> md = sm.get_md();
110
111 if (config.running_couplings && scale > 0) {
112 const double mb_mb = md(2);
113 const double mt_pole = sm.get_mu(2);
114 // replace mb_mb by mb(SM(6), MS-bar, Q = scale)
115 md(2) = calculate_mb_SM6_MSbar(mb_mb, mt_pole, sm.get_alpha_s_mz(), sm.get_mz(), scale);
116 }
117
118 return md;
119}
120
121/// returns the charged lepton masses
122Eigen::Matrix<double,3,1> THDM::get_ml(double scale) const
123{
124 Eigen::Matrix<double,3,1> ml = sm.get_ml();
125
126 if (config.running_couplings && scale > 0) {
127 const double mtau_pole = ml(2);
128 // replace mtau_pole by mtau(SM(6), MS-bar, Q = scale)
130 }
131
132 return ml;
133}
134
135void THDM::init_gauge_couplings()
136{
138}
139
140/**
141 * Initialize Yukawa couplings
142 */
143void THDM::init_yukawas()
144{
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();
149
150 switch (yukawa_type) {
152 Pi_u.setZero();
153 Pi_d.setZero();
154 Pi_l.setZero();
156 set_Gamma_d(sqrt2*md/v1);
157 set_Gamma_l(sqrt2*ml/v1);
158 break;
160 Gamma_u.setZero();
161 Pi_d.setZero();
162 Pi_l.setZero();
164 set_Gamma_d(sqrt2*md/v1);
165 set_Gamma_l(sqrt2*ml/v1);
166 break;
168 Gamma_u.setZero();
169 Gamma_d.setZero();
170 Pi_l.setZero();
172 set_Pi_d(sqrt2*md/v2);
173 set_Gamma_l(sqrt2*ml/v1);
174 break;
176 Pi_u.setZero();
177 Pi_d.setZero();
178 Gamma_l.setZero();
180 set_Gamma_d(sqrt2*md/v1);
181 set_Pi_l(sqrt2*ml/v2);
182 break;
190 break;
195 break;
196 }
197}
198
199/// Table 1, arxiv:1607.06292
200double THDM::get_zeta_u() const
201{
202 switch (yukawa_type) {
207 return 1.0/get_tan_beta();
209 return zeta_u;
211 return 0; // undefined in the general THDM
212 }
213 throw ESetupError("Bug: unhandled case in get_zeta_u.");
214}
215
216/// Table 1, arxiv:1607.06292
217double THDM::get_zeta_d() const
218{
219 switch (yukawa_type) {
221 return 1.0/get_tan_beta();
223 return -get_tan_beta();
225 return 1.0/get_tan_beta();
227 return -get_tan_beta();
229 return zeta_d;
231 return 0; // undefined in the general THDM
232 }
233 throw ESetupError("Bug: unhandled case in get_zeta_d.");
234}
235
236/// Table 1, arxiv:1607.06292
237double THDM::get_zeta_l() const
238{
239 switch (yukawa_type) {
241 return 1.0/get_tan_beta();
243 return -get_tan_beta();
245 return -get_tan_beta();
247 return 1.0/get_tan_beta();
249 return zeta_l;
251 return 0; // undefined in the general THDM
252 }
253 throw ESetupError("Bug: unhandled case in get_zeta_l.");
254}
255
256Eigen::Matrix<std::complex<double>,3,3> THDM::get_rho_u(const Eigen::Matrix<double,3,3>& mu) const
257{
258 const double cb = get_cos_beta();
259 const double v = get_v();
260
261 if (yukawa_type != thdm::Yukawa_type::general) {
262 return sqrt2*mu*get_zeta_u()/v + Delta_u;
263 }
264
265 return get_Pi_u().real()/cb - sqrt2*mu*get_tan_beta()/v;
266}
267
268Eigen::Matrix<std::complex<double>,3,3> THDM::get_rho_d(const Eigen::Matrix<double,3,3>& md) const
269{
270 const double cb = get_cos_beta();
271 const double v = get_v();
272
273 if (yukawa_type != thdm::Yukawa_type::general) {
274 return sqrt2*md*get_zeta_d()/v + Delta_d;
275 }
276
277 return get_Pi_d()/cb - sqrt2*md*get_tan_beta()/v;
278}
279
280Eigen::Matrix<std::complex<double>,3,3> THDM::get_rho_l(const Eigen::Matrix<double,3,3>& ml) const
281{
282 const double cb = get_cos_beta();
283 const double v = get_v();
284
285 if (yukawa_type != thdm::Yukawa_type::general) {
286 return sqrt2*ml*get_zeta_l()/v + Delta_l;
287 }
288
289 return get_Pi_l()/cb - sqrt2*ml*get_tan_beta()/v;
290}
291
292Eigen::Matrix<std::complex<double>,3,3> THDM::get_yuh() const
293{
294 const double cba = get_cos_beta_minus_alpha();
295 const double sba = get_sin_beta_minus_alpha();
296 const double v = get_v();
297 const Eigen::Matrix<double,3,3> mu = get_mu(get_Mhh(0)).asDiagonal();
298
299 return sba*mu/v + cba*get_rho_u(mu)*inv_sqrt2;
300}
301
302Eigen::Matrix<std::complex<double>,3,3> THDM::get_yuH() const
303{
304 const double cba = get_cos_beta_minus_alpha();
305 const double sba = get_sin_beta_minus_alpha();
306 const double v = get_v();
307 const Eigen::Matrix<double,3,3> mu = get_mu(get_Mhh(1)).asDiagonal();
308
309 return cba*mu/v - sba*get_rho_u(mu)*inv_sqrt2;
310}
311
312Eigen::Matrix<std::complex<double>,3,3> THDM::get_yuA() const
313{
314 const Eigen::Matrix<double,3,3> mu = get_mu(get_MAh(1)).asDiagonal();
315 return get_rho_u(mu)*inv_sqrt2;
316}
317
318Eigen::Matrix<std::complex<double>,3,3> THDM::get_yuHp() const
319{
320 const Eigen::Matrix<double,3,3> mu = get_mu(get_MHm(1)).asDiagonal();
321 return -get_rho_u(mu).adjoint()*sm.get_ckm();
322}
323
324Eigen::Matrix<std::complex<double>,3,3> THDM::get_ydh() const
325{
326 const double cba = get_cos_beta_minus_alpha();
327 const double sba = get_sin_beta_minus_alpha();
328 const double v = get_v();
329 const Eigen::Matrix<double,3,3> md = get_md(get_Mhh(0)).asDiagonal();
330
331 return sba*md/v + cba*get_rho_d(md)*inv_sqrt2;
332}
333
334Eigen::Matrix<std::complex<double>,3,3> THDM::get_ydH() const
335{
336 const double cba = get_cos_beta_minus_alpha();
337 const double sba = get_sin_beta_minus_alpha();
338 const double v = get_v();
339 const Eigen::Matrix<double,3,3> md = get_md(get_Mhh(1)).asDiagonal();
340
341 return cba*md/v - sba*get_rho_d(md)*inv_sqrt2;
342}
343
344Eigen::Matrix<std::complex<double>,3,3> THDM::get_ydA() const
345{
346 const Eigen::Matrix<double,3,3> md = get_md(get_MAh(1)).asDiagonal();
347 return -get_rho_d(md)*inv_sqrt2;
348}
349
350Eigen::Matrix<std::complex<double>,3,3> THDM::get_ydHp() const
351{
352 const Eigen::Matrix<double,3,3> md = get_md(get_MHm(1)).asDiagonal();
353 return sm.get_ckm()*get_rho_d(md);
354}
355
356Eigen::Matrix<std::complex<double>,3,3> THDM::get_ylh() const
357{
358 const double cba = get_cos_beta_minus_alpha();
359 const double sba = get_sin_beta_minus_alpha();
360 const double v = get_v();
361 const Eigen::Matrix<double,3,3> ml = get_ml(get_Mhh(0)).asDiagonal();
362
363 return sba*ml/v + cba*get_rho_l(ml)*inv_sqrt2;
364}
365
366Eigen::Matrix<std::complex<double>,3,3> THDM::get_ylH() const
367{
368 const double cba = get_cos_beta_minus_alpha();
369 const double sba = get_sin_beta_minus_alpha();
370 const double v = get_v();
371 const Eigen::Matrix<double,3,3> ml = get_ml(get_Mhh(1)).asDiagonal();
372
373 return cba*ml/v - sba*get_rho_l(ml)*inv_sqrt2;
374}
375
376Eigen::Matrix<std::complex<double>,3,3> THDM::get_ylA() const
377{
378 const Eigen::Matrix<double,3,3> ml = get_ml(get_MAh(1)).asDiagonal();
379 return -get_rho_l(ml)*inv_sqrt2;
380}
381
382Eigen::Matrix<std::complex<double>,3,3> THDM::get_ylHp() const
383{
384 const Eigen::Matrix<double,3,3> ml = get_ml(get_MHm(1)).asDiagonal();
385 return get_rho_l(ml);
386}
387
388void THDM::set_basis(const thdm::Gauge_basis& basis)
389{
390 if (basis.tan_beta <= 0) {
391 const char* err = "tan(beta) must be greater than zero.";
392 if (config.force_output) {
393 WARNING(err);
394 } else {
395 throw EInvalidInput(err);
396 }
397 }
398
399 set_lambda1(basis.lambda(0));
400 set_lambda2(basis.lambda(1));
401 set_lambda3(basis.lambda(2));
402 set_lambda4(basis.lambda(3));
403 set_lambda5(basis.lambda(4));
404 set_lambda6(basis.lambda(5));
405 set_lambda7(basis.lambda(6));
406 set_tan_beta_and_v(basis.tan_beta, sm.get_v());
407 set_m122(basis.m122);
408 set_Pi_u(basis.Pi_u);
409 set_Pi_d(basis.Pi_d);
410 set_Pi_l(basis.Pi_l);
411
412 validate();
413
414 solve_ewsb();
415 init_yukawas();
417
418 if (get_problems().have_problem()) {
419 if (config.force_output) {
421 } else {
422 throw EPhysicalProblem(get_problems().get_problems());
423 }
424 }
425}
426
427void THDM::set_basis(const thdm::Mass_basis& basis)
428{
429 if (basis.mh > basis.mH) {
430 const char* err = "mh must be less than or equal to mH.";
431 if (config.force_output) {
432 WARNING(err);
433 } else {
434 throw EInvalidInput(err);
435 }
436 }
437
438 if (basis.tan_beta <= 0) {
439 const char* err = "tan(beta) must be greater than zero.";
440 if (config.force_output) {
441 WARNING(err);
442 } else {
443 throw EInvalidInput(err);
444 }
445 }
446
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.";
449 if (config.force_output) {
450 WARNING(err);
451 } else {
452 throw EInvalidInput(err);
453 }
454 }
455
456 if (basis.mh < 0) {
457 const char* err = "mh must be greater than or equal to zero.";
458 if (config.force_output) {
459 WARNING(err);
460 } else {
461 throw EInvalidInput(err);
462 }
463 }
464
465 if (basis.mH < 0) {
466 const char* err = "mH must be greater than or equal to zero.";
467 if (config.force_output) {
468 WARNING(err);
469 } else {
470 throw EInvalidInput(err);
471 }
472 }
473
474 if (basis.mA < 0) {
475 const char* err = "mA must be greater than or equal to zero.";
476 if (config.force_output) {
477 WARNING(err);
478 } else {
479 throw EInvalidInput(err);
480 }
481 }
482
483 if (basis.mHp < 0) {
484 const char* err = "mHp must be greater than or equal to zero.";
485 if (config.force_output) {
486 WARNING(err);
487 } else {
488 throw EInvalidInput(err);
489 }
490 }
491
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;
498 const double sb2 = sqr(sb);
499 const double cb2 = sqr(cb);
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;
507 const double lambda6 = basis.lambda_6;
508 const double lambda7 = basis.lambda_7;
509 const double m12_2 = basis.m122;
510 const double v = sm.get_v();
511 const double v2 = sqr(v);
512
513 set_lambda1((sqr(mH*ca) + sqr(mh*sa) - m12_2*tb)/(v2*cb2) + 0.5*tb*(lambda7*tb*tb - 3*lambda6));
514 set_lambda2((sqr(mH*sa) + sqr(mh*ca) - m12_2*ctb)/(v2*sb2) + 0.5*ctb*(lambda6*ctb*ctb - 3*lambda7));
515 set_lambda3(((sqr(mH) - sqr(mh))*ca*sa + 2*sqr(mHp)*sb*cb - m12_2)/(v2*sb*cb) - 0.5*lambda6*ctb - 0.5*lambda7*tb);
516 set_lambda4(((sqr(mA) - 2*sqr(mHp))*cb*sb + m12_2)/(v2*sb*cb) - 0.5*lambda6*ctb - 0.5*lambda7*tb);
517 set_lambda5((m12_2/(sb*cb) - sqr(mA))/v2 - 0.5*lambda6*ctb - 0.5*lambda7*tb);
518 set_lambda6(basis.lambda_6);
519 set_lambda7(basis.lambda_7);
520 set_tan_beta_and_v(basis.tan_beta, v);
521 set_m122(basis.m122);
522 set_Pi_u(basis.Pi_u);
523 set_Pi_d(basis.Pi_d);
524 set_Pi_l(basis.Pi_l);
525
526 validate();
527
528 solve_ewsb();
529 init_yukawas();
531
532 if (get_problems().have_problem()) {
533 if (config.force_output) {
535 } else {
536 throw EPhysicalProblem(get_problems().get_problems());
537 }
538 }
539}
540
541void THDM::set_tan_beta(double tb)
542{
543 set_tan_beta_and_v(tb, sm.get_v());
544}
545
546void THDM::print(std::ostream& ostr) const
547{
549
550 ostr << "Yukawa type: " << yukawa_type_to_string() << '\n';
551 ostr << "Running couplings: " << (config.running_couplings ? "yes" : "no") << '\n';
552
553 ostr << "zeta_u = " << get_zeta_u() << '\n';
554 ostr << "zeta_d = " << get_zeta_d() << '\n';
555 ostr << "zeta_l = " << get_zeta_l() << '\n';
556
557 ostr << "yuh =\n" << get_yuh() << '\n';
558 ostr << "yuH =\n" << get_yuH() << '\n';
559 ostr << "yuA =\n" << get_yuA() << '\n';
560 ostr << "yuHp =\n" << get_yuHp() << '\n';
561 ostr << "ydh =\n" << get_ydh() << '\n';
562 ostr << "ydH =\n" << get_ydH() << '\n';
563 ostr << "ydA =\n" << get_ydA() << '\n';
564 ostr << "ydHp =\n" << get_ydHp() << '\n';
565 ostr << "ylh =\n" << get_ylh() << '\n';
566 ostr << "ylH =\n" << get_ylH() << '\n';
567 ostr << "ylA =\n" << get_ylA() << '\n';
568 ostr << "ylHp =\n" << get_ylHp() << '\n';
569
570 ostr << get_sm();
571}
572
573const char* THDM::yukawa_type_to_string() const
574{
575 switch (yukawa_type) {
577 return "Type I";
578 break;
580 return "Type II";
581 break;
583 return "Type X";
584 break;
586 return "Type Y";
587 break;
589 return "Aligned";
590 break;
592 return "General";
593 break;
594 }
595 throw ESetupError("Bug: unhandled case in yukawa_type_to_string.");
596}
597
598void THDM::validate() const
599{
600 // check zeta_f: only used in the flavour-aligned THDM
601 if (yukawa_type == thdm::Yukawa_type::type_1 ||
602 yukawa_type == thdm::Yukawa_type::type_2 ||
603 yukawa_type == thdm::Yukawa_type::type_X ||
604 yukawa_type == thdm::Yukawa_type::type_Y ||
605 yukawa_type == thdm::Yukawa_type::general) {
606 if (zeta_u != 0) {
607 WARNING("Value of zeta_u = " << zeta_u << " ignored, because Yukawa type is " << yukawa_type_to_string());
608 }
609 if (zeta_d != 0) {
610 WARNING("Value of zeta_d = " << zeta_d << " ignored, because Yukawa type is " << yukawa_type_to_string());
611 }
612 if (zeta_l != 0) {
613 WARNING("Value of zeta_l = " << zeta_l << " ignored, because Yukawa type is " << yukawa_type_to_string());
614 }
615 }
616
617 // check Delta_f: not used in the general THDM
618 if (yukawa_type == thdm::Yukawa_type::general) {
619 if (Delta_u.cwiseAbs().maxCoeff() != 0) {
620 WARNING("Value of Delta_u ignored, because Yukawa type is " << yukawa_type_to_string());
621 }
622 if (Delta_d.cwiseAbs().maxCoeff() != 0) {
623 WARNING("Value of Delta_d ignored, because Yukawa type is " << yukawa_type_to_string());
624 }
625 if (Delta_l.cwiseAbs().maxCoeff() != 0) {
626 WARNING("Value of Delta_l ignored, because Yukawa type is " << yukawa_type_to_string());
627 }
628 }
629
630 // check Pi_f: only used in the general THDM
631 if (yukawa_type == thdm::Yukawa_type::type_1 ||
632 yukawa_type == thdm::Yukawa_type::type_2 ||
633 yukawa_type == thdm::Yukawa_type::type_X ||
634 yukawa_type == thdm::Yukawa_type::type_Y ||
635 yukawa_type == thdm::Yukawa_type::aligned) {
636 if (get_Pi_u().cwiseAbs().maxCoeff() != 0) {
637 WARNING("Value of Pi_u ignored, because Yukawa type is " << yukawa_type_to_string());
638 }
639 if (get_Pi_d().cwiseAbs().maxCoeff() != 0) {
640 WARNING("Value of Pi_d ignored, because Yukawa type is " << yukawa_type_to_string());
641 }
642 if (get_Pi_l().cwiseAbs().maxCoeff() != 0) {
643 WARNING("Value of Pi_l ignored, because Yukawa type is " << yukawa_type_to_string());
644 }
645 }
646}
647
648std::ostream& operator<<(std::ostream& ostr, const THDM& model)
649{
650 model.print(ostr);
651 return ostr;
652}
653
654} // namespace gm2calc
Spectrum generator was not setup correctly.
Definition gm2_error.hpp:37
double get_mz() const
Definition SM.hpp:56
const Eigen::Matrix< std::complex< double >, 3, 3 > & get_ckm() const
Definition SM.hpp:73
double get_cw() const
Definition SM.cpp:128
double get_v() const
Definition SM.cpp:138
const Eigen::Matrix< double, 3, 1 > & get_ml() const
Definition SM.hpp:60
double get_alpha_s_mz() const
Definition SM.hpp:53
double get_alpha_em_mz() const
Definition SM.hpp:52
const Eigen::Matrix< double, 3, 1 > & get_mu() const
Definition SM.hpp:57
const Eigen::Matrix< double, 3, 1 > & get_md() const
Definition SM.hpp:58
void calculate_MSbar_masses()
routine which finds the MSbar mass eigenstates and mixings.
void set_alpha_em_and_cw(double, double)
set alpha_em and cos(theta_w)
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.
Definition THDM.hpp:98
const THDM_problems & get_problems() const
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydH() const
Definition THDM.cpp:334
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylH() const
Definition THDM.cpp:366
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.
Definition THDM.cpp:200
double get_zeta_l() const
Table 1, arxiv:1607.06292.
Definition THDM.cpp:237
double get_sin_beta_minus_alpha() const
sin(beta - alpha_h)
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuA() const
Definition THDM.cpp:312
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydA() const
Definition THDM.cpp:344
double get_cos_beta_minus_alpha() const
cos(beta - alpha_h)
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylHp() const
Definition THDM.cpp:382
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuH() const
Definition THDM.cpp:302
const SM & get_sm() const
Definition THDM.hpp:124
double get_tan_beta() const
tan(beta) = ratio of VEVs v2/v1
void print(std::ostream &) const
Definition THDM.cpp:546
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuHp() const
Definition THDM.cpp:318
Eigen::Matrix< std::complex< double >, 3, 3 > get_yuh() const
Definition THDM.cpp:292
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylh() const
Definition THDM.cpp:356
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
Definition THDM.cpp:350
Eigen::Matrix< std::complex< double >, 3, 3 > get_ydh() const
Definition THDM.cpp:324
THDM(const thdm::Gauge_basis &, const SM &sm_=SM{}, const thdm::Config &cfg=thdm::Config{})
Definition THDM.cpp:62
const Eigen::Array< double, 2, 1 > & get_Mhh() const
CP-even Higgs boson masses.
Eigen::Matrix< std::complex< double >, 3, 3 > get_ylA() const
Definition THDM.cpp:376
double get_zeta_d() const
Table 1, arxiv:1607.06292.
Definition THDM.cpp:217
double get_v() const
SM-like VEV.
void set_tan_beta(double)
Definition THDM.cpp:541
#define WARNING(message)
Definition gm2_log.hpp:30
double v
double mu
Yukawa_type int_to_cpp_yukawa_type(int yukawa_type)
convert int to thdm::Yukawa_type
Definition THDM.cpp:45
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.
Definition gm2_mf.cpp:293
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.
Definition gm2_mf.cpp:262
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.
Definition gm2_mf.cpp:232
Configuration options for the THDM.
Definition THDM.hpp:37
bool running_couplings
use running couplings
Definition THDM.hpp:39
bool force_output
force output
Definition THDM.hpp:38