NPbase.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include "NPbase.h"
9 
11 : StandardModel()
12 {
13 }
14 
16 {
17  bool SMup = StandardModel::PostUpdate();
18  trueSM = *this;
19  return (SMup);
20 }
21 
22 double NPbase::Mw() const
23 {
24  double myMw = trueSM.Mw();
25 
26  double alpha = trueSM.alphaMz();
27  double c2 = trueSM.cW2();
28  double s2 = trueSM.sW2();
29 
30  myMw *= 1.0 - alpha / 4.0 / (c2 - s2)
31  *(obliqueS() - 2.0 * c2 * obliqueT() - (c2 - s2) * obliqueU() / 2.0 / s2)
32  - s2 / 2.0 / (c2 - s2) * DeltaGF();
33 
34  //std::cout << "Mw: c_S=" << - alpha/4.0/(c2-s2) << std::endl;
35  //std::cout << "Mw: c_T=" << - alpha/4.0/(c2-s2)*(- 2.0*c2) << std::endl;
36  //std::cout << "Mw: c_U=" << - alpha/4.0/(c2-s2)*(- (c2-s2)/2.0/s2) << std::endl;
37 
38  return myMw;
39 }
40 
41 double NPbase::GammaW() const
42 {
43  double Gamma_W = trueSM.GammaW();
44 
45  double alpha = trueSM.alphaMz();
46  double c2 = trueSM.cW2();
47  double s2 = trueSM.sW2();
48 
49  Gamma_W *= 1.0 - 3.0 * alpha / 4.0 / (c2 - s2)
50  *(obliqueS() - 2.0 * c2 * obliqueT() - (c2 - s2) * obliqueU() / 2.0 / s2)
51  - (1.0 + c2) / 2.0 / (c2 - s2) * DeltaGF();
52 
53  //std::cout << "Gw: c_S=" << - 3.0*alpha/4.0/(c2-s2) << std::endl;
54  //std::cout << "Gw: c_T=" << - 3.0*alpha/4.0/(c2-s2)*(- 2.0*c2) << std::endl;
55  //std::cout << "Gw: c_U=" << - 3.0*alpha/4.0/(c2-s2)*(- (c2-s2)/2.0/s2) << std::endl;
56 
57  return Gamma_W;
58 }
59 
60 double NPbase::deltaGV_f(const Particle f) const
61 {
62  if (f.is("TOP")) return 0.;
63 
64  /* SM values */
65  double alpha = trueSM.alphaMz();
66  double sW2SM = trueSM.sW2();
67  double cW2SM = trueSM.cW2();
68  double gVSM = trueSM.gV_f(f).real();
69  double gASM = trueSM.gA_f(f).real();
70 
71  return ( gVSM * (alpha * obliqueT() - DeltaGF()) / 2.0
72  + (gVSM - gASM) / 4.0 / sW2SM / (cW2SM - sW2SM)
73  *(alpha * (obliqueS() - 4.0 * cW2SM * sW2SM * obliqueT())
74  + 4.0 * cW2SM * sW2SM * DeltaGF()));
75 }
76 
78 {
79  return ( trueSM.gV_f(f) + deltaGV_f(f));
80 }
81 
82 double NPbase::deltaGA_f(const Particle f) const
83 {
84  if (f.is("TOP")) return 0.;
85  /* SM values */
86  double alpha = trueSM.alphaMz();
87  double gASM = trueSM.gA_f(f).real();
88 
89  return ( gASM * (alpha * obliqueT() - DeltaGF()) / 2.0);
90 }
91 
93 {
94  return ( trueSM.gA_f(f) + deltaGA_f(f));
95 }
96 
98 {
99  return ( gA_f(f) * gA_f(f) / f.getIsospin() / f.getIsospin());
100 
101 }
102 
104 {
105  return ( (1.0 - gV_f(f) / gA_f(f)) / (4.0 * fabs(f.getCharge()) * sW2()));
106 }
107 
109 
110 double NPbase::deltaGamma_Z() const
111 {
112  double deltaGamma_Z = 0.;
113  bool nonZeroNP = false;
114 
115  double delGVl[6], delGAl[6], delGVq[6], delGAq[6];
116  for (int p = 0; p < 6; ++p) {
117  delGVl[p] = deltaGV_f(leptons[p]);
118  delGAl[p] = deltaGA_f(leptons[p]);
119  delGVq[p] = deltaGV_f(quarks[p]);
120  delGAq[p] = deltaGA_f(quarks[p]);
121  if (delGVl[p] != 0.0 || delGAl[p] != 0.0
122  || delGVq[p] != 0.0 || delGAq[p] != 0.0)
123  nonZeroNP = true;
124  }
125 
126  if (nonZeroNP) {
127  double gVf, gAf;
128  double deltaGl[6], deltaGq[6];
129  double delGammaZ = 0.0;
130  for (int p = 0; p < 6; ++p) {
131  gVf = trueSM.gV_f(leptons[p]).real();
132  gAf = trueSM.gA_f(leptons[p]).real();
133  deltaGl[p] = 2.0 * (gVf * delGVl[p] + gAf * delGAl[p]);
134 
135  gVf = trueSM.gV_f(quarks[p]).real();
136  gAf = trueSM.gA_f(quarks[p]).real();
137  deltaGq[p] = 2.0 * (gVf * delGVq[p] + gAf * delGAq[p]);
138 
139  delGammaZ += deltaGl[p] + 3.0 * deltaGq[p];
140  }
141 
142  double sW2_SM = trueSM.sW2();
143  double cW2_SM = trueSM.cW2();
144  deltaGamma_Z = alphaMz() * Mz / 12.0 / sW2_SM / cW2_SM
145  * delGammaZ;
146  }
147 
148  return deltaGamma_Z;
149 }
150 
151 double NPbase::Gamma_Z() const
152 {
153  return (trueSM.Gamma_Z() + deltaGamma_Z());
154 }
155 
157 {
158  double sigma_had = 0.;
159  bool nonZeroNP = false;
160 
161  double delGVl[6], delGAl[6], delGVq[6], delGAq[6];
162  for (int p = 0; p < 6; ++p) {
163  delGVl[p] = deltaGV_f(leptons[p]);
164  delGAl[p] = deltaGA_f(leptons[p]);
165  delGVq[p] = deltaGV_f(quarks[p]);
166  delGAq[p] = deltaGA_f(quarks[p]);
167  if (delGVl[p] != 0.0 || delGAl[p] != 0.0
168  || delGVq[p] != 0.0 || delGAq[p] != 0.0)
169  nonZeroNP = true;
170  }
171 
172  if (nonZeroNP) {
173  double gVf, gAf;
174  double Gl[6], deltaGl[6], Gq[6], deltaGq[6];
175  double Gq_sum = 0.0, delGq_sum = 0.0;
176  double Gf_sum = 0.0, delGf_sum = 0.0;
177  for (int p = 0; p < 6; ++p) {
178  gVf = trueSM.gV_f(leptons[p]).real();
179  gAf = trueSM.gA_f(leptons[p]).real();
180  Gl[p] = gVf * gVf + gAf*gAf;
181  deltaGl[p] = 2.0 * (gVf * delGVl[p] + gAf * delGAl[p]);
182 
183  gVf = trueSM.gV_f(quarks[p]).real();
184  gAf = trueSM.gA_f(quarks[p]).real();
185  Gq[p] = gVf * gVf + gAf*gAf;
186  deltaGq[p] = 2.0 * (gVf * delGVq[p] + gAf * delGAq[p]);
187 
188  Gq_sum += 3.0 * Gq[p];
189  Gf_sum += Gl[p] + 3.0 * Gq[p];
190  delGq_sum += 3.0 * deltaGq[p];
191  delGf_sum += deltaGl[p] + 3.0 * deltaGq[p];
192  }
193 
194  sigma_had = 12.0 * M_PI / Mz / Mz
195  * Gl[ELECTRON] * Gq_sum / Gf_sum / Gf_sum
196  * (deltaGl[ELECTRON] / Gl[ELECTRON]
197  + delGq_sum / Gq_sum - 2.0 * delGf_sum / Gf_sum);
198  }
199 
200  return sigma_had;
201 }
202 
203 double NPbase::sigma0_had() const
204 {
205  return (trueSM.sigma0_had() + deltaSigmaHadron());
206 }
207 
209 {
210  double sin2_theta_eff = 0.;
211  double delGVf = deltaGV_f(leptons[ELECTRON]);
212  double delGAf = deltaGA_f(leptons[ELECTRON]);
213  if (delGVf != 0.0 || delGAf != 0.0) {
214  double gVf = trueSM.gV_f(leptons[ELECTRON]).real();
215  double gAf = trueSM.gA_f(leptons[ELECTRON]).real();
216  double delGVfOverGAf = (gAf * delGVf - gVf * delGAf) / gAf / gAf;
217 
218  sin2_theta_eff = -delGVfOverGAf / 4.0;
219  }
220  return sin2_theta_eff;
221 }
222 
223 double NPbase::sin2thetaEff(const Particle f) const
224 {
225  if (f.is("ELECTRON"))
226  return (trueSM.sin2thetaEff(f) + deltaSin2thetaEff_e());
227  else
228  return (trueSM.sin2thetaEff(f));
229 }
230 
231 double NPbase::deltaA_f(const Particle f) const
232 {
233  double dAf = 0.;
234  double delGVf = deltaGV_f(f);
235  double delGAf = deltaGA_f(f);
236  if (delGVf != 0.0 || delGAf != 0.0) {
237  double gVf = trueSM.gV_f(f).real();
238  double gAf = trueSM.gA_f(f).real();
239  double Gf = gVf * gVf + gAf*gAf;
240  double delGVfOverGAf = (gAf * delGVf - gVf * delGAf) / gAf / gAf;
241 
242  dAf = -2.0 * (gVf * gVf - gAf * gAf) * gAf * gAf / Gf / Gf*delGVfOverGAf;
243  }
244 
245  return dAf;
246 }
247 
248 double NPbase::A_f(const Particle f) const
249 {
250  return (trueSM.A_f(f) + deltaA_f(f));
251 }
252 
253 double NPbase::deltaAFB(const Particle f) const
254 {
255  double dAFB = 0.;
256  double delGVf = deltaGV_f(f);
257  double delGAf = deltaGA_f(f);
258  if (f.is("LEPTON")) {
259  if (delGVf != 0.0 || delGAf != 0.0) {
260  double gVe = trueSM.gV_f(f).real();
261  double gAe = trueSM.gA_f(f).real();
262  double Ge = gVe * gVe + gAe*gAe;
263  double delGVeOverGAe = (gAe * delGVf - gVe * delGAf) / gAe / gAe;
264  dAFB = -6.0 * gVe * gAe * (gVe * gVe - gAe * gAe) * gAe * gAe / Ge / Ge / Ge*delGVeOverGAe;
265  }
266  } else {
267  double delGVe = deltaGV_f(leptons[ELECTRON]);
268  double delGAe = deltaGA_f(leptons[ELECTRON]);
269  if (delGVe != 0.0 || delGAe != 0.0 || delGVf != 0.0 || delGAf != 0.0) {
270  double gVe = trueSM.gV_f(leptons[ELECTRON]).real();
271  double gAe = trueSM.gA_f(leptons[ELECTRON]).real();
272  double Ge = gVe * gVe + gAe*gAe;
273  double delGVeOverGAe = (gAe * delGVe - gVe * delGAe) / gAe / gAe;
274  //
275  double gVf = trueSM.gV_f(f).real();
276  double gAf = trueSM.gA_f(f).real();
277  double Gf = gVf * gVf + gAf*gAf;
278  double delGVfOverGAf = (gAf * delGVf - gVf * delGAf) / gAf / gAf;
279 
280  dAFB = -(3.0 * gVf * gAf * (gVe * gVe - gAe * gAe) * gAe * gAe / Gf / Ge / Ge * delGVeOverGAe
281  + 3.0 * gVe * gAe * (gVf * gVf - gAf * gAf) * gAf * gAf / Ge / Gf / Gf * delGVfOverGAf);
282  }
283  }
284 
285  return dAFB;
286 }
287 
288 double NPbase::AFB(const Particle f) const
289 {
290  return (trueSM.AFB(f) + deltaAFB(f));
291 }
292 
293 double NPbase::deltaR0_f(const Particle f) const
294 {
295  double dR0_f = 0., delGVe = 0., delGAe = 0., deltaGe = 0., Ge = 0.;
296  bool nonZeroNP = false;
297  if (f.is("LEPTON")) {
298  delGVe = deltaGV_f(leptons[ELECTRON]);
299  delGAe = deltaGA_f(leptons[ELECTRON]);
300  if (delGVe != 0.0 || delGAe != 0.0) nonZeroNP = true;
301  }
302 
303  double delGVq[6], delGAq[6];
304  for (int q = 0; q < 6; ++q) {
305  delGVq[q] = deltaGV_f(quarks[q]);
306  delGAq[q] = deltaGA_f(quarks[q]);
307  if (delGVq[q] != 0.0 || delGAq[q] != 0.0) nonZeroNP = true;
308  }
309 
310  if (nonZeroNP) {
311  double CF = 1.;
312  if (f.is("LEPTON")) {
313  double gVe = trueSM.gV_f(leptons[ELECTRON]).real();
314  double gAe = trueSM.gA_f(leptons[ELECTRON]).real();
315  Ge = gVe * gVe + gAe*gAe;
316  deltaGe = 2.0 * (gVe * delGVe + gAe * delGAe);
317  CF = 3.;
318  }
319  double Gq[6], deltaGq[6];
320  double gVq, gAq;
321  double Gq_sum = 0.0, delGq_sum = 0.0;
322  for (int q = 0; q < 6; ++q) {
323  gVq = trueSM.gV_f(quarks[q]).real();
324  gAq = trueSM.gA_f(quarks[q]).real();
325  Gq[q] = gVq * gVq + gAq*gAq;
326  deltaGq[q] = 2.0 * (gVq * delGVq[q] + gAq * delGAq[q]);
327 
328  Gq_sum += CF * Gq[q];
329  delGq_sum += CF * deltaGq[q];
330  }
331  if (f.is("LEPTON"))
332  dR0_f = delGq_sum / Ge - Gq_sum * deltaGe / Ge / Ge;
333  else
334  dR0_f = deltaGq[f.getIndex() - 6] / Gq_sum
335  - Gq[f.getIndex() - 6] * delGq_sum / Gq_sum / Gq_sum;
336  }
337  return dR0_f;
338 }
339 
340 double NPbase::R0_f(const Particle f) const
341 {
342  return (trueSM.R0_f(f) + deltaR0_f(f));
343 }
NPbase()
The default constructor.
Definition: NPbase.cpp:10
virtual double deltaSin2thetaEff_e() const
The new physics contribution to the effective leptonic weak angle at the pole.
Definition: NPbase.cpp:208
virtual double obliqueU() const
The oblique parameter .
Definition: NPbase.h:132
virtual double deltaAFB(const Particle f) const
The new physics contribution to the forward-backward asymmetry in at the -pole, .
Definition: NPbase.cpp:253
virtual double deltaR0_f(const Particle f) const
The new physics contribution to the ratio or , for leptons or quarks, respectively.
Definition: NPbase.cpp:293
virtual bool PostUpdate()
The post-update method for StandardModel.
virtual double sW2(const double Mw_i) const
The square of the sine of the weak mixing angle in the on-shell scheme, denoted as ...
virtual double sigma0_had() const
The cross section for the process at the pole, .
Definition: NPbase.cpp:203
virtual gslpp::complex gA_f(const Particle f) const
The effective leptonic neutral-current axial-vector coupling in the SM.
A class for particles.
Definition: Particle.h:26
virtual double obliqueS() const
The oblique parameter .
Definition: NPbase.h:114
virtual gslpp::complex gV_f(const Particle f) const
The total (SM+NP) contribution to the neutral-current vector coupling .
Definition: NPbase.cpp:77
virtual double GammaW() const
The total width of the boson, .
Definition: NPbase.cpp:41
virtual double deltaGV_f(const Particle f) const
New physics contribution to the neutral-current vector coupling .
Definition: NPbase.cpp:60
virtual double Gamma_Z() const
The total decay width of the boson, .
Definition: NPbase.cpp:151
StandardModel trueSM
Definition: NPbase.h:543
const double & real() const
virtual double sin2thetaEff(const Particle f) const
The effective weak mixing angle for at the the -mass scale.
int getIndex() const
Definition: Particle.h:160
A model class for the Standard Model.
virtual double sigma0_had() const
The hadronic cross section for at the -pole, .
virtual double DeltaGF() const
New physics contribution to the Fermi constant.
Definition: NPbase.h:103
virtual double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
virtual double obliqueT() const
The oblique parameter .
Definition: NPbase.h:123
bool is(std::string name_i) const
Definition: Particle.cpp:23
double Mz
The mass of the boson in GeV.
double sW2() const
virtual double AFB(const Particle f) const
The forward-backward asymmetry in at the -pole, .
Definition: NPbase.cpp:288
virtual double GammaW(const Particle fi, const Particle fj) const
A partial decay width of the boson decay into a SM fermion pair.
double getCharge() const
A get method to access the particle charge.
Definition: Particle.h:97
virtual double deltaSigmaHadron() const
The new physics contribution to the cross section for the process at the pole, .
Definition: NPbase.cpp:156
double delGammaZ
The theoretical uncertainty in , denoted as , in GeV.
virtual gslpp::complex rhoZ_f(const Particle f) const
The effective neutral-current coupling including SM plus NP contributions.
Definition: NPbase.cpp:97
Particle leptons[6]
An array of Particle objects for the leptons.
virtual bool PostUpdate()
The post-update method for NPbase.
Definition: NPbase.cpp:15
virtual double AFB(const Particle f) const
virtual double Gamma_Z() const
The total decay width of the boson, .
virtual double A_f(const Particle f) const
The left-right asymmetry in at the -pole, .
Definition: NPbase.cpp:248
virtual gslpp::complex gV_f(const Particle f) const
The effective leptonic neutral-current vector coupling in the SM.
virtual double Mw() const
The mass of the boson, .
Definition: NPbase.cpp:22
virtual double deltaGamma_Z() const
The new physics contribution to the total decay width of the boson, .
Definition: NPbase.cpp:110
virtual double sin2thetaEff(const Particle f) const
The leptonic effective weak mixing angle at the the pole.
Definition: NPbase.cpp:223
virtual double R0_f(const Particle f) const
The ratio or , for leptons or quarks, respectively.
Definition: NPbase.cpp:340
virtual double A_f(const Particle f) const
The left-right asymmetry in at the -pole, .
virtual gslpp::complex kappaZ_f(const Particle f) const
The effective neutral-current coupling including SM plus NP contributions.
Definition: NPbase.cpp:103
virtual double cW2(const double Mw_i) const
The square of the cosine of the weak mixing angle in the on-shell scheme, denoted as ...
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
virtual double R0_f(const Particle f) const
The ratio .
double alphaMz() const
The electromagnetic coupling at the -mass scale, .
virtual gslpp::complex gA_f(const Particle f) const
The total (SM+NP) contribution to the neutral-current axial-vector coupling .
Definition: NPbase.cpp:92
double getIsospin() const
A get method to access the particle isospin.
Definition: Particle.h:115
virtual double deltaA_f(const Particle f) const
The new physics contribution to the left-right asymmetry in at the -pole, .
Definition: NPbase.cpp:231
virtual double deltaGA_f(const Particle f) const
New physics contribution to the neutral-current axial-vector coupling .
Definition: NPbase.cpp:82