Himalaya
MSSM_spectrum.cpp
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 
12 #include "himalaya/misc/Powers.hpp"
13 #include <cmath>
14 #include <complex>
15 #include <iostream>
16 
17 /**
18  * @file MSSM_spectrum.cpp
19  *
20  * @brief Contains the implementation of the \a MSSM_spectrum.
21  */
22 
23 namespace himalaya {
24 namespace mh2_fo {
25 
26 namespace {
27 
28 template <typename T>
29 T constexpr sqr(T x) noexcept { return x*x; }
30 
31 /**
32  * Converts the given vector of masses and the corresponding (complex)
33  * mixing matrix to SLHA convention: Matrix rows with non-zero
34  * imaginary parts are multiplied by i and the corresponding mass
35  * eigenvalue is multiplied by -1. As a result the mixing matrix will
36  * be real and the mass eigenvalues might be positive or negative. It
37  * is assumed that these mixings result from diagonalizing a symmetric
38  * fermion mass matrix in the convention of Haber and Kane,
39  * Phys. Rept. 117 (1985) 75-263. This conversion makes sense only if
40  * the original symmetric mass matrix is real-valued.
41  *
42  * @param m vector of masses
43  * @param z mixing matrix
44  */
45 template<int N>
46 void convert_symmetric_fermion_mixings_to_slha(
47  Eigen::Array<double, N, 1>& m,
48  Eigen::Matrix<std::complex<double>, N, N>& z)
49 {
50  for (int i = 0; i < N; i++) {
51  // check if i'th row contains non-zero imaginary parts
52  if (!is_zero(z.row(i).imag().cwiseAbs().maxCoeff())) {
53  z.row(i) *= std::complex<double>(0.0,1.0);
54  m(i) *= -1;
55  }
56  }
57 }
58 
59 /**
60  * Normalize each element of the given real matrix to be within the
61  * interval [min, max]. Values < min are set to min. Values > max
62  * are set to max.
63  *
64  * @param m matrix
65  * @param min minimum
66  * @param max maximum
67  */
68 template <int M, int N>
69 void normalize_to_interval(Eigen::Matrix<double,M,N>& m, double min = -1., double max = 1.)
70 {
71  auto data = m.data();
72  const auto size = m.size();
73 
74  for (int i = 0; i < size; i++) {
75  if (data[i] < min)
76  data[i] = min;
77  else if (data[i] > max)
78  data[i] = max;
79  }
80 }
81 
82 /**
83  * Normalize each element of the given complex matrix to have a
84  * magnitude within the interval [0, max]. If the magnitude of a
85  * matrix element is > max, then the magnitude is set to max. The
86  * phase angles are not modified.
87  *
88  * @param m matrix
89  * @param max_mag maximum magnitude
90  */
91 template <int M, int N>
92 void normalize_to_interval(Eigen::Matrix<std::complex<double>,M,N>& m, double max_mag = 1.)
93 {
94  auto data = m.data();
95  const auto size = m.size();
96 
97  for (int i = 0; i < size; i++) {
98  if (std::abs(data[i]) > max_mag)
99  data[i] = std::polar(max_mag, std::arg(data[i]));
100  }
101 }
102 
103 /**
104  * Fills lower triangle of symmetric matrix from values in upper
105  * triangle.
106  *
107  * @param m matrix
108  */
109 template <typename Derived>
110 void symmetrize(Eigen::MatrixBase<Derived>& m)
111 {
112  static_assert(Eigen::MatrixBase<Derived>::RowsAtCompileTime ==
113  Eigen::MatrixBase<Derived>::ColsAtCompileTime,
114  "Symmetrize is only defined for squared matrices");
115 
116  for (int i = 0; i < Eigen::MatrixBase<Derived>::RowsAtCompileTime; i++)
117  for (int k = 0; k < i; k++)
118  m(i,k) = m(k,i);
119 }
120 
121 int sign(double x)
122 {
123  return x < 0 ? -1 : 1;
124 }
125 
126 double signed_sqrt(double x)
127 {
128  return sign(x)*std::sqrt(std::abs(x));
129 }
130 
131 } // anonymous namespace
132 
134  : pars(pars_)
135 {
137 }
138 
140 {
141  calculate_MVZ();
142  calculate_MVWm();
143  calculate_MFt();
144  calculate_MFb();
145  calculate_MFtau();
146  calculate_MSveL();
147  calculate_MSvmL();
148  calculate_MSvtL();
149  calculate_MSu();
150  calculate_MSd();
151  calculate_MSc();
152  calculate_MSs();
153  calculate_MSt();
154  calculate_MSb();
155  calculate_MSe();
156  calculate_MSm();
157  calculate_MStau();
158  calculate_Mhh();
159  calculate_MAh();
160  calculate_MHpm();
161  calculate_MChi();
162  calculate_MCha();
163 }
164 
166 {
167  const auto g2 = pars.g2;
168  const auto vu = pars.vu;
169  const auto vd = pars.vd;
170 
171  M2VWm = 0.25*sqr(g2)*(sqr(vd) + sqr(vu));
172 }
173 
175 {
176  const auto gY = pars.g1 * sqrt35;
177  const auto g2 = pars.g2;
178  const auto vu = pars.vu;
179  const auto vd = pars.vd;
180 
181  M2VZ = 0.25*(sqr(gY) + sqr(g2))*(sqr(vd) + sqr(vu));
182 }
183 
185 {
186  MFt = pars.Yu(2,2) * pars.vu * inv_sqrt2;
187 }
188 
190 {
191  MFb = pars.Yd(2,2) * pars.vd * inv_sqrt2;
192 }
193 
195 {
196  MFtau = pars.Ye(2,2) * pars.vd * inv_sqrt2;
197 }
198 
200 {
201  const auto g1 = pars.g1;
202  const auto g2 = pars.g2;
203  const auto vu = pars.vu;
204  const auto vd = pars.vd;
205  const auto ml2 = pars.ml2(0,0);
206 
207  M2SveL = 0.125*(8*ml2 - 0.6*sqr(g1)*(-sqr(vd)
208  + sqr(vu)) - sqr(g2)*(-sqr(vd) + sqr(vu)));
209 }
210 
212 {
213  const auto g1 = pars.g1;
214  const auto g2 = pars.g2;
215  const auto vu = pars.vu;
216  const auto vd = pars.vd;
217  const auto ml2 = pars.ml2(1,1);
218 
219  M2SvmL = 0.125*(8*ml2 - 0.6*sqr(g1)*(-sqr(vd)
220  + sqr(vu)) - sqr(g2)*(-sqr(vd) + sqr(vu)));
221 }
222 
224 {
225  const auto g1 = pars.g1;
226  const auto g2 = pars.g2;
227  const auto vu = pars.vu;
228  const auto vd = pars.vd;
229  const auto ml2 = pars.ml2(2,2);
230 
231  M2SvtL = 0.125*(8*ml2 - 0.6*sqr(g1)*(-sqr(vd)
232  + sqr(vu)) - sqr(g2)*(-sqr(vd) + sqr(vu)));
233 }
234 
236 {
237  const auto g1 = pars.g1;
238  const auto g2 = pars.g2;
239  const auto yu = 0.; // pars.Yu(0,0);
240  const auto vu = pars.vu;
241  const auto vd = pars.vd;
242  const auto mu = pars.mu;
243  const auto Tyu = pars.Au(0,0) * yu;
244  const auto mq2 = pars.mq2(0,0);
245  const auto mu2 = pars.mu2(0,0);
246 
247  RM22 mass_matrix_Su;
248 
249  mass_matrix_Su(0,0) = mq2 - 0.025*sqr(g1)*sqr(vd) + 0.125*sqr(g2)*sqr(
250  vd) + 0.5*sqr(yu)*sqr(vu) + 0.025*sqr(g1)*sqr(vu) - 0.125*sqr(g2)
251  *sqr(vu);
252  mass_matrix_Su(0,1) = inv_sqrt2*vu*Tyu - inv_sqrt2*vd*yu*mu;
253  mass_matrix_Su(1,0) = mass_matrix_Su(0,1);
254  mass_matrix_Su(1,1) = mu2 + 0.1*sqr(g1)*sqr(vd) + 0.5*sqr(yu)*
255  sqr(vu) - 0.1*sqr(g1)*sqr(vu);
256 
257  return mass_matrix_Su;
258 }
259 
261 {
262  const auto mass_matrix_Su = get_mass_matrix_Su();
263  fs_diagonalize_hermitian(mass_matrix_Su, M2Su, ZU);
264  normalize_to_interval(ZU);
265 }
266 
268 {
269  const auto g1 = pars.g1;
270  const auto g2 = pars.g2;
271  const auto yd = 0.; // pars.Yd(0,0);
272  const auto vu = pars.vu;
273  const auto vd = pars.vd;
274  const auto mu = pars.mu;
275  const auto Tyd = pars.Ad(0,0) * yd;
276  const auto mq2 = pars.mq2(0,0);
277  const auto md2 = pars.md2(0,0);
278 
279  RM22 mass_matrix_Sd;
280 
281  mass_matrix_Sd(0,0) = mq2 + 0.5*sqr(yd)*sqr(vd) - 0.025*sqr(g1)
282  *sqr(vd) - 0.125*sqr(g2)*sqr(vd) + 0.025*sqr(g1)*sqr(vu) + 0.125*sqr(g2)*
283  sqr(vu);
284  mass_matrix_Sd(0,1) = inv_sqrt2*vd*Tyd - inv_sqrt2*vu*yd*mu;
285  mass_matrix_Sd(1,0) = mass_matrix_Sd(0,1);
286  mass_matrix_Sd(1,1) = md2 + 0.5*sqr(yd)*sqr(vd) - 0.05*sqr(g1)*
287  sqr(vd) + 0.05*sqr(g1)*sqr(vu);
288 
289  return mass_matrix_Sd;
290 }
291 
293 {
294  const auto mass_matrix_Sd = get_mass_matrix_Sd();
295  fs_diagonalize_hermitian(mass_matrix_Sd, M2Sd, ZD);
296  normalize_to_interval(ZD);
297 }
298 
300 {
301  const auto g1 = pars.g1;
302  const auto g2 = pars.g2;
303  const auto yc = 0.; // pars.Yu(1,1);
304  const auto vu = pars.vu;
305  const auto vd = pars.vd;
306  const auto mu = pars.mu;
307  const auto Tyc = pars.Au(1,1) * yc;
308  const auto mq2 = pars.mq2(1,1);
309  const auto mu2 = pars.mu2(1,1);
310 
311  RM22 mass_matrix_Sc;
312 
313  mass_matrix_Sc(0,0) = mq2 - 0.025*sqr(g1)*sqr(vd) + 0.125*sqr(g2)*sqr(
314  vd) + 0.5*sqr(yc)*sqr(vu) + 0.025*sqr(g1)*sqr(vu) - 0.125*sqr(g2)
315  *sqr(vu);
316  mass_matrix_Sc(0,1) = inv_sqrt2*vu*Tyc - inv_sqrt2*vd*yc*mu;
317  mass_matrix_Sc(1,0) = mass_matrix_Sc(0,1);
318  mass_matrix_Sc(1,1) = mu2 + 0.1*sqr(g1)*sqr(vd) + 0.5*sqr(yc)*
319  sqr(vu) - 0.1*sqr(g1)*sqr(vu);
320 
321  return mass_matrix_Sc;
322 }
323 
325 {
326  const auto mass_matrix_Sc = get_mass_matrix_Sc();
327  fs_diagonalize_hermitian(mass_matrix_Sc, M2Sc, ZC);
328  normalize_to_interval(ZC);
329 }
330 
332 {
333  const auto g1 = pars.g1;
334  const auto g2 = pars.g2;
335  const auto ys = 0.; // pars.Yd(1,1);
336  const auto vu = pars.vu;
337  const auto vd = pars.vd;
338  const auto mu = pars.mu;
339  const auto Tys = pars.Ad(1,1) * ys;
340  const auto mq2 = pars.mq2(1,1);
341  const auto md2 = pars.md2(1,1);
342 
343  RM22 mass_matrix_Ss;
344 
345  mass_matrix_Ss(0,0) = mq2 + 0.5*sqr(ys)*sqr(vd) - 0.025*sqr(g1)
346  *sqr(vd) - 0.125*sqr(g2)*sqr(vd) + 0.025*sqr(g1)*sqr(vu) + 0.125*sqr(g2)*
347  sqr(vu);
348  mass_matrix_Ss(0,1) = inv_sqrt2*vd*Tys - inv_sqrt2*vu*ys*mu;
349  mass_matrix_Ss(1,0) = mass_matrix_Ss(0,1);
350  mass_matrix_Ss(1,1) = md2 + 0.5*sqr(ys)*sqr(vd) - 0.05*sqr(g1)*
351  sqr(vd) + 0.05*sqr(g1)*sqr(vu);
352 
353  return mass_matrix_Ss;
354 }
355 
357 {
358  const auto mass_matrix_Ss = get_mass_matrix_Ss();
359  fs_diagonalize_hermitian(mass_matrix_Ss, M2Ss, ZS);
360  normalize_to_interval(ZS);
361 }
362 
364 {
365  const auto g1 = pars.g1;
366  const auto g2 = pars.g2;
367  const auto yt = pars.Yu(2,2);
368  const auto vu = pars.vu;
369  const auto vd = pars.vd;
370  const auto mu = pars.mu;
371  const auto Tyt = pars.Au(2,2) * yt;
372  const auto mq2 = pars.mq2(2,2);
373  const auto mu2 = pars.mu2(2,2);
374 
375  RM22 mass_matrix_St;
376 
377  mass_matrix_St(0,0) = mq2 - 0.025*sqr(g1)*sqr(vd) + 0.125*sqr(g2)*sqr(
378  vd) + 0.5*sqr(yt)*sqr(vu) + 0.025*sqr(g1)*sqr(vu) - 0.125*sqr(g2)
379  *sqr(vu);
380  mass_matrix_St(0,1) = inv_sqrt2*vu*Tyt - inv_sqrt2*vd*yt*mu;
381  mass_matrix_St(1,0) = mass_matrix_St(0,1);
382  mass_matrix_St(1,1) = mu2 + 0.1*sqr(g1)*sqr(vd) + 0.5*sqr(yt)*
383  sqr(vu) - 0.1*sqr(g1)*sqr(vu);
384 
385  return mass_matrix_St;
386 }
387 
389 {
390  const auto mass_matrix_St = get_mass_matrix_St();
391  fs_diagonalize_hermitian(mass_matrix_St, M2St, ZT);
392  normalize_to_interval(ZT);
393 }
394 
396 {
397  const auto g1 = pars.g1;
398  const auto g2 = pars.g2;
399  const auto yb = pars.Yd(2,2);
400  const auto vu = pars.vu;
401  const auto vd = pars.vd;
402  const auto mu = pars.mu;
403  const auto Tyb = pars.Ad(2,2) * yb;
404  const auto mq2 = pars.mq2(2,2);
405  const auto md2 = pars.md2(2,2);
406 
407  RM22 mass_matrix_Sb;
408 
409  mass_matrix_Sb(0,0) = mq2 + 0.5*sqr(yb)*sqr(vd) - 0.025*sqr(g1)
410  *sqr(vd) - 0.125*sqr(g2)*sqr(vd) + 0.025*sqr(g1)*sqr(vu) + 0.125*sqr(g2)*
411  sqr(vu);
412  mass_matrix_Sb(0,1) = inv_sqrt2*vd*Tyb - inv_sqrt2*vu*yb*mu;
413  mass_matrix_Sb(1,0) = mass_matrix_Sb(0,1);
414  mass_matrix_Sb(1,1) = md2 + 0.5*sqr(yb)*sqr(vd) - 0.05*sqr(g1)*
415  sqr(vd) + 0.05*sqr(g1)*sqr(vu);
416 
417  return mass_matrix_Sb;
418 }
419 
421 {
422  const auto mass_matrix_Sb = get_mass_matrix_Sb();
423  fs_diagonalize_hermitian(mass_matrix_Sb, M2Sb, ZB);
424  normalize_to_interval(ZB);
425 }
426 
428 {
429  const auto g1 = pars.g1;
430  const auto g2 = pars.g2;
431  const auto ye = 0.; // pars.Ye(0,0);
432  const auto vu = pars.vu;
433  const auto vd = pars.vd;
434  const auto mu = pars.mu;
435  const auto Tye = pars.Ae(0,0) * ye;
436  const auto ml2 = pars.ml2(0,0);
437  const auto me2 = pars.me2(0,0);
438 
439  RM22 mass_matrix_Se;
440 
441  mass_matrix_Se(0,0) = ml2 + 0.5*sqr(ye)*sqr(vd) + 0.075*sqr(
442  g1)*sqr(vd) - 0.125*sqr(g2)*sqr(vd) - 0.075*sqr(g1)*sqr(vu) + 0.125*sqr(
443  g2)*sqr(vu);
444  mass_matrix_Se(0,1) = inv_sqrt2*vd*Tye - inv_sqrt2*vu*ye*mu;
445  mass_matrix_Se(1,0) = mass_matrix_Se(0,1);
446  mass_matrix_Se(1,1) = me2 + 0.5*sqr(ye)*sqr(vd) - 0.15*sqr(g1
447  )*sqr(vd) + 0.15*sqr(g1)*sqr(vu);
448 
449  return mass_matrix_Se;
450 }
451 
453 {
454  const auto mass_matrix_Se = get_mass_matrix_Se();
455  fs_diagonalize_hermitian(mass_matrix_Se, M2Se, ZE);
456  normalize_to_interval(ZE);
457 }
458 
460 {
461  const auto g1 = pars.g1;
462  const auto g2 = pars.g2;
463  const auto ym = 0.; // pars.Ye(1,1);
464  const auto vu = pars.vu;
465  const auto vd = pars.vd;
466  const auto mu = pars.mu;
467  const auto Tym = pars.Ae(1,1) * ym;
468  const auto ml2 = pars.ml2(1,1);
469  const auto me2 = pars.me2(1,1);
470 
471  RM22 mass_matrix_Sm;
472 
473  mass_matrix_Sm(0,0) = ml2 + 0.5*sqr(ym)*sqr(vd) + 0.075*sqr(
474  g1)*sqr(vd) - 0.125*sqr(g2)*sqr(vd) - 0.075*sqr(g1)*sqr(vu) + 0.125*sqr(
475  g2)*sqr(vu);
476  mass_matrix_Sm(0,1) = inv_sqrt2*vd*Tym - inv_sqrt2*vu*ym*mu;
477  mass_matrix_Sm(1,0) = mass_matrix_Sm(0,1);
478  mass_matrix_Sm(1,1) = me2 + 0.5*sqr(ym)*sqr(vd) - 0.15*sqr(g1
479  )*sqr(vd) + 0.15*sqr(g1)*sqr(vu);
480 
481  return mass_matrix_Sm;
482 }
483 
485 {
486  const auto mass_matrix_Sm = get_mass_matrix_Sm();
487  fs_diagonalize_hermitian(mass_matrix_Sm, M2Sm, ZM);
488  normalize_to_interval(ZM);
489 }
490 
492 {
493  const auto g1 = pars.g1;
494  const auto g2 = pars.g2;
495  const auto ytau = pars.Ye(2,2);
496  const auto vu = pars.vu;
497  const auto vd = pars.vd;
498  const auto mu = pars.mu;
499  const auto Tytau = pars.Ae(2,2) * ytau;
500  const auto ml2 = pars.ml2(2,2);
501  const auto me2 = pars.me2(2,2);
502 
503  RM22 mass_matrix_Stau;
504 
505  mass_matrix_Stau(0,0) = ml2 + 0.5*sqr(ytau)*sqr(vd) + 0.075*sqr(
506  g1)*sqr(vd) - 0.125*sqr(g2)*sqr(vd) - 0.075*sqr(g1)*sqr(vu) + 0.125*sqr(
507  g2)*sqr(vu);
508  mass_matrix_Stau(0,1) = inv_sqrt2*vd*Tytau - inv_sqrt2*vu*ytau*mu;
509  mass_matrix_Stau(1,0) = mass_matrix_Stau(0,1);
510  mass_matrix_Stau(1,1) = me2 + 0.5*sqr(ytau)*sqr(vd) - 0.15*sqr(g1
511  )*sqr(vd) + 0.15*sqr(g1)*sqr(vu);
512 
513  return mass_matrix_Stau;
514 }
515 
517 {
518  const auto mass_matrix_Stau = get_mass_matrix_Stau();
519  fs_diagonalize_hermitian(mass_matrix_Stau, M2Stau, ZTau);
520  normalize_to_interval(ZTau);
521 }
522 
524 {
525  const auto g1 = pars.g1;
526  const auto g2 = pars.g2;
527  const auto vu = pars.vu;
528  const auto vd = pars.vd;
529  const auto mA2 = sqr(pars.MA);
530  const auto v2 = sqr(vu) + sqr(vd);
531  const auto Bmu = mA2*vu*vd/v2;
532 
533  RM22 mass_matrix_hh;
534 
535  mass_matrix_hh(0,0) = (Bmu*vu)/vd + ((3*sqr(g1) + 5*sqr(g2))*sqr(vd))/20.;
536  mass_matrix_hh(0,1) = -Bmu - (vd*vu*(3*sqr(g1) + 5*sqr(g2)))/20.;
537  mass_matrix_hh(1,0) = mass_matrix_hh(0,1);
538  mass_matrix_hh(1,1) = (Bmu*vd)/vu + ((3*sqr(g1) + 5*sqr(g2))*sqr(vu))/20.;
539 
540  return mass_matrix_hh;
541 }
542 
544 {
545  const auto mass_matrix_hh = get_mass_matrix_hh();
546  fs_diagonalize_hermitian(mass_matrix_hh, M2hh, ZH);
547  normalize_to_interval(ZH);
548 }
549 
551 {
552  const auto g1 = pars.g1;
553  const auto g2 = pars.g2;
554  const auto vu = pars.vu;
555  const auto vd = pars.vd;
556  const auto mA2 = sqr(pars.MA);
557  const auto v2 = sqr(vu) + sqr(vd);
558  const auto Bmu = mA2*vu*vd/v2;
559  const auto xi = 1.;
560 
561  RM22 mass_matrix_Ah;
562 
563  mass_matrix_Ah(0,0) = (20*Bmu*vu + pow3(vd)*xi*(3*sqr(g1) + 5*sqr(g2)))/(20.*vd);
564  mass_matrix_Ah(0,1) = Bmu - (vd*vu*xi*(3*sqr(g1) + 5*sqr(g2)))/20.;
565  mass_matrix_Ah(1,0) = mass_matrix_Ah(0,1);
566  mass_matrix_Ah(1,1) = (20*Bmu*vd + pow3(vu)*xi*(3*sqr(g1) + 5*sqr(g2)))/(20.*vu);
567 
568  return mass_matrix_Ah;
569 }
570 
572 {
573  const auto mass_matrix_Ah = get_mass_matrix_Ah();
574  fs_diagonalize_hermitian(mass_matrix_Ah, M2Ah, ZA);
575  normalize_to_interval(ZA);
576 }
577 
579 {
580  const auto g2 = pars.g2;
581  const auto vu = pars.vu;
582  const auto vd = pars.vd;
583  const auto mA2 = sqr(pars.MA);
584  const auto v2 = sqr(vu) + sqr(vd);
585  const auto Bmu = mA2*vu*vd/v2;
586  const auto xi = 1.;
587 
588  RM22 mass_matrix_Hpm;
589 
590  mass_matrix_Hpm(0,0) = (4*Bmu*vu + vd*sqr(g2)*(xi*sqr(vd) + sqr(vu)))/(4.*vd);
591  mass_matrix_Hpm(0,1) = Bmu - (vd*vu*(-1 + xi)*sqr(g2))/4.;
592  mass_matrix_Hpm(1,0) = mass_matrix_Hpm(0,1);
593  mass_matrix_Hpm(1,1) = (4*Bmu*vd + vu*sqr(g2)*(sqr(vd) + xi*sqr(vu)))/(4.*vu);
594 
595  return mass_matrix_Hpm;
596 }
597 
599 {
600  const auto mass_matrix_Hpm = get_mass_matrix_Hpm();
601  fs_diagonalize_hermitian(mass_matrix_Hpm, M2Hpm, ZP);
602  normalize_to_interval(ZP);
603 }
604 
606 {
607  const auto g1 = pars.g1;
608  const auto g2 = pars.g2;
609  const auto vu = pars.vu;
610  const auto vd = pars.vd;
611  const auto mu = pars.mu;
612  const auto M1 = pars.M1;
613  const auto M2 = pars.M2;
614 
615  RM44 mass_matrix_Chi;
616 
617  mass_matrix_Chi(0,0) = M1;
618  mass_matrix_Chi(0,1) = 0;
619  mass_matrix_Chi(0,2) = -0.3872983346207417*g1*vd;
620  mass_matrix_Chi(0,3) = 0.3872983346207417*g1*vu;
621  mass_matrix_Chi(1,1) = M2;
622  mass_matrix_Chi(1,2) = 0.5*g2*vd;
623  mass_matrix_Chi(1,3) = -0.5*g2*vu;
624  mass_matrix_Chi(2,2) = 0;
625  mass_matrix_Chi(2,3) = -mu;
626  mass_matrix_Chi(3,3) = 0;
627 
628  symmetrize(mass_matrix_Chi);
629 
630  return mass_matrix_Chi;
631 }
632 
634 {
635  CM44 ZN_tmp(CM44::Zero());
636 
637  const auto mass_matrix_Chi = get_mass_matrix_Chi();
638  fs_diagonalize_symmetric(mass_matrix_Chi, MChi, ZN_tmp);
639  normalize_to_interval(ZN_tmp);
640 
641  // convert to SLHA convention to avoid imaginary parts
642  convert_symmetric_fermion_mixings_to_slha(MChi, ZN_tmp);
643  ZN = ZN_tmp.real();
644 }
645 
647 {
648  const auto g2 = pars.g2;
649  const auto vu = pars.vu;
650  const auto vd = pars.vd;
651  const auto mu = pars.mu;
652  const auto M2 = pars.M2;
653 
654  RM22 mass_matrix_Cha;
655 
656  mass_matrix_Cha(0,0) = M2;
657  mass_matrix_Cha(0,1) = inv_sqrt2*g2*vu;
658  mass_matrix_Cha(1,0) = inv_sqrt2*g2*vd;
659  mass_matrix_Cha(1,1) = mu;
660 
661  return mass_matrix_Cha;
662 }
663 
665 {
666  const auto mass_matrix_Cha = get_mass_matrix_Cha();
667  fs_svd(mass_matrix_Cha, MCha, UM, UP);
668 }
669 
670 std::ostream& operator<<(std::ostream& ostr, const MSSM_spectrum& spec)
671 {
672  const auto ssqrt = [] (double x) { return signed_sqrt(x); };
673 
674  ostr << "MFb = " << spec.MFb << '\n';
675  ostr << "MFt = " << spec.MFt << '\n';
676  ostr << "MFtau = " << spec.MFtau << '\n';
677  ostr << "MSveL = " << signed_sqrt(spec.M2SveL) << '\n';
678  ostr << "MSvmL = " << signed_sqrt(spec.M2SvmL) << '\n';
679  ostr << "MSvtL = " << signed_sqrt(spec.M2SvtL) << '\n';
680  ostr << "MSd = " << spec.M2Sd.transpose().unaryExpr(ssqrt) << '\n';
681  ostr << "MSu = " << spec.M2Su.transpose().unaryExpr(ssqrt) << '\n';
682  ostr << "MSe = " << spec.M2Se.transpose().unaryExpr(ssqrt) << '\n';
683  ostr << "MSm = " << spec.M2Sm.transpose().unaryExpr(ssqrt) << '\n';
684  ostr << "MStau = " << spec.M2Stau.transpose().unaryExpr(ssqrt) << '\n';
685  ostr << "MSs = " << spec.M2Ss.transpose().unaryExpr(ssqrt) << '\n';
686  ostr << "MSc = " << spec.M2Sc.transpose().unaryExpr(ssqrt) << '\n';
687  ostr << "MSb = " << spec.M2Sb.transpose().unaryExpr(ssqrt) << '\n';
688  ostr << "MSt = " << spec.M2St.transpose().unaryExpr(ssqrt) << '\n';
689  ostr << "Mhh = " << spec.M2hh.transpose().unaryExpr(ssqrt) << '\n';
690  ostr << "MAh = " << spec.M2Ah.transpose().unaryExpr(ssqrt) << '\n';
691  ostr << "MHpm = " << spec.M2Hpm.transpose().unaryExpr(ssqrt) << '\n';
692  ostr << "MChi = " << spec.MChi.transpose() << '\n';
693  ostr << "MCha = " << spec.MCha.transpose() << '\n';
694  ostr << "MVWm = " << signed_sqrt(spec.M2VWm) << '\n';
695  ostr << "MVZ = " << signed_sqrt(spec.M2VZ) << '\n';
696  ostr << "ZD = " << spec.ZD << '\n';
697  ostr << "ZU = " << spec.ZU << '\n';
698  ostr << "ZE = " << spec.ZE << '\n';
699  ostr << "ZM = " << spec.ZM << '\n';
700  ostr << "ZTau = " << spec.ZTau << '\n';
701  ostr << "ZS = " << spec.ZS << '\n';
702  ostr << "ZC = " << spec.ZC << '\n';
703  ostr << "ZB = " << spec.ZB << '\n';
704  ostr << "ZT = " << spec.ZT << '\n';
705  ostr << "ZH = " << spec.ZH << '\n';
706  ostr << "ZA = " << spec.ZA << '\n';
707  ostr << "ZP = " << spec.ZP << '\n';
708  ostr << "ZN = " << spec.ZN << '\n';
709  ostr << "UM = " << spec.UM << '\n';
710  ostr << "UP = " << spec.UP << '\n';
711 
712  return ostr;
713 }
714 
715 } // namespace mh2_fo
716 } // namespace himalaya
double M2SveL
MSSM DR&#39; electron-like sneutrino mass.
void calculate_MSe()
calculates DR&#39; selectron masses
void calculate_MSd()
calculates DR&#39; sdown masses
RM22 get_mass_matrix_Ss() const
sstrange mass matrix
A2 M2Ah
MSSM DR&#39; CP-odd higgs mass.
RM22 ZD
MSSM DR&#39; sdown mixing matrix.
RM22 ZB
MSSM DR&#39; sbottom mixing matrix.
double vu
VEV of up Higgs, with v = Sqrt[vu^2 + vd^2] ~ 246 GeV.
double M2SvtL
MSSM DR&#39; tau-like sneutrino mass.
void calculate_MSc()
calculates DR&#39; scharm masses
double MFb
MSSM DR&#39; bottom mass.
void fs_diagonalize_symmetric(const Eigen::Matrix< Scalar, N, N > &m, Eigen::Array< Real, N, 1 > &s, Eigen::Matrix< std::complex< Real >, N, N > &u)
Definition: Linalg.hpp:1303
void calculate_MSb()
calculates DR&#39; sbottom masses
Definition: H3.cpp:14
RM33 Yu
up-type yukawa coupling matrix
RM33 Ad
trilinear down type squark-Higgs coupling matrix
RM22 ZTau
MSSM DR&#39; stau mixing matrix.
A2 M2Sb
MSSM DR&#39; squared sbottom masses.
void calculate_MVWm()
calculates DR&#39; W mass
Contains the definition of the MSSM_spectrum class.
double vd
VEV of down Higgs, with v = Sqrt[vu^2 + vd^2] ~ 246 GeV.
RM22 ZM
MSSM DR&#39; smuon mixing matrix.
RM22 ZP
MSSM DR&#39; charged Higgs mixing matrix.
double g2
gauge coupling g2
A2 M2Stau
MSSM DR&#39; squared stau masses.
A2 M2St
MSSM DR&#39; squared stop masses.
RM22 ZC
MSSM DR&#39; scharm mixing matrix.
RM22 ZT
MSSM DR&#39; stop mixing matrix.
void calculate_MSt()
calculates DR&#39; stop masses
void calculate_MFt()
calculates DR&#39; top mass
A2 M2Sd
MSSM DR&#39; squared sdown masses.
RM22 get_mass_matrix_Sc() const
scharm mass matrix
Eigen::Matrix4cd CM44
complex 4x4 matrix
void calculate_MHpm()
calculates DR&#39; charged Higgs masses
RM22 UM
MSSM DR&#39; positive chargino mixing matrix.
RM22 get_mass_matrix_Sd() const
sdown mass matrix
void calculate_MSm()
calculates DR&#39; smuon masses
double M2VWm
MSSM DR&#39; squared W mass.
A2 M2Sc
MSSM DR&#39; squared scharm masses.
RM22 ZE
MSSM DR&#39; selectron mixing matrix.
RM22 get_mass_matrix_Ah() const
CP-odd Higgs mass matrix.
void calculate_MChi()
calculates DR&#39; neutralino masses
RM22 get_mass_matrix_Stau() const
stau mass matrix
void calculate_MVZ()
calculates DR&#39; Z mass
RM22 get_mass_matrix_Sb() const
sbottom mass matrix
RM33 Ae
trilinear electron type squark-Higgs coupling matrix
A2 M2hh
MSSM DR&#39; CP-even higgs mass.
A2 M2Sm
MSSM DR&#39; squared smuon masses.
Parameters pars
MSSM DR&#39; parameters.
void calculate_MSveL()
calculates DR&#39; electron-like sneutrino mass
std::ostream & operator<<(std::ostream &ostr, const MSSM_mass_eigenstates &me)
prints the internals of MSSM_mass_eigenstates
void calculate_MFb()
calculates DR&#39; bottom mass
void fs_diagonalize_hermitian(const Eigen::Matrix< Scalar, N, N > &m, Eigen::Array< Real, N, 1 > &w, Eigen::Matrix< Scalar, N, N > &z)
Definition: Linalg.hpp:1432
RM22 get_mass_matrix_hh() const
CP-even Higgs mass matrix.
RM22 ZA
MSSM DR&#39; CP-odd Higgs mixing matrix.
RM44 ZN
MSSM DR&#39; neutralino mixing matrix.
RM33 ml2
soft-breaking squared left-handed slepton mass parameters
A2 M2Ss
MSSM DR&#39; squared sstrange masses.
Contains the tree-level DR&#39; mass spectrum and mixing matrices.
double mu
mu parameter, convention of [Phys.Rept. 117 (1985) 75-263]
RM33 mq2
soft-breaking squared left-handed squark mass parameters
void calculate_MStau()
calculates DR&#39; stau masses
double MFt
MSSM DR&#39; top mass.
RM33 Yd
down-type yukawa coupling matrix
RM33 mu2
soft-breaking squared right-handed up-squark mass parameters
double M2VZ
MSSM DR&#39; squared Z mass.
void calculate_MSu()
calculates DR&#39; sup masses
void calculate_MCha()
calculates DR&#39; chargino masses
void calculate_MSs()
calculates DR&#39; sstrange masses
RM44 get_mass_matrix_Chi() const
neutralino mass matrix
Contains routines to diagonalize mass matrices.
void calculate_MFtau()
calculates DR&#39; tau mass
RM22 get_mass_matrix_Hpm() const
charged Higgs mass matrix
double MFtau
MSSM DR&#39; tau mass.
RM22 get_mass_matrix_Cha() const
chargino mass matrix
RM33 md2
soft-breaking squared right-handed down-squark mass parameters
A4 MChi
MSSM DR&#39; neutralino mass.
double MA
CP-odd Higgs.
A2 M2Hpm
MSSM DR&#39; charged higgs mass.
RM22 get_mass_matrix_St() const
stop mass matrix
RM22 UP
MSSM DR&#39; negative chargino mixing matrix.
void calculate_MSvtL()
calculates DR&#39; tau-like sneutrino mass
A2 M2Se
MSSM DR&#39; squared selectron masses.
double g1
GUT-normalized gauge coupling g1, with gY = g1*Sqrt[3/5].
A2 M2Su
MSSM DR&#39; squared sup masses.
void calculate_Mhh()
calculates DR&#39; CP-even Higgs masses
RM22 get_mass_matrix_Su() const
sup mass matrix
double M2SvmL
MSSM DR&#39; muon-like sneutrino mass.
void calculate_MAh()
calculates DR&#39; CP-odd Higgs masses
Eigen::Matrix2d RM22
real 2x2 matrix
Definition: Linalg.hpp:1521
RM22 get_mass_matrix_Se() const
selectron mass matrix
RM33 Ye
electron-type yukawa coupling matrix
RM22 ZH
MSSM DR&#39; CP-even Higgs mixing matrix.
Eigen::Matrix4d RM44
real 4x4 matrix
A2 MCha
MSSM DR&#39; chargino mass.
MSSM_spectrum(const Parameters &)
RM22 get_mass_matrix_Sm() const
smuon mass matrix
void calculate_spectrum()
calculates all DR&#39; masses and mixings
RM22 ZU
MSSM DR&#39; sup mixing matrix.
void calculate_MSvmL()
calculates DR&#39; muon-like sneutrino mass
RM33 me2
soft-breaking squared right-handed slepton mass parameters
constexpr T arg(const Complex< T > &z) noexcept
Definition: complex.hpp:33
RM33 Au
trilinear up type squark-Higgs coupling matrix
void fs_svd(const Eigen::Matrix< Scalar, M, N > &m, Eigen::Array< Real, MIN_(M, N), 1 > &s, Eigen::Matrix< Scalar, M, M > &u, Eigen::Matrix< Scalar, N, N > &v)
Definition: Linalg.hpp:1097
RM22 ZS
MSSM DR&#39; sstrange mixing matrix.