EWSMApproximateFormulae.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
9 #include <stdexcept>
10 #include <sstream>
11 
12 #define UpperBoundForApproximateFormulae 1000.0
13 //#define UpperBoundForApproximateFormulae 1500.0 // for test
14 
16 : mycache(cache_i)
17 {
18 }
19 
20 
22 
24 {
25  // Parametrization from arXiv:hep-ph/0311148v2 (updates from the journal version)
26  double Mw0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11;
28  // applicable for 100 GeV <= mHl <= 1 TeV
29  Mw0 = 80.3779;
30  c1 = 0.05263;
31  c2 = 0.010239;
32  c3 = 0.000954;
33  c4 = -0.000054;
34  c5 = 1.077;
35  c6 = 0.5252;
36  c7 = 0.0700;
37  c8 = 0.004102;
38  c9 = 0.000111;
39  c10 = 0.0774;
40  c11 = 115.0;
41  } else if (mycache.getSM().getMHl() >= 10.0 && mycache.getSM().getMHl() <= 1000.0) {
42  // applicable for 10 GeV <= mHl <= 1 TeV
43  Mw0 = 80.3799;
44  c1 = 0.05427;
45  c2 = 0.008931;
46  c3 = 0.0000882;
47  c4 = 0.000161;
48  c5 = 1.070;
49  c6 = 0.5237;
50  c7 = 0.0679;
51  c8 = 0.00179;
52  c9 = 0.0000664;
53  c10 = 0.0795;
54  c11 = 114.9;
55  } else {
56  std::stringstream out;
57  out << mycache.getSM().getMHl();
58  throw std::runtime_error("ApproximateFormulae::Mw(): mh=" + out.str() + " is out of range");
59  }
60 
61  double dH = log(mycache.getSM().getMHl() / 100.0);
62  double dh = pow((mycache.getSM().getMHl() / 100.0), 2.0);
63  double dt = pow((mycache.getSM().getMtpole() / 174.3), 2.0) - 1.0;
64  double dZ = mycache.getSM().getMz() / 91.1875 - 1.0;
65  double dalphae = mycache.getSM().DeltaAlphaL5q() / 0.05907 - 1.0;
66  double dalphas = mycache.getSM().getAlsMz() / 0.119 - 1.0;
67 
68  return (Mw0 - c1 * dH - c2 * dH * dH + c3 * pow(dH, 4.0)
69  + c4 * (dh - 1.0) - c5 * dalphae + c6 * dt - c7 * dt * dt
70  - c8 * dH * dt + c9 * dh * dt - c10 * dalphas + c11 * dZ
71  + mycache.getSM().getDelMw());
72 }
73 
75 {
76  // applicable for 10 GeV <= mHl <= 1 TeV
78  std::stringstream out;
79  out << mycache.getSM().getMHl();
80  throw std::runtime_error("ApproximateFormulae::sin2thetaEff_l(): mh=" + out.str() + " is out of range");
81  }
82 
83  double s0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10;
84  switch (l) {
88  s0 = 0.2308772;
89  d1 = 4.713 * 0.0001;
90  d2 = 2.05 * 0.00001;
91  d3 = 3.85 * 0.000001;
92  d4 = -1.85 * 0.000001;
93  d5 = 2.06 * 0.01;
94  d6 = -2.850 * 0.001;
95  d7 = 1.82 * 0.0001;
96  d8 = -9.71 * 0.000001;
97  d9 = 3.96 * 0.0001;
98  d10 = -6.54 * 0.1;
99  break;
101  case StandardModel::MU:
102  case StandardModel::TAU:
103  s0 = 0.2312527;
104  d1 = 4.729 * 0.0001;
105  d2 = 2.07 * 0.00001;
106  d3 = 3.85 * 0.000001;
107  d4 = -1.85 * 0.000001;
108  d5 = 2.07 * 0.01;
109  d6 = -2.851 * 0.001;
110  d7 = 1.82 * 0.0001;
111  d8 = -9.74 * 0.000001;
112  d9 = 3.98 * 0.0001;
113  d10 = -6.55 * 0.1;
114  break;
115  default:
116  throw std::runtime_error("Error in ApproximateFormulae::sin2thetaEff_l()");
117  }
118 
119  double L_H = log(mycache.getSM().getMHl() / 100.0);
120  double Delta_H = mycache.getSM().getMHl() / 100.0;
121  double Delta_ale = mycache.getSM().DeltaAlphaL5q() / 0.05907 - 1.0;
122  double Delta_t = pow((mycache.getSM().getMtpole() / 178.0), 2.0) - 1.0;
123  double Delta_alphas = mycache.getSM().getAlsMz() / 0.117 - 1.0;
124  double Delta_Z = mycache.getSM().getMz() / 91.1876 - 1.0;
125 
126  return (s0 + d1 * L_H + d2 * L_H * L_H + d3 * pow(L_H, 4.0)
127  + d4 * (Delta_H * Delta_H - 1.0) + d5 * Delta_ale + d6 * Delta_t
128  + d7 * Delta_t * Delta_t + d8 * Delta_t * (Delta_H - 1.0)
129  + d9 * Delta_alphas + d10 * Delta_Z
131 }
132 
134 {
135  // applicable for 10 GeV <= mHl <= 1 TeV
137  std::stringstream out;
138  out << mycache.getSM().getMHl();
139  throw std::runtime_error("ApproximateFormulae::sin2thetaEff_q(): mh=" + out.str() + " is out of range");
140  }
141 
142  double s0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10;
143  switch (q) {
144  case QCD::UP:
145  case QCD::CHARM:
146  s0 = 0.2311395;
147  d1 = 4.726 * 0.0001;
148  d2 = 2.07 * 0.00001;
149  d3 = 3.85 * 0.000001;
150  d4 = -1.85 * 0.000001;
151  d5 = 2.07 * 0.01;
152  d6 = -2.853 * 0.001;
153  d7 = 1.83 * 0.0001;
154  d8 = -9.73 * 0.000001;
155  d9 = 3.98 * 0.0001;
156  d10 = -6.55 * 0.1;
157  break;
158  case QCD::DOWN:
159  case QCD::STRANGE:
160  s0 = 0.2310286;
161  d1 = 4.720 * 0.0001;
162  d2 = 2.06 * 0.00001;
163  d3 = 3.85 * 0.000001;
164  d4 = -1.85 * 0.000001;
165  d5 = 2.07 * 0.01;
166  d6 = -2.848 * 0.001;
167  d7 = 1.81 * 0.0001;
168  d8 = -9.73 * 0.000001;
169  d9 = 3.97 * 0.0001;
170  d10 = -6.55 * 0.1;
171  break;
172  case QCD::BOTTOM:
173  s0 = 0.2327580;
174  d1 = 4.749 * 0.0001;
175  d2 = 2.03 * 0.00001;
176  d3 = 3.94 * 0.000001;
177  d4 = -1.84 * 0.000001;
178  d5 = 2.08 * 0.01;
179  d6 = -0.993 * 0.001;
180  d7 = 0.708 * 0.0001;
181  d8 = -7.61 * 0.000001;
182  d9 = 4.03 * 0.0001;
183  d10 = 6.61 * 0.1;
184  break;
185  case QCD::TOP:
186  return 0.0;
187  default:
188  throw std::runtime_error("Error in ApproximateFormulae::sin2thetaEff_q()");
189  }
190 
191  double L_H = log(mycache.getSM().getMHl() / 100.0);
192  double Delta_H = mycache.getSM().getMHl() / 100.0;
193  double Delta_ale = mycache.getSM().DeltaAlphaL5q() / 0.05907 - 1.0;
194  double Delta_t = pow((mycache.getSM().getMtpole() / 178.0), 2.0) - 1.0;
195  double Delta_alphas = mycache.getSM().getAlsMz() / 0.117 - 1.0;
196  double Delta_Z = mycache.getSM().getMz() / 91.1876 - 1.0;
197 
198  return (s0 + d1 * L_H + d2 * L_H * L_H + d3 * pow(L_H, 4.0)
199  + d4 * (Delta_H * Delta_H - 1.0) + d5 * Delta_ale + d6 * Delta_t
200  + d7 * Delta_t * Delta_t + d8 * Delta_t * (Delta_H - 1.0)
201  + d9 * Delta_alphas + d10 * Delta_Z);
202 }
203 
204 double EWSMApproximateFormulae::DeltaR_TwoLoopEW_rem(const double Mw_i) const
205 {
206  // applicable for 10 GeV <= mHl <= 1 TeV
208  std::stringstream out;
209  out << mycache.getSM().getMHl();
210  throw std::runtime_error("ApproximateFormulae::DeltaR_TwoLoopEW_rem(): mh=" + out.str() + " is out of range");
211  }
212 
213  double r0 = 0.003354;
214  double r1 = -0.000209;
215  double r2 = 0.0000254;
216  double r3 = -0.00000785;
217  double r4 = -0.00000233;
218  double r5 = 0.00783;
219  double r6 = 0.00338;
220  double r7 = -0.00000989;
221  double r8 = 0.0939;
222  double r9 = 0.204;
223  double r10 = -0.103;
224 
225  //double Mw = Mw(DeltaAlphaL5q_i); /* for test */
226  double Mw = Mw_i;
227 
228  double L_H = log(mycache.getSM().getMHl() / 100.0);
229  double Delta_H = mycache.getSM().getMHl() / 100.0;
230  double Delta_t = pow((mycache.getSM().getMtpole() / 178.0), 2.0) - 1.0;
231  double Delta_Z = mycache.getSM().getMz() / 91.1876 - 1.0;
232  double Delta_W = Mw / 80.404 - 1.0;
233 
234  return ( r0 + r1 * L_H + r2 * L_H * L_H + r3 * pow(L_H, 4.0)
235  + r4 * (Delta_H * Delta_H - 1.0) + r5 * Delta_t
236  + r6 * Delta_t * Delta_t + r7 * Delta_t * L_H + r8 * Delta_W
237  + r9 * Delta_W * Delta_t + r10 * Delta_Z);
238 }
239 
241 {
242  // applicable for 10 GeV <= mHl <= 1 TeV
244  std::stringstream out;
245  out << mycache.getSM().getMHl();
246  throw std::runtime_error("ApproximateFormulae::DeltaKappa_l_TwoLoopEW_rem(): mh=" + out.str() + " is out of range");
247  }
248 
249  double k0 = -0.002711;
250  double k1 = -0.0000312;
251  double k2 = -0.0000412;
252  double k3 = 0.00000528;
253  double k4 = 0.00000375;
254  double k5 = -0.00516;
255  double k6 = -0.00206;
256  double k7 = -0.000232;
257  double k8 = -0.0647;
258  double k9 = -0.129;
259  double k10 = 0.0712;
260 
261  double L_H = log(mycache.getSM().getMHl() / 100.0);
262  double Delta_H = mycache.getSM().getMHl() / 100.0;
263  double Delta_t = pow((mycache.getSM().getMtpole() / 178.0), 2.0) - 1.0;
264  double Delta_Z = mycache.getSM().getMz() / 91.1876 - 1.0;
265  double Delta_W = Mw_i / 80.404 - 1.0;
266 
267  return ( k0 + k1 * L_H + k2 * L_H * L_H + k3 * pow(L_H, 4.0)
268  + k4 * (Delta_H * Delta_H - 1.0) + k5 * Delta_t
269  + k6 * Delta_t * Delta_t + k7 * Delta_t * L_H
270  + k8 * Delta_W + k9 * Delta_W * Delta_t + k10 * Delta_Z);
271 }
272 
274 {
275  // applicable for 10 GeV <= mHl <= 1 TeV
277  std::stringstream out;
278  out << mycache.getSM().getMHl();
279  throw std::runtime_error("ApproximateFormulae::DeltaKappa_b_TwoLoopEW_rem(): mh=" + out.str() + " is out of range");
280  }
281 
282  double k0 = -0.002666;
283  double k1 = -0.0000592;
284  double k2 = -0.00000329;
285  double k3 = 0.00000349;
286  double k4 = 0.00000283;
287  double k5 = -0.00534;
288  double k6 = -0.00210;
289  double k7 = -0.000219;
290  double k8 = -0.0631;
291  double k9 = -0.126;
292  double k10 = 0.0647;
293 
294  double L_H = log(mycache.getSM().getMHl() / 100.0);
295  double Delta_H = mycache.getSM().getMHl() / 100.0;
296  double Delta_t = pow((mycache.getSM().getMtpole() / 178.0), 2.0) - 1.0;
297  double Delta_Z = mycache.getSM().getMz() / 91.1876 - 1.0;
298  double Delta_W = Mw_i / 80.404 - 1.0;
299 
300  return ( k0 + k1 * L_H + k2 * L_H * L_H + k3 * pow(L_H, 4.0)
301  + k4 * (Delta_H * Delta_H - 1.0) + k5 * Delta_t
302  + k6 * Delta_t * Delta_t + k7 * Delta_t * L_H
303  + k8 * Delta_W + k9 * Delta_W * Delta_t + k10 * Delta_Z);
304 }
305 
307 {
308  // applicable for 10 GeV <= mHl <= 1 TeV
310  std::stringstream out;
311  out << mycache.getSM().getMHl();
312  throw std::runtime_error("ApproximateFormulae::R0_bottom(): mh=" + out.str() + " is out of range");
313  }
314 
315  /*-----------------------------------------------*/
316  /* arXiv:1205.0299v1 by Freitas and Huang */
317  /*
318  double Rb00 = 0.2147464;
319  double c1 = 0.0000221;
320  double c2 = 0.0000026;
321  double c3 = -0.00000067;
322  double c4 = 0.0000000911;
323  double c5 = 0.000647;
324  double c6 = -0.003239;
325  double c7 = 0.0000673;
326  double c8 = -0.000324;
327  double c9 = 0.0610;
328 
329  double L_H = log(mycache.getSM().getMHl()/100.0);
330  double Delta_H = mycache.getSM().getMHl()/100.0;
331  double Delta_ale = mycache.getSM().mycache.getSM().DeltaAlphaL5q()/0.05900 - 1.0;
332  double Delta_t = pow((mycache.getSM().getMtpole()/173.2), 2.0) - 1.0;
333  double Delta_alphas = mycache.getSM().getAlsMz()/0.1184 - 1.0;
334  double Delta_Z = mycache.getSM().getMz()/91.1876 - 1.0;
335 
336  return (Rb00 + c1*L_H + c2*L_H*L_H + c3*pow(L_H, 4.0)
337  + c4*(Delta_H*Delta_H - 1.0) + c5*Delta_ale + c6*Delta_t
338  + c7*Delta_t*L_H + c8*Delta_alphas + c9*Delta_Z );
339  */
340 
341  /*-----------------------------------------------*/
342  /* arXiv:1205.0299v2 by Freitas and Huang */
343  /*
344  double Rb00 = 0.2149246;
345  double c1 = 2.23 * pow(10.0, -5.);
346  double c2 = 2.6 * pow(10.0, -6.);
347  double c3 = -6.8 * pow(10.0, -7.);
348  double c4 = 9.19 *pow(10.0, -8.);
349  double c5 = 6.58 * pow(10.0, -4.);
350  double c6 = -3.363 * pow(10.0, -3.);
351  double c7 = 6.74 * pow(10.0, -5.);
352  double c8 = -1.688 * pow(10.0, -3.);
353  double c9 = -9.26 * pow(10.0, -4.);
354  double c10 = 5.93 * pow(10.0, -2.);
355 
356  double L_H = log(mycache.getSM().getMHl()/100.0);
357  double Delta_H = mycache.getSM().getMHl()/100.0;
358  double Delta_ale = mycache.getSM().mycache.getSM().DeltaAlphaL5q()/0.05900 - 1.0;
359  double Delta_t = pow((mycache.getSM().getMtpole()/173.2), 2.0) - 1.0;
360  double Delta_alphas = mycache.getSM().getAlsMz()/0.1184 - 1.0;
361  double Delta_Z = mycache.getSM().getMz()/91.1876 - 1.0;
362 
363  return (Rb00 + c1*L_H + c2*L_H*L_H + c3*pow(L_H, 4.0)
364  + c4*(Delta_H*Delta_H - 1.0) + c5*Delta_ale + c6*Delta_t
365  + c7*Delta_t*L_H + c8*Delta_alphas + c9*Delta_alphas*Delta_alphas
366  + c10*Delta_Z );
367  */
368 
369  /*-----------------------------------------------*/
370  /* arXiv:1205.0299v3 by Freitas and Huang */
371 
372  double Rb00 = 0.2154940;
373  double c1 = 1.88 * pow(10.0, -5.);
374  double c2 = 2.0 * pow(10.0, -6.);
375  double c3 = -6.0 * pow(10.0, -7.);
376  double c4 = 8.53 * pow(10.0, -8.);
377  double c5 = 7.05 * pow(10.0, -4.);
378  double c6 = -3.159 * pow(10.0, -3.);
379  double c7 = 6.65 * pow(10.0, -5.);
380  double c8 = -1.704 * pow(10.0, -3.);
381  double c9 = -9.30 * pow(10.0, -4.);
382  double c10 = 6.26 * pow(10.0, -2.);
383 
384  double L_H = log(mycache.getSM().getMHl() / 100.0);
385  double Delta_H = mycache.getSM().getMHl() / 100.0;
386  double Delta_ale = mycache.getSM().DeltaAlphaL5q() / 0.05900 - 1.0;
387  double Delta_t = pow((mycache.getSM().getMtpole() / 173.2), 2.0) - 1.0;
388  double Delta_alphas = mycache.getSM().getAlsMz() / 0.1184 - 1.0;
389  double Delta_Z = mycache.getSM().getMz() / 91.1876 - 1.0;
390 
391  /* Debug (parameters in arXiv:1205.0299v3) */
392  //double mHpaper = 100.0;
393  //double mHpaper = 200.0;
394  //double mHpaper = 400.0;
395  //double mHpaper = 600.0;
396  //double mHpaper = 1000.0;
397  //L_H = log(mHpaper/100.0);
398  //Delta_H = mHpaper/100.0;
399  //Delta_ale = 0.0;//0.05900/0.05900 - 1.0;
400  //Delta_t = 0.0;//pow((173.2/173.2), 2.0) - 1.0;
401  //Delta_alphas = 0.0;//0.1184/0.1184 - 1.0;
402  //Delta_Z = 0.0;//91.1876/91.1876 - 1.0;
403 
404  return (Rb00 + c1 * L_H + c2 * L_H * L_H + c3 * pow(L_H, 4.0)
405  + c4 * (Delta_H * Delta_H - 1.0) + c5 * Delta_ale + c6 * Delta_t
406  + c7 * Delta_t * L_H + c8 * Delta_alphas + c9 * Delta_alphas * Delta_alphas
407  + c10 * Delta_Z);
408 
409 }
410 
412 {
413  // applicable for 10 GeV <= mHl <= 1 TeV
415  std::stringstream out;
416  out << mycache.getSM().getMHl();
417  throw std::runtime_error("ApproximateFormulae::Gu_over_Gb(): mh=" + out.str() + " is out of range");
418  }
419 
420  // obtained from Freitas on Apr. 23, 2013
421  /*
422  double R = 0.8024769;
423  double c1 = -1.9007e-4;
424  double c2 = -2.112e-5;
425  double c3 = 6.63e-6;
426  double c4 = -1.0284e-6;
427  double c5 = -8.081e-3;
428  double c6 = 1.830e-4;
429  double c7 = 1.7522e-2;
430  double c8 = 4.440e-3;
431  double c9 = -3.245e-4;
432  double c10 = 1.8079e-2;
433  double c11 = 1.0720e-2;
434  double c12 = -0.129;
435  */
436 
437  // obtained from Freitas on Sep. 21, 2013
438  double R = 0.7997930;
439  double c1 = -1.7991e-4;
440  double c2 = -1.980e-5;
441  double c3 = 6.24e-6;
442  double c4 = -0.9829e-6;
443  double c5 = -8.200e-3;
444  double c6 = 1.657e-4;
445  double c7 = 1.6476e-2;
446  double c8 = 4.463e-3;
447  double c9 = -3.187e-4;
448  double c10 = 1.8113e-2;
449  double c11 = 1.0720e-2;
450  double c12 = -0.144;
451 
452  double LH = log(mycache.getSM().getMHl() / 100.0);
453  double DH = pow((mycache.getSM().getMHl() / 100.0), 2.0) - 1.0;
454  double Dal = mycache.getSM().DeltaAlphaL5q() / 0.059 - 1.0;
455  double Dt = pow((mycache.getSM().getMtpole() / 173.2), 2.0) - 1.0;
456  double Das = mycache.getSM().getAlsMz() / 0.1184 - 1.0;
457  double Dmz = mycache.getSM().getMz() / 91.1876 - 1.0;
458 
459  return ( R + c1 * LH + c2 * LH * LH + c3 * pow(LH, 4.0) + c4 * DH + c5 * Dal + c6 * LH * Dal
460  + c7 * Dt + c8 * Dt * Dt + c9 * LH * Dt + c10 * Das + c11 * Das * Das + c12 * Dmz);
461 }
462 
464 {
465  // applicable for 10 GeV <= mHl <= 1 TeV
467  std::stringstream out;
468  out << mycache.getSM().getMHl();
469  throw std::runtime_error("ApproximateFormulae::Gd_over_Gb(): mh=" + out.str() + " is out of range");
470  }
471 
472  // obtained from Freitas on Apr. 23, 2013
473  /*
474  double R = 1.0239191;
475  double c1 = -5.093e-5;
476  double c2 = -7.08e-6;
477  double c3 = 7.4e-7;
478  double c4 = 3.27e-8;
479  double c5 = 8.68e-4;
480  double c6 = 1.064e-4;
481  double c7 = 1.8875e-2;
482  double c8 = 7.093e-3;
483  double c9 = -4.128e-4;
484  double c10 = 1.898e-4;
485  double c11 = -8.0e-6;
486  double c12 = -0.513;
487  */
488 
489  // obtained from Freitas on Sep. 21, 2013
490  double R = 1.0204024;
491  double c1 = -2.242e-5;
492  double c2 = -1.70e-6;
493  double c3 = 2.1e-7;
494  double c4 = 6.38e-8;
495  double c5 = 5.28e-4;
496  double c6 = 0.999e-4;
497  double c7 = 1.7539e-2;
498  double c8 = 7.138e-3;
499  double c9 = -4.041e-4;
500  double c10 = 2.290e-4;
501  double c11 = -8.0e-6;
502  double c12 = -0.530;
503 
504  double LH = log(mycache.getSM().getMHl() / 100.0);
505  double DH = pow((mycache.getSM().getMHl() / 100.0), 2.0) - 1.0;
506  double Dal = mycache.getSM().DeltaAlphaL5q() / 0.059 - 1.0;
507  double Dt = pow((mycache.getSM().getMtpole() / 173.2), 2.0) - 1.0;
508  double Das = mycache.getSM().getAlsMz() / 0.1184 - 1.0;
509  double Dmz = mycache.getSM().getMz() / 91.1876 - 1.0;
510 
511  return ( R + c1 * LH + c2 * LH * LH + c3 * pow(LH, 4.0) + c4 * DH + c5 * Dal + c6 * LH * Dal
512  + c7 * Dt + c8 * Dt * Dt + c9 * LH * Dt + c10 * Das + c11 * Das * Das + c12 * Dmz);
513 }
514 
515 double EWSMApproximateFormulae::X(const std::string observable) const
516 {
517  double LH = log(mycache.getSM().getMHl() / 125.7);
518  double Dt = pow(mycache.getSM().getMtpole() / 173.2, 2.0) - 1.0;
519  double Das = mycache.getSM().getAlsMz() / 0.1184 - 1.0;
520  double Dal = mycache.getSM().DeltaAlphaL5q() / 0.059 - 1.0;
521  double DZ = mycache.getSM().getMz() / 91.1876 - 1.0;
522 
523  double X0, c1, c2, c3, c4, c5, c6, c7;
524  if (observable.compare("Gamma_nu") == 0) {
525  X0 = 167.157;
526  c1 = -0.055;
527  c2 = 1.26;
528  c3 = -0.19;
529  c4 = -0.02;
530  c5 = 0.36;
531  c6 = -0.1;
532  c7 = 503.0;
533  } else if (observable.compare("Gamma_e_mu") == 0) {
534  X0 = 83.966;
535  c1 = -0.047;
536  c2 = 0.807;
537  c3 = -0.095;
538  c4 = -0.01;
539  c5 = 0.25;
540  c6 = -1.1;
541  c7 = 285.0;
542  } else if (observable.compare("Gamma_tau") == 0) {
543  X0 = 83.776;
544  c1 = -0.047;
545  c2 = 0.806;
546  c3 = -0.095;
547  c4 = -0.01;
548  c5 = 0.25;
549  c6 = -1.1;
550  c7 = 285.0;
551  } else if (observable.compare("Gamma_u") == 0) {
552  X0 = 299.936;
553  c1 = -0.34;
554  c2 = 4.07;
555  c3 = 14.27;
556  c4 = 1.6;
557  c5 = 1.8;
558  c6 = -11.1;
559  c7 = 1253.0;
560  } else if (observable.compare("Gamma_c") == 0) {
561  X0 = 299.860;
562  c1 = -0.34;
563  c2 = 4.07;
564  c3 = 14.27;
565  c4 = 1.6;
566  c5 = 1.8;
567  c6 = -11.1;
568  c7 = 1253.0;
569  } else if (observable.compare("Gamma_d_s") == 0) {
570  X0 = 382.770;
571  c1 = -0.34;
572  c2 = 3.83;
573  c3 = 10.20;
574  c4 = -2.4;
575  c5 = 0.67;
576  c6 = -10.1;
577  c7 = 1469.0;
578  } else if (observable.compare("Gamma_b") == 0) {
579  X0 = 375.724;
580  c1 = -0.30;
581  c2 = -2.28;
582  c3 = 10.53;
583  c4 = -2.4;
584  c5 = 1.2;
585  c6 = -10.0;
586  c7 = 1458.0;
587  } else if (observable.compare("GammaZ") == 0) {
588  X0 = 2494.24;
589  c1 = -2.0;
590  c2 = 19.7;
591  c3 = 58.60;
592  c4 = -4.0;
593  c5 = 8.0;
594  c6 = -55.9;
595  c7 = 9267.0;
596  } else if (observable.compare("sigmaHadron") == 0) {
597  X0 = 41488.4;
598  c1 = 3.0;
599  c2 = 60.9;
600  c3 = -579.4;
601  c4 = 38.0;
602  c5 = 7.3;
603  c6 = 85.0;
604  c7 = -86027.0;
605  } else if (observable.compare("R0_lepton") == 0) {
606  X0 = 20750.9;
607  c1 = -8.1;
608  c2 = -39.0;
609  c3 = 732.1;
610  c4 = -44.0;
611  c5 = 5.5;
612  c6 = -358.0;
613  c7 = 11702.0;
614  } else if (observable.compare("R0_charm") == 0) {
615  X0 = 172.23;
616  c1 = -0.029;
617  c2 = 1.0;
618  c3 = 2.3;
619  c4 = 1.3;
620  c5 = 0.38;
621  c6 = -1.2;
622  c7 = 37.0;
623  } else if (observable.compare("R0_bottom") == 0) {
624  X0 = 215.80;
625  c1 = 0.031;
626  c2 = -2.98;
627  c3 = -1.32;
628  c4 = -0.84;
629  c5 = 0.035;
630  c6 = 0.73;
631  c7 = -18.0;
632  } else
633  throw std::runtime_error("ApproximateFormulae::X(): " + observable + " is not defined");
634 
635  return ( 0.001
636  * (X0 + c1 * LH + c2 * Dt + c3 * Das + c4 * Das * Das + c5 * Das * Dt + c6 * Dal + c7 * DZ));
637 }
638 
639 double EWSMApproximateFormulae::X_extended(const std::string observable) const
640 {
641  double LH = log(mycache.getSM().getMHl() / 125.7);
642  double DH = mycache.getSM().getMHl() / 125.7 - 1.0;
643  double Dt = pow(mycache.getSM().getMtpole() / 173.2, 2.0) - 1.0;
644  double Das = mycache.getSM().getAlsMz() / 0.1184 - 1.0;
645  double Dal = mycache.getSM().DeltaAlphaL5q() / 0.059 - 1.0;
646  double DZ = mycache.getSM().getMz() / 91.1876 - 1.0;
647 
648  double X0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;
649  double ThError = 0.0; // Theoretical uncertainty
650  if (observable.compare("Gamma_nu") == 0) {
651  X0 = 167.157;
652  a1 = -0.1567;
653  a2 = -0.1194;
654  a3 = 0.1031;
655  a4 = -0.00269;
656  a5 = 1.258;
657  a6 = -0.13;
658  a7 = -0.020;
659  a8 = 0.0133;
660  a9 = -0.19;
661  a10 = -0.018;
662  a11 = -0.021;
663  a12 = 0.34;
664  a13 = -0.084;
665  a14 = 0.064;
666  a15 = 503.0;
667  } else if (observable.compare("Gamma_e_mu") == 0) {
668  X0 = 83.966;
669  a1 = -0.1017;
670  a2 = -0.06352;
671  a3 = 0.05500;
672  a4 = -0.00145;
673  a5 = 0.8051;
674  a6 = -0.027;
675  a7 = -0.017;
676  a8 = 0.0066;
677  a9 = -0.095;
678  a10 = -0.010;
679  a11 = -0.015;
680  a12 = 0.23;
681  a13 = -1.1;
682  a14 = 0.064;
683  a15 = 285.0;
684  } else if (observable.compare("Gamma_tau") == 0) {
685  X0 = 83.776;
686  a1 = -0.1016;
687  a2 = -0.06339;
688  a3 = 0.05488;
689  a4 = -0.00145;
690  a5 = 0.8036;
691  a6 = -0.026;
692  a7 = -0.017;
693  a8 = 0.0066;
694  a9 = -0.095;
695  a10 = -0.010;
696  a11 = -0.015;
697  a12 = 0.23;
698  a13 = -1.1;
699  a14 = 0.064;
700  a15 = 285.0;
701  } else if (observable.compare("Gamma_u") == 0) {
702  X0 = 299.936;
703  a1 = -0.5681;
704  a2 = -0.2636;
705  a3 = 0.2334;
706  a4 = -0.00592;
707  a5 = 4.057;
708  a6 = -0.50;
709  a7 = -0.058;
710  a8 = 0.0352;
711  a9 = 14.26;
712  a10 = 1.6;
713  a11 = -0.081;
714  a12 = 1.7;
715  a13 = -11.1;
716  a14 = 0.19;
717  a15 = 1251.0;
718  } else if (observable.compare("Gamma_c") == 0) {
719  X0 = 299.859;
720  a1 = -0.5680;
721  a2 = -0.2635;
722  a3 = 0.2334;
723  a4 = -0.00592;
724  a5 = 4.056;
725  a6 = -0.50;
726  a7 = -0.058;
727  a8 = 0.0352;
728  a9 = 14.26;
729  a10 = 1.6;
730  a11 = -0.081;
731  a12 = 1.7;
732  a13 = -11.1;
733  a14 = 0.19;
734  a15 = 1251.0;
735  } else if (observable.compare("Gamma_d_s") == 0) {
736  X0 = 382.770;
737  a1 = -0.6199;
738  a2 = -0.3182;
739  a3 = 0.2800;
740  a4 = -0.00711;
741  a5 = 3.810;
742  a6 = -0.25;
743  a7 = -0.060;
744  a8 = 0.0420;
745  a9 = 10.20;
746  a10 = -2.4;
747  a11 = -0.083;
748  a12 = 0.65;
749  a13 = -10.1;
750  a14 = 0.19;
751  a15 = 1468.0;
752  } else if (observable.compare("Gamma_b") == 0) {
753  X0 = 375.723;
754  a1 = -0.5744;
755  a2 = -0.3074;
756  a3 = 0.2725;
757  a4 = -0.00703;
758  a5 = -2.292;
759  a6 = -0.027;
760  a7 = -0.013;
761  a8 = 0.0428;
762  a9 = 10.53;
763  a10 = -2.4;
764  a11 = -0.088;
765  a12 = 1.2;
766  a13 = -10.1;
767  a14 = 0.19;
768  a15 = 1456.0;
769  } else if (observable.compare("GammaZ") == 0) {
770  X0 = 2494.24;
771  a1 = -3.725;
772  a2 = -2.019;
773  a3 = 1.773;
774  a4 = -0.04554;
775  a5 = 19.63;
776  a6 = -2.0;
777  a7 = -0.36;
778  a8 = 0.257;
779  a9 = 58.60;
780  a10 = -4.1;
781  a11 = -0.53;
782  a12 = 7.6;
783  a13 = -56.0;
784  a14 = 1.3;
785  a15 = 9256.0;
786  ThError = mycache.getSM().getDelGammaZ();
787  } else if (observable.compare("sigmaHadron") == 0) {
788  X0 = 41488.4;
789  a1 = 3.88;
790  a2 = 0.829;
791  a3 = -0.911;
792  a4 = 0.0076;
793  a5 = 61.10;
794  a6 = 16.0;
795  a7 = -2.0;
796  a8 = -0.59;
797  a9 = -579.4;
798  a10 = 38.0;
799  a11 = -0.26;
800  a12 = 6.5;
801  a13 = 84.0;
802  a14 = 9.5;
803  a15 = -86152.0;
804  } else if (observable.compare("R0_lepton") == 0) {
805  X0 = 20750.9;
806  a1 = -10.00;
807  a2 = -1.83;
808  a3 = 1.878;
809  a4 = -0.0343;
810  a5 = -38.8;
811  a6 = -11.0;
812  a7 = 1.2;
813  a8 = 0.72;
814  a9 = 732.1;
815  a10 = -44.0;
816  a11 = -0.64;
817  a12 = 5.6;
818  a13 = -357.0;
819  a14 = -4.7;
820  a15 = 11771.0;
821  } else if (observable.compare("R0_charm") == 0) {
822  X0 = 172.23;
823  a1 = -0.034;
824  a2 = -0.0058;
825  a3 = 0.0054;
826  a4 = -0.00012;
827  a5 = 1.00;
828  a6 = -0.15;
829  a7 = -0.0074;
830  a8 = 0.00091;
831  a9 = 2.3;
832  a10 = 1.3;
833  a11 = -0.0013;
834  a12 = 0.35;
835  a13 = -1.2;
836  a14 = 0.014;
837  a15 = 37.0;
838  } else if (observable.compare("R0_bottom") == 0) {
839  X0 = 215.80;
840  a1 = 0.036;
841  a2 = 0.0057;
842  a3 = -0.0044;
843  a4 = 0.000062;
844  a5 = -2.98;
845  a6 = 0.20;
846  a7 = 0.020;
847  a8 = -0.00036;
848  a9 = -1.3;
849  a10 = -0.84;
850  a11 = -0.0019;
851  a12 = 0.054;
852  a13 = 0.73;
853  a14 = -0.011;
854  a15 = -18.0;
855  } else
856  throw std::runtime_error("ApproximateFormulae::X_extended(): " + observable + " is not defined");
857 
858  return ( 0.001
859  * (X0 + a1 * LH + a2 * LH * LH + a3 * DH + a4 * DH * DH + a5 * Dt + a6 * Dt * Dt
860  + a7 * Dt * LH + a8 * Dt * LH * LH + a9 * Das + a10 * Das * Das + a11 * Das * LH
861  + a12 * Das * Dt + a13 * Dal + a14 * Dal * LH + a15 * DZ) + ThError);
862 }
double getDelSin2th_l() const
A get method to retrieve the theoretical uncertainty in , denoted as .
double X_extended(const std::string observable) const
, , , , , , , , , , , or .
double DeltaKappa_b_TwoLoopEW_rem(const double Mw_i) const
.
quark
An enum type for quarks.
Definition: QCD.h:730
double getDelMw() const
A get method to retrieve the theoretical uncertainty in , denoted as .
const EWSMcache & mycache
A reference to an object of type StandardModel.
double sin2thetaEff_q(const QCD::quark q) const
with the full two-loop EW corrections (bosonic two-loop EW corrections are missing for )...
complex pow(const complex &z1, const complex &z2)
double sin2thetaEff_l(const StandardModel::lepton l) const
with the full two-loop EW corrections.
Definition: QCD.h:731
double DeltaKappa_l_TwoLoopEW_rem(const double Mw_i) const
.
double DeltaR_TwoLoopEW_rem(const double Mw_i) const
.
Definition: QCD.h:735
A class for cache variables used in computing radiative corrections to the EW precision observables...
Definition: EWSMcache.h:40
double getDelGammaZ() const
A get method to retrieve the theoretical uncertainty in , denoted as .
EWSMApproximateFormulae(const EWSMcache &cache_i)
Constructor.
double DeltaAlphaL5q() const
The sum of the leptonic and the five-flavour hadronic corrections to the electromagnetic coupling at...
#define UpperBoundForApproximateFormulae
Definition: QCD.h:732
double getMtpole() const
A get method to access the pole mass of the top quark.
Definition: QCD.h:923
An observable class for the -boson mass.
Definition: Mw.h:22
complex log(const complex &z)
double getMHl() const
A get method to retrieve the Higgs mass .
double X(const std::string observable) const
, , , , , , , , , , , or .
double getMz() const
A get method to access the mass of the boson .
lepton
An enum type for leptons.
const StandardModel & getSM() const
Definition: EWSMcache.h:56
double Mw() const
The -boson mass with the full two-loop EW corrections.
double getAlsMz() const
A get method to access the value of .