GM2Calc 2.3.0
Loading...
Searching...
No Matches
gm2_mf.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 "gm2_mf.hpp"
20#include "gm2_log.hpp"
21#include "gm2_numerics.hpp"
22
23#include <cmath>
24#include <boost/math/tools/roots.hpp>
25
26/**
27 * \file gm2_mf.cpp
28 *
29 * Contains functions necessary to calculate the running fermion masse
30 * in the MS-bar and DR-bar scheme.
31 */
32
33namespace gm2calc {
34
35namespace {
36
37const double pi = 3.14159265358979323846;
38
39/**
40 * Calculates the strong coupling constant \f$\alpha_s(Q)\f$ in the
41 * Standard Model with 5 active quark flavours in the MS-bar scheme at
42 * the scale \f$Q\f$ using Eq (9) from arxiv:hep-ph/0207126 .
43 *
44 * @param scale renormalization scale \f$Q\f$
45 * @param lambda_qcd \f$\Lambda_{\text{QCD}}\f$
46 *
47 * @return \f$\alpha_s(Q)\f$ MS-bar in the SM w/ 5 active flavours
48 */
49double calculate_alpha_s_SM5_at(double scale, double lambda_qcd) noexcept
50{
51 const double t = std::log(sqr(scale/lambda_qcd));
52 const double it = 1/t;
53 const double logt = std::log(t);
54
55 return 12.*pi/23*it * (
56 1 + it*(- 348./529*logt
57 + sqr(348./529)*it*(sqr(logt - 0.5) - 78073./242208))
58 );
59}
60
61/**
62 * Calculates \f$\Lambda_{\text{QCD}}\f$ from a given
63 * \f$\alpha_s(Q)\f$, where \f$\alpha_s(Q)\f$ is defined in the MS-bar
64 * scheme in the SM with 5 active quark flavours. A root finding
65 * algorithm is used to solve Eq. (9) from arxiv:hep-ph/0207126
66 * numerically for \f$\Lambda_{\text{QCD}}\f$.
67 *
68 * @param alpha \f$\alpha_s(Q)\f$ MS-bar, SM w/ 5 active quark flavours
69 * @param scale renormalization scale Q
70 * @param lambda_qcd_min minimum \f$\Lambda_{\text{QCD}}\f$
71 * @param lambda_qcd_max maximum \f$\Lambda_{\text{QCD}}\f$
72 * @param precision_goal accuracy goal
73 * @param max_iterations maximum number of iterations
74 *
75 * @return \f$\Lambda_{\text{QCD}}\f$
76 */
77double calculate_lambda_qcd(double alpha, double scale,
78 double lambda_qcd_min = 0.001,
79 double lambda_qcd_max = 10.,
80 double precision_goal = 1e-10,
81 unsigned max_iterations = 1000) noexcept
82{
83 boost::uintmax_t it = max_iterations;
84
85 // difference between goal alpha and alpha calculated using the
86 // current lambda_qcd
87 auto Difference_alpha = [alpha, scale](double lambda) -> double {
88 const double alpha_current = calculate_alpha_s_SM5_at(scale, lambda);
89 return alpha - alpha_current;
90 };
91
92 // stopping criterion, given two brackets a, b
93 auto Stop_crit = [precision_goal](double a, double b) -> bool {
94 return std::abs(a - b) < precision_goal;
95 };
96
97 double lambda_qcd = 0.217; // Nf = 5, PDG
98
99 // find the root
100 try {
101 const std::pair<double,double> root =
102 boost::math::tools::toms748_solve(Difference_alpha, lambda_qcd_min,
104
105 lambda_qcd = 0.5 * (root.first + root.second);
106 } catch (const std::exception& e) {
107 WARNING("Could not determine lambda_QCD: " << e.what()
108 << ". Using lambda_QCD = " << lambda_qcd);
109 }
110
111 if (it >= max_iterations) {
112 const double precision = std::abs(Difference_alpha(lambda_qcd));
113 WARNING("Calculation of Lambda_QCD did not converge"
114 " (reached accuracy: " << precision <<
115 ", accuracy goal: " << precision_goal <<
116 ", max. iterations: " << max_iterations << ")");
117 }
118
119 return lambda_qcd;
120}
121
122/**
123 * Calculates \f$F_b(\mu)\f$, Eq (5) of arxiv:hep-ph/0207126 .
124 *
125 * @param alpha strong coupling constant at the scale \f$\mu\f$
126 *
127 * @note Eq (5) of arxiv:hep-ph/0207126 assumes 5 active quark
128 * flavours (nf = 5). For this reason this function can only be used
129 * for renormalization group running between Q = mb and Q = mt.
130 *
131 * @return \f$F_b(\mu)\f$, Eq (5) of arxiv:hep-ph/0207126
132 */
133double Fb(double alpha) noexcept
134{
135 const double as = alpha / pi;
136
137 return std::pow(23./6*as, 12./23) * (
138 1 + as*(3731./3174 + 1.500706*as)
139 );
140}
141
142/**
143 * MS-bar to DR-bar conversion for mb, Eq (11) of arxiv:hep-ph/0207126 .
144 *
145 * @param alpha strong coupling constant
146 *
147 * @return MS-bar to DR-bar conversion factor Eq (11)
148 */
149double conversion_mb_MSbar_to_DRbar(double alpha) noexcept
150{
151 const double as = alpha / pi;
152
153 return 1 + as*(-1./3 - 29./72*as);
154}
155
156/**
157 * Calculates the MS-bar strong coupling alpha_s(Q=mt_pole) from
158 * alpha_s(Q=mz) using the 1-loop QCD beta function (nf = 5).
159 *
160 * @note Taken from SOFTSUSY
161 *
162 * @param mt_pole top quark pole mass
163 * @param alpha_s_mz strong coupling at Q = mz
164 * @param mz Z boson pole mass
165 *
166 * @return alpha_s(mt_pole)
167 */
169 double mt_pole, double alpha_s_mz, double mz) noexcept
170{
171 return alpha_s_mz /(1 - 23/(6*pi)*alpha_s_mz*std::log(mz/mt_pole));
172}
173
174/**
175 * Calculates top quark MS-bar mass in the SM mt(MS-bar,Q=mt_pole)
176 * from the top quark pole mass, using the 1-loop QCD contribution.
177 *
178 * @note Taken from SOFTSUSY
179 *
180 * @param mt_pole top quark pole mass
181 * @param as strong coupling at Q = mt_pole
182 *
183 * @return mt(MS-bar,Q=mt_pole)
184 */
185double calculate_mt_SM6_MSbar_at(double mt_pole, double as) noexcept
186{
187 return mt_pole/(1 + 4/(3*pi)*as);
188}
189
190} // anonymous namespace
191
192/**
193 * Calculates mb(Q) in the DR-bar scheme in the SM w/ 5 active quark
194 * flavours using the approach described in arxiv:hep-ph/0207126 .
195 *
196 * @param mb_mb mb(mb) MS-bar in SM w/ 5 active quark flavours
197 * @param alpha_s alpha_s MS-bar in SM w/ 5 quark flavours at scale Q
198 * @param scale renormalization scale Q
199 *
200 * @return mb(Q) DR-bar in the SM w/ 5 quarks
201 */
203 double mb_mb, double alpha_s, double scale)
204{
205 // determine Lambda_QCD
206 const double lambda_qcd = calculate_lambda_qcd(alpha_s, scale);
207
208 // calculate alpha_s(mb)
210
211 // run mb to destination scale
212 // Here alpha_s must be given at the destination scale `scale'.
213 const double mb = mb_mb * Fb(alpha_s) / Fb(alpha_s_mb);
214
215 // DR-bar conversion
217
218 return mb_DRbar;
219}
220
221/**
222 * Calculates the running top quark MS-bar mass mt(SM(6),Q) at the
223 * scale Q.
224 *
225 * @param mt_pole top quark pole mass
226 * @param alpha_s_at_mz strong coupling at the scale Q = mz
227 * @param mz Z boson pole mass
228 * @param scale renormalization scale
229 *
230 * @return mt(SM(6),MS-bar,Q)
231 */
233 double mt_pole, double alpha_s_mz, double mz, double scale) noexcept
234{
235 // alpha_s(SM(6), MS-bar, Q = mt_pole)
236 const double alpha_s_mt = calculate_alpha_s_SM6_MSbar_at_mt(mt_pole, alpha_s_mz, mz);
237
238 // mt(SM(6), MS-bar, Q = mt_pole)
240
241 // run from Q = mt_pole to Q = scale
242 const double mt_scale = mt_mt * std::pow(scale/mt_pole, -2/pi*alpha_s_mt);
243
244 // Note: QCD beta function of the quark mass parameter:
245 // dm/d(log(Q)) = -2/pi*alpha_s*m
246
247 return mt_scale;
248}
249
250/**
251 * Calculates the running bottom quark MS-bar mass mb(SM(6),Q) in the
252 * SM(6) at the scale Q.
253 *
254 * @param mb_mb bottom quark MS-bar mass mb(mb) in the SM(5)
255 * @param mt_pole top quark pole mass
256 * @param alpha_s_mz strong coupling at the scale mz
257 * @param mz Z boson pole mass
258 * @param scale renormalization scale
259 *
260 * @return mb(MS-bar,SM(6),Q)
261 */
263 double mb_mb, double mt_pole, double alpha_s_mz, double mz, double scale) noexcept
264{
265 // determine Lambda_QCD
266 const double lambda_qcd = calculate_lambda_qcd(alpha_s_mz, mz);
267
268 // calculate alpha_s(mb)
270
271 // calculate alpha_s(mt)
273
274 // run mb(mb) to Q = mt_pole
275 const double mb_mt = mb_mb * Fb(alpha_s_mt) / Fb(alpha_s_mb);
276
277 // run mb(mt) to Q = scale
278 const double mb_scale = mb_mt * std::pow(scale/mt_pole, -2/pi*alpha_s_mt);
279
280 return mb_scale;
281}
282
283/**
284 * Calculates the running tau lepton MS-bar mass mtau(SM(6),Q) in the
285 * SM(6) at the scale Q.
286 *
287 * @param mtau_pole tau lepton pole mass
288 * @param alpha_em_mz electromagnetic coupling at the scale Q = MZ
289 * @param scale renormalization scale
290 *
291 * @return mtau(MS-bar,SM(6),Q)
292 */
294 double mtau_pole, double alpha_em_mz, double scale) noexcept
295{
296 // calculate mtau(mtau)
297 const double mtau_mtau = mtau_pole; // neglecting loop corrections
298
299 // Note: QED beta function of the lepton mass parameter:
300 // dm/d(log(Q)) = -3/(2*pi)*alpha_em*m
301
302 // run mtau(mtau) to Q = scale
303 const double mtau_scale = mtau_mtau * std::pow(scale/mtau_mtau, -3/(2*pi)*alpha_em_mz);
304
305 return mtau_scale;
306}
307
308} // namespace gm2calc
#define WARNING(message)
Definition gm2_log.hpp:30
double lambda
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)
double Fb(double x, double y) noexcept
, Eq (6.3b) arXiv:1311.1775
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_SM5_DRbar(double mb_mb, double alpha_s, double scale)
Calculates mb(Q) in the DR-bar scheme in the SM w/ 5 active quark flavours using the approach describ...
Definition gm2_mf.cpp:202
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