a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
StandardModel.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  *
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include <iostream>
9 #include <math.h>
10 #include <stdlib.h>
11 #include <stdexcept>
12 #include <gsl/gsl_sf_zeta.h>
13 #include <algorithm>
14 #include "StandardModel.h"
15 #include "EWSMcache.h"
16 #include "EWSMOneLoopEW.h"
17 #include "EWSMTwoLoopQCD.h"
18 #include "EWSMThreeLoopQCD.h"
19 #include "EWSMTwoLoopEW.h"
20 #include "EWSMThreeLoopEW2QCD.h"
21 #include "EWSMThreeLoopEW.h"
23 #include "LeptonFlavour.h"
24 #include "gslpp_function_adapter.h"
25 
26 std::string StandardModel::SMvars[NSMvars] = {
27  "lambda", "A", "rhob", "etab", "Mz", "AlsMz", "GF", "ale", "dAle5Mz", "mHl",
28  "delMw", "delSin2th_l", "delSin2th_q", "delSin2th_b", "delGammaZ", "delsigma0H", "delR0l", "delR0c", "delR0b",
29  "mneutrino_1", "mneutrino_2", "mneutrino_3", "melectron", "mmu", "mtau", "muw"
30 };
31 
32 const double StandardModel::GeVminus2_to_nb = 389379.338;
33 const double StandardModel::Mw_error = 0.00001; /* 0.01 MeV */
34 
36 : QCD(), Yu(3, 3, 0.), Yd(3, 3, 0.), Yn(3, 3, 0.),
37 Ye(3, 3, 0.), SMM(*this), SMFlavour(*this)
38 {
41  FlagMw = "APPROXIMATEFORMULA";
42  FlagRhoZ = "NORESUM";
43  FlagKappaZ = "APPROXIMATEFORMULA";
44  FlagWolfenstein = true;
45 
46  FlagSMAux = true;
47 
48  /* Internal flags for EWPO (for debugging) */
49  flag_order[EW1] = true;
50  flag_order[EW1QCD1] = true;
51  flag_order[EW1QCD2] = true;
52  flag_order[EW2] = true;
53  flag_order[EW2QCD1] = true;
54  flag_order[EW3] = true;
55 
56  // Caches for EWPO
57  FlagCacheInStandardModel = true; // use caches in the current class
59  useDeltaAlpha_cache = false;
60  useMw_cache = false;
61  useGammaW_cache = false;
63  DeltaAlpha_cache = 0.0;
64  Mw_cache = 0.0;
65  GammaW_cache = 0.0;
66  for (int i = 0; i < 12; ++i) {
67  useRhoZ_f_cache[i] = false;
68  useKappaZ_f_cache[i] = false;
69  rhoZ_f_cache[i] = gslpp::complex(0.0, 0.0, false);
70  kappaZ_f_cache[i] = gslpp::complex(0.0, 0.0, false);
71  }
72 
73  myEWSMcache = NULL;
74  myOneLoopEW = NULL;
75  myTwoLoopQCD = NULL;
76  myThreeLoopQCD = NULL;
77  myTwoLoopEW = NULL;
78  myThreeLoopEW2QCD = NULL;
79  myThreeLoopEW = NULL;
80  myApproximateFormulae = NULL;
81 
82  // Particle(std::string name, double mass, double mass_scale = 0., double width = 0., double charge = 0.,double isospin = 0.);
83  leptons[NEUTRINO_1] = Particle("NEUTRINO_1", 0., 0., 0., 0., .5);
84  leptons[NEUTRINO_2] = Particle("NEUTRINO_2", 0., 0., 0., 0., .5);
85  leptons[NEUTRINO_3] = Particle("NEUTRINO_3", 0., 0., 0., 0., .5);
86  leptons[ELECTRON] = Particle("ELECTRON", 0., 0., 0., -1., -.5);
87  leptons[MU] = Particle("MU", 0., 0., 0., -1., -.5);
88  leptons[TAU] = Particle("TAU", 0., 0., 0., -1., -.5);
89 
90  ModelParamMap.insert(std::make_pair("Mz", std::cref(Mz)));
91  ModelParamMap.insert(std::make_pair("AlsMz", std::cref(AlsMz)));
92  ModelParamMap.insert(std::make_pair("GF", std::cref(GF)));
93  ModelParamMap.insert(std::make_pair("ale", std::cref(ale)));
94  ModelParamMap.insert(std::make_pair("dAle5Mz", std::cref(dAle5Mz)));
95  ModelParamMap.insert(std::make_pair("mHl", std::cref(mHl)));
96  ModelParamMap.insert(std::make_pair("delMw", std::cref(delMw)));
97  ModelParamMap.insert(std::make_pair("delSin2th_l", std::cref(delSin2th_l)));
98  ModelParamMap.insert(std::make_pair("delSin2th_q", std::cref(delSin2th_q)));
99  ModelParamMap.insert(std::make_pair("delSin2th_b", std::cref(delSin2th_b)));
100  ModelParamMap.insert(std::make_pair("delGammaZ", std::cref(delGammaZ)));
101  ModelParamMap.insert(std::make_pair("delsigma0H", std::cref(delsigma0H)));
102  ModelParamMap.insert(std::make_pair("delR0l", std::cref(delR0l)));
103  ModelParamMap.insert(std::make_pair("delR0c", std::cref(delR0c)));
104  ModelParamMap.insert(std::make_pair("delR0b", std::cref(delR0b)));
105  ModelParamMap.insert(std::make_pair("mneutrino_1", std::cref(leptons[NEUTRINO_1].getMass())));
106  ModelParamMap.insert(std::make_pair("mneutrino_2", std::cref(leptons[NEUTRINO_2].getMass())));
107  ModelParamMap.insert(std::make_pair("mneutrino_3", std::cref(leptons[NEUTRINO_3].getMass())));
108  ModelParamMap.insert(std::make_pair("melectron", std::cref(leptons[ELECTRON].getMass())));
109  ModelParamMap.insert(std::make_pair("mmu", std::cref(leptons[MU].getMass())));
110  ModelParamMap.insert(std::make_pair("mtau", std::cref(leptons[TAU].getMass())));
111  ModelParamMap.insert(std::make_pair("lambda", std::cref(lambda)));
112  ModelParamMap.insert(std::make_pair("A", std::cref(A)));
113  ModelParamMap.insert(std::make_pair("rhob", std::cref(rhob)));
114  ModelParamMap.insert(std::make_pair("etab", std::cref(etab)));
115  ModelParamMap.insert(std::make_pair("muw", std::cref(muw)));
116 
117  iterationNo = 0;
118  realorder = LO;
119 }
120 
122 {
123  if (IsModelInitialized()) {
124  if (myEWSMcache != NULL) delete(myEWSMcache);
125  if (myOneLoopEW != NULL) delete(myOneLoopEW);
126  if (myTwoLoopQCD != NULL) delete(myTwoLoopQCD);
127  if (myThreeLoopQCD != NULL) delete(myThreeLoopQCD);
128  if (myTwoLoopEW != NULL) delete(myTwoLoopEW);
129  if (myThreeLoopEW2QCD != NULL) delete(myThreeLoopEW2QCD);
130  if (myThreeLoopEW != NULL) delete(myThreeLoopEW);
131  if (myApproximateFormulae != NULL) delete(myApproximateFormulae);
132  if (myLeptonFlavour != NULL) delete(myLeptonFlavour);
133  }
134 }
135 
136 
138 // Initialization
139 
141 {
142  myEWSMcache = new EWSMcache(*this);
150  myLeptonFlavour = new LeptonFlavour(*this);
151  setModelInitialized(true);
152  return (true);
153 }
154 
155 
157 // Parameters
158 
159 bool StandardModel::Init(const std::map<std::string, double>& DPars)
160 {
161  for (std::map<std::string, double>::const_iterator it = DPars.begin(); it != DPars.end(); it++)
162  if (it->first.compare("AlsM") == 0 || it->first.compare("MAls") == 0)
163  throw std::runtime_error("ERROR: inappropriate parameter " + it->first
164  + " in model initialization");
165 
166  std::map<std::string, double> myDPars(DPars);
167  myDPars["AlsM"] = myDPars.at("AlsMz"); // do not change!
168  myDPars["MAls"] = myDPars.at("Mz");
169  return (QCD::Init(myDPars));
170 }
171 
173 {
174  requireCKM = false;
175  requireYe = false;
176  requireYn = false;
177 
178  if (!QCD::PreUpdate()) return (false);
179 
180  return (true);
181 }
182 
183 bool StandardModel::Update(const std::map<std::string, double>& DPars)
184 {
185  if (!PreUpdate()) return (false);
186 
187  UpdateError = false;
188 
189  for (std::map<std::string, double>::const_iterator it = DPars.begin(); it != DPars.end(); it++)
190  setParameter(it->first, it->second);
191 
192  if (UpdateError) return (false);
193 
194  if (!PostUpdate()) return (false);
195 
196  return (true);
197 }
198 
200 {
201  if (!QCD::PostUpdate()) return (false);
202 
203  /* Set the CKM and PMNS matrices */
204  computeCKM();
205 
206  /* Set the Yukawa matrices */
207  if (!isModelSUSY()) {
208  computeYukawas();
209  }
210 
211  /* Check whether the parameters for the EWPO are updated or not */
212  if (!checkSMparamsForEWPO()) {
214  useDeltaAlpha_cache = false;
215  useMw_cache = false;
216  useGammaW_cache = false;
217  for (int i = 0; i < 12; ++i) {
218  useRhoZ_f_cache[i] = false;
219  useKappaZ_f_cache[i] = false;
220  }
221  }
223  /* Necessary for updating StandardModel parameters in StandardModelMatching */
225 
226  iterationNo++;
227 
228  return (true);
229 }
230 
231 void StandardModel::setParameter(const std::string name, const double& value)
232 {
233  if (name.compare("Mz") == 0) {
234  Mz = value;
235  QCD::setParameter("MAls", value);
236  } else if (name.compare("AlsMz") == 0) {
237  AlsMz = value;
238  QCD::setParameter("AlsM", value);
239  } else if (name.compare("GF") == 0)
240  GF = value;
241  else if (name.compare("ale") == 0)
242  ale = value;
243  else if (name.compare("dAle5Mz") == 0)
244  dAle5Mz = value;
245  else if (name.compare("mHl") == 0)
246  mHl = value;
247  else if (name.compare("delMw") == 0)
248  delMw = value;
249  else if (name.compare("delSin2th_l") == 0)
250  delSin2th_l = value;
251  else if (name.compare("delSin2th_q") == 0)
252  delSin2th_q = value;
253  else if (name.compare("delSin2th_b") == 0)
254  delSin2th_b = value;
255  else if (name.compare("delGammaZ") == 0)
256  delGammaZ = value;
257  else if (name.compare("delsigma0H") == 0)
258  delsigma0H = value;
259  else if (name.compare("delR0l") == 0)
260  delR0l = value;
261  else if (name.compare("delR0c") == 0)
262  delR0c = value;
263  else if (name.compare("delR0b") == 0)
264  delR0b = value;
265  else if (name.compare("mneutrino_1") == 0) {
266  leptons[NEUTRINO_1].setMass(value);
267  requireYn = true;
268  } else if (name.compare("mneutrino_2") == 0) {
269  leptons[NEUTRINO_2].setMass(value);
270  requireYn = true;
271  } else if (name.compare("mneutrino_3") == 0) {
272  leptons[NEUTRINO_3].setMass(value);
273  requireYn = true;
274  } else if (name.compare("melectron") == 0) {
275  leptons[ELECTRON].setMass(value);
276  requireYe = true;
277  } else if (name.compare("mmu") == 0) {
278  leptons[MU].setMass(value);
279  requireYe = true;
280  } else if (name.compare("mtau") == 0) {
281  leptons[TAU].setMass(value);
282  requireYe = true;
283  } else if (name.compare("lambda") == 0 && FlagWolfenstein) {
284  lambda = value;
285  requireCKM = true;
286  } else if (name.compare("A") == 0 && FlagWolfenstein) {
287  A = value;
288  requireCKM = true;
289  } else if (name.compare("rhob") == 0 && FlagWolfenstein) {
290  rhob = value;
291  requireCKM = true;
292  } else if (name.compare("etab") == 0 && FlagWolfenstein) {
293  etab = value;
294  requireCKM = true;
295  } else if (name.compare("V_us") == 0 && !FlagWolfenstein) {
296  Vus = value;
297  requireCKM = true;
298  } else if (name.compare("V_cb") == 0 && !FlagWolfenstein) {
299  Vcb = value;
300  requireCKM = true;
301  } else if (name.compare("V_ub") == 0 && !FlagWolfenstein) {
302  Vub = value;
303  requireCKM = true;
304  } else if (name.compare("gamma") == 0 && !FlagWolfenstein) {
305  gamma = value;
306  requireCKM = true;
307  } else if (name.compare("muw") == 0)
308  muw = value;
309  else
310  QCD::setParameter(name, value);
311 }
312 
313 bool StandardModel::CheckParameters(const std::map<std::string, double>& DPars)
314 {
315  for (int i = 0; i < NSMvars; i++) {
316  if (DPars.find(SMvars[i]) == DPars.end()) {
317  std::cout << "ERROR: missing mandatory SM parameter " << SMvars[i] << std::endl;
320  }
321  }
322  return (QCD::CheckParameters(DPars));
323 }
324 
326 {
327  if (requireCKM) {
328  if (FlagWolfenstein) {
330  Vus = myCKM.getV_us().abs();
331  Vcb = myCKM.getV_cb().abs();
332  Vub = myCKM.getV_ub().abs();
334  } else {
336  lambda = myCKM.getLambda();
337  A = myCKM.getA();
338  rhob = myCKM.getRhoBar();
339  etab = myCKM.getEtaBar();
340  }
341  }
342  myPMNS.computePMNS(s12, s13, s23, delta, alpha21, alpha31); // WARNING: This does not do anything since the input values are not set.
343 }
344 
346 {
347  /* THE FOLLOWING CODES HAVE TO BE MODIFIED!!
348  * The Yukawa matrices have to be computed at a common scale
349  * for all the fermions!!! */
350  if (requireYu || requireCKM) {
352  for (int i = 0; i < 3; i++)
353  Yu.assign(i, i, this->quarks[UP + 2 * i].getMass() / v() * sqrt(2.));
354  Yu = myCKM.getCKM().transpose() * Yu;
355  }
356  if (requireYd) {
358  for (int i = 0; i < 3; i++)
359  Yd.assign(i, i, this->quarks[DOWN + 2 * i].getMass() / v() * sqrt(2.));
360  }
361  if (requireYe) {
363  for (int i = 0; i < 3; i++)
364  Ye.assign(i, i, this->leptons[ELECTRON + 2 * i].getMass() / v() * sqrt(2.));
365  }
366  if (requireYn) {
368  for (int i = 0; i < 3; i++)
369  Yn.assign(i, i, this->leptons[NEUTRINO_1 + 2 * i].getMass() / v() * sqrt(2.));
370  Yn = Yn * myPMNS.getPMNS().hconjugate();
371  }
372 }
373 
374 
376 // Flags
377 
378 bool StandardModel::setFlag(const std::string name, const bool value)
379 {
380  bool res = false;
381  if (name.compare("CacheInStandardModel") == 0) {
383  res = true;
384  } else if (name.compare("CacheInEWSMcache") == 0) {
386  res = true;
387  } else if (name.compare("Wolfenstein") == 0) {
388  FlagWolfenstein = value;
389  if(!FlagWolfenstein) {
390  SMvars[std::distance(SMvars,std::find(SMvars,SMvars+NSMvars,"lambda"))] = "V_us";
391  SMvars[std::distance(SMvars,std::find(SMvars,SMvars+NSMvars,"A"))] = "V_cb";
392  SMvars[std::distance(SMvars,std::find(SMvars,SMvars+NSMvars,"rhob"))] = "V_ub";
393  SMvars[std::distance(SMvars,std::find(SMvars,SMvars+NSMvars,"etab"))] = "gamma";
394 
395  ModelParamMap.insert(std::make_pair("V_us", std::cref(Vus)));
396  ModelParamMap.insert(std::make_pair("V_cb", std::cref(Vcb)));
397  ModelParamMap.insert(std::make_pair("V_ub", std::cref(Vub)));
398  ModelParamMap.insert(std::make_pair("gamma", std::cref(gamma)));
399  }
400  res = true;
401  } else if (name.compare("WithoutNonUniversalVC") == 0) {
403  res = true;
404  } else if (name.compare("NoApproximateGammaZ") == 0) {
405  FlagNoApproximateGammaZ = value;
406  res = true;
407  } else if (name.compare("SMAux") == 0) {
408  FlagSMAux = value;
409  res = true;
410  } else
411  res = QCD::setFlag(name, value);
412 
413  if (!res) res = SMFlavour.setFlag(name, value);
414 
415  return (res);
416 }
417 
418 bool StandardModel::setFlagStr(const std::string name, const std::string value)
419 {
420  bool res = false;
421  if (name.compare("Mw") == 0) {
422  if (checkEWPOscheme(value)) {
423  FlagMw = value;
424  res = true;
425  } else
426  throw std::runtime_error("StandardModel::setFlagStr(): Invalid flag "
427  + name + "=" + value);
428 
429  } else if (name.compare("RhoZ") == 0) {
430  if (checkEWPOscheme(value)) {
431  FlagRhoZ = value;
432  res = true;
433  } else
434  throw std::runtime_error("StandardModel::setFlagStr(): Invalid flag "
435  + name + "=" + value);
436  } else if (name.compare("KappaZ") == 0) {
437  if (checkEWPOscheme(value)) {
438  FlagKappaZ = value;
439  res = true;
440  } else
441  throw std::runtime_error("StandardModel::setFlagStr(): Invalid flag "
442  + name + "=" + value);
443  } else
444  res = QCD::setFlagStr(name, value);
445 
446  return (res);
447 }
448 
450 {
451  return (QCD::CheckFlags());
452 }
453 
454 
456 // For EWPO caches
457 
459 {
460  // 11 parameters in QCD:
461  // AlsMz, Mz, mup, mdown, mcharm, mstrange, mtop, mbottom,
462  // mut, mub, muc
463  // 19 parameters in StandardModel
464  // GF, ale, dAle5Mz, mHl,
465  // mneutrino_1, mneutrino_2, mneutrino_3, melectron, mmu, mtau,
466  // delMw, delSin2th_l, delSin2th_q, delSin2th_b, delGammaZ, delsigma0H, delR0l, delR0c, delR0b,
467  // 3 flags in StandardModel
468  // FlagMw_cache, FlagRhoZ_cache, FlagKappaZ_cache
469 
470  // Note: When modifying the array below, the constant NumSMParams has to
471  // be modified accordingly.
472  double SMparams[NumSMParamsForEWPO] = {
473  AlsMz, Mz, GF, ale, dAle5Mz,
474  mHl, mtpole,
479  leptons[MU].getMass(),
480  leptons[TAU].getMass(),
481  quarks[UP].getMass(),
482  quarks[DOWN].getMass(),
483  quarks[CHARM].getMass(),
485  quarks[BOTTOM].getMass(),
486  mut, mub, muc,
491  };
492 
493  // check updated parameters
494  bool bNotUpdated = true;
495  for (int i = 0; i < NumSMParamsForEWPO; ++i) {
496  if (SMparamsForEWPO_cache[i] != SMparams[i]) {
497  SMparamsForEWPO_cache[i] = SMparams[i];
498  bNotUpdated &= false;
499  }
500  }
501 
502  return bNotUpdated;
503 }
504 
506 
507 double StandardModel::ale_OS(const double mu, orders order) const
508 {
509  if (mu < 50.0)
510  throw std::runtime_error("out of range in StandardModel::ale_OS()");
511 
512  double N = 20.0 / 3.0;
513  double beta1 = N / 3.0;
514  double beta2 = N / 4.0;
515  double alpha_ini = alphaMz();
516  double v = 1.0 + 2.0 * beta1 * alpha_ini / M_PI * log(Mz / mu);
517 
518  switch (order) {
519  case LO:
520  return ( alpha_ini / v);
521  case FULLNLO:
522  return ( alpha_ini / v * (1.0 - beta2 / beta1 * alpha_ini / M_PI * log(v) / v));
523  default:
524  throw std::runtime_error("Error in StandardModel::ale_OS()");
525  }
526 }
527 
528 double StandardModel::Beta_s(int nm, unsigned int nf) const
529 {
530  unsigned int nu = nf % 2 == 0 ? nf / 2 : nf / 2;
531  unsigned int nd = nf % 2 == 0 ? nf / 2 : 1 + nf / 2;
532  double Qu = 2. / 3., Qd = -1. / 3., Qbar2 = nu * Qu * Qu + nd * Qd * Qd,
533  Qbar4 = nu * Qu * Qu * Qu * Qu + nd * Qd * Qd * Qd * Qd;
534 
535  switch(nm)
536  {
537  case 00:
538  return(Beta0((double) nf));
539  case 10:
540  return(Beta1((double) nf));
541  case 20:
542  return(Beta2((double) nf));
543  case 30:
544  return(Beta3((double) nf));
545  case 01:
546  return(-4. * TF * Qbar2 );
547  case 11:
548  return((4. * CF - 8. * CA) * TF * Qbar2 );
549  case 02:
550  return(11./3. * TF * Qbar2 * Beta_e(00, nf) + 2. * TF * Qbar4);
551  default:
552  throw std::runtime_error("StandardModel::Beta_s(): case not implemented");
553  }
554 }
555 
556 double StandardModel::Beta_e(int nm, unsigned int nf) const
557 {
558  unsigned int nu = nf % 2 == 0 ? nf / 2 : nf / 2;
559  unsigned int nd = nf % 2 == 0 ? nf / 2 : 1 + nf / 2;
560  double Qu = 2. / 3., Qd = -1. / 3., Qbar2 = nu * Qu * Qu + nd * Qd * Qd,
561  Qbar4 = nu * Qu * Qu * Qu * Qu + nd * Qd * Qd * Qd * Qd;
562 
563  switch(nm)
564  {
565  case 00:
566  return(4./3. * (Qbar2 * Nc + 3.)); // QL^2 = 1
567  case 10:
568  return(4. * (Qbar4 * Nc + 3.));
569  case 01:
570  return(4. * CF * Nc * Qbar2);
571  default:
572  throw std::runtime_error("StandardModel::Beta_e(): case not implemented");
573  }
574 }
575 
576 double StandardModel::Als(double mu, orders order, bool qed_flag, bool Nf_thr) const
577 {
578  switch (order)
579  {
580  case LO:
581  realorder = order;
582  return AlsByOrder(mu, LO, qed_flag, Nf_thr);
583  case FULLNLO:
584  realorder = order;
585  return (AlsByOrder(mu, LO, qed_flag, Nf_thr) + AlsByOrder(mu, NLO, qed_flag, Nf_thr));
586  case FULLNNLO:
587  realorder = order;
588  return (AlsByOrder(mu, LO, qed_flag, Nf_thr) + AlsByOrder(mu, NLO, qed_flag, Nf_thr) + AlsByOrder(mu, NNLO, qed_flag, Nf_thr));
589  case FULLNNNLO:
590  realorder = order;
591  return (AlsByOrder(mu, LO, qed_flag, Nf_thr) + AlsByOrder(mu, NLO, qed_flag, Nf_thr) + AlsByOrder(mu, NNLO, qed_flag, Nf_thr) + AlsByOrder(mu, NNNLO, qed_flag, Nf_thr));
592  default:
593  throw std::runtime_error("StandardModel::Als(): " + orderToString(order) + " is not implemented.");
594  }
595 }
596 
597 double StandardModel::AlsByOrder(double mu, orders order, bool qed_flag, bool Nf_thr) const
598 {
599  int i, nfAls = (int) Nf(Mz), nfmu = Nf_thr ? (int) Nf(mu) : nfAls;
600  double als, alstmp, mutmp;
601  orders fullord;
602 
603  for (i = 0; i < CacheSize; ++i)
604  if ((mu == als_cache[0][i]) && ((double) order == als_cache[1][i]) &&
605  (AlsMz == als_cache[2][i]) && (Mz == als_cache[3][i]) &&
606  (mut == als_cache[4][i]) && (mub == als_cache[5][i]) &&
607  (muc == als_cache[6][i]) && (double) qed_flag == als_cache[7][i]
608  && (double) Nf_thr == als_cache[8][i] && alphaMz() == als_cache[9][i])
609  return als_cache[10][i];
610 
611  switch (order)
612  {
613  case LO:
614  case NLO:
615  case NNLO:
616  case NNNLO:
617  if (nfAls == nfmu)
618  return(AlsWithInit(mu, AlsMz, Mz, order, qed_flag));
619  fullord = FullOrder(order);
620  if (nfAls > nfmu) {
621  mutmp = BelowTh(Mz);
622  alstmp = AlsWithInit(mutmp, AlsMz, Mz, realorder, qed_flag);
623  alstmp *= (1. - NfThresholdCorrections(mutmp, MassOfNf(nfAls), alstmp, nfAls, fullord)); // WARNING: QED threshold corrections not implemented yet
624  for (i = nfAls - 1; i > nfmu; i--) {
625  mutmp = BelowTh(mutmp - MEPS);
626  alstmp = AlsWithInit(mutmp, alstmp, AboveTh(mutmp) - MEPS, realorder, qed_flag);
627  alstmp *= (1. - NfThresholdCorrections(mutmp, MassOfNf(i), alstmp, i, fullord)); // WARNING: QED threshold corrections not implemented yet
628  }
629  als = AlsWithInit(mu, alstmp, AboveTh(mu) - MEPS, order, qed_flag);
630  }
631 
632  if (nfAls < nfmu) {
633  mutmp = AboveTh(Mz) - MEPS;
634  alstmp = AlsWithInit(mutmp, AlsMz, Mz, realorder, qed_flag);
635  alstmp *= (1. + NfThresholdCorrections(mutmp, MassOfNf(nfAls + 1), alstmp, nfAls + 1, fullord)); // WARNING: QED threshold corrections not implemented yet
636  for (i = nfAls + 1; i < nfmu; i++) {
637  mutmp = AboveTh(mutmp) - MEPS;
638  alstmp = AlsWithInit(mutmp, alstmp, BelowTh(mutmp) + MEPS, realorder, qed_flag);
639  alstmp *= (1. + NfThresholdCorrections(mutmp, MassOfNf(i + 1), alstmp, i + 1, fullord)); // WARNING: QED threshold corrections not implemented yet
640  }
641  als = AlsWithInit(mu, alstmp, BelowTh(mu) + MEPS, order, qed_flag);
642  }
643 
644  CacheShift(als_cache, 11);
645  als_cache[0][0] = mu;
646  als_cache[1][0] = (double) order;
647  als_cache[2][0] = AlsMz;
648  als_cache[3][0] = Mz;
649  als_cache[4][0] = mut;
650  als_cache[5][0] = mub;
651  als_cache[6][0] = muc;
652  als_cache[7][0] = (double) qed_flag;
653  als_cache[8][0] = (double) Nf_thr;
654  als_cache[9][0] = alphaMz();
655  als_cache[10][0] = als;
656 
657  return als;
658  default:
659  throw std::runtime_error("StandardModel::Als(): " + orderToString(order) + " is not implemented.");
660  }
661 }
662 
663 double StandardModel::AlsWithInit(double mu, double alsi, double mu_i, orders order, bool qed_flag) const
664 {
665  double nf = Nf(mu), alei = Ale(mu_i, FULLNLO); // CHANGE ME!
666  double b00s = Beta_s(00, nf), b00e = Beta_e(00, nf);
667  double v = 1. + b00s * alsi / 2. / M_PI * log(mu / mu_i);
668  double ve = 1. - b00e * alei / 2. / M_PI * log(mu / mu_i);
669  double logv = log(v), logve = log(ve);
670  double rho = 1. / (1. + b00e * alei / b00s / alsi);
671  double als = QCD::AlsWithInit(mu, alsi, mu_i, order);
672  double b01s = Beta_s(01,nf), b01s00e = b01s / b00e;
673 
674  if (qed_flag)
675  switch (order)
676  {
677  case LO:
678  break;
679  case NLO:
680  als += alsi * alsi / 4. / M_PI / v / v * b01s00e * logve;
681  break;
682  case NNLO:
683  als += alsi * alsi * alsi / 4. / 4. / M_PI / M_PI / v / v / v * (
684  b01s00e * b01s00e * logve * logve + b01s00e * Beta_s(10, nf) / b00s *
685  (-2. * logv * logve + rho * ve * logve));
686  break;
687  case NNNLO:
688  als += alsi * alsi * alei / 4. / 4. / M_PI / M_PI / v / v / ve * (Beta_s(02, nf) / b00e *
689  (ve - 1.) + Beta_s(11, nf) / b00s * rho * ve * (logve - logv) + b01s00e * Beta_e(10, nf) /
690  b00e * (logve - ve + 1.) + b01s * Beta_s(10, nf) / b00s / b00s * rho * logv +
691  b01s00e * Beta_e(01, nf) / b00s * (rho * ve * (logv - logve) - logv));
692  break;
693  case FULLNLO:
694  return (AlsWithInit(mu, alsi, mu_i, LO, true) + AlsWithInit(mu, alsi, mu_i, NLO, true));
695  case FULLNNLO:
696  return (AlsWithInit(mu, alsi, mu_i, LO, true) + AlsWithInit(mu, alsi, mu_i, NLO, true)+ AlsWithInit(mu, alsi, mu_i, NNLO, true));
697  case FULLNNNLO:
698  return (AlsWithInit(mu, alsi, mu_i, LO, true) + AlsWithInit(mu, alsi, mu_i, NLO, true)+ AlsWithInit(mu, alsi, mu_i, NNLO, true) + AlsWithInit(mu, alsi, mu_i, NNNLO, true));
699  default:
700  throw std::runtime_error("StandardModel::AlsWithInit(): " + orderToString(order) + " is not implemented.");
701  }
702 
703  return (als);
704 }
705 
706 double StandardModel::Ale(const double mu, orders order, bool Nf_thr) const
707 {
708  int i, nfAle = (int) Nf(Mz), nfmu = Nf_thr ? (int) Nf(mu) : nfAle;
709  double ale, aletmp, mutmp, aleMz = alphaMz();
710  orders fullord;
711 
712  for (i = 0; i < CacheSize; ++i)
713  if ((mu == ale_cache[0][i]) && ((double) order == ale_cache[1][i]) &&
714  (AlsMz == ale_cache[2][i]) && (Mz == ale_cache[3][i]) &&
715  (mut == ale_cache[4][i]) && (mub == ale_cache[5][i]) &&
716  (muc == ale_cache[6][i])
717  && (double) Nf_thr == ale_cache[7][i] && aleMz == ale_cache[8][i])
718  return ale_cache[9][i];
719 
720  switch (order)
721  {
722  case FULLNLO:
723  return (Ale(mu, LO, Nf_thr) + Ale(mu, NLO, Nf_thr));
724  case FULLNNLO:
725  return (Ale(mu, LO, Nf_thr) + Ale(mu, NLO, Nf_thr) + Ale(mu, NNLO, Nf_thr));
726  case FULLNNNLO:
727  return (Ale(mu, LO, Nf_thr) + Ale(mu, NLO, Nf_thr) + Ale(mu, NNLO, Nf_thr) + Ale(mu, NNNLO, Nf_thr));
728  case LO:
729  if (nfAle == nfmu)
730  return(AleWithInit(mu, aleMz, Mz, order));
731  case NLO:
732  case NNLO:
733  case NNNLO:
734  if (nfAle == nfmu)
735  return(0.);
736  fullord = FullOrder(order);
737  if (nfAle > nfmu) {
738  mutmp = BelowTh(Mz);
739  aletmp = AleWithInit(mutmp, aleMz, Mz, fullord);
740 // aletmp *= (1. - NfThresholdCorrections(mutmp, MassOfNf(nfAle), alstmp, nfAls, fullord)); // WARNING: QED threshold corrections not implemented yet
741  for (i = nfAle - 1; i > nfmu; i--) {
742  mutmp = BelowTh(mutmp - MEPS);
743  aletmp = AleWithInit(mutmp, aletmp, AboveTh(mutmp) - MEPS, fullord);
744 // aletmp *= (1. - NfThresholdCorrections(mutmp, MassOfNf(i), aletmp, i, fullord)); // WARNING: QED threshold corrections not implemented yet
745  }
746  ale = AleWithInit(mu, aletmp, AboveTh(mu) - MEPS, order);
747  }
748 
749  if (nfAle < nfmu) {
750  mutmp = AboveTh(Mz) - MEPS;
751  aletmp = AleWithInit(mutmp, aleMz, Mz, fullord);
752 // alstmp *= (1. + NfThresholdCorrections(mutmp, MassOfNf(nfAls + 1), alstmp, nfAls + 1, fullord)); // WARNING: QED threshold corrections not implemented yet
753  for (i = nfAle + 1; i < nfmu; i++) {
754  mutmp = AboveTh(mutmp) - MEPS;
755  aletmp = AleWithInit(mutmp, aletmp, BelowTh(mutmp) + MEPS, fullord);
756 // alstmp *= (1. + NfThresholdCorrections(mutmp, MassOfNf(i + 1), alstmp, i + 1, fullord)); // WARNING: QED threshold corrections not implemented yet
757  }
758  ale = AleWithInit(mu, aletmp, BelowTh(mu) + MEPS, order);
759  }
760 
761  CacheShift(ale_cache, 10);
762  ale_cache[0][0] = mu;
763  ale_cache[1][0] = (double) order;
764  ale_cache[2][0] = AlsMz;
765  ale_cache[3][0] = Mz;
766  ale_cache[4][0] = mut;
767  ale_cache[5][0] = mub;
768  ale_cache[6][0] = muc;
769  ale_cache[7][0] = (double) Nf_thr;
770  ale_cache[8][0] = aleMz;
771  ale_cache[9][0] = ale;
772 
773  return ale;
774  default:
775  throw std::runtime_error("StandardModel::Ale(): " + orderToString(order) + " is not implemented.");
776  }
777 }
778 
779 double StandardModel::AleWithInit(double mu, double alei, double mu_i, orders order) const
780 {
781  if (fabs(mu - mu_i) < MEPS) return(alei);
782 
783  double nf = Nf(mu), alsi = Als(mu_i, FULLNNNLO, true);
784  double b00e = Beta_e(00, nf), b00s = Beta_s(00, nf);
785  double ve = 1. - b00e * alei / 2. / M_PI * log(mu / mu_i);
786  double logv = log(1. + b00s * alsi / 2. / M_PI * log(mu / mu_i)), logve = log(ve);
787 
788  switch (order)
789  {
790  case LO:
791  return (alei / ve);
792  case NLO:
793  return (- alei * alei / 4. / M_PI / ve / ve * (Beta_e(10, nf) / b00e * logve - Beta_e(01, nf) / b00s * logv) );
794  // Higher order terms ? Need to understand eq. (35)
795  case FULLNLO:
796  return (AleWithInit(mu, alei, mu_i, LO) + AleWithInit(mu, alei, mu_i, NLO));
797  default:
798  throw std::runtime_error("StandardModel::AleWithInit(): " + orderToString(order) + " is not implemented.");
799  }
800 }
801 
802 double StandardModel::DeltaAlphaLepton(const double s) const
803 {
804  if (s == Mz * Mz)
807  return DeltaAlphaLepton_cache;
808 
809  double DeltaAlphaL = 0.0;
810  if (flag_order[EW1])
811  DeltaAlphaL += myOneLoopEW->DeltaAlpha_l(s);
812  if (flag_order[EW1QCD1])
813  DeltaAlphaL += myTwoLoopQCD->DeltaAlpha_l(s);
814  if (flag_order[EW1QCD2])
815  DeltaAlphaL += myThreeLoopQCD->DeltaAlpha_l(s);
816  if (flag_order[EW2])
817  DeltaAlphaL += myTwoLoopEW->DeltaAlpha_l(s);
818  if (flag_order[EW2QCD1])
819  DeltaAlphaL += myThreeLoopEW2QCD->DeltaAlpha_l(s);
820  if (flag_order[EW3])
821  DeltaAlphaL += myThreeLoopEW->DeltaAlpha_l(s);
822 
823  if (s == Mz * Mz) {
824  DeltaAlphaLepton_cache = DeltaAlphaL;
826  }
827  return DeltaAlphaL;
828 }
829 
831 {
832  double Mz2 = Mz*Mz;
833  return (DeltaAlphaLepton(Mz2) + dAle5Mz);
834 }
835 
836 double StandardModel::DeltaAlphaTop(const double s) const
837 {
838  double DeltaAlpha = 0.0;
839  if (flag_order[EW1])
841  if (flag_order[EW1QCD1])
843  if (flag_order[EW1QCD2])
845  if (flag_order[EW2])
847  if (flag_order[EW2QCD1])
849  if (flag_order[EW3])
851 
852  return DeltaAlpha;
853 }
854 
856 {
859  return DeltaAlpha_cache;
860 
861  double Mz2 = Mz*Mz;
863  useDeltaAlpha_cache = true;
864  return DeltaAlpha_cache;
865 }
866 
868 {
869  return (ale / (1.0 - DeltaAlpha()));
870 // return(1./127.918); // FOR HEFFDF1 TEST
871 }
872 
873 double StandardModel::Alstilde5(const double mu) const
874 {
875  double mu_0 = Mz;
876  double alphatilde_e = alphaMz()/4./M_PI;
877  double alphatilde_s = AlsMz/4./M_PI;
878  unsigned int nf = 5;
879 
880  double B00S = Beta0(nf), B10S = Beta1(nf), B20S = Beta2(nf), B30S = gsl_sf_zeta_int(3) * 352864./81. - 598391./1458,
881  B01S = -22./9., B11S = -308./27., B02S = 4945./243.;
882 
883  double B00E = 80./9., B01E = 176./9., B10E = 464./27.;
884 
885  double B10soB00s = B10S / B00S;
886  double B01soB00e = B01S/B00E;
887 
888  double vs= 1. + 2. * B00S * alphatilde_s * log(mu/ mu_0);
889  double ve= 1. - 2. * B00E * alphatilde_e * log(mu/ mu_0);
890  double ps= B00S * alphatilde_s /(B00S * alphatilde_s + B00E * alphatilde_e);
891 
892  double logve = log(ve);
893  double logvs = log(vs);
894  double logeos = log(ve/vs);
895  double logsoe = log(vs/ve);
896  double asovs = alphatilde_s/vs;
897  double aeove = alphatilde_e/ve;
898 
899  double result = 0;
900 
901  result = asovs - pow(asovs, 2) * (logvs * B10soB00s - logve * B01soB00e)
902  + pow(asovs, 3) * ((1. - vs) * B20S / B00S + B10soB00s * B10soB00s * (logvs * logvs - logvs
903  + vs - 1.) + B01soB00e * B01soB00e * logve * logve + (-2. * logvs * logve
904  + ps * ve * logve) * B01S * B10S/(B00E * B00S))
905  + pow(asovs, 4) * (0.5 * B30S *(1. - vs * vs)/ B00S + ((2. * vs - 3.) * logvs + vs * vs
906  - vs) * B20S * B10soB00s /(B00S) + B10soB00s * B10soB00s * B10soB00s * (- pow(logvs,3)
907  + 5. * pow(logvs,2) / 2. + 2. * (1. - vs) * logvs - (vs - 1.) * (vs - 1.)* 0.5))
908  + pow(asovs, 2) * (aeove) * ((ve - 1.) * B02S / B00E
909  + ps * ve * logeos * B11S /B00S +(logve - ve + 1.) * B01soB00e * B10E/(B00E)
910  + logvs * ps * B01S * B10soB00s/(B00S) +(logsoe * ve * ps - logvs) * B01soB00e * B01E/( B00S));
911  return (result);
912 }
913 
914 
916 
917 double StandardModel::v() const
918 {
919  return ( 1. / sqrt(sqrt(2.) * GF));
920 }
921 
922 
924 
926 {
927  return ( Mz / sqrt(2.0) * sqrt(1.0 + sqrt(1.0 - 4.0 * M_PI * ale / sqrt(2.0) / GF / Mz / Mz)));
928 }
929 
930 double StandardModel::s02() const
931 {
932  double tmp = 1.0 - 4.0 * M_PI * alphaMz() / sqrt(2.0) / GF / Mz / Mz;
933  if (tmp < 0.0)
934  throw std::runtime_error("Error in s02()");
935 
936  return ( (1.0 - sqrt(tmp)) / 2.0);
937 }
938 
939 double StandardModel::c02() const
940 {
941  return ( 1.0 - s02());
942 }
943 
944 double StandardModel::Mw() const
945 {
946  /* Debug */
947  //std::cout << std::boolalpha
948  // << checkScheme(schemeMw_cache,schemeMw,false)
949  // << " [cache:" << schemeMw_cache
950  // << " current:" << schemeMw << "]" << std::endl;
951 
953  if (useMw_cache)
954  return Mw_cache;
955 
956  double Mw;
957  if (FlagMw.compare("APPROXIMATEFORMULA") == 0)
959  else {
960  //std::cout << std::setprecision(12)
961  // << "TEST: Mw_tree = " << Mw_tree() << std::endl;
962 
963  double DeltaRho[orders_EW_size], DeltaR_rem[orders_EW_size];
964  ComputeDeltaRho(Mw_tree(), DeltaRho);
965  ComputeDeltaR_rem(Mw_tree(), DeltaR_rem);
966  Mw = resumMw(Mw_tree(), DeltaRho, DeltaR_rem);
967 
968  /* Mw from iterations */
969  double Mw_org = Mw_tree();
970  while (fabs(Mw - Mw_org) > Mw_error) {
971  Mw_org = Mw;
972  ComputeDeltaRho(Mw, DeltaRho);
973  ComputeDeltaR_rem(Mw, DeltaR_rem);
974  Mw = resumMw(Mw, DeltaRho, DeltaR_rem);
975  /* TEST */
976  //int prec_def = std::cout.precision();
977  //std::cout << std::setprecision(12) << "TEST: Mw_org = " << Mw_org
978  // << " Mw_new = " << Mw << std::endl;
979  //std::cout.precision(prec_def);
980  }
981  }
982 
983 // Mw = 80.426; // FOR HEFFDF1 TEST
984  Mw_cache = Mw;
985  useMw_cache = true;
986  return Mw;
987 }
988 
989 double StandardModel::cW2(double Mw_i) const
990 {
991  return ( Mw_i * Mw_i / Mz / Mz);
992 }
993 
994 double StandardModel::cW2() const
995 {
996  return ( cW2(Mw()));
997 // return (1.0 - 0.2312); // FOR HEFFDF1 TEST
998 }
999 
1000 double StandardModel::sW2(double Mw_i) const
1001 {
1002  return ( 1.0 - cW2(Mw_i));
1003 }
1004 
1005 double StandardModel::sW2() const
1006 {
1007  return ( 1.0 - cW2());
1008 }
1009 
1011 {
1012  /* in the experimental/running-width scheme */
1013  double myMw = Mw();
1014  double sW2 = 1.0 - myMw * myMw / Mz / Mz;
1015  double tmp = sqrt(2.0) * GF * sW2 * myMw * myMw / M_PI / ale;
1016  if (FlagMw.compare("NORESUM") == 0
1017  || FlagMw.compare("APPROXIMATEFORMULA") == 0) {
1018  return (tmp - 1.0);
1019  } else {
1020  return (1.0 - 1.0 / tmp);
1021  }
1022 }
1023 
1024 void StandardModel::ComputeDeltaRho(const double Mw_i,
1025  double DeltaRho[orders_EW_size]) const
1026 {
1027  if (flag_order[EW1])
1028  DeltaRho[EW1] = myOneLoopEW->DeltaRho(Mw_i);
1029  else
1030  DeltaRho[EW1] = 0.0;
1031  if (flag_order[EW1QCD1])
1032  DeltaRho[EW1QCD1] = myTwoLoopQCD->DeltaRho(Mw_i);
1033  else
1034  DeltaRho[EW1QCD1] = 0.0;
1035  if (flag_order[EW1QCD2])
1036  DeltaRho[EW1QCD2] = myThreeLoopQCD->DeltaRho(Mw_i);
1037  else
1038  DeltaRho[EW1QCD2] = 0.0;
1039  if (flag_order[EW2])
1040  DeltaRho[EW2] = myTwoLoopEW->DeltaRho(Mw_i);
1041  else
1042  DeltaRho[EW2] = 0.0;
1043  if (flag_order[EW2QCD1])
1044  DeltaRho[EW2QCD1] = myThreeLoopEW2QCD->DeltaRho(Mw_i);
1045  else
1046  DeltaRho[EW2QCD1] = 0.0;
1047  if (flag_order[EW3])
1048  DeltaRho[EW3] = myThreeLoopEW->DeltaRho(Mw_i);
1049  else
1050  DeltaRho[EW3] = 0.0;
1051 }
1052 
1053 void StandardModel::ComputeDeltaR_rem(const double Mw_i,
1054  double DeltaR_rem[orders_EW_size]) const
1055 {
1056  if (flag_order[EW1])
1057  DeltaR_rem[EW1] = myOneLoopEW->DeltaR_rem(Mw_i);
1058  else
1059  DeltaR_rem[EW1] = 0.0;
1060  if (flag_order[EW1QCD1])
1061  DeltaR_rem[EW1QCD1] = myTwoLoopQCD->DeltaR_rem(Mw_i);
1062  else
1063  DeltaR_rem[EW1QCD1] = 0.0;
1064  if (flag_order[EW1QCD2])
1065  DeltaR_rem[EW1QCD2] = myThreeLoopQCD->DeltaR_rem(Mw_i);
1066  else
1067  DeltaR_rem[EW1QCD2] = 0.0;
1068  if (flag_order[EW2])
1069  DeltaR_rem[EW2] = myTwoLoopEW->DeltaR_rem(Mw_i);
1070  else
1071  DeltaR_rem[EW2] = 0.0;
1072  if (flag_order[EW2QCD1])
1073  DeltaR_rem[EW2QCD1] = myThreeLoopEW2QCD->DeltaR_rem(Mw_i);
1074  else
1075  DeltaR_rem[EW2QCD1] = 0.0;
1076  if (flag_order[EW3])
1077  DeltaR_rem[EW3] = myThreeLoopEW->DeltaR_rem(Mw_i);
1078  else
1079  DeltaR_rem[EW3] = 0.0;
1080 }
1081 
1082 
1084 
1085 double StandardModel::Mzbar() const
1086 {
1087  double G0 = GF * pow(Mz, 3.0) / 24.0 / sqrt(2.0) / M_PI;
1088  double sW2tree = 1.0 - Mw_tree() * Mw_tree() / Mz / Mz;
1089  double Gz = 6.0 * G0; // neutrinos
1090  Gz += 3.0 * G0 * (pow(1.0 - 4.0 * sW2tree, 2.0) + 1.0); // e, mu and tau
1091  Gz += 6.0 * G0 * (pow(1.0 - 8.0 / 3.0 * sW2tree, 2.0) + 1.0)
1092  * (1.0 + AlsMz / M_PI); // u and c
1093  Gz += 9.0 * G0 * (pow(1.0 - 4.0 / 3.0 * sW2tree, 2.0) + 1.0)
1094  * (1.0 + AlsMz / M_PI); // d, s and b
1095 
1096  //Gz = 2.4952; // experimental data
1097  //std::cout << "Gz=" << Gz << std::endl; // for test
1098 
1099  return ( Mz - Gz * Gz / 2.0 / Mz);
1100 }
1101 
1102 double StandardModel::MwbarFromMw(const double Mw) const
1103 {
1104  double AlsMw = Als(Mw, FULLNLO);
1105  double Gw_SM = 3.0 * GF * pow(Mw, 3.0) / 2.0 / sqrt(2.0) / M_PI
1106  * (1.0 + 2.0 * AlsMw / 3.0 / M_PI);
1107 
1108  return ( Mw - Gw_SM * Gw_SM / 2.0 / Mw);
1109 }
1110 
1111 double StandardModel::MwFromMwbar(const double Mwbar) const
1112 {
1113  double AlsMw = Als(Mwbar, FULLNNLO);
1114  double Gw_SM = 3.0 * GF * pow(Mwbar, 3.0) / 2.0 / sqrt(2.0) / M_PI
1115  * (1.0 + 2.0 * AlsMw / 3.0 / M_PI);
1116 
1117  return (Mwbar + Gw_SM * Gw_SM / 2.0 / Mwbar);
1118 }
1119 
1121 {
1122  double Mwbar_SM = MwbarFromMw(Mw());
1123  double sW2bar = 1.0 - Mwbar_SM * Mwbar_SM / Mzbar() / Mzbar();
1124  double tmp = sqrt(2.0) * GF * sW2bar * Mwbar_SM * Mwbar_SM / M_PI / ale;
1125 
1126  return (tmp - 1.0);
1127 }
1128 
1129 
1131 
1132 double StandardModel::rho_GammaW(const Particle fi, const Particle fj) const
1133 {
1134  double rhoW = 0.0;
1135  if (flag_order[EW1])
1136  rhoW = myOneLoopEW->rho_GammaW(fi, fj, Mw());
1137  return rhoW;
1138 }
1139 
1140 double StandardModel::GammaW(const Particle fi, const Particle fj) const
1141 {
1142  if ((fi.getIndex()) % 2 || (fj.getIndex() + 1) % 2)
1143  throw std::runtime_error("Error in StandardModel::GammaW()");
1144 
1145  double G0 = GF * pow(Mw(), 3.0) / 6.0 / sqrt(2.0) / M_PI;
1146  gslpp::complex V(0.0, 0.0, false);
1147 
1148  if (fi.is("TOP"))
1149  return (0.0);
1150 
1151  if (fj.getIndex() - fi.getIndex() == 1)
1152  V = gslpp::complex(1.0, 0.0, false);
1153  else
1154  V = gslpp::complex(0.0, 0.0, false);
1155 
1156  if (fi.is("LEPTON"))
1157  return ( V.abs2() * G0 * rho_GammaW(fi, fj));
1158  else {
1159  double AlsMw = AlsWithInit(Mw(), AlsMz, Mz, FULLNLO, false);
1160  return ( 3.0 * V.abs2() * G0 * rho_GammaW(fi, fj)*(1.0 + AlsMw / M_PI));
1161  }
1162 }
1163 
1165 {
1167  if (useGammaW_cache)
1168  return GammaW_cache;
1169 
1170  double GammaWtmp = 0.;
1171 
1172  for (int i = 0; i < 6; i += 2)
1173  GammaWtmp += GammaW(leptons[i], leptons[i + 1]) + GammaW(quarks[i], quarks[i + 1]);
1174 
1175  GammaW_cache = GammaWtmp;
1176  useGammaW_cache = true;
1177  return GammaWtmp;
1178 }
1179 
1180 
1182 
1183 double StandardModel::A_f(const Particle f) const
1184 {
1185  double Re_kappa = kappaZ_f(f).real();
1186  double Re_gV_over_gA = 1.0 - 4.0 * fabs(f.getCharge()) * Re_kappa * sW2();
1187  return ( 2.0 * Re_gV_over_gA / (1.0 + pow(Re_gV_over_gA, 2.0)));
1188 }
1189 
1190 double StandardModel::AFB(const Particle f) const
1191 {
1192  return (3.0 / 4.0 * A_f(leptons[ELECTRON]) * A_f(f));
1193 }
1194 
1196 {
1197  double Re_kappa = kappaZ_f(f).real();
1198  return ( Re_kappa * sW2());
1199 }
1200 
1201 double StandardModel::GammaZ(const Particle f) const
1202 {
1203  if (f.is("TOP"))
1204  return 0.0;
1205  double Gamma;
1206  if (!IsFlagNoApproximateGammaZ()) {
1207 
1208  if (FlagSMAux) {
1209 
1210 // New (Testing)
1211 
1212  /* SM contribution with the approximate formula */
1213  if (f.is("NEUTRINO_1") || f.is("NEUTRINO_2") || f.is("NEUTRINO_3"))
1214  Gamma = myApproximateFormulae->X_full("Gamma_nu");
1215  else if (f.is("ELECTRON") || f.is("MU"))
1216  Gamma = myApproximateFormulae->X_full("Gamma_e_mu");
1217  else if (f.is("TAU"))
1218  Gamma = myApproximateFormulae->X_full("Gamma_tau");
1219  else if (f.is("UP"))
1220  Gamma = myApproximateFormulae->X_full("Gamma_u");
1221  else if (f.is("CHARM"))
1222  Gamma = myApproximateFormulae->X_full("Gamma_c");
1223  else if (f.is("DOWN") || f.is("STRANGE"))
1224  Gamma = myApproximateFormulae->X_full("Gamma_d_s");
1225  else if (f.is("BOTTOM"))
1226  Gamma = myApproximateFormulae->X_full("Gamma_b");
1227  else
1228  throw std::runtime_error("Error in StandardModel::GammaZ()");
1229 
1230  } else {
1231 
1232 // Original
1233 
1234  /* SM contribution with the approximate formula */
1235  if (f.is("NEUTRINO_1") || f.is("NEUTRINO_2") || f.is("NEUTRINO_3"))
1236  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_nu");
1237  else if (f.is("ELECTRON") || f.is("MU"))
1238  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_e_mu");
1239  else if (f.is("TAU"))
1240  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_tau");
1241  else if (f.is("UP"))
1242  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_u");
1243  else if (f.is("CHARM"))
1244  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_c");
1245  else if (f.is("DOWN") || f.is("STRANGE"))
1246  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_d_s");
1247  else if (f.is("BOTTOM"))
1248  Gamma = myApproximateFormulae->X_full_2_loop("Gamma_b");
1249  else
1250  throw std::runtime_error("Error in StandardModel::GammaZ()");
1251 
1252  }
1253 
1254  } else {
1255  gslpp::complex myrhoZ_f = rhoZ_f(f);
1256  gslpp::complex gV_over_gA = gV_f(f) / gA_f(f);
1257  double G0 = GF * pow(Mz, 3.0) / 24.0 / sqrt(2.0) / M_PI;
1258  if (f.is("LEPTON")) {
1259  double myalphaMz = alphaMz();
1260  double Q = f.getCharge();
1261  double xl = pow(f.getMass() / Mz, 2.0);
1262  Gamma = G0 * myrhoZ_f.abs() * sqrt(1.0 - 4.0 * xl)
1263  * ((1.0 + 2.0 * xl)*(gV_over_gA.abs2() + 1.0) - 6.0 * xl)
1264  * (1.0 + 3.0 / 4.0 * myalphaMz / M_PI * pow(Q, 2.0));
1265  } else if (f.is("QUARK")) {
1266  Gamma = 3.0 * G0 * myrhoZ_f.abs()*(gV_over_gA.abs2() * RVq((QCD::quark) (f.getIndex() - 6)) + RAq((QCD::quark) (f.getIndex() - 6)));
1267 
1268  /* Nonfactorizable EW-QCD corrections */
1269  Gamma += Delta_EWQCD((QCD::quark) (f.getIndex() - 6));
1270  } else
1271  throw std::runtime_error("Error in StandardModel::GammaZ()");
1272  }
1273 
1274  return Gamma;
1275 }
1276 
1278 {
1280  + GammaZ(leptons[NEUTRINO_3]));
1281 }
1282 
1284 {
1285  double Gamma_had_tmp = 0.0;
1286 
1287  if (!IsFlagNoApproximateGammaZ()){
1288 
1289  if (FlagSMAux) {
1290 
1291 // New (Testing)
1292 
1293  /* SM contribution with the approximate formula */
1294  return myApproximateFormulae->X_full("Gamma_had");
1295 
1296  } else {
1297 
1298 // Original
1299 
1300  /* SM contribution with the approximate formula */
1301  return myApproximateFormulae->X_full_2_loop("Gamma_had");
1302 
1303  }
1304 
1305  } else {
1306 
1307  Gamma_had_tmp = GammaZ(quarks[UP]) + GammaZ(quarks[DOWN]) + GammaZ(quarks[CHARM])
1309 
1310  /* Singlet vector contribution (not included in the approximate formula) */
1311  double G0 = GF * pow(Mz, 3.0) / 24.0 / sqrt(2.0) / M_PI;
1312  Gamma_had_tmp += 4.0 * 3.0 * G0 * RVh();
1313 
1314  return Gamma_had_tmp;
1315  }
1316 }
1317 
1319 {
1320  if (!IsFlagNoApproximateGammaZ()){
1321 
1322  if (FlagSMAux) {
1323 
1324 // New (Testing)
1325 
1326  /* SM contribution with the approximate formula */
1327  return myApproximateFormulae->X_full("GammaZ");
1328 
1329  } else {
1330 
1331 // Original
1332 
1333  /* SM contribution with the approximate formula */
1334  return myApproximateFormulae->X_full_2_loop("GammaZ");
1335 
1336  }
1337 
1338  } else {
1339  return ( GammaZ(leptons[ELECTRON]) + GammaZ(leptons[MU]) + GammaZ(leptons[TAU])
1340  + Gamma_inv() + Gamma_had());
1341  }
1342 }
1343 
1345 {
1346  if (!IsFlagNoApproximateGammaZ()){
1347 
1348  if (FlagSMAux) {
1349 
1350 // New (Testing)
1351 
1352  /* SM contribution with the approximate formula */
1353  return (myApproximateFormulae->X_full("sigmaHadron")
1354  / GeVminus2_to_nb);
1355  } else {
1356 
1357 // Original
1358 
1359  /* SM contribution with the approximate formula */
1360  return (myApproximateFormulae->X_full_2_loop("sigmaHadron")
1361  / GeVminus2_to_nb);
1362  }
1363  } else {
1364  return (12.0 * M_PI * GammaZ(leptons[ELECTRON]) * Gamma_had()
1365  / Mz / Mz / Gamma_Z() / Gamma_Z());
1366  }
1367 }
1368 
1369 double StandardModel::R0_f(const Particle f) const
1370 {
1371 
1372  if (FlagSMAux) {
1373 
1374 // New (Testing)
1375 
1376  if (f.is("ELECTRON")) {
1378  /* SM contribution with the approximate formula */
1379  return (myApproximateFormulae->X_full("R0_electron"));
1380  else
1381  return (Gamma_had() / GammaZ(leptons[ELECTRON]));
1382  } else if (f.is("MU")) {
1384  /* SM contribution with the approximate formula */
1385  return (myApproximateFormulae->X_full("R0_muon"));
1386  else
1387  return (Gamma_had() / GammaZ(leptons[MU]));
1388  } else if (f.is("TAU")) {
1390  /* SM contribution with the approximate formula */
1391  return (myApproximateFormulae->X_full("R0_tau"));
1392  else
1393  return (Gamma_had() / GammaZ(leptons[TAU]));
1394  } else if (f.is("NEUTRINO_1")) {
1396  /* SM contribution with the approximate formula */
1397  return (myApproximateFormulae->X_full("R0_neutrino"));
1398  else
1399  return (GammaZ(leptons[NEUTRINO_1]) / Gamma_had());
1400  } else if (f.is("NEUTRINO_2")) {
1402  /* SM contribution with the approximate formula */
1403  return (myApproximateFormulae->X_full("R0_neutrino"));
1404  else
1405  return (GammaZ(leptons[NEUTRINO_2]) / Gamma_had());
1406  } else if (f.is("NEUTRINO_3")) {
1408  /* SM contribution with the approximate formula */
1409  return (myApproximateFormulae->X_full("R0_neutrino"));
1410  else
1411  return (GammaZ(leptons[NEUTRINO_3]) / Gamma_had());
1412  } else if (f.is("UP")) {
1414  /* SM contribution with the approximate formula */
1415  return (myApproximateFormulae->X_full("R0_up"));
1416  else
1417  return (GammaZ(quarks[UP]) / Gamma_had());
1418 
1419  } else if (f.is("STRANGE")) {
1421  /* SM contribution with the approximate formula */
1422  return (myApproximateFormulae->X_full("R0_strange"));
1423  else
1424  return (GammaZ(quarks[STRANGE]) / Gamma_had());
1425 
1426  } else if (f.is("CHARM")) {
1428  /* SM contribution with the approximate formula */
1429  return (myApproximateFormulae->X_full("R0_charm"));
1430  else
1431  return (GammaZ(quarks[CHARM]) / Gamma_had());
1432 
1433  } else if (f.is("BOTTOM")) {
1435  /* SM contribution with the approximate formula */
1436  return (myApproximateFormulae->X_full("R0_bottom"));
1437  else
1438  return (GammaZ(quarks[BOTTOM]) / Gamma_had());
1439 
1440  } else throw std::runtime_error("StandardModel::R0_f called with wrong argument");
1441 
1442  } else {
1443 
1444 // Original
1445 
1446  if (f.is("ELECTRON")) {
1448  /* SM contribution with the approximate formula */
1449  return (myApproximateFormulae->X_full_2_loop("R0_electron"));
1450  else
1451  return (Gamma_had() / GammaZ(leptons[ELECTRON]));
1452  } else if (f.is("MU")) {
1454  /* SM contribution with the approximate formula */
1455  return (myApproximateFormulae->X_full_2_loop("R0_muon"));
1456  else
1457  return (Gamma_had() / GammaZ(leptons[MU]));
1458  } else if (f.is("TAU")) {
1460  /* SM contribution with the approximate formula */
1461  return (myApproximateFormulae->X_full_2_loop("R0_tau"));
1462  else
1463  return (Gamma_had() / GammaZ(leptons[TAU]));
1464  } else if (f.is("NEUTRINO_1")) {
1466  /* SM contribution with the approximate formula */
1467  return (myApproximateFormulae->X_full_2_loop("R0_neutrino"));
1468  else
1469  return (GammaZ(leptons[NEUTRINO_1]) / Gamma_had());
1470  } else if (f.is("NEUTRINO_2")) {
1472  /* SM contribution with the approximate formula */
1473  return (myApproximateFormulae->X_full_2_loop("R0_neutrino"));
1474  else
1475  return (GammaZ(leptons[NEUTRINO_2]) / Gamma_had());
1476  } else if (f.is("NEUTRINO_3")) {
1478  /* SM contribution with the approximate formula */
1479  return (myApproximateFormulae->X_full_2_loop("R0_neutrino"));
1480  else
1481  return (GammaZ(leptons[NEUTRINO_3]) / Gamma_had());
1482  } else if (f.is("UP")) {
1484  /* SM contribution with the approximate formula */
1485  return (myApproximateFormulae->X_full_2_loop("R0_up"));
1486  else
1487  return (GammaZ(quarks[UP]) / Gamma_had());
1488 
1489  } else if (f.is("STRANGE")) {
1491  /* SM contribution with the approximate formula */
1492  return (myApproximateFormulae->X_full_2_loop("R0_strange"));
1493  else
1494  return (GammaZ(quarks[STRANGE]) / Gamma_had());
1495 
1496  } else if (f.is("CHARM")) {
1498  /* SM contribution with the approximate formula */
1499  return (myApproximateFormulae->X_full_2_loop("R0_charm"));
1500  else
1501  return (GammaZ(quarks[CHARM]) / Gamma_had());
1502 
1503  } else if (f.is("BOTTOM")) {
1505  /* SM contribution with the approximate formula */
1506  return (myApproximateFormulae->X_full_2_loop("R0_bottom"));
1507  else
1508  return (GammaZ(quarks[BOTTOM]) / Gamma_had());
1509 
1510  } else throw std::runtime_error("StandardModel::R0_f called with wrong argument");
1511 
1512  }
1513 }
1514 
1515 double StandardModel::R_inv() const
1516 {
1517  return (Gamma_inv() / GammaZ(leptons[ELECTRON]));
1518 
1519 }
1520 
1521 double StandardModel::N_nu() const
1522 {
1523  double Nnu = 0.0;
1524  double Gl = 0.0;
1525  double Rl = 0.0;
1526 
1527  // Don't assume lepton universality: average over lepton flavours
1529  Rl = (1.0/3.0) * ( R0_f(leptons[ELECTRON]) + R0_f(leptons[MU]) + R0_f(leptons[TAU]) );
1530 
1531  Nnu = sqrt( 12.0 * M_PI * Rl / Mz / Mz / sigma0_had() ) - Rl -3.0;
1532 
1533  Nnu = (Gl/Gamma_inv()) * Nnu;
1534 
1535  return Nnu;
1536 
1537 }
1538 
1539 
1541 
1543 {
1544  return ( gA_f(f)
1545  *(1.0 - 4.0 * fabs(f.getCharge())*(kappaZ_f(f)) * sW2()));
1546 }
1547 
1549 {
1550  return ( sqrt(rhoZ_f(f)) * f.getIsospin());
1551 }
1552 
1554 {
1555  if (f.getName().compare("TOP") == 0) return (gslpp::complex(0.0, 0.0, false));
1556  if (FlagRhoZ.compare("APPROXIMATEFORMULA") == 0)
1557  throw std::runtime_error("No approximate formula is available for rhoZ^f");
1558  else {
1559 
1561  if (useRhoZ_f_cache[f.getIndex()])
1562  return rhoZ_f_cache[f.getIndex()];
1563 
1564  double myMw = Mw();
1565 
1566  /* compute Delta rho */
1567  double DeltaRho[orders_EW_size];
1568  ComputeDeltaRho(myMw, DeltaRho);
1569 
1570  /* compute delta rho_rem^f */
1571  gslpp::complex deltaRho_remf[orders_EW_size];
1572  deltaRho_remf[EW1] = gslpp::complex(0.0, 0.0, false);
1573  deltaRho_remf[EW1QCD1] = gslpp::complex(0.0, 0.0, false);
1574  deltaRho_remf[EW1QCD2] = gslpp::complex(0.0, 0.0, false);
1575  deltaRho_remf[EW2] = gslpp::complex(0.0, 0.0, false);
1576  deltaRho_remf[EW2QCD1] = gslpp::complex(0.0, 0.0, false);
1577  deltaRho_remf[EW3] = gslpp::complex(0.0, 0.0, false);
1578  if (flag_order[EW1])
1579  deltaRho_remf[EW1] = myOneLoopEW->deltaRho_rem_f(f, myMw);
1580  if (flag_order[EW1QCD1])
1581 #ifdef WITHIMTWOLOOPQCD
1582  deltaRho_remf[EW1QCD1] = gslpp::complex(myTwoLoopQCD->deltaRho_rem_f(f, myMw).real(),
1583  myTwoLoopQCD->deltaRho_rem_f(f, myMw).imag(), false);
1584 #else
1585  deltaRho_remf[EW1QCD1] = gslpp::complex(myTwoLoopQCD->deltaRho_rem_f(f, myMw).real(), 0.0, false);
1586 #endif
1587  if (flag_order[EW1QCD2])
1588  deltaRho_remf[EW1QCD2] = gslpp::complex(myThreeLoopQCD->deltaRho_rem_f(f, myMw).real(), 0.0, false);
1589  if (flag_order[EW2])
1590  deltaRho_remf[EW2] = gslpp::complex(myTwoLoopEW->deltaRho_rem_f(f, myMw).real(), 0.0, false);
1591  if (flag_order[EW2QCD1])
1592  deltaRho_remf[EW2QCD1] = gslpp::complex(myThreeLoopEW2QCD->deltaRho_rem_f(f, myMw).real(), 0.0, false);
1593  if (flag_order[EW3])
1594  deltaRho_remf[EW3] = gslpp::complex(myThreeLoopEW->deltaRho_rem_f(f, myMw).real(), 0.0, false);
1595 
1596  /* compute Delta rbar_rem */
1597  double DeltaRbar_rem = 0.0;
1598  if (flag_order[EW1])
1599  DeltaRbar_rem = myOneLoopEW->DeltaRbar_rem(myMw);
1600 
1601  /* Re[rho_Z^f] with or without resummation */
1602  double deltaRho_rem_f_real[orders_EW_size];
1603  for (int j = 0; j < orders_EW_size; ++j)
1604  deltaRho_rem_f_real[j] = deltaRho_remf[j].real();
1605  double ReRhoZf = resumRhoZ(DeltaRho, deltaRho_rem_f_real, DeltaRbar_rem, f.is("BOTTOM"));
1606 
1607  /* Im[rho_Z^f] without resummation */
1608  double ImRhoZf = 0.0;
1609  for (int j = 0; j < orders_EW_size; ++j)
1610  ImRhoZf += deltaRho_remf[j].imag();
1611 
1612  rhoZ_f_cache[f.getIndex()] = gslpp::complex(ReRhoZf, ImRhoZf, false);
1613  useRhoZ_f_cache[f.getIndex()] = true;
1614  return (gslpp::complex(ReRhoZf, ImRhoZf, false));
1615  }
1616 }
1617 
1619 {
1620  if (f.is("TOP")) return (gslpp::complex(0.0, 0.0, false));
1621 
1623  if (useKappaZ_f_cache[f.getIndex()])
1624  return kappaZ_f_cache[f.getIndex()];
1625 
1626  double myMw = Mw();
1627 
1628  double ReKappaZf = 0.0, ImKappaZf = 0.0;
1629  if (FlagKappaZ.compare("APPROXIMATEFORMULA") == 0) {
1630 
1631 // Choose the correct formulae for the effective angle
1632  if (FlagSMAux && (f.is("BOTTOM")) ){
1633  ReKappaZf = myApproximateFormulae->sin2thetaEff_b_full() / sW2();
1634  } else if (FlagSMAux && (f.is("ELECTRON") || f.is("MUON") || f.is("TAU") ) ) {
1635  ReKappaZf = myApproximateFormulae->sin2thetaEff_l_full() / sW2();
1636  } else {
1637  ReKappaZf = myApproximateFormulae->sin2thetaEff(f) / sW2();
1638  }
1639 
1640  ImKappaZf = myOneLoopEW->deltaKappa_rem_f(f, myMw).imag();
1641 #ifdef WITHIMTWOLOOPQCD
1642  ImKappaZf += myTwoLoopQCD->deltaKappa_rem_f(f, myMw).imag();
1643 
1644  /* TEST */
1645  //ImKappaZf -= myCache->ale()*myCache->alsMz()/24.0/M_PI*(cW2() - sW2())/sW2()/sW2();
1646 #endif
1647  } else {
1648  /* compute Delta rho */
1649  double DeltaRho[orders_EW_size];
1650  ComputeDeltaRho(myMw, DeltaRho);
1651 
1652  /* compute delta kappa_rem^f */
1653  gslpp::complex deltaKappa_remf[orders_EW_size];
1654  deltaKappa_remf[EW1] = gslpp::complex(0.0, 0.0, false);
1655  deltaKappa_remf[EW1QCD1] = gslpp::complex(0.0, 0.0, false);
1656  deltaKappa_remf[EW1QCD2] = gslpp::complex(0.0, 0.0, false);
1657  deltaKappa_remf[EW2] = gslpp::complex(0.0, 0.0, false);
1658  deltaKappa_remf[EW2QCD1] = gslpp::complex(0.0, 0.0, false);
1659  deltaKappa_remf[EW3] = gslpp::complex(0.0, 0.0, false);
1660  if (flag_order[EW1])
1661  deltaKappa_remf[EW1] = myOneLoopEW->deltaKappa_rem_f(f, myMw);
1662  if (flag_order[EW1QCD1])
1663 #ifdef WITHIMTWOLOOPQCD
1664  deltaKappa_remf[EW1QCD1] = gslpp::complex(myTwoLoopQCD->deltaKappa_rem_f(f, myMw).real(),
1665  myTwoLoopQCD->deltaKappa_rem_f(f, myMw).imag(), false);
1666 #else
1667  deltaKappa_remf[EW1QCD1] = gslpp::complex(myTwoLoopQCD->deltaKappa_rem_f(f, myMw).real(), 0.0, false);
1668 #endif
1669  if (flag_order[EW1QCD2])
1670  deltaKappa_remf[EW1QCD2] = gslpp::complex(myThreeLoopQCD->deltaKappa_rem_f(f, myMw).real(), 0.0, false);
1671  if (flag_order[EW2])
1672  deltaKappa_remf[EW2] = gslpp::complex(myTwoLoopEW->deltaKappa_rem_f(f, myMw).real(), 0.0, false);
1673  if (flag_order[EW2QCD1])
1674  deltaKappa_remf[EW2QCD1] = gslpp::complex(myThreeLoopEW2QCD->deltaKappa_rem_f(f, myMw).real(), 0.0, false);
1675  if (flag_order[EW3])
1676  deltaKappa_remf[EW3] = gslpp::complex(myThreeLoopEW->deltaKappa_rem_f(f, myMw).real(), 0.0, false);
1677 
1678  /* compute Delta rbar_rem */
1679  double DeltaRbar_rem = 0.0;
1680  if (flag_order[EW1])
1681  DeltaRbar_rem = myOneLoopEW->DeltaRbar_rem(myMw);
1682 
1683  /* Re[kappa_Z^f] with or without resummation */
1684  double deltaKappa_rem_f_real[orders_EW_size];
1685  for (int j = 0; j < orders_EW_size; ++j)
1686  deltaKappa_rem_f_real[j] = deltaKappa_remf[j].real();
1687 
1688  ReKappaZf = resumKappaZ(DeltaRho, deltaKappa_rem_f_real, DeltaRbar_rem, f.is("BOTTOM"));
1689 
1690  /* O(alpha^2) correction to Re[kappa_Z^f] from the Z-gamma mixing */
1691  ReKappaZf += 35.0 * alphaMz() * alphaMz() / 18.0 / sW2()
1692  *(1.0 - 8.0 / 3.0 * ReKappaZf * sW2());
1693 
1694  /* Im[kappa_Z^f] without resummation */
1695  for (int j = 0; j < orders_EW_size; ++j)
1696  ImKappaZf += deltaKappa_remf[j].imag();
1697  }
1698 
1699  kappaZ_f_cache[f.getIndex()] = gslpp::complex(ReKappaZf, ImKappaZf, false);
1700  useKappaZ_f_cache[f.getIndex()] = true;
1701  return (gslpp::complex(ReKappaZf, ImKappaZf, false));
1702 }
1703 
1705 {
1706  Particle p1 = f, pe = leptons[ELECTRON];
1707 
1708  if (f.is("TOP") || f.is("ELECTRON")) return (gslpp::complex(0.0, 0.0, false));
1709 
1710  /* In the case of BOTTOM, the top contribution has to be subtracted.
1711  * The remaining contribution is the same as that for DOWN and STRANGE. */
1712  if (f.is("BOTTOM")) p1 = quarks[DOWN];
1713 
1714  double myMw = Mw();
1715  double cW2 = myMw * myMw / Mz / Mz, sW2 = 1.0 - cW2;
1716 
1717  gslpp::complex ul = (3.0 * myEWSMcache->v_f(pe, myMw) * myEWSMcache->v_f(pe, myMw)
1718  + myEWSMcache->a_f(pe) * myEWSMcache->a_f(pe)) / 4.0 / cW2 * myOneLoopEW->FZ(Mz*Mz, myMw)
1719  + myOneLoopEW->FW(Mz*Mz, pe, myMw);
1720  gslpp::complex uf = (3.0 * myEWSMcache->v_f(p1, myMw) * myEWSMcache->v_f(p1, myMw)
1721  + myEWSMcache->a_f(p1) * myEWSMcache->a_f(p1)) / 4.0 / cW2 * myOneLoopEW->FZ(Mz*Mz, myMw)
1722  + myOneLoopEW->FW(Mz*Mz, p1, myMw);
1723 
1724  gslpp::complex dRho = 2.0 * (uf - ul);
1725  dRho *= ale / 4.0 / M_PI / sW2;
1726  return dRho;
1727 }
1728 
1730 {
1731  Particle p1 = f, pe = leptons[ELECTRON];
1732 
1733  if (f.is("TOP") || f.is("ELECTRON")) return (gslpp::complex(0.0, 0.0, false));
1734 
1735  /* In the case of BOTTOM, the top contribution has to be subtracted.
1736  * The remaining contribution is the same as that for DOWN and STRANGE. */
1737  if (f.is("BOTTOM")) p1 = quarks[DOWN];
1738 
1739  double myMw = Mw();
1740  double cW2 = myMw * myMw / Mz / Mz, sW2 = 1.0 - cW2;
1741  gslpp::complex ul = (3.0 * myEWSMcache->v_f(pe, myMw) * myEWSMcache->v_f(pe, myMw)
1742  + myEWSMcache->a_f(pe) * myEWSMcache->a_f(pe)) / 4.0 / cW2 * myOneLoopEW->FZ(Mz*Mz, myMw)
1743  + myOneLoopEW->FW(Mz*Mz, pe, myMw);
1744  double deltal = myEWSMcache->delta_f(pe, myMw);
1745  gslpp::complex uf = (3.0 * myEWSMcache->v_f(p1, myMw) * myEWSMcache->v_f(p1, myMw)
1746  + myEWSMcache->a_f(p1) * myEWSMcache->a_f(p1)) / 4.0 / cW2 * myOneLoopEW->FZ(Mz*Mz, myMw)
1747  + myOneLoopEW->FW(Mz*Mz, p1, myMw);
1748  double deltaf = myEWSMcache->delta_f(p1, myMw);
1749 
1750  gslpp::complex dKappa = (deltaf * deltaf - deltal * deltal) / 4.0 / cW2 * myOneLoopEW->FZ(Mz*Mz, myMw)
1751  - uf + ul;
1752  dKappa *= ale / 4.0 / M_PI / sW2;
1753  return dKappa;
1754 }
1755 
1756 
1758 
1760 {
1761  double rhoZe = rhoZ_f(leptons[ELECTRON]).real();
1762  double DeltaRhoPrime = 2.0 * (sqrt(rhoZe) - 1.0);
1763 
1764  return DeltaRhoPrime;
1765 }
1766 
1768 {
1769  double rhoZe = rhoZ_f(leptons[ELECTRON]).real();
1770  double sin2thetaEff = kappaZ_f(leptons[ELECTRON]).real() * sW2();
1771  double DeltaRhoPrime = 2.0 * (sqrt(rhoZe) - 1.0);
1772  double DeltaKappaPrime = sin2thetaEff / s02() - 1.0;
1773  double DeltaRW = 1.0 - M_PI * alphaMz() / (sqrt(2.0) * GF * Mz * Mz * sW2() * cW2());
1774 
1775  return ( c02() * DeltaRhoPrime + s02() * DeltaRW / (c02() - s02())
1776  - 2.0 * s02() * DeltaKappaPrime);
1777 }
1778 
1780 {
1781  double rhoZe = rhoZ_f(leptons[ELECTRON]).real();
1782  double sin2thetaEff = kappaZ_f(leptons[ELECTRON]).real() * sW2();
1783  double DeltaRhoPrime = 2.0 * (sqrt(rhoZe) - 1.0);
1784  double DeltaKappaPrime = sin2thetaEff / s02() - 1.0;
1785 
1786  return ( c02() * DeltaRhoPrime + (c02() - s02()) * DeltaKappaPrime);
1787 }
1788 
1790 {
1791  /* epsilon_b from g_A^b
1792  * see Eq.(13) of IJMP A7, 1031 (1998) by Altarelli et al. */
1793  //double rhoZe = rhoZ_l_SM(StandardModel::ELECTRON).real();
1794  //double rhoZb = rhoZ_q_SM(QCD::BOTTOM).real();
1795  //double DeltaRhoPrime = 2.0*( sqrt(rhoZe) - 1.0 );
1796  //double eps1 = DeltaRhoPrime;
1797  //return ( - 1.0 + sqrt(rhoZb)/(1.0 + eps1/2.0) );
1798 
1799  /* epsilon_b from Re(g_V^b/g_A^b), i.e. Re(kappaZ_b)
1800  * see Eq.(13) of IJMP A7, 1031 (1998) by Altarelli et al. */
1802  gslpp::complex kappaZb = kappaZ_f(quarks[BOTTOM]);
1804  return ( kappaZe.real() / kappaZb.real() - 1.0);
1805  else
1806  return ( (kappaZe.real() + deltaKappaZ_f(quarks[BOTTOM]).real())
1807  / kappaZb.real() - 1.0);
1808 
1809  /* epsilon_b from Gamma_b via Eqs.(11), (12) and (16) of IJMP A7,
1810  * 1031 (1998) by Altarelli et al.
1811  * Note: mb has to be mb=4.7, since Eq.(16) were derived with this value.
1812  */
1813  //double als_Mz = Als(myCache->Mz(), FULLNNLO);
1814  //double delta_als = (als_Mz - 0.119)/M_PI;
1815  //double delta_alpha = (alphaMz() - 1.0/128.90)/myCache->ale();
1816  //double Gamma_b_Born = 0.3798*( 1.0 + delta_als - 0.42*delta_alpha);
1817  //double a = als_Mz/M_PI;
1818  //double RQCD = 1.0 + 1.2*a - 1.1*a*a - 13.0*a*a*a;
1819  //double mb = Mrun(myCache->Mz(), quarks[QCD::BOTTOM].getMass(), FULLNNLO);// This is wrong!
1820  //double mb = 4.7;
1821  //std::cout << "mb = " << mb << std::endl;
1822  //double beta = sqrt(1.0 - 4.0*mb*mb/myCache->Mz()/myCache->Mz());
1823  //double Nc = 3.0;
1824  //double factor = myCache->GF()*myCache->Mz()*myCache->Mz()*myCache->Mz()/6.0/M_PI/sqrt(2.0);
1825  //double Gamma_b = factor*beta*((3.0 - beta*beta)/2.0*gVq_SM(QCD::BOTTOM).abs2()
1826  // + beta*beta*gAq_SM(QCD::BOTTOM).abs2())
1827  // *Nc*RQCD*(1.0 + alphaMz()/12.0/M_PI);
1828  //return ( (Gamma_b/Gamma_b_Born - 1.0 - 1.42*epsilon1_SM()
1829  // + 0.54*epsilon3_SM() )/2.29 );
1830 }
1831 
1832 
1834 
1835 double StandardModel::resumMw(const double Mw_i, const double DeltaRho[orders_EW_size],
1836  const double DeltaR_rem[orders_EW_size]) const
1837 {
1838  if ((FlagMw.compare("APPROXIMATEFORMULA") == 0)
1839  || (DeltaR_rem[EW2QCD1] != 0.0)
1840  || (DeltaR_rem[EW3] != 0.0))
1841  throw std::runtime_error("Error in StandardModel::resumMw()");
1842 
1843  if (!flag_order[EW2] && FlagMw.compare("NORESUM") != 0)
1844  throw std::runtime_error("Error in StandardModel::resumMw()");
1845 
1846  double cW2_TMP = Mw_i * Mw_i / Mz / Mz;
1847  double sW2_TMP = 1.0 - cW2_TMP;
1848 
1849  double f_AlphaToGF, DeltaRho_sum = 0.0, DeltaRho_G = 0.0;
1850  if (FlagMw.compare("NORESUM") == 0) {
1851  for (int j = 0; j < orders_EW_size; ++j) {
1852  DeltaRho_sum += DeltaRho[(orders_EW) j];
1853  }
1854  } else {
1855  // conversion: alpha(0) --> G_F
1856  f_AlphaToGF = sqrt(2.0) * GF * pow(Mz, 2.0) * sW2_TMP * cW2_TMP / M_PI / ale;
1857  DeltaRho_sum = f_AlphaToGF * DeltaRho[EW1]
1858  + f_AlphaToGF * DeltaRho[EW1QCD1]
1859  + f_AlphaToGF * DeltaRho[EW1QCD2]
1860  + pow(f_AlphaToGF, 2.0) * DeltaRho[EW2]
1861  + pow(f_AlphaToGF, 2.0) * DeltaRho[EW2QCD1]
1862  + pow(f_AlphaToGF, 3.0) * DeltaRho[EW3];
1863  DeltaRho_G = f_AlphaToGF * DeltaRho[EW1];
1864  }
1865 
1866  double R;
1867  double DeltaR_rem_sum = 0.0;
1868  double DeltaR_EW1 = 0.0, DeltaR_EW2_rem = 0.0;
1869  if (FlagMw.compare("NORESUM") == 0) {
1870  for (int j = 0; j < orders_EW_size; ++j)
1871  DeltaR_rem_sum += DeltaR_rem[(orders_EW) j];
1872 
1873  // Full EW one-loop contribution (without the full DeltaAlphaL5q)
1874  DeltaR_EW1 = -cW2_TMP / sW2_TMP * DeltaRho[EW1] + DeltaR_rem[EW1];
1875 
1876  // Full EW two-loop contribution without reducible corrections
1877  DeltaR_EW2_rem = myApproximateFormulae->DeltaR_TwoLoopEW_rem(Mw_i);
1878 
1879  // subtract the EW two-loop contributions from DeltaRho_sum and DeltaR_rem_sum
1880  DeltaRho_sum -= DeltaRho[EW2];
1881  DeltaR_rem_sum -= DeltaR_rem[EW2];
1882 
1883  // R = 1 + Delta r, including the full EW two-loop contribution
1884  R = 1.0 + DeltaAlphaL5q() - cW2_TMP / sW2_TMP * DeltaRho_sum
1885  + DeltaR_rem_sum;
1886  R += DeltaAlphaL5q() * DeltaAlphaL5q() + 2.0 * DeltaAlphaL5q() * DeltaR_EW1
1887  + DeltaR_EW2_rem;
1888  } else if (FlagMw.compare("OMSI") == 0) {
1889  // R = 1/(1 - Delta r)
1890  R = 1.0 / (1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum)
1891  / (1.0 - DeltaAlphaL5q()
1892  - DeltaR_rem[EW1] - DeltaR_rem[EW1QCD1] - DeltaR_rem[EW2]);
1893  } else if (FlagMw.compare("INTERMEDIATE") == 0) {
1894  // R = 1/(1 - Delta r)
1895  R = 1.0 / ((1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum)
1896  *(1.0 - DeltaAlphaL5q() - DeltaR_rem[EW1])
1897  - DeltaR_rem[EW1QCD1] - DeltaR_rem[EW2]);
1898  } else if (FlagMw.compare("OMSII") == 0) {
1899  // R = 1/(1 - Delta r)
1900  R = 1.0 / ((1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum)*(1.0 - DeltaAlphaL5q())
1901  - (1.0 + cW2_TMP / sW2_TMP * DeltaRho_G) * DeltaR_rem[EW1]
1902  - DeltaR_rem[EW1QCD1] - DeltaR_rem[EW2]);
1903  } else
1904  throw std::runtime_error("Error in StandardModel::resumMw()");
1905 
1906  if (FlagMw.compare("NORESUM") == 0) {
1907  /* Mzbar and Mwbar are defined in the complex-pole scheme. */
1908 
1909  double tmp = 4.0 * M_PI * ale / sqrt(2.0) / GF / Mzbar() / Mzbar();
1910  if (tmp * R > 1.0) throw std::runtime_error("StandardModel::resumMw(): Negative (1-tmp*R)");
1911  double Mwbar = Mzbar() / sqrt(2.0) * sqrt(1.0 + sqrt(1.0 - tmp * R));
1912 
1913  return MwFromMwbar(Mwbar);
1914  } else {
1915  double tmp = 4.0 * M_PI * ale / sqrt(2.0) / GF / Mz / Mz;
1916  if (tmp * R > 1.0) throw std::runtime_error("StandardModel::resumMw(): Negative (1-tmp*R)");
1917 
1918  return (Mz / sqrt(2.0) * sqrt(1.0 + sqrt(1.0 - tmp * R)));
1919  }
1920 }
1921 
1922 double StandardModel::resumRhoZ(const double DeltaRho[orders_EW_size],
1923  const double deltaRho_rem[orders_EW_size],
1924  const double DeltaRbar_rem, const bool bool_Zbb) const
1925 {
1926  if ((FlagRhoZ.compare("APPROXIMATEFORMULA") == 0)
1927  || (deltaRho_rem[EW1QCD2] != 0.0)
1928  || (deltaRho_rem[EW2QCD1] != 0.0)
1929  || (deltaRho_rem[EW3] != 0.0))
1930  throw std::runtime_error("Error in StandardModel::resumRhoZ()");
1931 
1932  if (!flag_order[EW2] && FlagRhoZ.compare("NORESUM") != 0)
1933  throw std::runtime_error("Error in StandardModel::resumRhoZ()");
1934 
1935  double Mw_TMP = Mw();
1936  double cW2_TMP = cW2();
1937  double sW2_TMP = sW2();
1938 
1939  double f_AlphaToGF, DeltaRho_sum = 0.0, DeltaRho_G;
1940  double DeltaRbar_rem_G, deltaRho_rem_G, deltaRho_rem_G2;
1941  // conversion: alpha(0) --> G_F
1942  f_AlphaToGF = sqrt(2.0) * GF * pow(Mz, 2.0)
1943  * sW2_TMP * cW2_TMP / M_PI / ale;
1944  DeltaRho_sum = f_AlphaToGF * DeltaRho[EW1]
1945  + f_AlphaToGF * DeltaRho[EW1QCD1]
1946  + f_AlphaToGF * DeltaRho[EW1QCD2]
1947  + pow(f_AlphaToGF, 2.0) * DeltaRho[EW2]
1948  + pow(f_AlphaToGF, 2.0) * DeltaRho[EW2QCD1]
1949  + pow(f_AlphaToGF, 3.0) * DeltaRho[EW3];
1950  DeltaRho_G = f_AlphaToGF * DeltaRho[EW1];
1951  DeltaRbar_rem_G = f_AlphaToGF*DeltaRbar_rem;
1952  deltaRho_rem_G = f_AlphaToGF * (deltaRho_rem[EW1]
1953  + deltaRho_rem[EW1QCD1]);
1954  deltaRho_rem_G2 = pow(f_AlphaToGF, 2.0) * deltaRho_rem[EW2];
1955 
1956  /* Real parts */
1957  double rhoZ;
1958  if (!bool_Zbb) {
1959  if (FlagRhoZ.compare("OMSI") == 0) {
1960  rhoZ = (1.0 + deltaRho_rem_G + deltaRho_rem_G2)
1961  / (1.0 - DeltaRho_sum * (1.0 - DeltaRbar_rem_G));
1962  } else if (FlagRhoZ.compare("INTERMEDIATE") == 0) {
1963  rhoZ = (1.0 + deltaRho_rem_G)
1964  / (1.0 - DeltaRho_sum * (1.0 - DeltaRbar_rem_G))
1965  + deltaRho_rem_G2;
1966  } else if (FlagRhoZ.compare("NORESUM") == 0
1967  || FlagRhoZ.compare("OMSII") == 0) {
1968  rhoZ = 1.0 + DeltaRho_sum - DeltaRho_G * DeltaRbar_rem_G
1969  + DeltaRho_G * DeltaRho_G
1970  + deltaRho_rem_G * (1.0 + DeltaRho_G) + deltaRho_rem_G2;
1971  } else
1972  throw std::runtime_error("Error in StandardModel::resumRhoZ()");
1973  } else {
1974  /* Z to bb */
1975  double OnePlusTaub = 1.0 + taub();
1976  double OnePlusTaub2 = OnePlusTaub*OnePlusTaub;
1977  double rhoZbL;
1978  deltaRho_rem_G += f_AlphaToGF * ale / 4.0 / M_PI / sW2_TMP
1979  * pow(mtpole / Mw_TMP, 2.0);
1980  if (FlagRhoZ.compare("NORESUM") == 0) {
1981  rhoZ = (1.0 + DeltaRho_sum - DeltaRho_G * DeltaRbar_rem_G
1982  + DeltaRho_G * DeltaRho_G
1983  + deltaRho_rem_G * (1.0 + DeltaRho_G) + deltaRho_rem_G2)
1984  * OnePlusTaub2;
1985  } else if (FlagRhoZ.compare("OMSI") == 0) {
1986  rhoZbL = OnePlusTaub2 / (1.0 - DeltaRho_sum);
1987  rhoZ = rhoZbL / (1.0 - rhoZbL * deltaRho_rem_G);
1988  } else if (FlagRhoZ.compare("INTERMEDIATE") == 0) {
1989  rhoZbL = OnePlusTaub2 / (1.0 - DeltaRho_sum);
1990  rhoZ = rhoZbL * (1.0 + rhoZbL * deltaRho_rem_G);
1991  } else if (FlagRhoZ.compare("OMSII") == 0) {
1992  rhoZbL = OnePlusTaub2 / (1.0 - DeltaRho_sum);
1993  rhoZ = rhoZbL * (1.0 + deltaRho_rem_G);
1994  } else
1995  throw std::runtime_error("Error in StandardModel::resumRhoZ()");
1996  }
1997 
1998  return rhoZ;
1999 }
2000 
2001 double StandardModel::resumKappaZ(const double DeltaRho[orders_EW_size],
2002  const double deltaKappa_rem[orders_EW_size],
2003  const double DeltaRbar_rem, const bool bool_Zbb) const
2004 {
2005  if ((FlagKappaZ.compare("APPROXIMATEFORMULA") == 0)
2006  || (deltaKappa_rem[EW2QCD1] != 0.0)
2007  || (deltaKappa_rem[EW3] != 0.0))
2008  throw std::runtime_error("Error in StandardModel::resumKappaZ()");
2009 
2010  if (!flag_order[EW2] && FlagKappaZ.compare("NORESUM") != 0)
2011  throw std::runtime_error("Error in StandardModel::resumKappaZ()");
2012 
2013  double Mw_TMP = Mw();
2014  double cW2_TMP = cW2();
2015  double sW2_TMP = sW2();
2016 
2017  double f_AlphaToGF, DeltaRho_sum = 0.0, DeltaRho_G;
2018  double DeltaRbar_rem_G, deltaKappa_rem_G, deltaKappa_rem_G2;
2019  // conversion: alpha(0) --> G_F
2020  f_AlphaToGF = sqrt(2.0) * GF * pow(Mz, 2.0)
2021  * sW2_TMP * cW2_TMP / M_PI / ale;
2022  DeltaRho_sum = f_AlphaToGF * DeltaRho[EW1]
2023  + f_AlphaToGF * DeltaRho[EW1QCD1]
2024  + f_AlphaToGF * DeltaRho[EW1QCD2]
2025  + pow(f_AlphaToGF, 2.0) * DeltaRho[EW2]
2026  + pow(f_AlphaToGF, 2.0) * DeltaRho[EW2QCD1]
2027  + pow(f_AlphaToGF, 3.0) * DeltaRho[EW3];
2028  DeltaRho_G = f_AlphaToGF * DeltaRho[EW1];
2029  DeltaRbar_rem_G = f_AlphaToGF*DeltaRbar_rem;
2030  deltaKappa_rem_G = f_AlphaToGF * (deltaKappa_rem[EW1]
2031  + deltaKappa_rem[EW1QCD1]
2032  + deltaKappa_rem[EW1QCD2]);
2033  deltaKappa_rem_G2 = pow(f_AlphaToGF, 2.0) * deltaKappa_rem[EW2];
2034 
2035  /* Real parts */
2036  double kappaZ;
2037  if (!bool_Zbb) {
2038  if (FlagKappaZ.compare("OMSI") == 0) {
2039  kappaZ = (1.0 + deltaKappa_rem_G + deltaKappa_rem_G2)
2040  *(1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum * (1.0 - DeltaRbar_rem_G));
2041  } else if (FlagKappaZ.compare("INTERMEDIATE") == 0) {
2042  kappaZ = (1.0 + deltaKappa_rem_G)
2043  *(1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum * (1.0 - DeltaRbar_rem_G))
2044  + deltaKappa_rem_G2;
2045  } else if (FlagKappaZ.compare("NORESUM") == 0
2046  || FlagKappaZ.compare("OMSII") == 0) {
2047  kappaZ = 1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum
2048  - cW2_TMP / sW2_TMP * DeltaRho_G * DeltaRbar_rem_G
2049  + deltaKappa_rem_G * (1.0 + cW2_TMP / sW2_TMP * DeltaRho_G)
2050  + deltaKappa_rem_G2;
2051  } else
2052  throw std::runtime_error("Error in StandardModel::resumKappaZ()");
2053  } else {
2054  /* Z to bb */
2055  double OnePlusTaub = 1.0 + taub();
2056  double kappaZbL;
2057  deltaKappa_rem_G -= f_AlphaToGF * ale / 8.0 / M_PI / sW2_TMP
2058  * pow(mtpole / Mw_TMP, 2.0);
2059  if (FlagKappaZ.compare("NORESUM") == 0) {
2060  kappaZ = (1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum
2061  - cW2_TMP / sW2_TMP * DeltaRho_G * DeltaRbar_rem_G
2062  + deltaKappa_rem_G * (1.0 + cW2_TMP / sW2_TMP * DeltaRho_G)
2063  + deltaKappa_rem_G2) / OnePlusTaub;
2064  } else if (FlagKappaZ.compare("OMSI") == 0) {
2065  kappaZbL = (1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum) / OnePlusTaub;
2066  kappaZ = kappaZbL * (1.0 + deltaKappa_rem_G);
2067  } else if (FlagKappaZ.compare("INTERMEDIATE") == 0
2068  || FlagKappaZ.compare("OMSII") == 0) {
2069  kappaZbL = (1.0 + cW2_TMP / sW2_TMP * DeltaRho_sum) / OnePlusTaub;
2070  kappaZ = kappaZbL + deltaKappa_rem_G;
2071  } else
2072  throw std::runtime_error("Error in StandardModel::resumKappaZ()");
2073  }
2074 
2075  return kappaZ;
2076 }
2077 
2078 double StandardModel::taub() const
2079 {
2080  double taub_tmp = 0.0;
2081  double Xt = myEWSMcache->Xt_GF();
2082  if (flag_order[EW1])
2083  taub_tmp += -2.0 * Xt;
2084  if (flag_order[EW1QCD1])
2085  taub_tmp += 2.0 / 3.0 * M_PI * Xt * myEWSMcache->alsMt();
2086  if (flag_order[EW1QCD2])
2087  taub_tmp += 0.0;
2088  if (flag_order[EW2])
2089  taub_tmp += -2.0 * Xt * Xt * myTwoLoopEW->tau_2();
2090  if (flag_order[EW2QCD1])
2091  taub_tmp += 0.0;
2092  if (flag_order[EW3])
2093  taub_tmp += 0.0;
2094 
2095  return taub_tmp;
2096 }
2097 
2099 {
2100  switch (q) {
2101  case QCD::UP:
2102  case QCD::CHARM:
2103  return ( -0.000113);
2104  case QCD::TOP:
2105  return ( 0.0);
2106  case QCD::DOWN:
2107  case QCD::STRANGE:
2108  return ( -0.000160);
2109  case QCD::BOTTOM:
2110  return ( -0.000040);
2111  default:
2112  throw std::runtime_error("Error in StandardModel::Delta_EWQCD");
2113  }
2114 }
2115 
2116 double StandardModel::RVq(const QCD::quark q) const
2117 {
2118  if (q == QCD::TOP) return 0.0;
2119 
2120  double mcMz, mbMz;
2121  mcMz = myEWSMcache->mf(getQuarks(CHARM), Mz, FULLNNLO);
2122  mbMz = myEWSMcache->mf(getQuarks(BOTTOM), Mz, FULLNNLO);
2123  //mcMz = 0.56381685; /* for debug */
2124  //mbMz = 2.8194352; /* for debug */
2125 
2126  double MtPole = mtpole;
2127 
2128  /* electric charge squared */
2129  double Qf2 = pow(quarks[q].getCharge(), 2.0);
2130 
2131  /* s = Mz^2 */
2132  double s = Mz * Mz;
2133 
2134  /* products of the charm and bottom masses at Mz */
2135  double mcMz2 = mcMz*mcMz;
2136  double mbMz2 = mbMz*mbMz;
2137  double mqMz2, mqdash4;
2138  switch (q) {
2139  case QCD::CHARM:
2140  mqMz2 = mcMz*mcMz;
2141  mqdash4 = mbMz2*mbMz2;
2142  break;
2143  case QCD::BOTTOM:
2144  mqMz2 = mbMz*mbMz;
2145  mqdash4 = mcMz2*mcMz2;
2146  break;
2147  default:
2148  mqMz2 = 0.0;
2149  mqdash4 = 0.0;
2150  break;
2151  }
2152 
2153  /* Logarithms */
2154  //double log_t = log(pow(quarks[TOP].getMass(),2.0)/s);
2155  double log_t = log(MtPole * MtPole / s); // the pole mass
2156  double log_c = log(mcMz2 / s);
2157  double log_b = log(mbMz2 / s);
2158  double log_q;
2159  switch (q) {
2160  case QCD::CHARM:
2161  case QCD::BOTTOM:
2162  log_q = log(mqMz2 / s);
2163  break;
2164  default:
2165  log_q = 0.0;
2166  break;
2167  }
2168 
2169  /* the active number of flavour */
2170  double nf = 5.0;
2171 
2172  /* zeta functions */
2173  double zeta2 = getMyEWSMcache()->getZeta2();
2174  double zeta3 = getMyEWSMcache()->getZeta3();
2175  //double zeta4 = getMyCache()->GetZeta4();
2176  double zeta5 = getMyEWSMcache()->getZeta5();
2177 
2178  /* massless non-singlet corrections */
2179  double C02 = 365.0 / 24.0 - 11.0 * zeta3 + (-11.0 / 12.0 + 2.0 / 3.0 * zeta3) * nf;
2180  double C03 = 87029.0 / 288.0 - 121.0 / 8.0 * zeta2 - 1103.0 / 4.0 * zeta3
2181  + 275.0 / 6.0 * zeta5
2182  + (-7847.0 / 216.0 + 11.0 / 6.0 * zeta2 + 262.0 / 9.0 * zeta3
2183  - 25.0 / 9.0 * zeta5) * nf
2184  + (151.0 / 162.0 - zeta2 / 18.0 - 19.0 / 27.0 * zeta3) * nf*nf;
2185  double C04 = -156.61 + 18.77 * nf - 0.7974 * nf * nf + 0.0215 * nf * nf*nf;
2186  //std::cout << "TEST: C02 = " << C02 << std::endl;// TEST (should be 1.40923)
2187  //std::cout << "TEST: C03 = " << C03 << std::endl;// TEST (should be -12.7671)
2188  //std::cout << "TEST: C04 = " << C04 << std::endl;// TEST (should be -80.0075)
2189 
2190  /* quadratic massive corrections */
2191  double C23 = -80.0 + 60.0 * zeta3 + (32.0 / 9.0 - 8.0 / 3.0 * zeta3) * nf;
2192  double C21V = 12.0;
2193  double C22V = 253.0 / 2.0 - 13.0 / 3.0 * nf;
2194  double C23V = 2522.0 - 855.0 / 2.0 * zeta2 + 310.0 / 3.0 * zeta3 - 5225.0 / 6.0 * zeta5
2195  + (-4942.0 / 27.0 + 34.0 * zeta2 - 394.0 / 27.0 * zeta3
2196  + 1045.0 / 27.0 * zeta5) * nf
2197  + (125.0 / 54.0 - 2.0 / 3.0 * zeta2) * nf*nf;
2198 
2199  /* quartic massive corrections */
2200  double C42 = 13.0 / 3.0 - 4.0 * zeta3;
2201  double C40V = -6.0;
2202  double C41V = -22.0;
2203  double C42V = -3029.0 / 12.0 + 162.0 * zeta2 + 112.0 * zeta3
2204  + (143.0 / 18.0 - 4.0 * zeta2 - 8.0 / 3.0 * zeta3) * nf;
2205  double C42VL = -11.0 / 2.0 + nf / 3.0;
2206 
2207  /* power suppressed top-mass correction */
2208  //double xt = s/pow(quarks[TOP].getMass(),2.0);
2209  double xt = s / MtPole / MtPole; // the pole mass
2210  double C2t = xt * (44.0 / 675.0 - 2.0 / 135.0 * (-log_t));
2211 
2212  /* rescaled strong coupling constant */
2213  double AlsMzPi = AlsMz / M_PI;
2214  double AlsMzPi2 = AlsMzPi*AlsMzPi;
2215  double AlsMzPi3 = AlsMzPi2*AlsMzPi;
2216  double AlsMzPi4 = AlsMzPi3*AlsMzPi;
2217 
2218  /* electromagnetic coupling at Mz */
2219  double alpMz = alphaMz();
2220 
2221  /* radiator function to the vector current */
2222  double RVf;
2223  RVf = 1.0 + 3.0 / 4.0 * Qf2 * alpMz / M_PI + AlsMzPi - Qf2 / 4.0 * alpMz / M_PI * AlsMzPi
2224  + (C02 + C2t) * AlsMzPi2 + C03 * AlsMzPi3 + C04 * AlsMzPi4
2225  + (mcMz2 + mbMz2) / s * C23 * AlsMzPi3
2226  + mqMz2 / s * (C21V * AlsMzPi + C22V * AlsMzPi2 + C23V * AlsMzPi3)
2227  + mcMz2 * mcMz2 / s / s * (C42 - log_c) * AlsMzPi2
2228  + mbMz2 * mbMz2 / s / s * (C42 - log_b) * AlsMzPi2
2229  + mqMz2 * mqMz2 / s / s * (C40V + C41V * AlsMzPi + (C42V + C42VL * log_q) * AlsMzPi2)
2230  + 12.0 * mqdash4 / s / s * AlsMzPi2
2231  - mqMz2 * mqMz2 * mqMz2 / s / s / s
2232  * (8.0 + 16.0 / 27.0 * (155.0 + 6.0 * log_q) * AlsMzPi);
2233  return RVf;
2234 }
2235 
2236 double StandardModel::RAq(const QCD::quark q) const
2237 {
2238  if (q == QCD::TOP) return 0.0;
2239 
2240  double mcMz, mbMz;
2241  mcMz = myEWSMcache->mf(getQuarks(CHARM), Mz, FULLNNLO);
2242  mbMz = myEWSMcache->mf(getQuarks(BOTTOM), Mz, FULLNNLO);
2243  //mcMz = 0.56381685; /* for debug */
2244  //mbMz = 2.8194352; /* for debug */
2245 
2246  double MtPole = mtpole;
2247 
2248  /* z-component of isospin */
2249  double I3q = quarks[q].getIsospin();
2250  /* electric charge squared */
2251  double Qf2 = pow(quarks[q].getCharge(), 2.0);
2252 
2253  /* s = Mz^2 */
2254  double s = Mz * Mz;
2255 
2256  /* products of the charm and bottom masses at Mz */
2257  double mcMz2 = mcMz*mcMz;
2258  double mbMz2 = mbMz*mbMz;
2259  double mqMz2, mqdash4;
2260  switch (q) {
2261  case QCD::CHARM:
2262  mqMz2 = mcMz*mcMz;
2263  mqdash4 = mbMz2*mbMz2;
2264  break;
2265  case QCD::BOTTOM:
2266  mqMz2 = mbMz*mbMz;
2267  mqdash4 = mcMz2*mcMz2;
2268  break;
2269  default:
2270  mqMz2 = 0.0;
2271  mqdash4 = 0.0;
2272  break;
2273  }
2274 
2275  /* Logarithms */
2276  //double log_t = log(pow(quarks[TOP].getMass(),2.0)/s);
2277  double log_t = log(MtPole * MtPole / s); // the pole mass
2278  double log_c = log(mcMz2 / s);
2279  double log_b = log(mbMz2 / s);
2280  double log_q;
2281  switch (q) {
2282  case QCD::CHARM:
2283  case QCD::BOTTOM:
2284  log_q = log(mqMz2 / s);
2285  break;
2286  default:
2287  log_q = 0.0;
2288  break;
2289  }
2290 
2291  /* the active number of flavour */
2292  double nf = 5.0;
2293 
2294  /* zeta functions */
2295  double zeta2 = getMyEWSMcache()->getZeta2();
2296  double zeta3 = getMyEWSMcache()->getZeta3();
2297  double zeta4 = getMyEWSMcache()->getZeta4();
2298  double zeta5 = getMyEWSMcache()->getZeta5();
2299 
2300  /* massless non-singlet corrections */
2301  double C02 = 365.0 / 24.0 - 11.0 * zeta3 + (-11.0 / 12.0 + 2.0 / 3.0 * zeta3) * nf;
2302  double C03 = 87029.0 / 288.0 - 121.0 / 8.0 * zeta2 - 1103.0 / 4.0 * zeta3
2303  + 275.0 / 6.0 * zeta5
2304  + (-7847.0 / 216.0 + 11.0 / 6.0 * zeta2 + 262.0 / 9.0 * zeta3
2305  - 25.0 / 9.0 * zeta5) * nf
2306  + (151.0 / 162.0 - zeta2 / 18.0 - 19.0 / 27.0 * zeta3) * nf*nf;
2307  double C04 = -156.61 + 18.77 * nf - 0.7974 * nf * nf + 0.0215 * nf * nf*nf;
2308  //std::cout << "TEST: C02 = " << C02 << std::endl;// TEST (should be 1.40923)
2309  //std::cout << "TEST: C03 = " << C03 << std::endl;// TEST (should be -12.7671)
2310  //std::cout << "TEST: C04 = " << C04 << std::endl;// TEST (should be -80.0075)
2311 
2312  /* quadratic massive corrections */
2313  double C23 = -80.0 + 60.0 * zeta3 + (32.0 / 9.0 - 8.0 / 3.0 * zeta3) * nf;
2314  double C20A = -6.0;
2315  double C21A = -22.0;
2316  double C22A = -8221.0 / 24.0 + 57.0 * zeta2 + 117.0 * zeta3
2317  + (151.0 / 12.0 - 2.0 * zeta2 - 4.0 * zeta3) * nf;
2318  double C23A = -4544045.0 / 864.0 + 1340.0 * zeta2 + 118915.0 / 36.0 * zeta3
2319  - 127.0 * zeta5
2320  + (71621.0 / 162.0 - 209.0 / 2.0 * zeta2 - 216.0 * zeta3
2321  + 5.0 * zeta4 + 55.0 * zeta5) * nf
2322  + (-13171.0 / 1944.0 + 16.0 / 9.0 * zeta2 + 26.0 / 9.0 * zeta3) * nf*nf;
2323 
2324  /* quartic massive corrections */
2325  double C42 = 13.0 / 3.0 - 4.0 * zeta3;
2326  double C40A = 6.0;
2327  double C41A = 10.0;
2328  double C42A = 3389.0 / 12.0 - 162.0 * zeta2 - 220.0 * zeta3
2329  + (-41.0 / 6.0 + 4.0 * zeta2 + 16.0 / 3.0 * zeta3) * nf;
2330  double C42AL = 77.0 / 2.0 - 7.0 / 3.0 * nf;
2331 
2332  /* power suppressed top-mass correction */
2333  //double xt = s/pow(quarks[TOP].getMass(),2.0);
2334  double xt = s / MtPole / MtPole; // the pole mass
2335  double C2t = xt * (44.0 / 675.0 - 2.0 / 135.0 * (-log_t));
2336 
2337  /* singlet axial-vector corrections */
2338  double I2 = -37.0 / 12.0 + (-log_t) + 7.0 / 81.0 * xt + 0.0132 * xt*xt;
2339  double I3 = -5075.0 / 216.0 + 23.0 / 6.0 * zeta2 + zeta3 + 67.0 / 18.0 * (-log_t)
2340  + 23.0 / 12.0 * log_t*log_t;
2341  double I4 = 49.0309 - 17.6637 * (-log_t) + 14.6597 * log_t * log_t
2342  + 3.6736 * (-log_t * log_t * log_t);
2343 
2344  /* rescaled strong coupling constant */
2345  double AlsMzPi = AlsMz / M_PI;
2346  double AlsMzPi2 = AlsMzPi*AlsMzPi;
2347  double AlsMzPi3 = AlsMzPi2*AlsMzPi;
2348  double AlsMzPi4 = AlsMzPi3*AlsMzPi;
2349 
2350  /* electromagnetic coupling at Mz */
2351  double alpMz = alphaMz();
2352 
2353  /* radiator function to the axial-vector current */
2354  double RAf;
2355  RAf = 1.0 + 3.0 / 4.0 * Qf2 * alpMz / M_PI + AlsMzPi - Qf2 / 4.0 * alpMz / M_PI * AlsMzPi
2356  + (C02 + C2t - 2.0 * I3q * I2) * AlsMzPi2
2357  + (C03 - 2.0 * I3q * I3) * AlsMzPi3
2358  + (C04 - 2.0 * I3q * I4) * AlsMzPi4
2359  + (mcMz2 + mbMz2) / s * C23 * AlsMzPi3
2360  + mqMz2 / s * (C20A + C21A * AlsMzPi + C22A * AlsMzPi2
2361  + 6.0 * (3.0 + log_t) * AlsMzPi2 + C23A * AlsMzPi3)
2362  //- 10.0*mqMz2/pow(quarks[TOP].getMass(),2.0)
2363  - 10.0 * mqMz2 / MtPole / MtPole // the pole mass
2364  * (8.0 / 81.0 + log_t / 54.0) * AlsMzPi2
2365  + mcMz2 * mcMz2 / s / s * (C42 - log_c) * AlsMzPi2
2366  + mbMz2 * mbMz2 / s / s * (C42 - log_b) * AlsMzPi2
2367  + mqMz2 * mqMz2 / s / s * (C40A + C41A * AlsMzPi
2368  + (C42A + C42AL * log_q) * AlsMzPi2)
2369  - 12.0 * mqdash4 / s / s*AlsMzPi2;
2370  return RAf;
2371 }
2372 
2373 double StandardModel::RVh() const
2374 {
2375  /* rescaled strong coupling constant */
2376  double AlsMzPi = AlsMz / M_PI;
2377  double AlsMzPi2 = AlsMzPi*AlsMzPi;
2378  double AlsMzPi3 = AlsMzPi2*AlsMzPi;
2379  double AlsMzPi4 = AlsMzPi3*AlsMzPi;
2380 
2381  gslpp::complex gV_sum(0.0, 0.0);
2382  gslpp::complex gV_q;
2383  for (int q = 0; q < 6; q++) {
2384  gV_q = gV_f(QCD::quarks[(QCD::quark)q]);
2385  if (q == (int) (QCD::TOP))
2386  gV_q = 0.0;
2387  gV_sum += gV_q;
2388  }
2389 
2390  // singlet vector corrections
2391  return ( gV_sum.abs2()*(-0.4132 * AlsMzPi3 - 4.9841 * AlsMzPi4));
2392 }
QCD::TAU
Definition: QCD.h:316
StandardModel::delR0c
double delR0c
The theoretical uncertainty in , denoted as .
Definition: StandardModel.h:2522
EWSMThreeLoopEW::DeltaR_rem
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
Definition: EWSMThreeLoopEW.cpp:109
EWSMThreeLoopEW::DeltaAlpha_l
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMThreeLoopEW.cpp:19
StandardModel::Mw_cache
double Mw_cache
A cache of the value of .
Definition: StandardModel.h:2808
StandardModel::FlagWithoutNonUniversalVC
bool FlagWithoutNonUniversalVC
A boolean for the model flag WithoutNonUniversalVC.
Definition: StandardModel.h:2792
QCD::NEUTRINO_3
Definition: QCD.h:315
StandardModel::~StandardModel
virtual ~StandardModel()
The default destructor.
Definition: StandardModel.cpp:121
StandardModel::Gamma_inv
virtual double Gamma_inv() const
The invisible partial decay width of the boson, .
Definition: StandardModel.cpp:1277
StandardModel::EW2
Two-loop of .
Definition: StandardModel.h:496
StandardModel::rhoZ_f
virtual gslpp::complex rhoZ_f(const Particle f) const
The effective leptonic neutral-current coupling in the SM.
Definition: StandardModel.cpp:1553
StandardModel::taub
double taub() const
Top-mass corrections to the vertex, denoted by .
Definition: StandardModel.cpp:2078
StandardModel::setParameter
virtual void setParameter(const std::string name, const double &value)
A method to set the value of a parameter of StandardModel.
Definition: StandardModel.cpp:231
EWSMApproximateFormulae::X_full
double X_full(const std::string observable) const
, , , , , , , , , , , or .
Definition: EWSMApproximateFormulae.cpp:1165
StandardModel::v
virtual double v() const
The Higgs vacuum expectation value.
Definition: StandardModel.cpp:917
StandardModel::NSMvars
static const int NSMvars
The number of the model parameters in StandardModel.
Definition: StandardModel.h:505
StandardModel::delSin2th_q
double delSin2th_q
The theoretical uncertainty in , denoted as .
Definition: StandardModel.h:2517
StandardModel::useRhoZ_f_cache
bool useRhoZ_f_cache[12]
Definition: StandardModel.h:2816
EWSMThreeLoopQCD.h
QCD::BOTTOM
Definition: QCD.h:329
EWSMTwoLoopQCD
A class for two-loop corrections to the EW precision observables.
Definition: EWSMTwoLoopQCD.h:55
StandardModel::A
double A
The CKM parameter in the Wolfenstein parameterization.
Definition: StandardModel.h:2525
StandardModel::DeltaRbar
virtual double DeltaRbar() const
The SM prediction for derived from that for the -boson mass.
Definition: StandardModel.cpp:1120
QCD::mub
double mub
The threshold between five- and four-flavour theory in GeV.
Definition: QCD.h:929
QCD
A class for parameters related to QCD, hadrons and quarks.
Definition: QCD.h:304
Particle::is
bool is(std::string name_i) const
Definition: Particle.cpp:23
Particle
A class for particles.
Definition: Particle.h:26
StandardModel::rhob
double rhob
The CKM parameter in the Wolfenstein parameterization.
Definition: StandardModel.h:2526
EWSMTwoLoopEW::deltaKappa_rem_f
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMTwoLoopEW.cpp:115
StandardModel::gamma
double gamma
used as an input for FlagWolfenstein = FALSE
Definition: StandardModel.h:2531
EWSMOneLoopEW::DeltaAlpha_l
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMOneLoopEW.cpp:19
StandardModel::realorder
orders realorder
Definition: StandardModel.h:2826
LeptonFlavour.h
StandardModel::Ye
gslpp::matrix< gslpp::complex > Ye
The Yukawa matrix of the charged leptons.
Definition: StandardModel.h:2504
EWSMcache::setFlagCacheInEWSMcache
void setFlagCacheInEWSMcache(bool FlagCacheInEWSMcache)
A set method to change the model flag CacheInEWSMcache in StandardModel.
Definition: EWSMcache.h:83
QCD::Beta1
double Beta1(const double nf) const
The coefficient for a certain number of flavours .
Definition: QCD.cpp:471
StandardModel::rho_GammaW
virtual double rho_GammaW(const Particle fi, const Particle fj) const
EW radiative corrections to the width of , denoted as .
Definition: StandardModel.cpp:1132
EWSMThreeLoopEW::DeltaRho
double DeltaRho(const double Mw_i) const
Leading three-loop contribution of to , denoted as .
Definition: EWSMThreeLoopEW.cpp:70
EWSMOneLoopEW::DeltaRbar_rem
double DeltaRbar_rem(const double Mw_i) const
.
Definition: EWSMOneLoopEW.cpp:73
EWSMThreeLoopQCD::deltaKappa_rem_f
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMThreeLoopQCD.cpp:72
EWSMOneLoopEW::DeltaRho
double DeltaRho(const double Mw_i) const
Leading one-loop contribution of to , denoted as .
Definition: EWSMOneLoopEW.cpp:43
StandardModel::Yu
gslpp::matrix< gslpp::complex > Yu
The Yukawa matrix of the up-type quarks.
Definition: StandardModel.h:2501
EWSMThreeLoopEW2QCD
A class for three-loop corrections to the EW precision observables.
Definition: EWSMThreeLoopEW2QCD.h:34
StandardModel::NumSMParamsForEWPO
static const int NumSMParamsForEWPO
The number of the SM parameters that are relevant to the EW precision observables.
Definition: StandardModel.h:1849
StandardModel::ale_cache
double ale_cache[10][CacheSize]
Cache for .
Definition: StandardModel.h:2825
StandardModel::EW1
One-loop of .
Definition: StandardModel.h:493
StandardModel::getMyEWSMcache
EWSMcache * getMyEWSMcache() const
A get method to retrieve the member pointer of type EWSMcache.
Definition: StandardModel.h:958
QCD::CheckFlags
virtual bool CheckFlags() const
A method to check the sanity of the set of model flags.
Definition: QCD.cpp:399
PMNS::computePMNS
void computePMNS(double s12_v, double s13_v, double s23_v, double delta_v, double alpha21_v, double alpha31_v)
A set method to calculate the PMNS matrix from PMNS parameters.
Definition: PMNS.cpp:13
StandardModel::MwbarFromMw
double MwbarFromMw(const double Mw) const
A method to convert the -boson mass in the experimental/running-width scheme to that in the complex-p...
Definition: StandardModel.cpp:1102
QCD::Nf
double Nf(const double mu) const
The number of active flavour at scale .
Definition: QCD.cpp:438
StandardModel::delR0l
double delR0l
The theoretical uncertainty in , denoted as .
Definition: StandardModel.h:2521
EWSMThreeLoopQCD::DeltaAlpha_l
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMThreeLoopQCD.cpp:18
EWSMThreeLoopQCD
A class for three-loop corrections to the EW precision observables.
Definition: EWSMThreeLoopQCD.h:33
StandardModel::Delta_EWQCD
double Delta_EWQCD(const QCD::quark q) const
The non-factorizable EW-QCD corrections to the partial widths for , denoted as .
Definition: StandardModel.cpp:2098
CKM::computeCKMwithWolfenstein
void computeCKMwithWolfenstein(double Lambda_v, double A_v, double Rho_v, double Eta_v)
A set method to calculate the CKM matrix from Wolfenstein parameters.
Definition: CKM.cpp:13
FULLNNNLO
Definition: OrderScheme.h:39
NNNLO
Definition: OrderScheme.h:36
Matching::getObj
T & getObj()
Definition: Matching.h:14
StandardModel::FlagSMAux
bool FlagSMAux
A boolean for the model flag SMAux.
Definition: StandardModel.h:2799
EWSMcache::getZeta3
double getZeta3() const
A get method to access the value of the zeta function .
Definition: EWSMcache.h:146
LO
Definition: OrderScheme.h:33
QCD::UP
Definition: QCD.h:324
StandardModel::GF
double GF
The Fermi constant in .
Definition: StandardModel.h:2511
StandardModel::A_f
virtual double A_f(const Particle f) const
The left-right asymmetry in at the -pole, .
Definition: StandardModel.cpp:1183
StandardModel::sigma0_had
virtual double sigma0_had() const
The hadronic cross section for at the -pole, .
Definition: StandardModel.cpp:1344
StandardModel::delMw
double delMw
The theoretical uncertainty in , denoted as , in GeV.
Definition: StandardModel.h:2515
EWSMThreeLoopEW::DeltaAlpha_t
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMThreeLoopEW.cpp:65
Model::addMissingModelParameter
void addMissingModelParameter(const std::string &missingParameterName)
Definition: Model.h:232
StandardModel::SchemeToDouble
double SchemeToDouble(const std::string scheme) const
A method to convert a given scheme name in string form into a floating-point number with double preci...
Definition: StandardModel.h:2557
StandardModel::Beta_e
double Beta_e(int nm, unsigned int nf) const
QED beta function coefficients - eq. (36) hep-ph/0512066.
Definition: StandardModel.cpp:556
StandardModel.h
StandardModel::CheckParameters
virtual bool CheckParameters(const std::map< std::string, double > &DPars)
A method to check if all the mandatory parameters for StandardModel have been provided in model initi...
Definition: StandardModel.cpp:313
StandardModel::alphaMz
double alphaMz() const
The electromagnetic coupling at the -mass scale, .
Definition: StandardModel.cpp:867
QCD::CHARM
Definition: QCD.h:326
StandardModel::DeltaAlphaL5q
double DeltaAlphaL5q() const
The sum of the leptonic and the five-flavour hadronic corrections to the electromagnetic coupling at...
Definition: StandardModel.cpp:830
QCD::TF
double TF
Definition: QCD.h:933
gslpp::complex
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
StandardModel::ComputeDeltaR_rem
void ComputeDeltaR_rem(const double Mw_i, double DeltaR_rem[orders_EW_size]) const
A method to collect computed via subclasses.
Definition: StandardModel.cpp:1053
StandardModel::mHl
double mHl
The Higgs mass in GeV.
Definition: StandardModel.h:2514
StandardModel::epsilonb
virtual double epsilonb() const
The SM contribution to the epsilon parameter .
Definition: StandardModel.cpp:1789
CKM::getV_cb
gslpp::complex getV_cb() const
A member for returning the value of the CKM element .
Definition: CKM.h:237
QCD::NEUTRINO_2
Definition: QCD.h:313
StandardModel::s23
double s23
Definition: StandardModel.h:2533
QCD::setParameter
virtual void setParameter(const std::string name, const double &value)
A method to set the value of a parameter of QCD.
Definition: QCD.cpp:273
EWSMcache::getZeta5
double getZeta5() const
A get method to access the value of the zeta function .
Definition: EWSMcache.h:164
gslpp::log
complex log(const complex &z)
Definition: gslpp_complex.cpp:342
StandardModel::GammaW
virtual double GammaW() const
The total width of the boson, .
Definition: StandardModel.cpp:1164
gslpp::matrix
A base class for defining operations on matrices, both real and complex.
Definition: gslpp_matrix_base.h:21
StandardModel::flag_order
bool flag_order[orders_EW_size]
An array of internal flags controlling the inclusions of higher-order corrections.
Definition: StandardModel.h:2545
EWSMOneLoopEW::deltaKappa_rem_f
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMOneLoopEW.cpp:143
QCD::ELECTRON
Definition: QCD.h:312
QCD::orderToString
std::string orderToString(const orders order) const
Converts an object of the enum type "orders" to the corresponding string.
Definition: QCD.cpp:83
Particle::getIsospin
double getIsospin() const
A get method to access the particle isospin.
Definition: Particle.h:115
StandardModel::GammaW_cache
double GammaW_cache
A cache of the value of .
Definition: StandardModel.h:2809
gslpp::complex::abs2
double abs2() const
Definition: gslpp_complex.cpp:86
EWSMcache::getZeta4
double getZeta4() const
A get method to access the value of the zeta function .
Definition: EWSMcache.h:155
StandardModel::DeltaAlphaLepton_cache
double DeltaAlphaLepton_cache
A cache of the value of .
Definition: StandardModel.h:2806
EWSMOneLoopEW
A class for one-loop corrections to the EW precision observables.
Definition: EWSMOneLoopEW.h:105
StandardModel::DeltaAlpha_cache
double DeltaAlpha_cache
A cache of the value of .
Definition: StandardModel.h:2807
Model::UpdateError
bool UpdateError
A boolean set to false if update is successful.
Definition: Model.h:254
EWSMTwoLoopEW::DeltaAlpha_l
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMTwoLoopEW.cpp:23
StandardModel::FlagRhoZ
std::string FlagRhoZ
A string for the model flag RhoZ.
Definition: StandardModel.h:2795
StandardModel::DeltaAlpha
double DeltaAlpha() const
The total corrections to the electromagnetic coupling at the -mass scale, denoted as .
Definition: StandardModel.cpp:855
StandardModel::SMM
Matching< StandardModelMatching, StandardModel > SMM
An object of type Matching.
Definition: StandardModel.h:2506
EWSMOneLoopEW::deltaRho_rem_f
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMOneLoopEW.cpp:113
EWSMThreeLoopEW2QCD::DeltaRho
double DeltaRho(const double Mw_i) const
Leading three-loop contribution of to , denoted as .
Definition: EWSMThreeLoopEW2QCD.cpp:29
StandardModel::DeltaR
virtual double DeltaR() const
The SM prediction for derived from that for the boson mass.
Definition: StandardModel.cpp:1010
QCD::MassOfNf
double MassOfNf(int nf) const
The Mbar mass of the heaviest quark in the theory with Nf active flavour.
Definition: QCD.cpp:620
StandardModel::cW2
virtual double cW2() const
Definition: StandardModel.cpp:994
StandardModel::myThreeLoopQCD
EWSMThreeLoopQCD * myThreeLoopQCD
A pointer to an object of type EWSMThreeLoopQCD.
Definition: StandardModel.h:2785
EWSMTwoLoopEW::deltaRho_rem_f
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMTwoLoopEW.cpp:96
StandardModel::ale
double ale
The fine-structure constant .
Definition: StandardModel.h:2512
QCD::mtpole
double mtpole
The pole mass of the top quark.
Definition: QCD.h:927
EWSMTwoLoopQCD::DeltaR_rem
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
Definition: EWSMTwoLoopQCD.cpp:44
StandardModel::Alstilde5
double Alstilde5(const double mu) const
The value of at any scale with the number of flavours and full EW corrections.
Definition: StandardModel.cpp:873
StandardModel::setFlag
virtual bool setFlag(const std::string name, const bool value)
A method to set a flag of StandardModel.
Definition: StandardModel.cpp:378
Model::ModelParamMap
std::map< std::string, std::reference_wrapper< const double > > ModelParamMap
Definition: Model.h:262
StandardModel::myTwoLoopEW
EWSMTwoLoopEW * myTwoLoopEW
A pointer to an object of type EWSMTwoLoopEW.
Definition: StandardModel.h:2786
StandardModel::DeltaAlphaTop
double DeltaAlphaTop(const double s) const
Top-quark contribution to the electromagnetic coupling , denoted as .
Definition: StandardModel.cpp:836
EWSMTwoLoopEW::DeltaAlpha_t
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMTwoLoopEW.cpp:49
EWSMThreeLoopEW.h
StandardModel::AlsByOrder
double AlsByOrder(double mu, orders order=FULLNLO, bool qed_flag=false, bool Nf_thr=true) const
Definition: StandardModel.cpp:597
QCD::CheckParameters
virtual bool CheckParameters(const std::map< std::string, double > &DPars)
A method to check if all the mandatory parameters for QCD have been provided in model initialization.
Definition: QCD.cpp:335
StandardModel::useDeltaAlphaLepton_cache
bool useDeltaAlphaLepton_cache
Definition: StandardModel.h:2812
QCD::Beta0
double Beta0(const double nf) const
The coefficient for a certain number of flavours .
Definition: QCD.cpp:466
QCD::Beta2
double Beta2(const double nf) const
The coefficient for a certain number of flavours .
Definition: QCD.cpp:476
StandardModel::DeltaAlphaLepton
double DeltaAlphaLepton(const double s) const
Leptonic contribution to the electromagnetic coupling , denoted as .
Definition: StandardModel.cpp:802
StandardModel::IsFlagWithoutNonUniversalVC
bool IsFlagWithoutNonUniversalVC() const
A method to retrieve the model flag WithoutNonUniversalVC.
Definition: StandardModel.h:631
CKM::getLambda
double getLambda() const
A member for returning the value of the Wolfenstein parameter .
Definition: CKM.h:78
StandardModel::RVh
double RVh() const
The singlet vector corrections to the hadronic -boson width, denoted as .
Definition: StandardModel.cpp:2373
StandardModel::epsilon2
virtual double epsilon2() const
The SM contribution to the epsilon parameter .
Definition: StandardModel.cpp:1767
LeptonFlavour
The parent class in LeptonFlavour for calculating all the Wilson coefficients for various Lepton Flav...
Definition: LeptonFlavour.h:26
StandardModel::StandardModel
StandardModel()
The default constructor.
Definition: StandardModel.cpp:35
QCD::PostUpdate
virtual bool PostUpdate()
The post-update method for QCD.
Definition: QCD.cpp:143
QCD::Init
virtual bool Init(const std::map< std::string, double > &DPars)
Initializes the QCD parameters found in the argument.
Definition: QCD.cpp:107
QCD::muc
double muc
The threshold between four- and three-flavour theory in GeV.
Definition: QCD.h:930
StandardModel::delGammaZ
double delGammaZ
The theoretical uncertainty in , denoted as , in GeV.
Definition: StandardModel.h:2519
StandardModel::rhoZ_f_cache
gslpp::complex rhoZ_f_cache[12]
A cache of the value of .
Definition: StandardModel.h:2810
StandardModel::c02
double c02() const
The square of the cosine of the weak mixing angle defined without weak radiative corrections.
Definition: StandardModel.cpp:939
CKM::computeCKM
void computeCKM(double Vus_v, double Vcb_v, double Vub_v, double gamma_v)
A set method to calculate the CKM matrix from CKM elements and .
Definition: CKM.cpp:55
StandardModel::Init
virtual bool Init(const std::map< std::string, double > &DPars)
A method to initialize the model parameters.
Definition: StandardModel.cpp:159
gslpp::complex::imag
const double & imag() const
Definition: gslpp_complex.cpp:59
StandardModel::ale_OS
double ale_OS(const double mu, orders order=FULLNLO) const
The running electromagnetic coupling in the on-shell scheme.
Definition: StandardModel.cpp:507
StandardModel::dAle5Mz
double dAle5Mz
The five-flavour hadronic contribution to the electromagnetic coupling, .
Definition: StandardModel.h:2513
StandardModel::Vub
double Vub
used as an input for FlagWolfenstein = FALSE
Definition: StandardModel.h:2530
Particle::getMass
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
StandardModel::useMw_cache
bool useMw_cache
Definition: StandardModel.h:2814
EWSMThreeLoopEW2QCD::DeltaAlpha_l
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMThreeLoopEW2QCD.cpp:19
StandardModel::AlsMz
double AlsMz
The strong coupling constant at the Z-boson mass, .
Definition: StandardModel.h:2509
StandardModel::sW2
double sW2() const
Definition: StandardModel.cpp:1005
CKM::computeGamma
double computeGamma() const
The CKM angle .
Definition: CKM.cpp:87
CKM::getCKM
gslpp::matrix< gslpp::complex > getCKM() const
A member for returning the CKM matrix.
Definition: CKM.h:49
EWSMApproximateFormulae::Mw
double Mw() const
The -boson mass with the full two-loop EW corrections.
Definition: EWSMApproximateFormulae.cpp:23
gslpp::complex::abs
double abs() const
Definition: gslpp_complex.cpp:81
StandardModel::EW1QCD1
Two-loop of .
Definition: StandardModel.h:494
StandardModel::PreUpdate
virtual bool PreUpdate()
The pre-update method for StandardModel.
Definition: StandardModel.cpp:172
StandardModel::Gamma_had
virtual double Gamma_had() const
The hadronic decay width of the boson, .
Definition: StandardModel.cpp:1283
StandardModel::resumRhoZ
double resumRhoZ(const double DeltaRho[orders_EW_size], const double deltaRho_rem[orders_EW_size], const double DeltaRbar_rem, const bool bool_Zbb) const
A method to compute the real part of the effective coupling from , and .
Definition: StandardModel.cpp:1922
EWSMApproximateFormulae::sin2thetaEff_b_full
double sin2thetaEff_b_full() const
with the full two-loop EW corrections.
Definition: EWSMApproximateFormulae.cpp:1477
EWSMOneLoopEW.h
QCD::TOP
Definition: QCD.h:328
EWSMOneLoopEW::FZ
gslpp::complex FZ(const double s, const double Mw_i) const
The unified form factor .
Definition: EWSMOneLoopEW.cpp:1065
EWSMcache::mf
double mf(const Particle f, const double mu=0.0, const orders order=FULLNNLO) const
The mass of an SM fermion.
Definition: EWSMcache.cpp:49
QCD::zeta3
double zeta3
computed with the GSL.
Definition: QCD.h:940
gslpp::pow
complex pow(const complex &z1, const complex &z2)
Definition: gslpp_complex.cpp:395
StandardModel::RAq
double RAq(const QCD::quark q) const
The radiator factor associated with the final-state QED and QCD corrections to the the axial-vector-c...
Definition: StandardModel.cpp:2236
Model::raiseMissingModelParameterCount
void raiseMissingModelParameterCount()
Definition: Model.h:242
EWSMApproximateFormulae::X_full_2_loop
double X_full_2_loop(const std::string observable) const
, , , , , , , , , , , or .
Definition: EWSMApproximateFormulae.cpp:974
StandardModel::SMvars
static std::string SMvars[NSMvars]
A string array containing the labels of the model parameters in StandardModel.
Definition: StandardModel.h:509
gslpp::sqrt
complex sqrt(const complex &z)
Definition: gslpp_complex.cpp:385
EWSMThreeLoopQCD::DeltaRho
double DeltaRho(const double Mw_i) const
Leading three-loop QCD contribution of to , denoted as .
Definition: EWSMThreeLoopQCD.cpp:42
EWSMOneLoopEW::rho_GammaW
double rho_GammaW(const Particle fi, const Particle fj, const double Mw_i) const
EW radiative corrections to the width of , denoted as .
Definition: EWSMOneLoopEW.cpp:190
StandardModel::myLeptonFlavour
LeptonFlavour * myLeptonFlavour
A pointer to an object of the type LeptonFlavour.
Definition: StandardModel.h:2790
sin2thetaEff
An observable class for the leptonic effective weak mixing angle at the pole. To be used for the el...
Definition: sin2thetaEff.h:29
EWSMTwoLoopQCD::DeltaAlpha_l
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMTwoLoopQCD.cpp:20
QCD::Beta3
double Beta3(const double nf) const
The coefficient for a certain number of flavours .
Definition: QCD.cpp:484
EWSMApproximateFormulae.h
StandardModel::EW3
Three-loop of .
Definition: StandardModel.h:498
EWSMcache
A class for cache variables used in computing radiative corrections to the EW precision observables.
Definition: EWSMcache.h:40
StandardModel::FlagMw
std::string FlagMw
A string for the model flag Mw.
Definition: StandardModel.h:2794
StandardModel::lambda
double lambda
The CKM parameter in the Wolfenstein parameterization.
Definition: StandardModel.h:2524
Particle::getCharge
double getCharge() const
A get method to access the particle charge.
Definition: Particle.h:97
StandardModel::MwFromMwbar
double MwFromMwbar(const double Mwbar) const
A method to convert the -boson mass in the complex-pole/fixed-width scheme to that in the experimenta...
Definition: StandardModel.cpp:1111
QCD::zeta2
double zeta2
computed with the GSL.
Definition: QCD.h:939
EWSMTwoLoopEW
A class for two-loop corrections to the EW precision observables.
Definition: EWSMTwoLoopEW.h:57
EWSMApproximateFormulae
A class for approximate formulae of the EW precision observables.
Definition: EWSMApproximateFormulae.h:33
EWSMTwoLoopQCD::DeltaRho
double DeltaRho(const double Mw_i) const
Leading two-loop QCD contribution of to , denoted as .
Definition: EWSMTwoLoopQCD.cpp:38
StandardModel::useDeltaAlpha_cache
bool useDeltaAlpha_cache
Definition: StandardModel.h:2813
EWSMcache.h
StandardModel::PostUpdate
virtual bool PostUpdate()
The post-update method for StandardModel.
Definition: StandardModel.cpp:199
StandardModel::IsFlagNoApproximateGammaZ
bool IsFlagNoApproximateGammaZ() const
A method to retrieve the model flag NoApproximateGammaZ.
Definition: StandardModel.h:644
StandardModel::myOneLoopEW
EWSMOneLoopEW * myOneLoopEW
A pointer to an object of type EWSMOneLoopEW.
Definition: StandardModel.h:2783
StandardModel::setFlagStr
virtual bool setFlagStr(const std::string name, const std::string value)
A method to set a flag of StandardModel.
Definition: StandardModel.cpp:418
StandardModel::Mw_error
static const double Mw_error
The target accuracy of the iterative calculation of the -boson mass in units of GeV.
Definition: StandardModel.h:517
EWSMThreeLoopEW2QCD::DeltaR_rem
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
Definition: EWSMThreeLoopEW2QCD.cpp:63
EWSMThreeLoopQCD::DeltaAlpha_t
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMThreeLoopQCD.cpp:23
EWSMcache::a_f
double a_f(const Particle f) const
The tree-level axial-vector coupling for , denoted as .
Definition: EWSMcache.h:301
Model::IsModelInitialized
bool IsModelInitialized() const
A method to check if the model is initialized.
Definition: Model.h:136
NNLO
Definition: OrderScheme.h:35
StandardModel::Ale
double Ale(double mu, orders order, bool Nf_thr=true) const
The running electromagnetic coupling in the scheme.
Definition: StandardModel.cpp:706
StandardModel::epsilon1
virtual double epsilon1() const
The SM contribution to the epsilon parameter .
Definition: StandardModel.cpp:1759
EWSMTwoLoopEW::tau_2
double tau_2() const
The function .
Definition: EWSMTwoLoopEW.cpp:151
StandardModel::s13
double s13
Definition: StandardModel.h:2533
StandardModel::Als
double Als(double mu, orders order=FULLNLO, bool qed_flag=false, bool Nf_thr=true) const
The running QCD coupling in the scheme including QED corrections.
Definition: StandardModel.cpp:576
QCD::CacheShift
void CacheShift(double cache[][5], int n) const
A member used to manage the caching for this class.
StandardModel::checkEWPOscheme
bool checkEWPOscheme(const std::string scheme) const
A method to check if a given scheme name in string form is valid.
Definition: StandardModel.h:2578
gslpp_function_adapter.h
QCD::getQuarks
Particle getQuarks(const QCD::quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:534
StandardModel::deltaKappaZ_f
virtual gslpp::complex deltaKappaZ_f(const Particle f) const
Flavour non-universal vertex corrections to , denoted by .
Definition: StandardModel.cpp:1729
EWSMTwoLoopQCD::deltaRho_rem_f
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMTwoLoopQCD.cpp:51
StandardModel::FlagKappaZ
std::string FlagKappaZ
A string for the model flag KappaZ.
Definition: StandardModel.h:2796
EWSMThreeLoopEW2QCD::DeltaAlpha_t
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMThreeLoopEW2QCD.cpp:24
EWSMApproximateFormulae::DeltaR_TwoLoopEW_rem
double DeltaR_TwoLoopEW_rem(const double Mw_i) const
.
Definition: EWSMApproximateFormulae.cpp:252
QCD::quark
quark
An enum type for quarks.
Definition: QCD.h:323
CKM::getRhoBar
double getRhoBar() const
A member for returning the value of the Wolfenstein parameter .
Definition: CKM.h:60
EWSMThreeLoopEW2QCD::deltaRho_rem_f
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMThreeLoopEW2QCD.cpp:68
StandardModel::CacheSize
static const int CacheSize
Defines the depth of the cache.
Definition: StandardModel.h:2823
QCD::BelowTh
double BelowTh(const double mu) const
The active flavour threshold below the scale as defined in QCD::Thresholds().
Definition: QCD.cpp:429
EWSMcache::delta_f
double delta_f(const Particle f, const double Mw_i) const
.
Definition: EWSMcache.h:323
QCD::requireYd
bool requireYd
Switch for generating the Yukawa couplings to the down-type quarks.
Definition: QCD.h:922
EWSMOneLoopEW::FW
gslpp::complex FW(const double s, const Particle f, const double Mw_i) const
The unified form factor for .
Definition: EWSMOneLoopEW.cpp:1070
EWSMThreeLoopEW2QCD.h
StandardModel::R0_f
virtual double R0_f(const Particle f) const
The ratio .
Definition: StandardModel.cpp:1369
StandardModel::AleWithInit
double AleWithInit(double mu, double alsi, double mu_i, orders order) const
Definition: StandardModel.cpp:779
StandardModel::myCKM
CKM myCKM
An object of type CKM.
Definition: StandardModel.h:2497
EWSMTwoLoopEW::DeltaRho
double DeltaRho(const double Mw_i) const
Leading two-loop contribution of to , denoted as .
Definition: EWSMTwoLoopEW.cpp:54
EWSMOneLoopEW::DeltaAlpha_t
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMOneLoopEW.cpp:35
StandardModel::resumKappaZ
double resumKappaZ(const double DeltaRho[orders_EW_size], const double deltaKappa_rem[orders_EW_size], const double DeltaRbar_rem, const bool bool_Zbb) const
A method to compute the real part of the effetvive coupling from , and .
Definition: StandardModel.cpp:2001
StandardModel::epsilon3
virtual double epsilon3() const
The SM contribution to the epsilon parameter .
Definition: StandardModel.cpp:1779
PMNS::getPMNS
gslpp::matrix< gslpp::complex > getPMNS() const
A member for returning the PMNS matrix.
Definition: PMNS.h:42
StandardModel::Beta_s
double Beta_s(int nm, unsigned int nf) const
QCD beta function coefficients including QED corrections - eq. (36) hep-ph/0512066.
Definition: StandardModel.cpp:528
Particle::setMass
void setMass(double mass)
A set method to fix the particle mass.
Definition: Particle.h:70
StandardModelMatching::updateSMParameters
void updateSMParameters()
Updates to new Standard Model parameter sets.
Definition: StandardModelMatching.cpp:105
CKM::getEtaBar
double getEtaBar() const
A member for returning the value of the Wolfenstein parameter .
Definition: CKM.h:69
StandardModel::myThreeLoopEW
EWSMThreeLoopEW * myThreeLoopEW
A pointer to an object of type EWSMThreeLoopEW.
Definition: StandardModel.h:2788
StandardModel::InitializeModel
virtual bool InitializeModel()
A method to initialize the model.
Definition: StandardModel.cpp:140
orders
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:31
EWSMcache::getZeta2
double getZeta2() const
A get method to access the value of the zeta function .
Definition: EWSMcache.h:137
StandardModel::myEWSMcache
EWSMcache * myEWSMcache
A pointer to an object of type EWSMcache.
Definition: StandardModel.h:2782
StandardModel::s12
double s12
Definition: StandardModel.h:2533
QCD::PreUpdate
virtual bool PreUpdate()
The pre-update method for QCD.
Definition: QCD.cpp:116
StandardModel::resumMw
double resumMw(const double Mw_i, const double DeltaRho[orders_EW_size], const double DeltaR_rem[orders_EW_size]) const
A method to compute the -boson mass from and .
Definition: StandardModel.cpp:1835
StandardModel::computeYukawas
virtual void computeYukawas()
The method to compute the Yukawa matrices.
Definition: StandardModel.cpp:345
EWSMcache::Xt_GF
double Xt_GF() const
The quantity with the coupling .
Definition: EWSMcache.h:343
StandardModel::AFB
virtual double AFB(const Particle f) const
Definition: StandardModel.cpp:1190
EWSMApproximateFormulae::sin2thetaEff_l_full
double sin2thetaEff_l_full() const
with the full two-loop EW corrections.
Definition: EWSMApproximateFormulae.cpp:1528
StandardModel::computeCKM
virtual void computeCKM()
The method to compute the CKM matrix.
Definition: StandardModel.cpp:325
StandardModel::iterationNo
int iterationNo
Definition: StandardModel.h:2819
Flavour::setSMupdated
void setSMupdated() const
a member used for the caching for .
Definition: Flavour.cpp:281
StandardModel::Update
virtual bool Update(const std::map< std::string, double > &DPars)
The update method for StandardModel.
Definition: StandardModel.cpp:183
StandardModel::RVq
double RVq(const QCD::quark q) const
The radiator factor associated with the final-state QED and QCD corrections to the the vector-current...
Definition: StandardModel.cpp:2116
EWSMThreeLoopEW
A class for three-loop corrections to the EW precision observables.
Definition: EWSMThreeLoopEW.h:35
StandardModel::alpha31
double alpha31
Definition: StandardModel.h:2533
StandardModel::gV_f
virtual gslpp::complex gV_f(const Particle f) const
The effective leptonic neutral-current vector coupling in the SM.
Definition: StandardModel.cpp:1542
StandardModel::Mw_tree
virtual double Mw_tree() const
The tree-level mass of the boson, .
Definition: StandardModel.cpp:925
StandardModel::s02
double s02() const
The square of the sine of the weak mixing angle defined without weak radiative corrections.
Definition: StandardModel.cpp:930
Flavour::setFlag
bool setFlag(const std::string name, const bool value)
Definition: Flavour.cpp:26
StandardModel::Yn
gslpp::matrix< gslpp::complex > Yn
The Yukawa matrix of the neutrinos.
Definition: StandardModel.h:2503
StandardModel::requireCKM
bool requireCKM
An internal flag to control whether the CKM matrix has to be recomputed.
Definition: StandardModel.h:2775
EWSMOneLoopEW::DeltaR_rem
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
Definition: EWSMOneLoopEW.cpp:49
StandardModel::useKappaZ_f_cache
bool useKappaZ_f_cache[12]
Definition: StandardModel.h:2817
EWSMThreeLoopEW::deltaRho_rem_f
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMThreeLoopEW.cpp:114
Mw
An observable class for the -boson mass.
Definition: Mw.h:22
StandardModel::R_inv
virtual double R_inv() const
The ratio of the invisible and leptonic (electron) decay widths of the boson, .
Definition: StandardModel.cpp:1515
EWSMThreeLoopEW::deltaKappa_rem_f
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMThreeLoopEW.cpp:120
EWSMThreeLoopQCD::DeltaR_rem
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
Definition: EWSMThreeLoopQCD.cpp:48
StandardModel::SMFlavour
Flavour SMFlavour
An object of type Flavour.
Definition: StandardModel.h:2779
QCD::STRANGE
Definition: QCD.h:327
StandardModel::sin2thetaEff
virtual double sin2thetaEff(const Particle f) const
The effective weak mixing angle for at the the -mass scale.
Definition: StandardModel.cpp:1195
StandardModel::AlsWithInit
double AlsWithInit(double mu, double alsi, double mu_i, orders order, bool qed_flag) const
Definition: StandardModel.cpp:663
CKM::getV_us
gslpp::complex getV_us() const
A member for returning the value of the CKM element .
Definition: CKM.h:201
QCD::requireYu
bool requireYu
Switch for generating the Yukawa couplings to the up-type quarks.
Definition: QCD.h:921
gslpp::complex::real
const double & real() const
Definition: gslpp_complex.cpp:53
QCD::FullOrder
orders FullOrder(orders order) const
Return the FULLORDER enum corresponding to order.
Definition: QCD.cpp:603
StandardModel::als_cache
double als_cache[11][CacheSize]
Cache for .
Definition: StandardModel.h:2824
CKM::getV_ub
gslpp::complex getV_ub() const
A member for returning the value of the CKM element .
Definition: CKM.h:210
EWSMThreeLoopEW2QCD::deltaKappa_rem_f
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMThreeLoopEW2QCD.cpp:74
StandardModel::leptons
Particle leptons[6]
An array of Particle objects for the leptons.
Definition: StandardModel.h:2496
StandardModel::GammaZ
virtual double GammaZ(const Particle f) const
The partial decay width, .
Definition: StandardModel.cpp:1201
Particle::getIndex
int getIndex() const
Definition: Particle.h:160
StandardModel::etab
double etab
The CKM parameter in the Wolfenstein parameterization.
Definition: StandardModel.h:2527
CKM::getA
double getA() const
A member for returning the value of the Wolfenstein parameter .
Definition: CKM.h:87
EWSMTwoLoopEW.h
Model::isModelSUSY
bool isModelSUSY() const
Definition: Model.h:182
QCD::setFlagStr
virtual bool setFlagStr(const std::string name, const std::string value)
A method to set a flag of QCD.
Definition: QCD.cpp:393
StandardModel::requireYe
bool requireYe
An internal flag to control whether the charged-lepton Yukawa matrix has to be recomputed.
Definition: StandardModel.h:2776
Model::name
std::string name
The name of the model.
Definition: Model.h:267
StandardModel::Mz
double Mz
The mass of the boson in GeV.
Definition: StandardModel.h:2510
QCD::AboveTh
double AboveTh(const double mu) const
The active flavour threshold above the scale as defined in QCD::Thresholds().
Definition: QCD.cpp:420
StandardModel::myPMNS
PMNS myPMNS
Definition: StandardModel.h:2498
StandardModel::kappaZ_f_cache
gslpp::complex kappaZ_f_cache[12]
A cache of the value of .
Definition: StandardModel.h:2811
QCD::NfThresholdCorrections
double NfThresholdCorrections(double mu, double M, double als, int nf, orders order) const
Threshold corrections in matching with from eq. (34) of hep-ph/0512060.
Definition: QCD.cpp:583
QCD::Nc
double Nc
The number of colours.
Definition: QCD.h:932
StandardModel::N_nu
virtual double N_nu() const
The number of neutrinos obtained indirectly from the measurements at the Z pole, .
Definition: StandardModel.cpp:1521
StandardModel::EW2QCD1
Three-loop of .
Definition: StandardModel.h:497
NLO
Definition: OrderScheme.h:34
StandardModel::FlagCacheInStandardModel
bool FlagCacheInStandardModel
A flag for caching (true by default).
Definition: StandardModel.h:2804
StandardModel::ComputeDeltaRho
void ComputeDeltaRho(const double Mw_i, double DeltaRho[orders_EW_size]) const
A method to collect computed via subclasses.
Definition: StandardModel.cpp:1024
StandardModel::Mw
virtual double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
Definition: StandardModel.cpp:944
StandardModel::myApproximateFormulae
EWSMApproximateFormulae * myApproximateFormulae
A pointer to an object of type EWSMApproximateFormulae.
Definition: StandardModel.h:2789
StandardModel::Mzbar
double Mzbar() const
The -boson mass in the complex-pole/fixed-width scheme.
Definition: StandardModel.cpp:1085
StandardModel::gA_f
virtual gslpp::complex gA_f(const Particle f) const
The effective leptonic neutral-current axial-vector coupling in the SM.
Definition: StandardModel.cpp:1548
EWSMTwoLoopQCD::deltaKappa_rem_f
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMTwoLoopQCD.cpp:58
StandardModel::requireYn
bool requireYn
An internal flag to control whether the neutrino Yukawa matrix has to be recomputed.
Definition: StandardModel.h:2777
StandardModel::delR0b
double delR0b
The theoretical uncertainty in , denoted as .
Definition: StandardModel.h:2523
StandardModel::Vus
double Vus
used as an input for FlagWolfenstein = FALSE
Definition: StandardModel.h:2528
StandardModel::GeVminus2_to_nb
static const double GeVminus2_to_nb
Definition: StandardModel.h:511
StandardModel::myThreeLoopEW2QCD
EWSMThreeLoopEW2QCD * myThreeLoopEW2QCD
A pointer to an object of type EWSMThreeLoopEW2QCD.
Definition: StandardModel.h:2787
StandardModel::useGammaW_cache
bool useGammaW_cache
Definition: StandardModel.h:2815
StandardModel::delSin2th_l
double delSin2th_l
The theoretical uncertainty in , denoted as .
Definition: StandardModel.h:2516
QCD::CA
double CA
Definition: QCD.h:933
QCD::AlsWithInit
double AlsWithInit(const double mu, const double alsi, const double mu_i, const orders order) const
Computes the running strong coupling from in the scheme, where it is forbidden to across a flavour...
Definition: QCD.cpp:498
StandardModel::SMparamsForEWPO_cache
double SMparamsForEWPO_cache[NumSMParamsForEWPO]
Definition: StandardModel.h:2805
QCD::CF
double CF
Definition: QCD.h:933
EWSMcache::alsMt
double alsMt() const
The strong coupling at NNLO.
Definition: EWSMcache.h:378
FULLNNLO
Definition: OrderScheme.h:38
StandardModel::Gamma_Z
virtual double Gamma_Z() const
The total decay width of the boson, .
Definition: StandardModel.cpp:1318
StandardModel::deltaRhoZ_f
virtual gslpp::complex deltaRhoZ_f(const Particle f) const
Flavour non-universal vertex corrections to , denoted by .
Definition: StandardModel.cpp:1704
StandardModel::delsigma0H
double delsigma0H
The theoretical uncertainty in , denoted as in nb.
Definition: StandardModel.h:2520
StandardModel::setFlagCacheInStandardModel
void setFlagCacheInStandardModel(bool FlagCacheInStandardModel)
A set method to change the model flag CacheInStandardModel of StandardModel.
Definition: StandardModel.h:695
QCD::DOWN
Definition: QCD.h:325
StandardModel::CheckFlags
virtual bool CheckFlags() const
A method to check the sanity of the set of model flags.
Definition: StandardModel.cpp:449
StandardModel::kappaZ_f
virtual gslpp::complex kappaZ_f(const Particle f) const
The effective leptonic neutral-current coupling in the SM.
Definition: StandardModel.cpp:1618
QCD::setFlag
virtual bool setFlag(const std::string name, const bool value)
A method to set a flag of QCD.
Definition: QCD.cpp:380
StandardModel::muw
double muw
A matching scale around the weak scale in GeV.
Definition: StandardModel.h:2532
StandardModel::Yd
gslpp::matrix< gslpp::complex > Yd
The Yukawa matrix of the down-type quarks.
Definition: StandardModel.h:2502
StandardModel::EW1QCD2
Three-loop of .
Definition: StandardModel.h:495
FULLNLO
Definition: OrderScheme.h:37
EWSMTwoLoopQCD.h
EWSMcache::v_f
double v_f(const Particle f, const double Mw_i) const
The tree-level vector coupling for , denoted as .
Definition: EWSMcache.h:290
StandardModel::FlagWolfenstein
bool FlagWolfenstein
A boolean for the model flag Wolfenstein.
Definition: StandardModel.h:2797
QCD::NEUTRINO_1
Definition: QCD.h:311
StandardModel::checkSMparamsForEWPO
bool checkSMparamsForEWPO()
A method to check whether the parameters relevant to the EWPO are updated.
Definition: StandardModel.cpp:458
QCD::quarks
Particle quarks[6]
The vector of all SM quarks.
Definition: QCD.h:934
Model::setModelInitialized
void setModelInitialized(bool ModelInitialized)
A set method to fix the failure or success of the initialization of the model.
Definition: Model.h:145
EWSMTwoLoopQCD::DeltaAlpha_t
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
Definition: EWSMTwoLoopQCD.cpp:25
StandardModel::orders_EW_size
The size of this enum.
Definition: StandardModel.h:499
StandardModel::myTwoLoopQCD
EWSMTwoLoopQCD * myTwoLoopQCD
A pointer to an object of type EWSMTwoLoopQCD.
Definition: StandardModel.h:2784
StandardModel::Vcb
double Vcb
used as an input for FlagWolfenstein = FALSE
Definition: StandardModel.h:2529
EWSMTwoLoopEW::DeltaR_rem
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
Definition: EWSMTwoLoopEW.cpp:81
QCD::MU
Definition: QCD.h:314
StandardModel::delSin2th_b
double delSin2th_b
The theoretical uncertainty in , denoted as .
Definition: StandardModel.h:2518
QCD::mut
double mut
The threshold between six- and five-flavour theory in GeV.
Definition: QCD.h:928
EWSMThreeLoopQCD::deltaRho_rem_f
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
Definition: EWSMThreeLoopQCD.cpp:66
StandardModel::delta
double delta
Definition: StandardModel.h:2533
Particle::getName
std::string getName() const
Definition: Particle.h:147
StandardModel::alpha21
double alpha21
Definition: StandardModel.h:2533
EWSMApproximateFormulae::sin2thetaEff
double sin2thetaEff(const Particle p) const
Definition: EWSMApproximateFormulae.h:68
StandardModel::FlagNoApproximateGammaZ
bool FlagNoApproximateGammaZ
A boolean for the model flag NoApproximateGammaZ.
Definition: StandardModel.h:2793
StandardModel::orders_EW
orders_EW
An enumerated type representing perturbative orders of radiative corrections to EW precision observab...
Definition: StandardModel.h:492