GM2Calc 2.3.0
Loading...
Searching...
No Matches
MSSMNoFV_onshell_physical.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
20
21#include "gm2_log.hpp"
22#include "gm2_numerics.hpp"
23
24#include <iostream>
25#include <limits>
26
27namespace gm2calc {
28
29namespace {
30
31template<int N>
32void convert_symmetric_fermion_mixings_to_hk(Eigen::Array<double, N, 1>& m,
33 Eigen::Matrix<std::complex<double>, N, N>& z)
34{
35 for (int i = 0; i < N; i++) {
36 if (m(i) < 0.) {
37 z.row(i) *= std::complex<double>(0.0,1.0);
38 m(i) *= -1;
39 }
40 }
41}
42
43template<int N>
44void convert_symmetric_fermion_mixings_to_slha(Eigen::Array<double, N, 1>& m,
45 Eigen::Matrix<std::complex<double>, N, N>& z)
46{
47 const double eps = std::numeric_limits<double>::epsilon();
48
49 for (int i = 0; i < N; i++) {
50 // check if i'th row contains non-zero imaginary parts
51 if (!is_zero(z.row(i).imag().cwiseAbs().maxCoeff(), eps)) {
52 z.row(i) *= std::complex<double>(0.0,1.0);
53 m(i) *= -1;
54#ifdef ENABLE_DEBUG
55 if (!is_zero(z.row(i).imag().cwiseAbs().maxCoeff(), eps)) {
56 WARNING("Row " << i << " of the following fermion mixing matrix"
57 " contains entries which have non-zero real and imaginary"
58 " parts:\nZ = " << z);
59 }
60#endif
61 }
62 }
63}
64
65} // anonymous namespace
66
67/**
68 * Convert masses and mixing matrices to Haber-Kane convention:
69 * Fermion masses are always positive and mixing matrices are allowed
70 * to be complex.
71 */
76
77/**
78 * Convert masses and mixing matrices to SLHA convention: Fermion
79 * mixing matrices are always real and fermion masses are allowed to
80 * be negative.
81 */
86
87void MSSMNoFV_onshell_physical::print(std::ostream& ostr) const
88{
89 ostr << "----------------------------------------\n"
90 "pole masses:\n"
91 "----------------------------------------\n";
92 ostr << "MVG = " << MVG << '\n';
93 ostr << "MGlu = " << MGlu << '\n';
94 ostr << "MVP = " << MVP << '\n';
95 ostr << "MVZ = " << MVZ << '\n';
96 ostr << "MFd = " << MFd << '\n';
97 ostr << "MFs = " << MFs << '\n';
98 ostr << "MFb = " << MFb << '\n';
99 ostr << "MFu = " << MFu << '\n';
100 ostr << "MFc = " << MFc << '\n';
101 ostr << "MFt = " << MFt << '\n';
102 ostr << "MFve = " << MFve << '\n';
103 ostr << "MFvm = " << MFvm << '\n';
104 ostr << "MFvt = " << MFvt << '\n';
105 ostr << "MFe = " << MFe << '\n';
106 ostr << "MFm = " << MFm << '\n';
107 ostr << "MFtau = " << MFtau << '\n';
108 ostr << "MSveL = " << MSveL << '\n';
109 ostr << "MSvmL = " << MSvmL << '\n';
110 ostr << "MSvtL = " << MSvtL << '\n';
111 ostr << "MSd = " << MSd.transpose() << '\n';
112 ostr << "MSu = " << MSu.transpose() << '\n';
113 ostr << "MSe = " << MSe.transpose() << '\n';
114 ostr << "MSm = " << MSm.transpose() << '\n';
115 ostr << "MStau = " << MStau.transpose() << '\n';
116 ostr << "MSs = " << MSs.transpose() << '\n';
117 ostr << "MSc = " << MSc.transpose() << '\n';
118 ostr << "MSb = " << MSb.transpose() << '\n';
119 ostr << "MSt = " << MSt.transpose() << '\n';
120 ostr << "Mhh = " << Mhh.transpose() << '\n';
121 ostr << "MAh = " << MAh.transpose() << '\n';
122 ostr << "MHpm = " << MHpm.transpose() << '\n';
123 ostr << "MChi = " << MChi.transpose() << '\n';
124 ostr << "MCha = " << MCha.transpose() << '\n';
125 ostr << "MVWm = " << MVWm << '\n';
126
127 ostr << "----------------------------------------\n"
128 "pole mass mixing matrices:\n"
129 "----------------------------------------\n";
130 ostr << "ZD = " << ZD << '\n';
131 ostr << "ZU = " << ZU << '\n';
132 ostr << "ZE = " << ZE << '\n';
133 ostr << "ZM = " << ZM << '\n';
134 ostr << "ZTau = " << ZTau << '\n';
135 ostr << "ZS = " << ZS << '\n';
136 ostr << "ZC = " << ZC << '\n';
137 ostr << "ZB = " << ZB << '\n';
138 ostr << "ZT = " << ZT << '\n';
139 ostr << "ZH = " << ZH << '\n';
140 ostr << "ZA = " << ZA << '\n';
141 ostr << "ZP = " << ZP << '\n';
142 ostr << "ZN = " << ZN << '\n';
143 ostr << "UM = " << UM << '\n';
144 ostr << "UP = " << UP << '\n';
145
146}
147
148std::ostream& operator<<(std::ostream& ostr, const MSSMNoFV_onshell_physical& phys_pars)
149{
150 phys_pars.print(ostr);
151 return ostr;
152}
153
154} // namespace gm2calc
#define WARNING(message)
Definition gm2_log.hpp:30
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)
bool is_zero(const Eigen::ArrayBase< Derived > &a, double eps)
std::ostream & operator<<(std::ostream &os, const MSSMNoFV_onshell &model)
streaming operator
MSSMNoFV pole masses and corresponding mixings.
Eigen::Matrix< std::complex< double >, 2, 2 > UM
Eigen::Matrix< std::complex< double >, 2, 2 > UP
Eigen::Matrix< std::complex< double >, 4, 4 > ZN
void convert_to_hk()
converts pole masses to HK convention
void convert_to_slha()
converts pole masses to SLHA convention