a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
LEP2TwoFermions.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 "EWSMTwoFermionsLEP2.h"
9 #include "LEP2TwoFermions.h"
10 
11 
13 : SM(SM_i)
14 {
15 }
16 
17 
19 
20 double LEP2TwoFermions::dsigma_l(const QCD::lepton l, const double mf,
21  const double s, const double cosTheta,
22  const double Mw, const double GammaZ,
23  const bool bWeak) const
24 {
25  double I3f = SM.getLeptons(l).getIsospin();
26  double Qf = SM.getLeptons(l).getCharge();
27 
28  return ( dsigma(s, cosTheta, Mw, GammaZ, I3f, Qf, mf, 0.0, 1.0, bWeak) );
29 }
30 
31 
32 double LEP2TwoFermions::dsigma_q(const QCD::quark q, const double mf,
33  const double s, const double cosTheta,
34  const double Mw, const double GammaZ,
35  const bool bWeak) const
36 {
37  double I3f = SM.getQuarks(q).getIsospin();
38  double Qf = SM.getQuarks(q).getCharge();
39  double mfp;
40  if (q==SM.TOP)
41  throw std::runtime_error("Error in LEP2TwoFermions::sigma_q()");
42  else if (q==SM.BOTTOM)
43  mfp = SM.getMtpole();
44  else
45  mfp = 0.0;
46 
47  return ( dsigma(s, cosTheta, Mw, GammaZ, I3f, Qf, mf, mfp, 3.0, bWeak) );
48 }
49 
50 
51 double LEP2TwoFermions::dsigma_l_box(const QCD::lepton l, const double mf,
52  const double s, const double cosTheta,
53  const double Mw, const double GammaZ) const
54 {
55  double I3f = SM.getLeptons(l).getIsospin();
56  double Qf = SM.getLeptons(l).getCharge();
57 
58  return ( dsigma_box(s, cosTheta, Mw, GammaZ, I3f, Qf, mf, 0.0, 1.0) );
59 }
60 
61 
62 double LEP2TwoFermions::dsigma_q_box(const QCD::quark q, const double mf,
63  const double s, const double cosTheta,
64  const double Mw, const double GammaZ) const
65 {
66  double I3f = SM.getQuarks(q).getIsospin();
67  double Qf = SM.getQuarks(q).getCharge();
68  double mfp;
69  if (q==SM.TOP)
70  throw std::runtime_error("Error in LEP2TwoFermions::sigma_q()");
71  else if (q==SM.BOTTOM)
72  mfp = SM.getMtpole();
73  else
74  mfp = 0.0;
75 
76  return ( dsigma_box(s, cosTheta, Mw, GammaZ, I3f, Qf, mf, mfp, 3.0) );
77 }
78 
79 
80 double LEP2TwoFermions::sigma_l(const QCD::lepton l, const double mf,
81  const double s, const double Mw,
82  const double GammaZ, const bool bWeak) const
83 {
84  double I3f = SM.getLeptons(l).getIsospin();
85  double Qf = SM.getLeptons(l).getCharge();
86 
87  return ( sigma(s, Mw, GammaZ, I3f, Qf, mf, 0.0, 1.0, bWeak) );
88 }
89 
90 
91 double LEP2TwoFermions::sigma_q(const QCD::quark q, const double mf,
92  const double s, const double Mw,
93  const double GammaZ, const bool bWeak) const
94 {
95  double I3f = SM.getQuarks(q).getIsospin();
96  double Qf = SM.getQuarks(q).getCharge();
97  double mfp;
98  if (q==SM.TOP)
99  throw std::runtime_error("Error in LEP2TwoFermions::sigma_q()");
100  else if (q==SM.BOTTOM)
101  mfp = SM.getMtpole();
102  else
103  mfp = 0.0;
104 
105  return ( sigma(s, Mw, GammaZ, I3f, Qf, mf, mfp, 3.0, bWeak) );
106 }
107 
108 
109 double LEP2TwoFermions::AFB_l(const QCD::lepton l, const double mf,
110  const double s, const double Mw,
111  const double GammaZ, const bool bWeak) const
112 {
113  double I3f = SM.getLeptons(l).getIsospin();
114  double Qf = SM.getLeptons(l).getCharge();
115 
116  return AFB(s, Mw, GammaZ, I3f, Qf, mf, 0.0, bWeak);
117 }
118 
119 
120 double LEP2TwoFermions::AFB_q(const QCD::quark q, const double mf,
121  const double s, const double Mw,
122  const double GammaZ, const bool bWeak) const
123 {
124  double I3f = SM.getQuarks(q).getIsospin();
125  double Qf = SM.getQuarks(q).getCharge();
126  double mfp;
127  if (q==SM.TOP)
128  throw std::runtime_error("Error in LEP2TwoFermions::AFB_q()");
129  else if (q==SM.BOTTOM)
130  mfp = SM.getMtpole();
131  else
132  mfp = 0.0;
133 
134  return ( AFB(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak) );
135 }
136 
137 
138 double LEP2TwoFermions::QCD_FSR_forSigma(const double s) const
139 {
140  return ( 1.0 + SM.Als(sqrt(s), FULLNLO)/M_PI );
141 }
142 
143 
145  const double mf, const double s) const
146 {
147  return ( 1.0 - SM.Als(sqrt(s), FULLNLO)/M_PI*(1.0 - 16.0/3.0*mf/sqrt(s)) );
148 }
149 
150 
151 double LEP2TwoFermions::QED_FSR_forSigma(const double s, const double Qf) const
152 {
153  //double alpha = SM.getAle();
154  double alpha = alpha_at_s(s);
155 
156  return ( 1.0 + 3.0*alpha/(4.0*M_PI)*Qf*Qf );
157 }
158 
159 
160 double LEP2TwoFermions::H_ISR(const double x, const double s) const
161 {
162  double me = SM.getLeptons(SM.ELECTRON).getMass();
163  double alphaOverPi = SM.getAle()/M_PI; // alpha(0)/Pi
164  double L = log(s/(me*me));
165  double beta = 2.0*alphaOverPi*(L - 1.0);
166  double deltaVS_1 = 3.0/2.0*L + M_PI*M_PI/3.0 - 2.0;
167  double deltaH_1 = - (2.0 - x)*(L - 1.0);
168 
169  return ( beta*pow(x, beta-1.0)*(1.0 + alphaOverPi*deltaVS_1)
170  + alphaOverPi*deltaH_1 );
171 }
172 
173 
174 double LEP2TwoFermions::H_ISR_FB(const double x, const double s) const
175 {
176  double me = SM.getLeptons(SM.ELECTRON).getMass();
177  double alphaOverPi = SM.getAle()/M_PI; // alpha(0)/Pi
178  double L = log(s/(me*me));
179  double beta = 2.0*alphaOverPi*(L - 1.0);
180  double deltaVS_1 = 3.0/2.0*L + M_PI*M_PI/3.0 - 2.0;
181  double tmp = (1.0-x)/(1.0-x/2.0)/(1.0-x/2.0);
182  double deltaH_FB_1 = (1.0+(1.0-x)*(1.0-x))/x*tmp*(L - 1.0 - log(tmp))
183  - 2.0/x*(L - 1.0);
184 
185  return ( beta*pow(x, beta-1.0)*(1.0 + alphaOverPi*deltaVS_1)
186  + alphaOverPi*deltaH_FB_1 );
187 }
188 
189 
191  const double mf, const double s,
192  const double Mw, const double GammaZ,
193  const bool bWeak) const
194 {
195  double betaf = sqrt(1.0 - 4.0*mf*mf/s);
196  double I3f = SM.getLeptons(l).getIsospin();
197  double Qf = SM.getLeptons(l).getCharge();
198  double G3 = SM.getMyTwoFermionsLEP2()->G_3_noBox(s, Mw, GammaZ, I3f, Qf, mf, 0.0, bWeak);
199 
200  return ( betaf*betaf*G3 );
201 }
202 
203 
205  const double mf, const double s,
206  const double Mw, const double GammaZ,
207  const bool bWeak) const
208 {
209  double betaf = sqrt(1.0 - 4.0*mf*mf/s);
210  double I3f = SM.getQuarks(q).getIsospin();
211  double Qf = SM.getQuarks(q).getCharge();
212  double mfp;
213  if (q==SM.TOP)
214  throw std::runtime_error("Error in LEP2TwoFermions::G_3prime_q()");
215  else if (q==SM.BOTTOM)
216  mfp = SM.getMtpole();
217  else
218  mfp = 0.0;
219  double G3 = SM.getMyTwoFermionsLEP2()->G_3_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
220 
221  return ( betaf*betaf*G3 );
222 }
223 
224 
226 
227 double LEP2TwoFermions::alpha_at_s(const double s) const
228 {
229  double alpha;
230  //alpha = SM.getAle()/complex(1.0715119759, -0.0186242179, false).real(); // for debug, s=(200GeV)^2
231  alpha = SM.ale_OS(sqrt(s), FULLNLO);
232 
233  return alpha;
234 }
235 
236 
237 double LEP2TwoFermions::dsigma(const double s, const double cosTheta,
238  const double Mw, const double GammaZ,
239  const double I3f, const double Qf,
240  const double mf, const double mfp,
241  const double Ncf, const bool bWeak) const
242 {
243  double betaf = sqrt(1.0 - 4.0*mf*mf/s);
244  double G1 = SM.getMyTwoFermionsLEP2()->G_1_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
245  double G2 = SM.getMyTwoFermionsLEP2()->G_2_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
246  double G3 = SM.getMyTwoFermionsLEP2()->G_3_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
247 
248  return ( M_PI*SM.getAle()*SM.getAle()/s*Ncf*betaf
249  *( G1*(1.0 + cosTheta*cosTheta)/2.0
250  + 2.0*mf*mf/s*G2*(1.0 - cosTheta*cosTheta)
251  + betaf*G3*cosTheta ) );
252 }
253 
254 
255 double LEP2TwoFermions::dsigma_box(const double s, const double cosTheta,
256  const double Mw, const double GammaZ,
257  const double I3f, const double Qf,
258  const double mf, const double mfp,
259  const double Ncf) const
260 {
261  double betaf = sqrt(1.0 - 4.0*mf*mf/s);
262 
263  //double t = mf*mf - s/2.0*(1.0 - betaf*cosTheta);
264  double t = - s/2.0*(1.0 - betaf*cosTheta);
265 
266  double G1 = SM.getMyTwoFermionsLEP2()->G_1_box(s, t, Mw, GammaZ, I3f, Qf, mf, mfp);
267  double G2 = SM.getMyTwoFermionsLEP2()->G_2_box(s, t, Mw, GammaZ, I3f, Qf, mf, mfp);
268  double G3 = SM.getMyTwoFermionsLEP2()->G_3_box(s, t, Mw, GammaZ, I3f, Qf, mf, mfp);
269 
270  return ( M_PI*SM.getAle()*SM.getAle()/s*Ncf*betaf
271  *( G1*(1.0 + cosTheta*cosTheta)/2.0
272  + 2.0*mf*mf/s*G2*(1.0 - cosTheta*cosTheta)
273  + betaf*G3*cosTheta ) );
274 }
275 
276 
277 double LEP2TwoFermions::sigma(const double s, const double Mw,
278  const double GammaZ, const double I3f,
279  const double Qf, const double mf,
280  const double mfp, const double Ncf,
281  const bool bWeak) const
282 {
283  double betaf = sqrt(1.0 - 4.0*mf*mf/s);
284  double G1 = SM.getMyTwoFermionsLEP2()->G_1_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
285  double G2 = SM.getMyTwoFermionsLEP2()->G_2_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
286 
287  return ( 4.0*M_PI*SM.getAle()*SM.getAle()/(3.0*s)*Ncf*betaf
288  *(G1 + 2.0*mf*mf/s*G2) );
289 }
290 
291 
292 double LEP2TwoFermions::AFB(const double s, const double Mw,
293  const double GammaZ, const double I3f,
294  const double Qf, const double mf,
295  const double mfp, const bool bWeak) const
296 {
297  double betaf = sqrt(1.0 - 4.0*mf*mf/s);
298  double G1 = SM.getMyTwoFermionsLEP2()->G_1_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
299  double G2 = SM.getMyTwoFermionsLEP2()->G_2_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
300  double G3 = SM.getMyTwoFermionsLEP2()->G_3_noBox(s, Mw, GammaZ, I3f, Qf, mf, mfp, bWeak);
301 
302  return ( 3.0/4.0*betaf*G3/(G1 + 2.0*mf*mf/s*G2) );
303 }
304 
LEP2TwoFermions::AFB_q
double AFB_q(const QCD::quark q, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:120
QCD::BOTTOM
Definition: QCD.h:329
LEP2TwoFermions::QED_FSR_forSigma
double QED_FSR_forSigma(const double s, const double Qf) const
Definition: LEP2TwoFermions.cpp:151
EWSMTwoFermionsLEP2::G_1_box
double G_1_box(const double s, const double t, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWWbox=true, const bool bZZbox=true) const
Definition: EWSMTwoFermionsLEP2.cpp:112
LEP2TwoFermions::dsigma_l
double dsigma_l(const QCD::lepton l, const double mf, const double s, const double cosTheta, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:20
LEP2TwoFermions::G_3prime_q
double G_3prime_q(const QCD::quark q, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:204
EWSMTwoFermionsLEP2::G_3_box
double G_3_box(const double s, const double t, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWWbox=true, const bool bZZbox=true) const
Definition: EWSMTwoFermionsLEP2.cpp:254
LEP2TwoFermions::H_ISR_FB
double H_ISR_FB(const double x, const double s) const
Definition: LEP2TwoFermions.cpp:174
LEP2TwoFermions::AFB_l
double AFB_l(const QCD::lepton l, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:109
LEP2TwoFermions::dsigma
double dsigma(const double s, const double cosTheta, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const double Ncf, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:237
LEP2TwoFermions::G_3prime_l
double G_3prime_l(const QCD::lepton l, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:190
GammaZ
An observable class for the total decay width of the boson.
Definition: GammaZ.h:32
gslpp::log
complex log(const complex &z)
Definition: gslpp_complex.cpp:342
QCD::ELECTRON
Definition: QCD.h:312
Particle::getIsospin
double getIsospin() const
A get method to access the particle isospin.
Definition: Particle.h:115
LEP2TwoFermions::alpha_at_s
double alpha_at_s(const double s) const
Definition: LEP2TwoFermions.cpp:227
StandardModel
A model class for the Standard Model.
Definition: StandardModel.h:477
LEP2TwoFermions::QCD_FSR_forAFB
double QCD_FSR_forAFB(const QCD::quark q, const double mf, const double s) const
Definition: LEP2TwoFermions.cpp:144
LEP2TwoFermions::sigma_q
double sigma_q(const QCD::quark q, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:91
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:533
Particle::getMass
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
LEP2TwoFermions::SM
const StandardModel & SM
Definition: LEP2TwoFermions.h:225
EWSMTwoFermionsLEP2::G_1_noBox
double G_1_noBox(const double s, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWeak) const
Definition: EWSMTwoFermionsLEP2.cpp:82
QCD::TOP
Definition: QCD.h:328
gslpp::pow
complex pow(const complex &z1, const complex &z2)
Definition: gslpp_complex.cpp:395
gslpp::sqrt
complex sqrt(const complex &z)
Definition: gslpp_complex.cpp:385
QCD::getMtpole
double getMtpole() const
A get method to access the pole mass of the top quark.
Definition: QCD.h:588
Particle::getCharge
double getCharge() const
A get method to access the particle charge.
Definition: Particle.h:97
EWSMTwoFermionsLEP2::G_2_noBox
double G_2_noBox(const double s, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWeak) const
Definition: EWSMTwoFermionsLEP2.cpp:92
LEP2TwoFermions::dsigma_l_box
double dsigma_l_box(const QCD::lepton l, const double mf, const double s, const double cosTheta, const double Mw, const double GammaZ) const
Definition: LEP2TwoFermions.cpp:51
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:602
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
QCD::quark
quark
An enum type for quarks.
Definition: QCD.h:323
EWSMTwoFermionsLEP2::G_3_noBox
double G_3_noBox(const double s, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWeak) const
Definition: EWSMTwoFermionsLEP2.cpp:102
LEP2TwoFermions::H_ISR
double H_ISR(const double x, const double s) const
Definition: LEP2TwoFermions.cpp:160
EWSMTwoFermionsLEP2::G_2_box
double G_2_box(const double s, const double t, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWWbox=true, const bool bZZbox=true) const
Definition: EWSMTwoFermionsLEP2.cpp:183
LEP2TwoFermions::sigma_l
double sigma_l(const QCD::lepton l, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:80
LEP2TwoFermions::AFB
double AFB(const double s, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:292
LEP2TwoFermions::QCD_FSR_forSigma
double QCD_FSR_forSigma(const double s) const
Definition: LEP2TwoFermions.cpp:138
Mw
An observable class for the -boson mass.
Definition: Mw.h:22
LEP2TwoFermions::LEP2TwoFermions
LEP2TwoFermions(const StandardModel &SM_i)
LEP2TwoFermions constructor.
Definition: LEP2TwoFermions.cpp:12
EWSMTwoFermionsLEP2.h
LEP2TwoFermions::dsigma_q_box
double dsigma_q_box(const QCD::quark q, const double mf, const double s, const double cosTheta, const double Mw, const double GammaZ) const
Definition: LEP2TwoFermions.cpp:62
LEP2TwoFermions::sigma
double sigma(const double s, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const double Ncf, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:277
LEP2TwoFermions::dsigma_box
double dsigma_box(const double s, const double cosTheta, const double Mw, const double GammaZ, const double I3f, const double Qf, const double mf, const double mfp, const double Ncf) const
Definition: LEP2TwoFermions.cpp:255
LEP2TwoFermions::dsigma_q
double dsigma_q(const QCD::quark q, const double mf, const double s, const double cosTheta, const double Mw, const double GammaZ, const bool bWeak) const
Definition: LEP2TwoFermions.cpp:32
StandardModel::getMyTwoFermionsLEP2
EWSMTwoFermionsLEP2 * getMyTwoFermionsLEP2() const
A get method to retrieve the member pointer of type EWSMTwoFermionsLEP2.
Definition: StandardModel.h:989
LEP2TwoFermions.h
FULLNLO
Definition: OrderScheme.h:37
StandardModel::getAle
double getAle() const
A get method to retrieve the fine-structure constant .
Definition: StandardModel.h:748
QCD::lepton
lepton
An enum type for leptons.
Definition: QCD.h:310
StandardModel::getLeptons
Particle getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
Definition: StandardModel.h:712