flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
gm2calc_interface.cpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of FlexibleSUSY.
3//
4// FlexibleSUSY 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// FlexibleSUSY 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 FlexibleSUSY. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
19#include "gm2calc_interface.hpp"
20#include "config.h"
21
27#ifdef ENABLE_GM2CALC
28
29#include "gm2calc/gm2_1loop.hpp"
30#include "gm2calc/gm2_2loop.hpp"
31#include "gm2calc/gm2_error.hpp"
32#include "gm2calc/gm2_uncertainty.hpp"
33#include "gm2calc/MSSMNoFV_onshell.hpp"
34#include "gm2calc/THDM.hpp"
35#include "logger.hpp"
36#include "wrappers.hpp"
37
38namespace flexiblesusy {
39
40namespace {
41
42double calculate_e(double alpha) {
43 return std::sqrt(4. * Pi * alpha);
44}
45
46gm2calc::MSSMNoFV_onshell setup(const GM2Calc_MSSMNoFV_data& data)
47{
48 gm2calc::MSSMNoFV_onshell model;
49
50 // fill couplings
51 model.set_alpha_MZ(data.alpha_em_MZ);
52 model.set_alpha_thompson(data.alpha_em_0);
53 model.set_g3(calculate_e(data.alpha_s_MZ));
54
55 // fill pole masses
56 model.get_physical().MVZ = data.MZ; // 1L
57 model.get_physical().MVWm = data.MW; // 1L
58 model.get_physical().MFb = data.mb_mb; // 1L
59 model.get_physical().MFt = data.MT; // 1L
60 model.get_physical().MFtau = data.MTau; // 1L
61 model.get_physical().MFm = data.MM; // 1L
62 model.get_physical().MAh(1) = data.MA0; // 2L
63 model.get_physical().MSvmL = data.MSvm; // 1L
64 model.get_physical().MSm = data.MSm; // 1L
65 model.get_physical().MCha = data.MCha; // 1L
66 model.get_physical().MChi = data.MChi; // 1L
67
68 // fill DR-bar parameters
69 model.set_scale(data.scale); // 2L
70 model.set_TB(data.TB); // 1L
71 model.set_Mu(data.Mu); // initial guess
72 model.set_MassB(data.M1); // initial guess
73 model.set_MassWB(data.M2); // initial guess
74 model.set_MassG(data.M3); // 2L
75 model.set_mq2(data.mq2); // 2L
76 model.set_ml2(data.ml2); // 1L
77 model.set_md2(data.md2); // 2L
78 model.set_mu2(data.mu2); // 2L
79 model.set_me2(data.me2); // 2L
80 model.set_Au(data.Au); // 2L
81 model.set_Ad(data.Ad); // 2L
82 model.set_Ae(data.Ae); // 2L
83
84 // convert DR-bar parameters to on-shell
85 model.convert_to_onshell();
86
87 return model;
88}
89
90gm2calc::THDM setup(const GM2Calc_THDM_data& data)
91{
92 gm2calc::SM sm;
93 sm.set_alpha_em_0(data.alpha_em_0);
94 sm.set_alpha_em_mz(data.alpha_em_mz);
95 sm.set_alpha_s_mz(data.alpha_s_mz);
96 sm.set_mh(data.mh);
97 sm.set_mw(data.mw);
98 sm.set_mz(data.mz);
99 sm.set_mu(data.mu);
100 sm.set_md(data.md);
101 sm.set_mv(data.mv);
102 sm.set_ml(data.ml);
103 sm.set_ckm(data.ckm);
104
105 gm2calc::thdm::Gauge_basis basis;
106 basis.yukawa_type = gm2calc::thdm::int_to_cpp_yukawa_type(data.yukawa_type);
107 basis.lambda = data.lambda;
108 basis.tan_beta = data.tan_beta;
109 basis.m122 = data.m122;
110 basis.zeta_u = data.zeta_u;
111 basis.zeta_d = data.zeta_d;
112 basis.zeta_l = data.zeta_l;
113 basis.Delta_u = data.delta_u;
114 basis.Delta_d = data.delta_d;
115 basis.Delta_l = data.delta_l;
116 basis.Pi_u = data.pi_u;
117 basis.Pi_d = data.pi_d;
118 basis.Pi_l = data.pi_l;
119
120 return gm2calc::THDM(basis, sm);
121}
122
123} // anonymous namespace
124
125/* ****************************** MSSM ****************************** */
126
137double gm2calc_calculate_amu(const GM2Calc_MSSMNoFV_data& data)
138{
139 double amu = 0.;
140
141 try {
142 const gm2calc::MSSMNoFV_onshell model(setup(data));
143
144 amu =
145 + gm2calc::calculate_amu_1loop(model)
146 + gm2calc::calculate_amu_2loop(model);
147 } catch (const gm2calc::Error& e) {
148 ERROR("GM2Calc: " << e.what());
149 }
150
151 return amu;
152}
153
165double gm2calc_calculate_amu_uncertainty(const GM2Calc_MSSMNoFV_data& data)
166{
167 double uncertainty = 0.;
168
169 try {
170 const gm2calc::MSSMNoFV_onshell model(setup(data));
171 uncertainty = gm2calc::calculate_uncertainty_amu_2loop(model);
172 } catch (const gm2calc::Error& e) {
173 ERROR("GM2Calc: uncertainty estimation: " << e.what());
174 }
175
176 return uncertainty;
177}
178
179/* ****************************** THDM ****************************** */
180
191double gm2calc_calculate_amu(const GM2Calc_THDM_data& data)
192{
193 double amu = 0.;
194
195 try {
196 const gm2calc::THDM model = setup(data);
197
198 amu =
199 + gm2calc::calculate_amu_1loop(model)
200 + gm2calc::calculate_amu_2loop(model);
201 } catch (const gm2calc::Error& e) {
202 ERROR("GM2Calc: " << e.what());
203 }
204
205 return amu;
206}
207
219double gm2calc_calculate_amu_uncertainty(const GM2Calc_THDM_data& data)
220{
221 double uncertainty = 0.;
222
223 try {
224 const gm2calc::THDM model = setup(data);
225 uncertainty = gm2calc::calculate_uncertainty_amu_2loop(model);
226 } catch (const gm2calc::Error& e) {
227 ERROR("GM2Calc: uncertainty estimation: " << e.what());
228 }
229
230 return uncertainty;
231}
232
233} // namespace flexiblesusy
234
235#else
236
237namespace flexiblesusy {
238
239/* ****************************** MSSM ****************************** */
240
242{
243 return 0.;
244}
245
247{
248 return 0.;
249}
250
251/* ****************************** THDM ****************************** */
252
254{
255 return 0.;
256}
257
259{
260 return 0.;
261}
262
263} // namespace flexiblesusy
264
265#endif
contains declarations of GM2Calc interface functions
#define ERROR(msg)
Definition: logger.hpp:65
double gm2calc_calculate_amu_uncertainty(const GM2Calc_MSSMNoFV_data &)
calculates uncertainty of amu using GM2Calc in the MSSMNoFV
static constexpr double Pi
Definition: wrappers.hpp:44
double gm2calc_calculate_amu(const GM2Calc_MSSMNoFV_data &)
calculates amu using GM2Calc in the MSSMNoFV
data
Definition: scan_HSSUSY.m:46
data to be passed to GM2Calc
data to be passed to GM2Calc