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
9#include "LEP2TwoFermions.h"
10
11
13: SM(SM_i)
14{
15}
16
17
19
20double 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
32double 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
51double 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
62double 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
80double 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
91double 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
109double 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
120double 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
138double 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
151double 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
160double 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
174double 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
227double 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
237double 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
255double 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
277double 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
292double 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
@ FULLNLO
Definition: OrderScheme.h:38
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
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
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
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
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
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
An observable class for the total decay width of the boson.
Definition: GammaZ.h:32
double dsigma_l_box(const QCD::lepton l, const double mf, const double s, const double cosTheta, const double Mw, const double GammaZ) const
double QCD_FSR_forSigma(const double s) const
const StandardModel & SM
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
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
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
double G_3prime_l(const QCD::lepton l, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
double dsigma_q_box(const QCD::quark q, const double mf, const double s, const double cosTheta, const double Mw, const double GammaZ) const
double H_ISR_FB(const double x, const double s) const
double QCD_FSR_forAFB(const QCD::quark q, const double mf, const double s) const
double AFB_q(const QCD::quark q, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
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
double sigma_l(const QCD::lepton l, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
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
double H_ISR(const double x, const double s) const
double G_3prime_q(const QCD::quark q, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
double sigma_q(const QCD::quark q, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
double QED_FSR_forSigma(const double s, const double Qf) const
double alpha_at_s(const double s) const
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
LEP2TwoFermions(const StandardModel &SM_i)
LEP2TwoFermions constructor.
double AFB_l(const QCD::lepton l, const double mf, const double s, const double Mw, const double GammaZ, const bool bWeak) const
An observable class for the -boson mass.
Definition: Mw.h:22
double getIsospin() const
A get method to access the particle isospin.
Definition: Particle.h:115
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
double getCharge() const
A get method to access the particle charge.
Definition: Particle.h:97
quark
An enum type for quarks.
Definition: QCD.h:323
@ BOTTOM
Definition: QCD.h:329
@ TOP
Definition: QCD.h:328
const double getMtpole() const
A get method to access the pole mass of the top quark.
Definition: QCD.h:600
lepton
An enum type for leptons.
Definition: QCD.h:310
@ ELECTRON
Definition: QCD.h:312
const Particle & getQuarks(const QCD::quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:536
A model class for the Standard Model.
const Particle & getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
const double ale_OS(const double mu, orders order=FULLNLO) const
The running electromagnetic coupling in the on-shell scheme.
const double Als(const double mu, const orders order, const bool Nf_thr, const bool qed_flag) const
The running QCD coupling in the scheme including QED corrections.
EWSMTwoFermionsLEP2 * getMyTwoFermionsLEP2() const
A get method to retrieve the member pointer of type EWSMTwoFermionsLEP2.
const double getAle() const
A get method to retrieve the fine-structure constant .
Test Observable.
Test Observable.