flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
lowe.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
26#include "lowe.h"
27#include "eigen_utils.hpp"
28#include "error.hpp"
29#include "ew_input.hpp"
30#include "string_format.hpp"
31#include "wrappers.hpp"
32
33#include <algorithm>
34#include <cmath>
35#include <iostream>
36
37namespace softsusy {
38
39namespace {
40
41bool is_zero(double x) noexcept
42{
43 return std::abs(x) <= std::numeric_limits<double>::epsilon();
44}
45
46constexpr double sqr(double a) noexcept { return a*a; }
47
48// Given a value of mt, and alphas(MZ), find alphas(mt) to 1 loops in qcd:
49// it's a very good approximation at these scales, better than 10^-3 accuracy
50double getAsmt(double mtop, double alphasMz, double mz) {
51 return alphasMz /
52 (1.0 - 23.0 * alphasMz / (6.0 * flexiblesusy::Pi) * std::log(mz / mtop));
53}
54
55// Input pole mass of top and alphaS(mt), outputs running mass mt(mt)
56// including one-loop standard model correction only
57double getRunMt(double poleMt, double asmt) {
58 return poleMt / (1.0 + (4.0 / (3.0 * flexiblesusy::Pi)) * asmt);
59}
60
61// Given pole mass and alphaS(MZ), returns running top mass -- one loop qcd
62double getRunMtFromMz(double poleMt, double asMZ, double mz) {
63 return getRunMt(poleMt, getAsmt(poleMt, asMZ, mz));
64}
65
66} // anonymous namespace
67
68const std::array<std::string, NUMBER_OF_LOW_ENERGY_INPUT_PARAMETERS> QedQcd_input_parmeter_names = {
69 "alpha_em_MSbar_at_MZ",
70 "alpha_s_MSbar_at_MZ",
71 "GFermi",
72 "MZ_pole", "MW_pole",
73 "Mv1_pole", "Mv2_pole", "Mv3_pole",
74 "Me_pole", "Mm_pole", "Mtau_pole",
75 "mu_2GeV", "ms_2GeV", "Mt_pole",
76 "md_2GeV", "mc_mc", "mb_mb",
77 "CKM_theta_12", "CKM_theta_13", "CKM_theta_23", "CKM_delta",
78 "PMNS_theta_12", "PMNS_theta_13", "PMNS_theta_23", "PMNS_delta", "PMNS_alpha_1", "PMNS_alpha_2"
79};
80
83{
84 set_number_of_parameters(a.size() + mf.size());
113 set_loops(3);
115}
116
117Eigen::ArrayXd QedQcd::get() const
118{
119 Eigen::ArrayXd y(a.size() + mf.size());
120 y(0) = a(0);
121 y(1) = a(1);
122 for (int i = 0; i < mf.size(); i++) {
123 y(i + 2) = mf(i);
124 }
125 return y;
126}
127
128void QedQcd::set(const Eigen::ArrayXd& y)
129{
130 a(0) = y(0);
131 a(1) = y(1);
132 for (int i = 0; i < mf.size(); i++) {
133 mf(i) = y(i + 2);
134 }
135}
136
137Eigen::ArrayXd QedQcd::beta() const
138{
139 Eigen::ArrayXd dydx(a.size() + mf.size());
140 dydx(0) = qedBeta();
141 dydx(1) = qcdBeta();
142 const auto y = massBeta();
143 for (int i = 0; i < y.size(); i++) {
144 dydx(i + 2) = y(i);
145 }
146 return dydx;
147}
148
149void QedQcd::runto_safe(double scale, double eps)
150{
151 try {
152 run_to(scale, eps);
153 } catch (...) {
155 "Non-perturbative running to Q = "
157 + " during determination of the SM(5) parameters.");
158 }
159}
160
161// Active flavours at energy mu
162int QedQcd::flavours(double mu) const {
163 int k = 0;
164 // if (mu > mf(mTop - 1)) k++;
165 if (mu > mf(mCharm - 1)) { k++; }
166 if (mu > mf(mUp - 1)) { k++; }
167 if (mu > mf(mDown - 1)) { k++; }
168 if (mu > mf(mBottom - 1)) { k++; }
169 if (mu > mf(mStrange - 1)) { k++; }
170 return k;
171}
172
174{
178 input(CKM_delta) = ckm.delta;
179}
180
182{
186 input(PMNS_delta) = pmns.delta;
187 input(PMNS_alpha_1) = pmns.alpha_1;
188 input(PMNS_alpha_2) = pmns.alpha_2;
189}
190
192{
197 ckm.delta = input(CKM_delta);
198 return ckm;
199}
200
202{
207 pmns.delta = input(PMNS_delta);
208 pmns.alpha_1 = input(PMNS_alpha_1);
209 pmns.alpha_2 = input(PMNS_alpha_2);
210 return pmns;
211}
212
214{
215 switch (i) {
216 case 0: return displayMass(mUp);
217 case 1: return displayMass(mCharm);
218 case 2: return displayMass(mTop);
219 }
220 throw flexiblesusy::OutOfBoundsError("displayUpQuarkRunningMass: generation index out of bounds.");
221}
222
224{
225 switch (i) {
226 case 0: return displayMass(mDown);
227 case 1: return displayMass(mStrange);
228 case 2: return displayMass(mBottom);
229 }
230 throw flexiblesusy::OutOfBoundsError("displayDownQuarkRunningMass: generation index out of bounds.");
231}
232
234{
235 switch (i) {
236 case 0: return displayPoleMel();
237 case 1: return displayPoleMmuon();
238 case 2: return displayPoleMtau();
239 }
240 throw flexiblesusy::OutOfBoundsError("displayLeptonPoleMass: generation index out of bounds.");
241}
242
244{
245 switch (i) {
246 case 0: return displayMass(mElectron);
247 case 1: return displayMass(mMuon);
248 case 2: return displayMass(mTau);
249 }
250 throw flexiblesusy::OutOfBoundsError("displayLeptonRunningMass: generation index out of bounds.");
251}
252
253std::ostream& operator<<(std::ostream &left, const QedQcd &m) {
254 left << "mU: " << m.displayMass(mUp)
255 << " mC: " << m.displayMass(mCharm)
256 << " mt: " << m.displayMass(mTop)
257 << " mt^pole: " << m.displayPoleMt()
258 << '\n';
259 left << "mD: " << m.displayMass(mDown)
260 << " mS: " << m.displayMass(mStrange)
261 << " mB: " << m.displayMass(mBottom)
262 << " mb(mb): " << m.displayMbMb()
263 << '\n';
264 left << "mE: " << m.displayMass(mElectron)
265 << " mM: " << m.displayMass(mMuon)
266 << " mT: " << m.displayMass(mTau)
267 << " mb^pole: " << m.displayPoleMb()
268 << '\n';
269 left << "aE: " << 1.0 / m.displayAlpha(ALPHA)
270 << " aS: " << m.displayAlpha(ALPHAS)
271 << " Q: " << m.get_scale()
272 << " mT^pole: " << m.displayPoleMtau()
273 << '\n';
274 left << "loops: " << m.get_loops()
275 << " thresholds: " << m.get_thresholds() << '\n';
276
277 return left;
278}
279
281double QedQcd::qedBeta() const {
282 double x = 24.0 / 9.0;
283
284 if (get_scale() > mf(mCharm - 1)) { x += 8.0 / 9.0; }
285 // if (get_scale() > mf(mTop - 1)) { x += 8.0 / 9.0; }
286 if (get_scale() > mf(mBottom - 1)) { x += 2.0 / 9.0; }
287 if (get_scale() > mf(mTau - 1)) { x += 2.0 / 3.0; }
288 if (get_scale() > displayPoleMW()) { x += -7.0 / 2.0; }
289
290 return (x * sqr(a(ALPHA - 1)) / flexiblesusy::Pi);
291}
292
296double QedQcd::qcdBeta() const {
297 static constexpr double INVPI = 1.0 / flexiblesusy::Pi;
298 const int quarkFlavours = flavours(get_scale());
299 const double qb0 = (11.0e0 - (2.0e0 / 3.0e0 * quarkFlavours)) / 4.0;
300 const double qb1 = (102.0e0 - (38.0e0 * quarkFlavours) / 3.0e0) / 16.0;
301 const double qb2 = (2.857e3 * 0.5 - (5.033e3 * quarkFlavours) / 18.0 +
302 (3.25e2 * sqr(quarkFlavours) ) / 5.4e1) / 64;
303
304 double qa0 = 0., qa1 = 0., qa2 = 0.;
305
306 if (get_loops() > 0) {
307 qa0 = qb0 * INVPI;
308 }
309 if (get_loops() > 1) {
310 qa1 = qb1 * sqr(INVPI);
311 }
312 if (get_loops() > 2) {
313 qa2 = qb2 * sqr(INVPI) * INVPI;
314 }
315
316 // add contributions of the one, two and three loop constributions resp.
317 const double beta =
318 -2.0 * sqr(displayAlpha(ALPHAS)) *
319 (qa0 + qa1 * displayAlpha(ALPHAS) + qa2 *
321
322 return beta;
323}
324
326Eigen::Array<double,9,1> QedQcd::massBeta() const {
327 static constexpr double INVPI = 1.0 / flexiblesusy::Pi;
328
329 // qcd bits: 1,2,3 loop resp.
330 double qg1 = 0., qg2 = 0., qg3 = 0.;
331 const int quarkFlavours = flavours(get_scale());
332
333 if (get_loops() > 0) {
334 qg1 = INVPI;
335 }
336 if (get_loops() > 1) {
337 qg2 = (202.0 / 3.0 - (20.0e0 * quarkFlavours) / 9.0) * sqr(INVPI) / 16.0;
338 }
339 if (get_loops() > 2) {
340 qg3 = (1.249e3 - ((2.216e3 * quarkFlavours) / 27.0e0 +
341 1.6e2 * flexiblesusy::zeta3 * quarkFlavours / 3.0e0) -
342 140.0e0 * quarkFlavours * quarkFlavours / 81.0e0) * sqr(INVPI) *
343 INVPI / 64.0;
344 }
345
346 const double qcd = -2.0 * a(ALPHAS - 1) * (
347 qg1 + qg2 * a(ALPHAS - 1) + qg3 * sqr(a(ALPHAS - 1)));
348 const double qed = -a(ALPHA - 1) * INVPI / 2;
349
350 Eigen::Array<double,9,1> x(Eigen::Array<double,9,1>::Zero());
351
352 for (int i = 0; i < 3; i++) { // up quarks
353 x(i) = (qcd + 4.0 * qed / 3.0) * mf(i);
354 }
355 for (int i = 3; i < 6; i++) { // down quarks
356 x(i) = (qcd + qed / 3.0) * mf(i);
357 }
358 for (int i = 6; i < 9; i++) { // leptons
359 x(i) = 3.0 * qed * mf(i);
360 }
361
362 // switch off relevant beta functions
363 if (get_thresholds() > 0) {
364 for(int i = 0; i < x.size(); i++) {
365 if (get_scale() < mf(i)) {
366 x(i) = 0.0;
367 }
368 }
369 }
370 // nowadays, u,d,s masses defined at 2 GeV: don't run them below that
371 if (get_scale() < 2.0) {
372 x(mUp - 1) = x(mDown - 1) = x(mStrange - 1) = 0.0;
373 }
374
375 return x;
376}
377
379double QedQcd::extractPoleMb(double alphasMb)
380{
383 "QedQcd::extractPoleMb called at scale "
384 + flexiblesusy::to_string(get_scale()) + " instead of mb(mb)");
385 }
386
387 // Following is the MSbar correction from QCD, hep-ph/9912391
388 double delta = 0.0;
389
390 if (get_loops() > 0) {
391 delta = delta + 4.0 / 3.0 * alphasMb / flexiblesusy::Pi;
392 }
393 if (get_loops() > 1) {
394 delta = delta + sqr(alphasMb / flexiblesusy::Pi) *
397 }
398 if (get_loops() > 2) {
399 delta = delta + 94.4182 * alphasMb / flexiblesusy::Pi * sqr(alphasMb / flexiblesusy::Pi);
400 }
401
402 const double mbPole = displayMass(mBottom) * (1.0 + delta);
403
404 return mbPole;
405}
406
409{
410 to(displayPoleMZ());
411}
412
422void QedQcd::to(double scale, double precision_goal, int max_iterations) {
423 int it = 0;
424 bool converged = false;
425 auto qedqcd_old(get()), qedqcd_new(get());
426 const double running_precision = 0.1 * precision_goal;
427
428 while (!converged && it < max_iterations) {
429 // set alpha_i(MZ)
430 runto_safe(displayPoleMZ(), running_precision);
433
434 // set mt(MZ)
436
437 // set mb(mb)
438 runto_safe(displayMbMb(), running_precision);
441
442 // set mc(mc)
443 runto_safe(displayMcMc(), running_precision);
445
446 // set mu, md, ms at 2 GeV
447 runto_safe(2.0, running_precision);
451
452 // set me, mm, ml at 2 GeV
456
457 // check convergence
458 runto_safe(scale, running_precision);
459 qedqcd_new = get();
460
461 converged = flexiblesusy::is_equal_rel(qedqcd_old, qedqcd_new, precision_goal);
462
463 qedqcd_old = qedqcd_new;
464
465 it++;
466 }
467
468 // set alpha_i(MZ) on last time
469 runto_safe(displayPoleMZ(), precision_goal);
472
473 runto_safe(scale, precision_goal);
474
475 if (!converged && max_iterations > 0) {
476 std::string msg =
477 "Iteration to determine SM(5) parameters did not"
478 " converge after " + std::to_string(max_iterations) +
479 " iterations (precision goal: " + std::to_string(precision_goal)
480 + ").";
481 throw flexiblesusy::NoConvergenceError(max_iterations, msg);
482 }
483}
484
495Eigen::Array<double,3,1> QedQcd::guess_alpha_SM5(double scale) const
496{
497 auto oneset = *this;
498 oneset.runto_safe(scale);
499
500 const double aem = oneset.displayAlpha(ALPHA);
501 const double MW = oneset.displayPoleMW();
502 const double MZ = oneset.displayPoleMZ();
503 const double sin2th = 1. - sqr(MW / MZ);
504
505 Eigen::Array<double,3,1> alpha(Eigen::Array<double,3,1>::Zero());
506
507 alpha(0) = 5.0 * aem / (3.0 * (1.0 - sin2th));
508 alpha(1) = aem / sin2th;
509 alpha(2) = oneset.displayAlpha(ALPHAS);
510
511 return alpha;
512}
513
514std::array<std::string, NUMBER_OF_LOW_ENERGY_INPUT_PARAMETERS> QedQcd::display_input_parameter_names()
515{
517}
518
519bool operator ==(const QedQcd& a, const QedQcd& b)
520{
521 const double eps = 1e-10;
522
523 return
524 std::fabs(a.get_scale() - b.get_scale()) < eps &&
525 std::fabs(a.get_loops() - b.get_loops()) < eps &&
526 std::fabs(a.get_thresholds() - b.get_thresholds()) < eps &&
527 std::fabs(a.displayAlpha(ALPHA) - b.displayAlpha(ALPHA)) < eps &&
528 std::fabs(a.displayAlpha(ALPHAS) - b.displayAlpha(ALPHAS)) < eps &&
529 std::fabs(a.displayMass(mUp) - b.displayMass(mUp)) < eps &&
530 std::fabs(a.displayMass(mCharm) - b.displayMass(mCharm)) < eps &&
531 std::fabs(a.displayMass(mTop) - b.displayMass(mTop)) < eps &&
532 std::fabs(a.displayMass(mDown) - b.displayMass(mDown)) < eps &&
533 std::fabs(a.displayMass(mStrange) - b.displayMass(mStrange)) < eps &&
534 std::fabs(a.displayMass(mBottom) - b.displayMass(mBottom)) < eps &&
535 std::fabs(a.displayMass(mElectron) - b.displayMass(mElectron)) < eps &&
536 std::fabs(a.displayMass(mMuon) - b.displayMass(mMuon)) < eps &&
537 std::fabs(a.displayMass(mTau) - b.displayMass(mTau)) < eps &&
538 std::fabs(a.displayNeutrinoPoleMass(1) - b.displayNeutrinoPoleMass(1)) < eps &&
539 std::fabs(a.displayNeutrinoPoleMass(2) - b.displayNeutrinoPoleMass(2)) < eps &&
540 std::fabs(a.displayNeutrinoPoleMass(3) - b.displayNeutrinoPoleMass(3)) < eps &&
541 std::fabs(a.displayPoleMt() - b.displayPoleMt()) < eps &&
542 std::fabs(a.displayPoleMb() - b.displayPoleMb()) < eps &&
543 std::fabs(a.displayPoleMtau() - b.displayPoleMtau()) < eps &&
544 std::fabs(a.displayPoleMW() - b.displayPoleMW()) < eps &&
545 std::fabs(a.displayPoleMZ() - b.displayPoleMZ()) < eps &&
546 std::fabs(a.displayFermiConstant() - b.displayFermiConstant()) < eps;
547}
548
549} // namespace softsusy
virtual void run_to(double, double eps=-1.0)
double scale
current renormalization scale
void set_number_of_parameters(int pars)
No convergence while solving the RGEs.
Definition: error.hpp:57
Out of bounds access.
Definition: error.hpp:208
Spectrum generator was not setup correctly.
Definition: error.hpp:46
Quark and lepton masses and gauge couplings in QEDxQCD effective theory.
Definition: lowe.h:64
static std::array< std::string, NUMBER_OF_LOW_ENERGY_INPUT_PARAMETERS > display_input_parameter_names()
returns vector of all parameter names
Definition: lowe.cpp:514
void setPMNS(const flexiblesusy::PMNS_parameters &)
sets PMNS parameters (in the MS-bar scheme at MZ)
Definition: lowe.cpp:181
double displayAlpha(EGauge ai) const
Returns a single gauge structure constant.
Definition: lowe.h:163
void runto_safe(double, double eps=-1.0)
throws if non-perturbative error occurs
Definition: lowe.cpp:149
double displayAlphaSInput() const
Returns input value alpha_s(MZ)
Definition: lowe.h:169
virtual Eigen::ArrayXd beta() const override
Definition: lowe.cpp:137
virtual Eigen::ArrayXd get() const override
Definition: lowe.cpp:117
flexiblesusy::CKM_parameters displayCKM() const
returns CKM parameters
Definition: lowe.cpp:191
double displayPoleMt() const
Display pole top mass.
Definition: lowe.h:135
double displayFermiConstant() const
Returns Fermi constant.
Definition: lowe.h:171
double qedBeta() const
QED beta function.
Definition: lowe.cpp:281
flexiblesusy::PMNS_parameters displayPMNS() const
returns PMNS parameters
Definition: lowe.cpp:201
void toMz()
Evolves object to MZ.
Definition: lowe.cpp:408
double mbPole
pole masses of third family quarks
Definition: lowe.h:72
Input_t input
SLHA input parmeters.
Definition: lowe.h:71
auto displayMass() const -> decltype(mf)
Returns a vector of running fermion masses.
Definition: lowe.h:149
double displayLeptonRunningMass(int) const
Returns a single charged lepton running mass, given a zero-based generation index i.
Definition: lowe.cpp:243
double displayMu2GeV() const
Returns mu(2 GeV)
Definition: lowe.h:181
double displayMbMb() const
Returns mb(mb) MSbar.
Definition: lowe.h:177
Eigen::Array< double, 9, 1 > mf
fermion running masses
Definition: lowe.h:70
double displayMs2GeV() const
Returns ms(2 GeV)
Definition: lowe.h:185
Eigen::Array< double, 9, 1 > massBeta() const
beta functions of masses
Definition: lowe.cpp:326
void setCKM(const flexiblesusy::CKM_parameters &)
sets CKM parameters (in the MS-bar scheme at MZ)
Definition: lowe.cpp:173
void setPoleMb(double mb)
set pole bottom mass
Definition: lowe.h:98
double displayNeutrinoPoleMass(int i) const
Returns a single neutrino pole mass.
Definition: lowe.h:157
double qcdBeta() const
QCD beta function.
Definition: lowe.cpp:296
void setMass(EMass mno, double m)
sets a running quark mass
Definition: lowe.h:112
Eigen::Array< double, 2, 1 > a
gauge couplings
Definition: lowe.h:69
double displayPoleMel() const
Display pole electron mass.
Definition: lowe.h:141
double displayPoleMmuon() const
Display pole muon mass.
Definition: lowe.h:139
int flavours(double) const
Definition: lowe.cpp:162
double displayPoleMb() const
Returns bottom "pole" mass.
Definition: lowe.h:143
double displayDownQuarkRunningMass(int) const
Returns a single down-quark running MS-bar mass, given a zero-based generation index i.
Definition: lowe.cpp:223
double displayPoleMtau() const
Display pole tau mass.
Definition: lowe.h:137
void to(double scale, double precision_goal=1e-5, int max_iterations=20)
Evolves object to given scale.
Definition: lowe.cpp:422
double extractPoleMb(double asMb)
returns number of active flavours
Definition: lowe.cpp:379
Eigen::Array< double, 3, 1 > guess_alpha_SM5(double scale) const
guess coupling constants {alpha_1, alpha_2, alpha_3} in SM(5)
Definition: lowe.cpp:495
virtual void set(const Eigen::ArrayXd &) override
Definition: lowe.cpp:128
double displayMcMc() const
Returns mc(mc) MSbar.
Definition: lowe.h:179
double displayLeptonPoleMass(int) const
Returns a single charged lepton pole mass, given a zero-based generation index i.
Definition: lowe.cpp:233
double displayPoleMZ() const
Returns Z boson pole mass.
Definition: lowe.h:147
double displayUpQuarkRunningMass(int) const
Returns a single up-quark running MS-bar mass, given a zero-based generation index i.
Definition: lowe.cpp:213
double displayPoleMW() const
Returns W boson pole mass.
Definition: lowe.h:145
double displayMd2GeV() const
Returns md(2 GeV)
Definition: lowe.h:183
double displayAlphaEmInput() const
Returns input value alpha_em(MZ)
Definition: lowe.h:167
void setAlpha(EGauge ai, double ap)
sets QED or QCD structure constant
Definition: lowe.h:118
QedQcd object contains Standard Model quark and lepton masses. It integrates them using 3 loop qcd x ...
constexpr double MDOWN
default running quark mass from PDG
Definition: ew_input.hpp:50
constexpr double MCHARM
default running quark mass from PDG
Definition: ew_input.hpp:52
constexpr double PMTOP
default pole mass from CDF/D0 Run II 1207.1069
Definition: ew_input.hpp:58
constexpr double MTAU
default pole lepton mass from PDG
Definition: ew_input.hpp:57
constexpr double MUP
default running quark mass from PDG
Definition: ew_input.hpp:49
constexpr double MELECTRON
default pole lepton mass from PDG
Definition: ew_input.hpp:55
constexpr double MSTRANGE
default running quark mass from PDG
Definition: ew_input.hpp:51
constexpr double MBOTTOM
default running quark mass from PDG
Definition: ew_input.hpp:53
constexpr double MMUON
default pole lepton mass from PDG
Definition: ew_input.hpp:56
const Real epsilon
Definition: mathdefs.hpp:18
std::string to_string(char a)
Complex< T > log(const Complex< T > &z) noexcept
Definition: complex.hpp:54
static constexpr double Pi
Definition: wrappers.hpp:44
bool is_equal_rel(const Eigen::PlainObjectBase< Derived > &a, const Eigen::PlainObjectBase< Derived > &b, double eps)
Definition: eigen_utils.hpp:89
static constexpr double zeta3
Definition: wrappers.hpp:54
double getRunMt(double poleMt, double asmt)
Definition: lowe.cpp:57
constexpr double sqr(double a) noexcept
Definition: lowe.cpp:46
double getAsmt(double mtop, double alphasMz, double mz)
Definition: lowe.cpp:50
double getRunMtFromMz(double poleMt, double asMZ, double mz)
Definition: lowe.cpp:62
bool is_zero(double x) noexcept
Definition: lowe.cpp:41
Comment if you want default softsusy behaviour.
Definition: lowe.cpp:37
@ ALPHA
Definition: lowe.h:44
@ ALPHAS
Definition: lowe.h:44
bool operator==(const QedQcd &a, const QedQcd &b)
Definition: lowe.cpp:519
std::ostream & operator<<(std::ostream &left, const QedQcd &m)
Formatted output from QedQcd object.
Definition: lowe.cpp:253
const std::array< std::string, NUMBER_OF_LOW_ENERGY_INPUT_PARAMETERS > QedQcd_input_parmeter_names
Definition: lowe.cpp:68
@ mDown
Definition: lowe.h:41
@ mTau
Definition: lowe.h:42
@ mStrange
Definition: lowe.h:41
@ mTop
Definition: lowe.h:41
@ mUp
Definition: lowe.h:41
@ mBottom
Definition: lowe.h:41
@ mElectron
Definition: lowe.h:41
@ mMuon
Definition: lowe.h:42
@ mCharm
Definition: lowe.h:41
@ PMNS_theta_23
Definition: lowe.h:56
@ PMNS_theta_13
Definition: lowe.h:56
@ Me_pole
Definition: lowe.h:52
@ PMNS_delta
Definition: lowe.h:56
@ Mm_pole
Definition: lowe.h:52
@ mc_mc
Definition: lowe.h:54
@ CKM_delta
Definition: lowe.h:55
@ ms_2GeV
Definition: lowe.h:53
@ GFermi
Definition: lowe.h:49
@ CKM_theta_12
Definition: lowe.h:55
@ PMNS_alpha_1
Definition: lowe.h:56
@ PMNS_theta_12
Definition: lowe.h:56
@ Mtau_pole
Definition: lowe.h:52
@ alpha_s_MSbar_at_MZ
Definition: lowe.h:48
@ CKM_theta_13
Definition: lowe.h:55
@ mb_mb
Definition: lowe.h:54
@ MZ_pole
Definition: lowe.h:50
@ md_2GeV
Definition: lowe.h:54
@ PMNS_alpha_2
Definition: lowe.h:56
@ CKM_theta_23
Definition: lowe.h:55
@ Mt_pole
Definition: lowe.h:53
@ mu_2GeV
Definition: lowe.h:53
@ alpha_em_MSbar_at_MZ
Definition: lowe.h:47
@ MW_pole
Definition: lowe.h:50