gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-252-gf9a3f78
a Global And Modular Bsm Inference Tool
SM_Z.hpp
Go to the documentation of this file.
1 // GAMBIT: Global and Modular BSM Inference Tool
2 // *********************************************
25 
26 #ifndef DECAYBIT_INCLUDE_GAMBIT_DECAYBIT_SM_Z_HPP_
27 #define DECAYBIT_INCLUDE_GAMBIT_DECAYBIT_SM_Z_HPP_
28 
29 #include <cmath>
30 #include <iostream>
31 
32 namespace Gambit {
33  namespace DecayBit {
34  namespace SM_Z {
35 
41  constexpr struct {
42  const double mu = 499.0e-3;
43  const double sigma = 1.5e-3;
44  } gamma_inv;
45 
46 
48  constexpr struct {
49  const double mh_OS = 125.7; // GeV
50  const double mt_OS = 173.2;
51  const double MZ_OS = 91.1876;
52  const double alpha_s_MSbar_MZ = 0.1184;
53  const double delta_alpha_OS = 0.059;
54  } hat;
55 
56  constexpr int kRows = 12;
57  constexpr int kCols = 9;
59  constexpr double table_5[kRows][kCols] = {
60  {83.983e-3, -0.061e-3, 0.810e-3, -0.096e-3, -0.01e-3, 0.25e-3, -1.1e-3, 286e-3, 0.001e-3},
61  {83.793e-3, -0.060e-3, 0.810e-3, -0.095e-3, -0.01e-3, 0.25e-3, -1.1e-3, 285.e-3, 0.001e-3},
62  {167.176e-3, -0.071e-3, 1.26e-3, -0.19e-3, -0.02e-3, 0.36e-3, -0.1e-3, 504.e-3, 0.001e-3},
63  {299.993e-3, -0.38e-3, 4.08e-3, 14.27e-3, 1.6e-3, 1.8e-3, -11.1e-3, 1253.e-3, 0.002e-3},
64  {299.916e-3, -0.38e-3, 4.08e-3, 14.27e-3, 1.6e-3, 1.8e-3, -11.1e-3, 1253.e-3, 0.002e-3},
65  {382.828e-3, -0.39e-3, 3.83e-3, 10.20e-3, -2.4e-3, 0.67e-3, -10.1e-3, 1470.e-3, 0.002e-3},
66  {375.889e-3, -0.36e-3, -2.14e-3, 10.53e-3, -2.4e-3, 1.2e-3, -10.1e-3, 1459.e-3, 0.006e-3},
67  {2494.74e-3, -2.3e-3, 19.9e-3, 58.61e-3, -4.0e-3, 8.0e-3, -56.0e-3, 9273.e-3, 0.012e-3},
68  {20751.6, -7.8, -37., 732.3, -44, 5.5, -358, 11696., 0.1 },
69  {172.22, -0.031, 1.0, 2.3, 1.3, 0.38, -1.2, 37., 0.01},
70  {215.85, 0.029, -2.92, -1.32, -0.84, 0.032, 0.72, -18., 0.01},
71  {41489.6, 1.6, 60.0, -579.6, 38., 7.3, 85., 0.1},
72  };
73 
81  constexpr double table_6[kRows] =
82  {0.018e-3, 0.018e-3, 0.016e-3, 0.11e-3, 0.11e-3, 0.08e-3, 0.18e-3, 0.4e-3, 6.e-3, 5.e-5, 1.e-4, 6.};
83 
84 
85  class TwoLoop {
91  public:
92  // Partial widths in GeV
93  double gamma_e() const {return observable(0);}
94  double gamma_mu() const {return gamma_e();}
95  double gamma_tau() const {return observable(1);}
96  double gamma_nu_e() const {return observable(2);}
97  double gamma_nu_mu() const {return gamma_nu_e();}
98  double gamma_inv() const {return 3. * gamma_nu_e();}
99  double gamma_nu_tau() const {return observable(2);}
100  double gamma_u() const {return observable(3);}
101  double gamma_c() const {return observable(4);}
102  double gamma_t() const {return 0.;}
103  double gamma_d() const {return observable(5);}
104  double gamma_s() const {return gamma_d();}
105  double gamma_b() const {return observable(6);}
106  double gamma_total() const {return observable(7);}
107 
108  // Residual theory error in partial widths in GeV
109  double error_gamma_e() const {return error(0);}
110  double error_gamma_mu() const {return error_gamma_e();}
111  double error_gamma_tau() const {return error(1);}
112  double error_gamma_nu_e() const {return error(2);}
113  double error_gamma_nu_mu() const {return error_gamma_nu_e();}
114  double error_gamma_inv() const {return 3. * error_gamma_nu_e();}
115  double error_gamma_nu_tau() const {return error(2);}
116  double error_gamma_u() const {return error(3);}
117  double error_gamma_c() const {return error(4);}
118  double error_gamma_t() const {return 0.;}
119  double error_gamma_d() const {return error(5);}
120  double error_gamma_s() const {return error_gamma_d();}
121  double error_gamma_b() const {return error(6);}
122  double error_gamma_total() const {return error(7);}
123 
124  // Branching ratios
125  double BR_e() const {return BR(0);}
126  double BR_mu() const {return BR_e();}
127  double BR_tau() const {return BR(1);}
128  double BR_nu_e() const {return BR(2);}
129  double BR_nu_mu() const {return BR_nu_e();}
130  double BR_inv() const {return 3. * BR_nu_e();}
131  double BR_nu_tau() const {return BR(2);}
132  double BR_u() const {return BR(3);}
133  double BR_c() const {return BR(4);}
134  double BR_t() const {return 0.;}
135  double BR_d() const {return BR(5);}
136  double BR_s() const {return BR_d();}
137  double BR_b() const {return BR(6);}
138 
139  // Residual theory error in branching ratios
140  double error_BR_e() const {return error_BR(0);}
141  double error_BR_mu() const {return error_BR_e();}
142  double error_BR_tau() const {return error_BR(1);}
143  double error_BR_nu_e() const {return error_BR(2);}
144  double error_BR_nu_mu() const {return error_BR_nu_e();}
145  double error_BR_inv() const {return 3. * error_BR_nu_e();}
146  double error_BR_nu_tau() const {return error_BR(2);}
147  double error_BR_u() const {return error_BR(3);}
148  double error_BR_c() const {return error_BR(4);}
149  double error_BR_t() const {return 0.;}
150  double error_BR_d() const {return error_BR(5);}
151  double error_BR_s() const {return error_BR_d();}
152  double error_BR_b() const {return error_BR(6);}
153 
154  // Ratios of partial widths, defined in eq. 27
155  double Rl() const {return 1.e-3 * observable(8);}
156  double Rc() const {return 1.e-3 * observable(9);}
157  double Rb() const {return 1.e-3 * observable(10);}
158 
159  // Residual theory error in ratios of partial widths
160  double error_Rl() const {return 1.e-3 * error(8);}
161  double error_Rc() const {return 1.e-3 * error(9);}
162  double error_Rb() const {return 1.e-3 * error(10);}
163 
164  // Hadronic peak cross section in pb, defined in eq. 10
165  double sigma_0_had() const {return observable(11);}
166 
167  // Residual theory error in hadronic peak cross section in pb
168  double error_sigma_0_had() const {return error(11);}
169 
170  // Nuisance parameters
171  double mh_OS;
172  double mt_OS;
173  double MZ_OS;
176 
182  return !((std::fabs(mh_OS - 125.1) < 5.) &&
183  (std::fabs(mt_OS - 173.2) < 4.) &&
184  (std::fabs(alpha_s_MSbar_MZ - 0.1184) < 0.005) &&
185  (std::fabs(delta_alpha_OS - 0.059) < 0.0005) &&
186  (std::fabs(MZ_OS - 91.1876) < 0.0042));
187  }
188 
189  TwoLoop(double mh_OS = hat.mh_OS,
190  double mt_OS = hat.mt_OS,
191  double MZ_OS = hat.MZ_OS,
192  double alpha_s_MSbar_MZ = hat.alpha_s_MSbar_MZ,
193  double delta_alpha_OS = hat.delta_alpha_OS):
194  mh_OS{mh_OS},
195  mt_OS{mt_OS},
196  MZ_OS{MZ_OS},
197  alpha_s_MSbar_MZ{alpha_s_MSbar_MZ},
198  delta_alpha_OS{delta_alpha_OS}
199  {
207  if (nuisances_outside_ranges()) {
208  std::cerr << "SM nuisance parameters outside range of validity for "
209  "two-loop Z formulas. Not accounting for variation in "
210  "SM nuisance parameters" << std::endl;
211  L_H = 0.;
212  delta_t = 0.;
213  delta_z = 0.;
214  delta_alpha_s = 0.;
215  delta_delta_alpha = 0.;
216  } else {
217  L_H = std::log(mh_OS / hat.mh_OS);
218  delta_t = pow(mt_OS / hat.mt_OS, 2) - 1.;
219  delta_z = MZ_OS / hat.MZ_OS - 1.;
220  delta_alpha_s = alpha_s_MSbar_MZ / hat.alpha_s_MSbar_MZ - 1.;
221  delta_delta_alpha = delta_alpha_OS / hat.delta_alpha_OS - 1.;
222  }
223  }
224 
225  private:
226  double L_H;
227  double delta_t;
228  double delta_z;
231 
232  double error(int row) const {
242  return std::sqrt(pow(table_5[row][8], 2) + pow(table_6[row], 2));
243  }
244 
245  double observable(int row) const {
250  return table_5[row][0] +
251  table_5[row][1] * L_H +
252  table_5[row][2] * delta_t +
253  table_5[row][3] * delta_alpha_s +
254  table_5[row][4] * pow(delta_alpha_s, 2) +
255  table_5[row][5] * delta_alpha_s * delta_t +
256  table_5[row][6] * delta_delta_alpha +
257  table_5[row][7] * delta_z;
258  }
259 
260  double BR(int row) const {
261  /*
262  @param row Row number of Table 7 corresponding to quantity
263  @returns Branching ratio
264  */
265  return observable(row) / gamma_total();
266  }
267 
268  double error_BR(int row) const {
278  const double frac_error_sq = pow(error_gamma_total() / gamma_total(), 2)
279  + pow(error(row) / observable(row), 2);
280  return std::sqrt(frac_error_sq) * BR(row);
281  }
282  };
283 
284  } // namespace SM_Z
285  } // namespace DecayBit
286 } // namespace Gambit
287 
288 #endif // DECAYBIT_INCLUDE_GAMBIT_DECAYBIT_SM_Z_HPP_
double error_gamma_c() const
Definition: SM_Z.hpp:117
double error_BR_t() const
Definition: SM_Z.hpp:149
double error_BR(int row) const
Definition: SM_Z.hpp:268
double error_gamma_e() const
Definition: SM_Z.hpp:109
const double MZ_OS
Definition: SM_Z.hpp:51
double error_gamma_d() const
Definition: SM_Z.hpp:119
double error_BR_c() const
Definition: SM_Z.hpp:148
constexpr int kCols
Definition: SM_Z.hpp:57
double gamma_total() const
Definition: SM_Z.hpp:106
double BR_nu_tau() const
Definition: SM_Z.hpp:131
double error_gamma_nu_e() const
Definition: SM_Z.hpp:112
TwoLoop(double mh_OS=hat.mh_OS, double mt_OS=hat.mt_OS, double MZ_OS=hat.MZ_OS, double alpha_s_MSbar_MZ=hat.alpha_s_MSbar_MZ, double delta_alpha_OS=hat.delta_alpha_OS)
Definition: SM_Z.hpp:189
constexpr double table_6[kRows]
Data in Table 6, though re-arranged to match columns in Table 5 with MeV converted to GeV...
Definition: SM_Z.hpp:81
double gamma_inv() const
Definition: SM_Z.hpp:98
constexpr struct Gambit::DecayBit::SM_Z::@0 gamma_inv
<ahref=" http://pdglive.lbl.gov/BranchingRatio.action?desig=9&parCode=S044 ">PDG measurement of invis...
double observable(int row) const
Definition: SM_Z.hpp:245
double error_BR_mu() const
Definition: SM_Z.hpp:141
double gamma_nu_tau() const
Definition: SM_Z.hpp:99
double error_gamma_nu_mu() const
Definition: SM_Z.hpp:113
const double alpha_s_MSbar_MZ
Definition: SM_Z.hpp:52
const double mt_OS
Definition: SM_Z.hpp:50
double BR(int row) const
Definition: SM_Z.hpp:260
constexpr struct Gambit::DecayBit::SM_Z::@1 hat
The central values of nuisances from eq.
double error_BR_s() const
Definition: SM_Z.hpp:151
double error_sigma_0_had() const
Definition: SM_Z.hpp:168
double gamma_mu() const
Definition: SM_Z.hpp:94
double error_gamma_total() const
Definition: SM_Z.hpp:122
double error_BR_inv() const
Definition: SM_Z.hpp:145
const double sigma
Definition: SM_Z.hpp:43
double gamma_nu_mu() const
Definition: SM_Z.hpp:97
double gamma_e() const
-boson observables at two-loop and the residual theory errors
Definition: SM_Z.hpp:93
const double mu
Definition: SM_Z.hpp:42
double error_BR_nu_mu() const
Definition: SM_Z.hpp:144
double gamma_tau() const
Definition: SM_Z.hpp:95
double error_BR_nu_e() const
Definition: SM_Z.hpp:143
double error_BR_e() const
Definition: SM_Z.hpp:140
double error(int row) const
Definition: SM_Z.hpp:232
double error_BR_b() const
Definition: SM_Z.hpp:152
const double mh_OS
Definition: SM_Z.hpp:49
double error_gamma_b() const
Definition: SM_Z.hpp:121
double sigma_0_had() const
Definition: SM_Z.hpp:165
const double delta_alpha_OS
Definition: SM_Z.hpp:53
double error_gamma_s() const
Definition: SM_Z.hpp:120
constexpr int kRows
Definition: SM_Z.hpp:56
constexpr double table_5[kRows][kCols]
Coefficient data in Table 5 with MeV converted to GeV.
Definition: SM_Z.hpp:59
double pow(const double &a)
Outputs a^i.
double error_gamma_mu() const
Definition: SM_Z.hpp:110
double error_gamma_t() const
Definition: SM_Z.hpp:118
double error_gamma_inv() const
Definition: SM_Z.hpp:114
double error_gamma_tau() const
Definition: SM_Z.hpp:111
double error_BR_nu_tau() const
Definition: SM_Z.hpp:146
double error_BR_d() const
Definition: SM_Z.hpp:150
double error_gamma_u() const
Definition: SM_Z.hpp:116
double error_gamma_nu_tau() const
Definition: SM_Z.hpp:115
double gamma_nu_e() const
Definition: SM_Z.hpp:96
TODO: see if we can use this one:
Definition: Analysis.hpp:33
double error_BR_u() const
Definition: SM_Z.hpp:147
double error_BR_tau() const
Definition: SM_Z.hpp:142