a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
EWSMOneLoopEW.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 <stdexcept>
9#include "EWSMOneLoopEW.h"
10
12: cache(cache_i)
13{
14}
15
16
18
19double EWSMOneLoopEW::DeltaAlpha_l(const double s) const
20{
21 double Mz = cache.getSM().getMz();
22
23 double oneLoop[3];
26 oneLoop[1] = -PibarGammaGamma_fer(Mz, s, cache.getSM().getLeptons(StandardModel::MU)).real()
28 oneLoop[2] = -PibarGammaGamma_fer(Mz, s, cache.getSM().getLeptons(StandardModel::TAU)).real()
30
31 return ( cache.getSM().getAle() / 4.0 / M_PI
32 * (oneLoop[0] + oneLoop[1] + oneLoop[2]));
33}
34
35double EWSMOneLoopEW::DeltaAlpha_t(const double s) const
36{
37 double xt = s / cache.getSM().getMtpole() / cache.getSM().getMtpole();
38 double tmp = 1.0 + xt * 0.1071;
39 tmp *= -4.0 / 45.0 * cache.getSM().getAle() / M_PI*xt;
40 return tmp;
41}
42
43double EWSMOneLoopEW::DeltaRho(const double Mw_i) const
44{
45
46 return ( -cache.getSM().getAle() / 4.0 / M_PI / cache.getSM().sW2(Mw_i) * DeltaRhobar(cache.getSM().getMz(), Mw_i));
47}
48
49double EWSMOneLoopEW::DeltaR_rem(const double Mw_i) const
50{
51 double Mz = cache.getSM().getMz();
52 double Mz2 = Mz*Mz;
53 double Mw = Mw_i;
54 double sW2 = cache.getSM().sW2(Mw);
55 double cW2 = cache.getSM().cW2(Mw);
56
57 /* Logarithm */
58 double log_cW2 = cache.log_cW2(Mw);
59
60 double PiGammaGamma_t_0 = PibarGammaGamma_fer(Mz, 0.0, cache.getSM().getQuarks(QCD::TOP)).real();
61 double PiGammaGamma_l5q_Mz2 = PibarGammaGamma_fer(Mz, Mz2).real()
62 - PibarGammaGamma_fer(Mz, Mz2, cache.getSM().getQuarks(QCD::TOP)).real();
63
64 double DR_rem = -2.0 / 3.0 * sW2 + sW2 * PiGammaGamma_t_0
65 + sW2 * PiGammaGamma_l5q_Mz2 + DeltaRhobarW(Mz, Mw)
66 + (4.0 - 25.0 / 4.0 * cW2 + 3.0 / 4.0 * cW2 * cW2 + 9.0 * cW2 / 4.0 / sW2)
67 * log_cW2
68 + 11.0 / 2.0 - 5.0 / 8.0 * cW2 * (1.0 + cW2);
69 DR_rem *= cache.getSM().getAle() / 4.0 / M_PI / sW2;
70 return DR_rem;
71}
72
73double EWSMOneLoopEW::DeltaRbar_rem(const double Mw_i) const
74{
75 double Mz = cache.getSM().getMz();
76 double Mw = Mw_i;
77 double sW2 = cache.getSM().sW2(Mw);
78 double cW2 = cache.getSM().cW2(Mw);
79
80 /* Logarithm */
81 double log_cW2 = cache.log_cW2(Mw);
82
83 double DRbar_rem = -2.0 / 3.0 * sW2 + DeltaRhobarW(Mz, Mw)
84 + (4.0 - 25.0 / 4.0 * cW2 + 3.0 / 4.0 * cW2 * cW2 + 9.0 * cW2 / 4.0 / sW2)
85 * log_cW2
86 + 11.0 / 2.0 - 5.0 / 8.0 * cW2 * (1.0 + cW2);
87 DRbar_rem *= cache.getSM().getAle() / 4.0 / M_PI / sW2;
88 return DRbar_rem;
89}
90
91gslpp::complex EWSMOneLoopEW::deltaRho_rem_tmp(const gslpp::complex uf,
92 const double Mw_i) const
93{
94 double Mz = cache.getSM().getMz();
95 double Mw = Mw_i;
96 double sW2 = cache.getSM().sW2(Mw);
97 double cW2 = cache.getSM().cW2(Mw);
98
99 /* Logarithm */
100 double log_cW2 = cache.log_cW2(Mw);
101
102 gslpp::complex dRho_rem(0.0, 0.0, false);
103 dRho_rem = -(SigmabarPrime_ZZ_bos_Mz2(Mz, Mw).real()
104 + SigmabarPrime_ZZ_fer_Mz2(Mz, Mw).real()) / cW2
105 - DeltaRhobarW(Mz, Mw) + 2.0 * uf
106 - (1.0 / 6.0 / cW2 - 1.0 / 3.0 + 3.0 / 4.0 * cW2 * (1.0 + cW2) + 9.0 * cW2 / 4.0 / sW2)
107 * log_cW2
108 - 11.0 / 2.0 + 5.0 / 8.0 * cW2 * (1.0 + cW2);
109 dRho_rem *= cache.getSM().getAle() / 4.0 / M_PI / sW2;
110 return dRho_rem;
111}
112
113gslpp::complex EWSMOneLoopEW::deltaRho_rem_f(const Particle f, const double Mw_i) const
114{
115 if (f.is("TOP")) return ( gslpp::complex(0.0, 0.0, false));
116
117 double Mz = cache.getSM().getMz();
118 double Mw = Mw_i;
119 gslpp::complex uf = (3.0 * cache.v_f(f, Mw) * cache.v_f(f, Mw) + cache.a_f(f) * cache.a_f(f))
120 / 4.0 / cache.getSM().cW2(Mw) * FZ(Mz*Mz, Mw) + FW(Mz*Mz, f, Mw);
121 return ( deltaRho_rem_tmp(uf, Mw));
122}
123
124gslpp::complex EWSMOneLoopEW::deltaKappa_rem_tmp(const double deltaf, const gslpp::complex uf,
125 const double Mw_i) const
126{
127 double Mz = cache.getSM().getMz();
128 double Mw = Mw_i;
129 double sW2 = cache.getSM().sW2(Mw);
130 double cW2 = cache.getSM().cW2(Mw);
131
132 /* Logarithm */
133 double log_cW2 = cache.log_cW2(Mw);
134
135 gslpp::complex dKappa_rem(0.0, 0.0, false);
136 dKappa_rem = (PibarZgamma_bos(Mz, Mz*Mz, Mw) + PibarZgamma_fer(Mz, Mz*Mz, Mw))
137 + deltaf * deltaf / 4.0 / cW2 * FZ(Mz*Mz, Mw) - uf
138 + (1.0 / 12.0 / cW2 + 4.0 / 3.0) * log_cW2;
139 dKappa_rem *= cache.getSM().getAle() / 4.0 / M_PI / sW2;
140 return dKappa_rem;
141}
142
143gslpp::complex EWSMOneLoopEW::deltaKappa_rem_f(const Particle f, const double Mw_i) const
144{
145 if (f.is("TOP")) return ( gslpp::complex(0.0, 0.0, false));
146
147 double Mz = cache.getSM().getMz();
148 double Mw = Mw_i;
149 gslpp::complex uf = (3.0 * cache.v_f(f, Mw) * cache.v_f(f, Mw) + cache.a_f(f) * cache.a_f(f))
150 / 4.0 / cache.getSM().cW2(Mw) * FZ(Mz*Mz, Mw) + FW(Mz*Mz, f, Mw);
151
152 return ( deltaKappa_rem_tmp(cache.delta_f(f, Mw), uf, Mw));
153}
154
155double EWSMOneLoopEW::rho_GammaW_tmp(const double Qi, const double Qj,
156 const double Mw_i) const
157{
158 double QiQj = Qi*Qj;
159 double Mz = cache.getSM().getMz();
160 double Mw = Mw_i;
161 double sW2 = cache.getSM().sW2(Mw);
162 double cW2 = cache.getSM().cW2(Mw);
163
164 /* Logarithm and one-loop functions */
165 double log_cW2 = cache.log_cW2(Mw);
166 gslpp::complex B0_Mw2_Mw2_Mz2_Mw2 = cache.B0_Mw2_Mw2_Mz2_Mw2(Mw);
167 gslpp::complex C0_Mw2_Mw2_0_Mz2 = cache.C0_Mw2_Mw2_0_Mz2(Mw);
168
169 double V1 = FZa_0(Mw*Mw, Mw).real() - 3.0 / 2.0;
170 double V2 = -2.0 * (2.0 + cW2) * Mz * Mz * C0_Mw2_Mw2_0_Mz2.real()
171 - (1.0 / 12.0 / cW2 / cW2 + 5.0 / 3.0 / cW2 + 1.0) * B0_Mw2_Mw2_Mz2_Mw2.real()
172 + (1.0 / 12.0 / cW2 / cW2 + 1.0 / cW2 + 1.0) * log_cW2
173 + 1.0 / 12.0 / cW2 / cW2 + 13.0 / 12.0 / cW2 + 59.0 / 18.0;
174
175 double deltafij_W, deltafij_QED;
176 deltafij_W = -DeltaRhobarW(Mw, Mw)
179 + 5.0 / 8.0 * cW2 * (1.0 + cW2) - 11.0 / 2.0 - 9.0 * cW2 / 4.0 / sW2 * log_cW2
180 + (-1.0 + 1.0 / 2.0 / cW2 + 2.0 * sW2 * sW2 / cW2 * QiQj)*(V1 + 3.0 / 2.0)
181 + 2.0 * cW2 * (V2 + 3.0 / 2.0);
182 deltafij_W *= cache.getSM().getAle() / 4.0 / M_PI / sW2;
183
184 deltafij_QED = 85.0 / 18.0 - M_PI * M_PI / 3.0 + 3.0 / 4.0 * QiQj;
185 deltafij_QED *= cache.getSM().getAle() / M_PI;
186
187 return ( 1.0 + deltafij_W + deltafij_QED);
188}
189
190double EWSMOneLoopEW::rho_GammaW(const Particle fi, const Particle fj, const double Mw_i) const
191{
192 if (!((fi.is("NEUTRINO_1") && fj.is("ELECTRON")) || (fi.is("NEUTRINO_2") && fj.is("MU"))
193 || (fi.is("NEUTRINO_3") && fj.is("TAU")) || (fi.is("UP") && fj.is("DOWN"))
194 || (fi.is("CHARM") && fj.is("STRANGE")) || (fi.is("TOP") && fj.is("BOTTOM"))))
195 throw std::runtime_error("EWSMOneLoopEW::rho_GammaW(): Wrong arguments");
196 double Mw = Mw_i;
197 return ( rho_GammaW_tmp(cache.Q_f(fi), cache.Q_f(fj), Mw));
198}
199
200
202
203gslpp::complex EWSMOneLoopEW::SigmabarWW_bos(const double mu, const double s, const double Mw_i) const
204{
205 double mu2 = mu*mu;
206 double Mw = Mw_i;
207 double Mw2 = Mw*Mw;
208 double Mz = cache.getSM().getMz();
209 double Mz2 = Mz*Mz;
210 double mh = cache.getSM().getMHl();
211 double mh2 = mh*mh;
212 double sW2 = cache.getSM().sW2(Mw);
213 double cW2 = cache.getSM().cW2(Mw);
214 double cW4 = cW2*cW2;
215 double RW = pow(Mw, 2.0) / s;
216 double RW2 = RW*RW;
217 double RW3 = RW2*RW;
218 double rw = pow(mh / Mw, 2.0);
219
220 /* Loop functions */
221 double A0_Mw2, A0_Mz2, A0_mh2;
222 gslpp::complex B0_s_Mz2_Mw2, B0_s_0_Mw2, B0_s_mh2_Mw2;
223 gslpp::complex B0p_s_Mz2_Mw2, B0p_s_mh2_Mw2; /* for s==0.0 */
224 if (mu == Mz && s == 0.0) {
225 A0_Mw2 = cache.A0_Mz2_Mw2(Mw);
226 A0_Mz2 = cache.A0_Mz2_Mz2();
227 A0_mh2 = cache.A0_Mz2_mh2();
228 B0_s_Mz2_Mw2 = cache.B0_Mz2_0_Mz2_Mw2(Mw);
229 B0_s_0_Mw2 = cache.B0_Mz2_0_0_Mw2(Mw);
230 B0_s_mh2_Mw2 = cache.B0_Mz2_0_mh2_Mw2(Mw);
231 B0p_s_Mz2_Mw2 = cache.B0p_Mz2_0_Mz2_Mw2(Mw);
232 B0p_s_mh2_Mw2 = cache.B0p_Mz2_0_mh2_Mw2(Mw);
233 } else if (mu == Mz && s == Mw2) {
234 A0_Mw2 = cache.A0_Mz2_Mw2(Mw);
235 A0_Mz2 = cache.A0_Mz2_Mz2();
236 A0_mh2 = cache.A0_Mz2_mh2();
237 B0_s_Mz2_Mw2 = cache.B0_Mz2_Mw2_Mz2_Mw2(Mw);
238 B0_s_0_Mw2 = cache.B0_Mz2_Mw2_0_Mw2(Mw);
239 B0_s_mh2_Mw2 = cache.B0_Mz2_Mw2_mh2_Mw2(Mw);
240 } else {
241 A0_Mw2 = cache.getPV().A0(mu2, Mw2);
242 A0_Mz2 = cache.getPV().A0(mu2, Mz2);
243 A0_mh2 = cache.getPV().A0(mu2, mh2);
244 B0_s_Mz2_Mw2 = cache.getPV().B0(mu2, s, Mz2, Mw2);
245 B0_s_0_Mw2 = cache.getPV().B0(mu2, s, 0.0, Mw2);
246 B0_s_mh2_Mw2 = cache.getPV().B0(mu2, s, mh2, Mw2);
247 B0p_s_Mz2_Mw2 = cache.getPV().B0p(mu2, s, Mz2, Mw2);
248 B0p_s_mh2_Mw2 = cache.getPV().B0p(mu2, s, mh2, Mw2);
249 }
250
251 gslpp::complex Sigma(0.0, 0.0, false);
252 if (s == 0.0) {
253 Sigma = Mw2 * (2.0 / 3.0 * (1.0 / cW2 - 4.0 - 4.0 * cW2 + cW4) * B0_s_Mz2_Mw2
254 + (1.0 / 12.0 / cW4 + 2.0 / 3.0 / cW2 - 3.0 / 2.0
255 + 2.0 / 3.0 * cW2 + 1.0 / 12.0 * cW4) * Mw2 * B0p_s_Mz2_Mw2
256 - 17.0 * sW2 / 6.0 * B0_s_0_Mw2 + 5.0 / 12.0 * sW2
257 - 1.0 / 12.0 * (-10.0 + 2.0 * rw) * B0_s_mh2_Mw2
258 + 1.0 / 12.0 * pow(1.0 - rw, 2.0) * Mw2 * B0p_s_mh2_Mw2
259 - 1.0 / 12.0 * (24.0 - 2.0 * cW2 + cW4) * A0_Mw2 / Mw2
260 - 1.0 / 6.0 * A0_mh2 / Mw2
261 - 1.0 / 12.0 * (1.0 + 14.0 * cW2 + 9.0 * cW4) * A0_Mz2 / Mw2
262 - 1.0 / 6.0 * (1.0 / cW2 + 22.0 + cW2 + cW4 + rw));
263 } else {
264 Sigma = Mw2 * (((1.0 / 12.0 / cW4 + 2.0 / 3.0 / cW2 - 3.0 / 2.0 + 2.0 / 3.0 * cW2
265 + 1.0 / 12.0 * cW4) * RW
266 + 2.0 / 3.0 * (1.0 / cW2 - 4.0 - 4.0 * cW2 + cW4)
267 - (3.0 / 2.0 + 8.0 / 3.0 * cW2 + 3.0 / 2.0 * cW4) / RW
268 + 2.0 / 3.0 * cW2 * (1.0 + cW2) / RW2 + 1.0 / 12.0 * cW4 / RW3) * B0_s_Mz2_Mw2
269 - sW2 / 6.0 * (-5.0 * RW + 17.0 + 17.0 / RW - 5.0 / RW2) * B0_s_0_Mw2
270 - 1.0 / 12.0 * (-pow(1.0 - rw, 2.0) * RW - 10.0 + 2.0 * rw - 1.0 / RW)
271 * B0_s_mh2_Mw2
272 - 1.0 / 12.0 * ((1.0 / cW2 - 2.0 + cW2 - cW4 + rw) * RW
273 + 24.0 - 2.0 * cW2 + cW4
274 + (-10.0 + cW2 + cW4) / RW - cW4 / RW2) * A0_Mw2 / Mw2
275 - 1.0 / 12.0 * (-(1.0 / cW2 + 9.0 - 9.0 * cW2 - cW4) * RW
276 + 1.0 + 14.0 * cW2 + 9.0 * cW4
277 + cW2 / RW * (1.0 - 9.0 * cW2) - cW4 / RW2) * A0_Mz2 / Mw2
278 + 1.0 / 12.0 * ((mh2 - Mw2) / s - 2.0) * A0_mh2 / Mw2
279 - 1.0 / 6.0 * (1.0 / cW2 + 22.0 + cW2 + cW4 + rw)
280 + 1.0 / 9.0 * ((6.0 + 3.0 * cW2 + 7.0 / 2.0 * cW4) / RW
281 - (1.0 + 3.0 / 2.0 * cW2 + 5.0 / 2.0 * cW4) / RW2
282 + cW4 / 2.0 / RW3));
283 }
284 return Sigma;
285}
286
287gslpp::complex EWSMOneLoopEW::SigmabarWW_fer(const double mu, const double s, const double Mw_i) const
288{
289 double ml2[6], mq2[6];
290 for (int i = 0; i < 6; i++) {
291 ml2[i] = cache.mf2(cache.getSM().getLeptons((QCD::lepton) i));
292 mq2[i] = cache.mf2(cache.getSM().getQuarks((QCD::quark) i), mu);
293 }
294 double mu2 = mu*mu;
295 double Mw = Mw_i;
296 double Mw2 = Mw*Mw;
297 double Mz = cache.getSM().getMz();
298
299 /* Loop functions */
300 gslpp::complex B1_s_ml2_mlprime2[3], B1_s_mq2_mqprime2[3];
301 gslpp::complex B1_s_mlprime2_ml2[3], B1_s_mqprime2_mq2[3];
302 gslpp::complex Bf_s_mlprime2_ml2[3], Bf_s_mqprime2_mq2[3];
303 if (mu == Mz && s == 0.0) {
304 for (int gen = 0; gen < 3; gen++) {
305 B1_s_ml2_mlprime2[gen] = cache.B1_Mz2_0_mf2_mfprime2(gen);
306 B1_s_mq2_mqprime2[gen] = cache.B1_Mz2_0_mf2_mfprime2(gen + 3);
307 B1_s_mlprime2_ml2[gen] = cache.B1_Mz2_0_mfprime2_mf2(gen);
308 B1_s_mqprime2_mq2[gen] = cache.B1_Mz2_0_mfprime2_mf2(gen + 3);
309 Bf_s_mlprime2_ml2[gen] = cache.Bf_Mz2_0_mfprime2_mf2(gen);
310 Bf_s_mqprime2_mq2[gen] = cache.Bf_Mz2_0_mfprime2_mf2(gen + 3);
311 }
312 } else if (mu == Mz && s == Mw2) {
313 for (int gen = 0; gen < 3; gen++) {
314 B1_s_ml2_mlprime2[gen] = cache.B1_Mz2_Mw2_mf2_mfprime2(gen, Mw);
315 B1_s_mq2_mqprime2[gen] = cache.B1_Mz2_Mw2_mf2_mfprime2(gen + 3, Mw);
316 B1_s_mlprime2_ml2[gen] = cache.B1_Mz2_Mw2_mfprime2_mf2(gen, Mw);
317 B1_s_mqprime2_mq2[gen] = cache.B1_Mz2_Mw2_mfprime2_mf2(gen + 3, Mw);
318 Bf_s_mlprime2_ml2[gen] = cache.Bf_Mz2_Mw2_mfprime2_mf2(gen, Mw);
319 Bf_s_mqprime2_mq2[gen] = cache.Bf_Mz2_Mw2_mfprime2_mf2(gen + 3, Mw);
320 }
321 } else {
322 for (int gen = 0; gen < 3; gen++) {
323 B1_s_ml2_mlprime2[gen] = cache.getPV().B1(mu2, s, ml2[2 * gen], ml2[2 * gen + 1]);
324 B1_s_mq2_mqprime2[gen] = cache.getPV().B1(mu2, s, mq2[2 * gen], mq2[2 * gen + 1]);
325 B1_s_mlprime2_ml2[gen] = cache.getPV().B1(mu2, s, ml2[2 * gen + 1], ml2[2 * gen]);
326 B1_s_mqprime2_mq2[gen] = cache.getPV().B1(mu2, s, mq2[2 * gen + 1], mq2[2 * gen]);
327 Bf_s_mlprime2_ml2[gen] = cache.getPV().Bf(mu2, s, ml2[2 * gen + 1], ml2[2 * gen]);
328 Bf_s_mqprime2_mq2[gen] = cache.getPV().Bf(mu2, s, mq2[2 * gen + 1], mq2[2 * gen]);
329 }
330 }
331
332 gslpp::complex Sigma(0.0, 0.0, false);
333 double mf2, mfprime2;
334 for (int gen = 0; gen < 3; gen++) {
335 mf2 = ml2[2 * gen];
336 mfprime2 = ml2[2 * gen + 1];
337 if (s != 0.0) Sigma += -s * Bf_s_mlprime2_ml2[gen];
338 Sigma += mfprime2 * B1_s_ml2_mlprime2[gen] + mf2 * B1_s_mlprime2_ml2[gen];
339 //
340 mf2 = mq2[2 * gen];
341 mfprime2 = mq2[2 * gen + 1];
342 if (s != 0.0) Sigma += 3.0 * (-s * Bf_s_mqprime2_mq2[gen]);
343 Sigma += 3.0 * (mfprime2 * B1_s_mq2_mqprime2[gen] + mf2 * B1_s_mqprime2_mq2[gen]);
344 }
345 return Sigma;
346}
347
348gslpp::complex EWSMOneLoopEW::SigmabarZZ_bos(const double mu, const double s, const double Mw_i) const
349{
350 double mu2 = mu*mu;
351 double Mw = Mw_i;
352 double Mw2 = Mw*Mw;
353 double Mz = cache.getSM().getMz();
354 double Mz2 = Mz*Mz;
355 double mh = cache.getSM().getMHl();
356 double mh2 = mh*mh;
357 double cW2 = cache.getSM().cW2(Mw);
358 double cW4 = cW2*cW2;
359 double RW = pow(Mw, 2.0) / s;
360 double RW2 = RW*RW;
361 double RW3 = RW2*RW;
362 double rw = pow(mh / Mw, 2.0);
363
364 /* Loop functions */
365 double A0_Mw2, A0_Mz2, A0_mh2;
366 gslpp::complex B0_s_Mw2_Mw2, B0_s_mh2_Mz2;
367 if (mu == Mz && s == Mz2) {
368 A0_Mw2 = cache.A0_Mz2_Mw2(Mw);
369 A0_Mz2 = cache.A0_Mz2_Mz2();
370 A0_mh2 = cache.A0_Mz2_mh2();
371 B0_s_Mw2_Mw2 = cache.B0_Mz2_Mz2_Mw2_Mw2(Mw);
372 B0_s_mh2_Mz2 = cache.B0_Mz2_Mz2_mh2_Mz2();
373 } else {
374 A0_Mw2 = cache.getPV().A0(mu2, Mw2);
375 A0_Mz2 = cache.getPV().A0(mu2, Mz2);
376 A0_mh2 = cache.getPV().A0(mu2, mh2);
377 B0_s_Mw2_Mw2 = cache.getPV().B0(mu2, s, Mw2, Mw2);
378 B0_s_mh2_Mz2 = cache.getPV().B0(mu2, s, mh2, Mz2);
379 }
380
381 gslpp::complex Sigma(0.0, 0.0, false);
382 if (s == 0.0) {
383 throw std::runtime_error("EWSMOneLoopEW::SigmabarZZ_bos(): Undefined for s=0.0");
384 } else {
385 Sigma = Mw2 * (-cW4 * (4.0 + 17.0 / 3.0 / RW - 4.0 / 3.0 / RW2 - 1.0 / 12.0 / RW3)
386 * B0_s_Mw2_Mw2
387 + 1.0 / 12.0 * ((1.0 / cW4 - 2.0 / cW2 * rw + rw * rw) * RW
388 + 10.0 / cW2 - 2.0 * rw + 1.0 / RW) * B0_s_mh2_Mz2
389 - cW2 * (4.0 - 4.0 / 3.0 / RW - 1.0 / 6.0 / RW2) * A0_Mw2 / Mz2
390 + 1.0 / 12.0 * ((Mz2 - mh2) / s + 1.0)*(A0_Mz2 - A0_mh2) / cW2 / Mz2
391 - 1.0 / 12.0 * A0_mh2 / cW2 / Mz2
392 - (1.0 / 6.0 / cW2 + 4.0 * cW4 + 1.0 / 6.0 * rw
393 - (1.0 / 18.0 + 4.0 / 3.0 * cW4) / RW
394 + 1.0 / 9.0 * cW4 * (5.0 - 1.0 / 2.0 / RW) / RW2));
395 }
396 return Sigma;
397}
398
399gslpp::complex EWSMOneLoopEW::SigmabarZZ_fer(const double mu, const double s, const double Mw_i) const
400{
401 double ml2[6], mq2[6];
402 for (int i = 0; i < 6; i++) {
403 ml2[i] = cache.mf2(cache.getSM().getLeptons((QCD::lepton) i));
404 mq2[i] = cache.mf2(cache.getSM().getQuarks((QCD::quark) i), mu);
405 }
406 double mu2 = mu*mu;
407 double Mw = Mw_i;
408 double Mz = cache.getSM().getMz();
409 double Mz2 = Mz*Mz;
410
411 /* Loop functions */
412 gslpp::complex Bf_s_ml2_ml2[6], Bf_s_mq2_mq2[6];
413 gslpp::complex B0_s_ml2_ml2[6], B0_s_mq2_mq2[6];
414 if (mu == Mz && s == Mz2) {
415 for (int i = 0; i < 6; i++) {
416 Bf_s_ml2_ml2[i] = cache.Bf_Mz2_Mz2_mf2_mf2(cache.getSM().getLeptons((QCD::lepton) i));
417 Bf_s_mq2_mq2[i] = cache.Bf_Mz2_Mz2_mf2_mf2(cache.getSM().getQuarks((QCD::quark) i));
418 B0_s_ml2_ml2[i] = cache.B0_Mz2_Mz2_mf2_mf2(cache.getSM().getLeptons((QCD::lepton) i));
419 B0_s_mq2_mq2[i] = cache.B0_Mz2_Mz2_mf2_mf2(cache.getSM().getQuarks((QCD::quark) i));
420 }
421 } else {
422 for (int i = 0; i < 6; i++) {
423 Bf_s_ml2_ml2[i] = cache.getPV().Bf(mu2, s, ml2[i], ml2[i]);
424 Bf_s_mq2_mq2[i] = cache.getPV().Bf(mu2, s, mq2[i], mq2[i]);
425 B0_s_ml2_ml2[i] = cache.getPV().B0(mu2, s, ml2[i], ml2[i]);
426 B0_s_mq2_mq2[i] = cache.getPV().B0(mu2, s, mq2[i], mq2[i]);
427 }
428 }
429
430 gslpp::complex Sigma(0.0, 0.0, false);
431 if (s == 0.0) {
432 throw std::runtime_error("EWSMOneLoopEW::SigmaZZ_fer(): Undefined for s=0.0");
433 } else {
434 double mf2, vf2, af2;
435 for (int i = 0; i < 6; i++) {
436 mf2 = ml2[i];
437 vf2 = pow(cache.v_f(cache.getSM().getLeptons((QCD::lepton) i), Mw), 2.0);
438 af2 = pow(cache.a_f(cache.getSM().getLeptons((QCD::lepton) i)), 2.0);
439 if (s != 0.0) Sigma += -(vf2 + af2) * s * Bf_s_ml2_ml2[i];
440 Sigma += -2.0 * af2 * mf2 * B0_s_ml2_ml2[i];
441 //
442 mf2 = mq2[i];
443 vf2 = pow(cache.v_f(cache.getSM().getQuarks((QCD::quark) i), Mw), 2.0);
444 af2 = pow(cache.a_f(cache.getSM().getQuarks((QCD::quark) i)), 2.0);
445 if (s != 0.0) Sigma += -3.0 * (vf2 + af2) * s * Bf_s_mq2_mq2[i];
446 Sigma += -3.0 * 2.0 * af2 * mf2 * B0_s_mq2_mq2[i];
447 }
448 }
449 return Sigma;
450}
451
452gslpp::complex EWSMOneLoopEW::PibarGammaGamma_bos(const double mu, const double s, const double Mw_i) const
453{
454 double mu2 = mu*mu;
455 double Mw = Mw_i;
456 double Mw2 = Mw*Mw;
457 double Mz = cache.getSM().getMz();
458 double Mz2 = Mz*Mz;
459 double RW = pow(Mw, 2.0) / s;
460 double RW2 = RW*RW;
461 double RW3 = RW2*RW;
462
463 /* Loop functions */
464 double A0_Mw2;
465 gslpp::complex B0_s_Mw2_Mw2;
466 if (mu == Mz && s == Mz2) {
467 A0_Mw2 = cache.A0_Mz2_Mw2(Mw);
468 B0_s_Mw2_Mw2 = cache.B0_Mz2_Mz2_Mw2_Mw2(Mw);
469 } else {
470 A0_Mw2 = cache.getPV().A0(mu2, Mw2);
471 B0_s_Mw2_Mw2 = cache.getPV().B0(mu2, s, Mw2, Mw2);
472 }
473
474 gslpp::complex Pi(0.0, 0.0, false);
475 if (s == 0.0) {
476 Pi = 7.0 * log(Mw2 / mu / mu) - 2.0 / 3.0;
477 } else {
478 Pi = -RW * ((4.0 + 17.0 / 3.0 / RW - 4.0 / 3.0 / RW2 - 1.0 / 12.0 / RW3) * B0_s_Mw2_Mw2
479 + (4.0 - 4.0 / 3.0 / RW - 1.0 / 6.0 / RW2)*(A0_Mw2 / Mw2 + 1.0)
480 - 1.0 / 18.0 / RW2 * (1.0 / RW - 13.0));
481 }
482 return Pi;
483}
484
485gslpp::complex EWSMOneLoopEW::PibarGammaGamma_fer(const double mu, const double s, const Particle f) const
486{
487 // Neutrinos do not contribute, since Qf=0.
488 if (f.is("NEUTRINO_1") || f.is("NEUTRINO_2")
489 || f.is("NEUTRINO_3"))
490 return 0.0;
491
492 double mu2 = mu*mu;
493 double mf2 = cache.mf2(f, mu);
494 double Mz = cache.getSM().getMz();
495 double Mz2 = Mz*Mz;
496
497 /* Loop functions */
498 gslpp::complex Bf_s_mf2_mf2;
499 if (mu == Mz && s == Mz2) {
500 if (mf2 == 0.0) {
501 Bf_s_mf2_mf2 = 0.0;
502 } else {
503 Bf_s_mf2_mf2 = cache.Bf_Mz2_Mz2_mf2_mf2(f);
504 }
505 } else if (mu == Mz && s == 0.0) {
506 if (mf2 == 0.0) {
507 Bf_s_mf2_mf2 = 0.0;
508 } else {
509 Bf_s_mf2_mf2 = cache.Bf_Mz2_0_mf2_mf2(f);
510 }
511 } else {
512 if (mf2 == 0.0) {
513 Bf_s_mf2_mf2 = 0.0;
514 } else {
515 Bf_s_mf2_mf2 = cache.getPV().Bf(mu2, s, mf2, mf2);
516 }
517 }
518
519 double Qf = cache.Q_f(f);
520 double colorfactor = (f.is("QUARK") ? 3. : 1.);
521 return ( -4.0 * colorfactor * Qf * Qf * Bf_s_mf2_mf2);
522}
523
524gslpp::complex EWSMOneLoopEW::PibarGammaGamma_fer(const double mu, const double s) const
525{
526 gslpp::complex Pi(0.0, 0.0, false);
527 for (int i = 0; i < 6; i++) {
530 }
531 return Pi;
532}
533
534gslpp::complex EWSMOneLoopEW::PibarZgamma_bos(const double mu, const double s, const double Mw_i) const
535{
536 double Mw = Mw_i;
537 double cW2 = cache.getSM().cW2(Mw);
538 return ( PibarGammaGamma_bos(mu, s, Mw) * cW2);
539}
540
541gslpp::complex EWSMOneLoopEW::PibarZgamma_fer(const double mu, const double s, const double Mw_i) const
542{
543 double ml2[6], mq2[6];
544 for (int i = 0; i < 6; i++) {
545 ml2[i] = cache.mf2(cache.getSM().getLeptons((QCD::lepton) i));
546 mq2[i] = cache.mf2(cache.getSM().getQuarks((QCD::quark) i), mu);
547 }
548 double mu2 = mu*mu;
549 double Mz = cache.getSM().getMz();
550 double Mz2 = Mz*Mz;
551 double Mw = Mw_i;
552 double sW2 = cache.getSM().sW2(Mw);
553
554 /* Loop functions */
555 gslpp::complex Bf_s_ml2_ml2[6], Bf_s_mq2_mq2[6];
556 if (mu == Mz && s == Mz2) {
557 for (int i = 0; i < 6; i++) {
558 if (i == 0 || i == 2 || i == 4)
559 Bf_s_ml2_ml2[i] = 0.0; // Neutrinos do not contribute, since Ql=0.
560 else
561 Bf_s_ml2_ml2[i] = cache.Bf_Mz2_Mz2_mf2_mf2(cache.getSM().getLeptons((QCD::lepton) i));
562 Bf_s_mq2_mq2[i] = cache.Bf_Mz2_Mz2_mf2_mf2(cache.getSM().getQuarks((QCD::quark) i));
563 }
564 } else {
565 for (int i = 0; i < 6; i++) {
566 if (i == 0 || i == 2 || i == 4)
567 Bf_s_ml2_ml2[i] = 0.0; // Neutrinos do not contribute, since Ql=0.
568 else
569 Bf_s_ml2_ml2[i] = cache.getPV().Bf(mu2, s, ml2[i], ml2[i]);
570 Bf_s_mq2_mq2[i] = cache.getPV().Bf(mu2, s, mq2[i], mq2[i]);
571 }
572 }
573
574 gslpp::complex Pi(0.0, 0.0, false);
575 double Ql, Qq;
576 for (int i = 0; i < 6; i++) {
578 Pi += -(fabs(Ql) - 4.0 * sW2 * Ql * Ql) * Bf_s_ml2_ml2[i];
579 //
581 Pi += -3.0 * (fabs(Qq) - 4.0 * sW2 * Qq * Qq) * Bf_s_mq2_mq2[i];
582 }
583 return Pi;
584}
585
586
588
589gslpp::complex EWSMOneLoopEW::SigmabarPrime_WW_bos_Mw2(const double mu, const double Mw_i) const
590{
591 double mu2 = mu*mu;
592 double Mw = Mw_i;
593 double Mw2 = Mw*Mw;
594 double Mz = cache.getSM().getMz();
595 double Mz2 = Mz*Mz;
596 double mh = cache.getSM().getMHl();
597 double mh2 = mh*mh;
598 double sW2 = cache.getSM().sW2(Mw_i);
599 double cW2 = cache.getSM().cW2(Mw_i);
600 double cW4 = cW2*cW2;
601 double rw = mh2 / Mw2;
602 //double rz = mh2/Mz2;
603
604 /* Loop functions */
605 double A0_Mw2, A0_Mz2, A0_mh2;
606 gslpp::complex B0_Mw2_Mz2_Mw2, B0_Mw2_0_Mw2, B0_Mw2_mh2_Mw2;
607 gslpp::complex B0p_Mw2_Mz2_Mw2, B0p_Mw2_0_Mw2, B0p_Mw2_mh2_Mw2;
608 if (mu == Mw) {
609 A0_Mw2 = cache.A0_Mw2_Mw2(Mw);
610 A0_Mz2 = cache.A0_Mw2_Mz2(Mw);
611 A0_mh2 = cache.A0_Mw2_mh2(Mw);
612 B0_Mw2_Mz2_Mw2 = cache.B0_Mw2_Mw2_Mz2_Mw2(Mw);
613 B0_Mw2_0_Mw2 = cache.B0_Mw2_Mw2_0_Mw2(Mw);
614 B0_Mw2_mh2_Mw2 = cache.B0_Mw2_Mw2_mh2_Mw2(Mw);
615 B0p_Mw2_Mz2_Mw2 = cache.B0p_Mw2_Mw2_Mz2_Mw2(Mw);
616 B0p_Mw2_0_Mw2 = cache.B0p_Mw2_Mw2_0_Mw2(Mw);
617 B0p_Mw2_mh2_Mw2 = cache.B0p_Mw2_Mw2_mh2_Mw2(Mw);
618 } else {
619 A0_Mw2 = cache.getPV().A0(mu2, Mw2);
620 A0_Mz2 = cache.getPV().A0(mu2, Mz2);
621 A0_mh2 = cache.getPV().A0(mu2, mh2);
622 B0_Mw2_Mz2_Mw2 = cache.getPV().B0(mu2, Mw2, Mz2, Mw2);
623 B0_Mw2_0_Mw2 = cache.getPV().B0(mu2, Mw2, 0.0, Mw2);
624 B0_Mw2_mh2_Mw2 = cache.getPV().B0(mu2, Mw2, mh, Mw2);
625 B0p_Mw2_Mz2_Mw2 = cache.getPV().B0p(mu2, Mw2, Mz2, Mw2);
626 B0p_Mw2_0_Mw2 = cache.getPV().B0p(mu2, Mw2, 0.0, Mw2);
627 B0p_Mw2_mh2_Mw2 = cache.getPV().B0p(mu2, Mw2, mh2, Mw2);
628 }
629
630 gslpp::complex Sigma(0.0, 0.0, false);
631 Sigma = -(1.0 / 12.0 / cW4 + 2.0 / 3.0 / cW2 + 2.0 * cW2) * B0_Mw2_Mz2_Mw2
632 + (1.0 / 12.0 / cW4 + 4.0 / 3.0 / cW2 - 17.0 / 3.0 - 4.0 * cW2) * Mw2 * B0p_Mw2_Mz2_Mw2
633 - 2.0 * sW2 * B0_Mw2_0_Mw2 - 4.0 * sW2 * Mw2 * B0p_Mw2_0_Mw2
634 + rw / 6.0 * (1.0 - rw / 2.0) * B0_Mw2_mh2_Mw2
635 + (1.0 - rw / 3.0 + rw * rw / 12.0) * Mw2 * B0p_Mw2_mh2_Mw2
636 + (1.0 / cW2 + 8.0 + rw) / 12.0 * A0_Mw2 / Mw2
637 - (1.0 / cW2 + 9.0 - 8.0 * cW2 - 12.0 * cW4) / 12.0 * A0_Mz2 / Mw2
638 - (rw - 1.0) / 12.0 * A0_mh2 / Mw2 + 4.0 / 9.0;
639 return Sigma;
640}
641
642gslpp::complex EWSMOneLoopEW::SigmabarPrime_WW_fer_Mw2(const double mu, const double Mw_i) const
643{
644 double ml2[6], mq2[6];
645 for (int i = 0; i < 6; i++) {
646 ml2[i] = cache.mf2(cache.getSM().getLeptons((QCD::lepton) i));
647 mq2[i] = cache.mf2(cache.getSM().getQuarks((QCD::quark) i), mu);
648 }
649 double mu2 = mu*mu;
650 double Mw = Mw_i;
651 double Mw2 = Mw*Mw;
652
653 /* Loop functions */
654 gslpp::complex Bf_Mw2_mlprime2_ml2[3], Bf_Mw2_mqprime2_mq2[3];
655 gslpp::complex Bfp_Mw2_mlprime2_ml2[3], Bfp_Mw2_mqprime2_mq2[3];
656 gslpp::complex B1p_Mw2_mlprime2_ml2[3], B1p_Mw2_mqprime2_mq2[3];
657 gslpp::complex B1p_Mw2_ml2_mlprime2[3], B1p_Mw2_mq2_mqprime2[3];
658 if (mu == Mw) {
659 for (int gen = 0; gen < 3; gen++) {
660 Bf_Mw2_mlprime2_ml2[gen] = cache.Bf_Mw2_Mw2_mfprime2_mf2(gen, Mw);
661 Bf_Mw2_mqprime2_mq2[gen] = cache.Bf_Mw2_Mw2_mfprime2_mf2(gen + 3, Mw);
662 Bfp_Mw2_mlprime2_ml2[gen] = cache.Bfp_Mw2_Mw2_mfprime2_mf2(gen, Mw);
663 Bfp_Mw2_mqprime2_mq2[gen] = cache.Bfp_Mw2_Mw2_mfprime2_mf2(gen + 3, Mw);
664 B1p_Mw2_ml2_mlprime2[gen] = cache.B1p_Mw2_Mw2_mf2_mfprime2(gen, Mw);
665 B1p_Mw2_mq2_mqprime2[gen] = cache.B1p_Mw2_Mw2_mf2_mfprime2(gen + 3, Mw);
666 B1p_Mw2_mlprime2_ml2[gen] = cache.B1p_Mw2_Mw2_mfprime2_mf2(gen, Mw);
667 B1p_Mw2_mqprime2_mq2[gen] = cache.B1p_Mw2_Mw2_mfprime2_mf2(gen + 3, Mw);
668 }
669 } else {
670 for (int gen = 0; gen < 3; gen++) {
671 Bf_Mw2_mlprime2_ml2[gen] = cache.getPV().Bf(mu2, Mw2, ml2[2 * gen + 1], ml2[2 * gen]);
672 Bf_Mw2_mqprime2_mq2[gen] = cache.getPV().Bf(mu2, Mw2, mq2[2 * gen + 1], mq2[2 * gen]);
673 Bfp_Mw2_mlprime2_ml2[gen] = cache.getPV().Bfp(mu2, Mw2, ml2[2 * gen + 1], ml2[2 * gen]);
674 Bfp_Mw2_mqprime2_mq2[gen] = cache.getPV().Bfp(mu2, Mw2, mq2[2 * gen + 1], mq2[2 * gen]);
675 B1p_Mw2_ml2_mlprime2[gen] = cache.getPV().B1p(mu2, Mw2, ml2[2 * gen], ml2[2 * gen + 1]);
676 B1p_Mw2_mq2_mqprime2[gen] = cache.getPV().B1p(mu2, Mw2, mq2[2 * gen], mq2[2 * gen + 1]);
677 B1p_Mw2_mlprime2_ml2[gen] = cache.getPV().B1p(mu2, Mw2, ml2[2 * gen + 1], ml2[2 * gen]);
678 B1p_Mw2_mqprime2_mq2[gen] = cache.getPV().B1p(mu2, Mw2, mq2[2 * gen + 1], mq2[2 * gen]);
679 }
680 }
681
682 gslpp::complex Sigma(0.0, 0.0, false);
683 double mf2, mfprime2;
684 for (int gen = 0; gen < 3; gen++) {
685 mf2 = ml2[2 * gen];
686 mfprime2 = ml2[2 * gen + 1];
687 Sigma += -(Bf_Mw2_mlprime2_ml2[gen] + Mw2 * Bfp_Mw2_mlprime2_ml2[gen]);
688 Sigma += mfprime2 * B1p_Mw2_ml2_mlprime2[gen] + mf2 * B1p_Mw2_mlprime2_ml2[gen];
689 //
690 mf2 = mq2[2 * gen];
691 mfprime2 = mq2[2 * gen + 1];
692 Sigma += -3.0 * (Bf_Mw2_mqprime2_mq2[gen] + Mw2 * Bfp_Mw2_mqprime2_mq2[gen]);
693 Sigma += 3.0 * (mfprime2 * B1p_Mw2_mq2_mqprime2[gen] + mf2 * B1p_Mw2_mqprime2_mq2[gen]);
694 }
695 return Sigma;
696}
697
698gslpp::complex EWSMOneLoopEW::SigmabarPrime_ZZ_bos_Mz2(const double mu, const double Mw_i) const
699{
700 double mu2 = mu*mu;
701 double Mw = Mw_i;
702 double Mw2 = Mw*Mw;
703 double Mz = cache.getSM().getMz();
704 double Mz2 = Mz*Mz;
705 double mh = cache.getSM().getMHl();
706 double mh2 = mh*mh;
707 double cW2 = cache.getSM().cW2(Mw);
708 double cW4 = cW2*cW2;
709 double rw = mh2 / Mw2;
710 double rz = mh2 / Mz2;
711
712 /* Loop functions */
713 double A0_Mw2, A0_Mz2, A0_mh2;
714 gslpp::complex B0_Mz2_Mw2_Mw2, B0_Mz2_mh2_Mz2;
715 gslpp::complex B0p_Mz2_Mw2_Mw2, B0p_Mz2_mh2_Mz2;
716 if (mu == Mz) {
717 A0_Mw2 = cache.A0_Mz2_Mw2(Mw);
718 A0_Mz2 = cache.A0_Mz2_Mz2();
719 A0_mh2 = cache.A0_Mz2_mh2();
720 B0_Mz2_Mw2_Mw2 = cache.B0_Mz2_Mz2_Mw2_Mw2(Mw);
721 B0_Mz2_mh2_Mz2 = cache.B0_Mz2_Mz2_mh2_Mz2();
722 B0p_Mz2_Mw2_Mw2 = cache.B0p_Mz2_Mz2_Mw2_Mw2(Mw);
723 B0p_Mz2_mh2_Mz2 = cache.B0p_Mz2_Mz2_mh2_Mz2();
724 } else {
725 A0_Mw2 = cache.getPV().A0(mu2, Mw2);
726 A0_Mz2 = cache.getPV().A0(mu2, Mz2);
727 A0_mh2 = cache.getPV().A0(mu2, mh2);
728 B0_Mz2_Mw2_Mw2 = cache.getPV().B0(mu2, Mz2, Mw2, Mw2);
729 B0_Mz2_mh2_Mz2 = cache.getPV().B0(mu2, Mz2, mh2, Mz2);
730 B0p_Mz2_Mw2_Mw2 = cache.getPV().B0p(mu2, Mz2, Mw2, Mw2);
731 B0p_Mz2_mh2_Mz2 = cache.getPV().B0p(mu2, Mz2, mh2, Mz2);
732 }
733
734 gslpp::complex Sigma(0.0, 0.0, false);
735 Sigma = (1.0 / 4.0 / cW2 + 8.0 / 3.0 - 17.0 / 3.0 * cW2) * B0_Mz2_Mw2_Mw2
736 + (1.0 / 12.0 / cW2 + 4.0 / 3.0 - 17.0 / 3.0 * cW2 - 4.0 * cW4) * Mz2 * B0p_Mz2_Mw2_Mw2
737 + rw / 6.0 * (1.0 - rz / 2.0) * B0_Mz2_mh2_Mz2
738 + (1.0 - rz / 3.0 + rz * rz / 12.0) * Mz2 / cW2 * B0p_Mz2_mh2_Mz2
739 + (1.0 + 4.0 * cW2) / 3.0 / cW2 * A0_Mw2 / Mz2
740 - (1.0 - rz) / 12.0 / cW2 * (A0_Mz2 - A0_mh2) / Mz2
741 + 2.0 / 9.0 / cW2 - 10.0 / 9.0 + 4.0 / 3.0 * cW2;
742 Sigma *= cW2;
743 return Sigma;
744}
745
746gslpp::complex EWSMOneLoopEW::SigmabarPrime_ZZ_fer_Mz2(const double mu, const double Mw_i) const
747{
748 double ml2[6], mq2[6];
749 for (int i = 0; i < 6; i++) {
750 ml2[i] = cache.mf2(cache.getSM().getLeptons((QCD::lepton) i));
751 mq2[i] = cache.mf2(cache.getSM().getQuarks((QCD::quark) i), mu);
752 }
753 double mu2 = mu*mu;
754 double Mw = Mw_i;
755 double Mz = cache.getSM().getMz();
756 double Mz2 = Mz*Mz;
757
758 /* Loop functions */
759 gslpp::complex Bf_Mz2_ml2_ml2[6], Bf_Mz2_mq2_mq2[6];
760 gslpp::complex Bfp_Mz2_ml2_ml2[6], Bfp_Mz2_mq2_mq2[6];
761 gslpp::complex B0p_Mz2_ml2_ml2[6], B0p_Mz2_mq2_mq2[6];
762 if (mu == Mz) {
763 for (int i = 0; i < 6; i++) {
764 Bf_Mz2_ml2_ml2[i] = cache.Bf_Mz2_Mz2_mf2_mf2(cache.getSM().getLeptons((QCD::lepton) i));
765 Bf_Mz2_mq2_mq2[i] = cache.Bf_Mz2_Mz2_mf2_mf2(cache.getSM().getQuarks((QCD::quark) i));
766 Bfp_Mz2_ml2_ml2[i] = cache.Bfp_Mz2_Mz2_mf2_mf2(cache.getSM().getLeptons((QCD::lepton) i));
767 Bfp_Mz2_mq2_mq2[i] = cache.Bfp_Mz2_Mz2_mf2_mf2(cache.getSM().getQuarks((QCD::quark) i));
768 B0p_Mz2_ml2_ml2[i] = cache.B0p_Mz2_Mz2_mf2_mf2(cache.getSM().getLeptons((QCD::lepton) i));
769 B0p_Mz2_mq2_mq2[i] = cache.B0p_Mz2_Mz2_mf2_mf2(cache.getSM().getQuarks((QCD::quark) i));
770 }
771 } else {
772 for (int i = 0; i < 6; i++) {
773 Bf_Mz2_ml2_ml2[i] = cache.getPV().Bf(mu2, Mz2, ml2[i], ml2[i]);
774 Bf_Mz2_mq2_mq2[i] = cache.getPV().Bf(mu2, Mz2, mq2[i], mq2[i]);
775 Bfp_Mz2_ml2_ml2[i] = cache.getPV().Bfp(mu2, Mz2, ml2[i], ml2[i]);
776 Bfp_Mz2_mq2_mq2[i] = cache.getPV().Bfp(mu2, Mz2, mq2[i], mq2[i]);
777 B0p_Mz2_ml2_ml2[i] = cache.getPV().B0p(mu2, Mz2, ml2[i], ml2[i]);
778 B0p_Mz2_mq2_mq2[i] = cache.getPV().B0p(mu2, Mz2, mq2[i], mq2[i]);
779 }
780 }
781
782 gslpp::complex Sigma(0.0, 0.0, false);
783 double mf2, vf2, af2;
784 for (int i = 0; i < 6; i++) {
785 mf2 = ml2[i];
786 vf2 = pow(cache.v_f(cache.getSM().getLeptons((QCD::lepton) i), Mw), 2.0);
787 af2 = pow(cache.a_f(cache.getSM().getLeptons((QCD::lepton) i)), 2.0);
788 Sigma += -(vf2 + af2)*(Bf_Mz2_ml2_ml2[i] + Mz2 * Bfp_Mz2_ml2_ml2[i])
789 - 2.0 * af2 * mf2 * B0p_Mz2_ml2_ml2[i];
790 //
791 mf2 = mq2[i];
792 vf2 = pow(cache.v_f(cache.getSM().getQuarks((QCD::quark) i), Mw), 2.0);
793 af2 = pow(cache.a_f(cache.getSM().getQuarks((QCD::quark) i)), 2.0);
794 Sigma += -3.0 * (vf2 + af2)*(Bf_Mz2_mq2_mq2[i] + Mz2 * Bfp_Mz2_mq2_mq2[i])
795 - 6.0 * af2 * mf2 * B0p_Mz2_mq2_mq2[i];
796 }
797 return Sigma;
798}
799
800
802
803double EWSMOneLoopEW::DeltaRhobar(const double mu, const double Mw_i) const
804{
805 double Mw = Mw_i;
806 double Mz = cache.getSM().getMz();
807 return ( (SigmabarWW_bos(mu, Mw*Mw, Mw).real() + SigmabarWW_fer(mu, Mw*Mw, Mw).real()
808 - SigmabarZZ_bos(mu, Mz*Mz, Mw).real() - SigmabarZZ_fer(mu, Mz*Mz, Mw).real())
809 / Mw / Mw);
810}
811
812double EWSMOneLoopEW::DeltaRhobarW(const double mu, const double Mw_i) const
813{
814 double Mw = Mw_i;
815 return ( (SigmabarWW_bos(mu, 0.0, Mw).real() + SigmabarWW_fer(mu, 0.0, Mw).real()
816 - SigmabarWW_bos(mu, Mw*Mw, Mw).real() - SigmabarWW_fer(mu, Mw*Mw, Mw).real())
817 / Mw / Mw);
818}
819
820
822
823double EWSMOneLoopEW::TEST_DeltaRhobar_bos(const double Mw_i) const
824{
825 double Mz = cache.getSM().getMz();
826 double mh = cache.getSM().getMHl();
827 double Mw = Mw_i;
828 double sW2 = cache.getSM().sW2(Mw);
829 double cW2 = cache.getSM().cW2(Mw);
830 double cW4 = cW2*cW2;
831 double rw = pow(mh / Mw, 2.0);
832 double rz = pow(mh / Mz, 2.0);
833
834 /* Logarithm and one-loop functions */
835 double log_cW2 = cache.log_cW2(Mw);
836
837 /* B0 functions for mu=Mw */
838 gslpp::complex B0_Mw2_Mz2_Mw2_Mw2 = cache.B0_Mz2_Mz2_Mw2_Mw2(Mw) + log_cW2;
839 gslpp::complex B0_Mw2_Mz2_mh2_Mz2 = cache.B0_Mz2_Mz2_mh2_Mz2() + log_cW2;
840 gslpp::complex B0_Mw2_Mw2_Mz2_Mw2 = cache.B0_Mz2_Mw2_Mz2_Mw2(Mw) + log_cW2;
841 gslpp::complex B0_Mw2_Mw2_mh2_Mw2 = cache.B0_Mz2_Mw2_mh2_Mw2(Mw) + log_cW2;
842
843 double DRhobar;
844 DRhobar = -(1.0 / 12.0 / cW2 + 4.0 / 3.0 - 17.0 / 3.0 * cW2 - 4.0 * cW4)
845 *(B0_Mw2_Mz2_Mw2_Mw2.real() - 1.0 / cW2 * B0_Mw2_Mw2_Mz2_Mw2.real())
846 + (1.0 - 1.0 / 3.0 * rw + 1.0 / 12.0 * rw * rw) * B0_Mw2_Mw2_mh2_Mw2.real()
847 - (1.0 - 1.0 / 3.0 * rz + 1.0 / 12.0 * rz * rz) / cW2 * B0_Mw2_Mz2_mh2_Mz2.real()
848 + 1.0 / 12.0 * sW2 * rw * rw * (log(rw) - 1.0)
849 - (1.0 / 12.0 / cW4 + 1.0 / 2.0 / cW2 - 2.0 + 1.0 / 12.0 * rw) * log_cW2
850 - 1.0 / 12.0 / cW4 - 19.0 / 36.0 / cW2 - 133.0 / 18.0 + 8.0 * cW2;
851 return DRhobar;
852}
853
854double EWSMOneLoopEW::TEST_DeltaRhobarW_bos(const double Mw_i) const
855{
856 double Mw = Mw_i;
857 double sW2 = cache.getSM().sW2(Mw);
858 double cW2 = cache.getSM().cW2(Mw);
859 double cW4 = cW2*cW2;
860 double mh = cache.getSM().getMHl();
861 double rw = pow(mh / Mw, 2.0);
862
863 /* Logarithm and one-loop functions */
864 double log_cW2 = cache.log_cW2(Mw);
865
866 /* B0 functions for mu=Mw */
867 gslpp::complex B0_Mw2_Mz2_Mw2 = cache.B0_Mz2_Mw2_Mz2_Mw2(Mw) + log_cW2;
868 gslpp::complex B0_Mw2_mh2_Mw2 = cache.B0_Mz2_Mw2_mh2_Mw2(Mw) + log_cW2;
869
870 double DRhobarW;
871 DRhobarW = -(1.0 / 12.0 / cW4 + 4.0 / 3.0 / cW2 - 17.0 / 3.0 - 4.0 * cW2) * B0_Mw2_Mz2_Mw2.real()
872 - (1.0 - 1.0 / 3.0 * rw + 1.0 / 12.0 * rw * rw) * B0_Mw2_mh2_Mw2.real()
873 + (3.0 / 4.0 / (1.0 - rw) + 1.0 / 4.0 - 1.0 / 12.0 * rw) * rw * log(rw)
874 + (1.0 / 12.0 / cW4 + 17.0 / 12.0 / cW2 - 3.0 / sW2 + 1.0 / 4.0) * log_cW2
875 + 1.0 / 12.0 / cW4 + 11.0 / 8.0 / cW2 + 139.0 / 36.0 - 177.0 / 24.0 * cW2
876 + 5.0 / 8.0 * cW4 - 1.0 / 12.0 * rw * (7.0 / 2.0 - rw);
877 return DRhobarW;
878}
879
880
882
883gslpp::complex EWSMOneLoopEW::FZa_0(const double s, const double Mw_i) const
884{
885 double Mw = Mw_i;
886 double Mz = cache.getSM().getMz();
887 double Rz = Mz * Mz / s;
888
889 /* Logarithm and three-point one-loop functions */
890 double log_Rz;
891 gslpp::complex C0_s_0_Mz2_0;
892 if (s == Mz * Mz) {
893 log_Rz = 0.0;
894 C0_s_0_Mz2_0 = cache.C0_Mz2_0_Mz2_0();
895 } else if (s == Mw * Mw) {
896 log_Rz = -cache.log_cW2(Mw);
897 C0_s_0_Mz2_0 = cache.C0_Mw2_0_Mz2_0(Mw);
898 } else {
899 log_Rz = log(Rz);
900 C0_s_0_Mz2_0 = cache.getPV().C0(s, 0.0, Mz*Mz, 0.0);
901 }
902
903 gslpp::complex FZa(0.0, 0.0, false);
904 FZa = 2.0 * pow((Rz + 1.0), 2.0) * s * C0_s_0_Mz2_0
905 - (2.0 * Rz + 3.0)*(log_Rz + M_PI * gslpp::complex::i()) - 2.0 * Rz - 7.0 / 2.0;
906 return FZa;
907}
908
909gslpp::complex EWSMOneLoopEW::FWa_0(const double s, const double Mw_i) const
910{
911 double Mw = Mw_i;
912 double Mz = cache.getSM().getMz();
913 double Rw = Mw * Mw / s;
914
915 /* Logarithm and three-point one-loop functions */
916 double log_Rw;
917 gslpp::complex C0_s_0_Mw2_0;
918 if (s == Mz * Mz) {
919 log_Rw = cache.log_cW2(Mw);
920 C0_s_0_Mw2_0 = cache.C0_Mz2_0_Mw2_0(Mw);
921 } else {
922 log_Rw = log(Rw);
923 C0_s_0_Mw2_0 = cache.getPV().C0(s, 0.0, Mw*Mw, 0.0);
924 }
925
926 gslpp::complex FWa(0.0, 0.0, false);
927 FWa = 2.0 * pow((Rw + 1.0), 2.0) * s * C0_s_0_Mw2_0
928 - (2.0 * Rw + 3.0)*(log_Rw + M_PI * gslpp::complex::i()) - 2.0 * Rw - 7.0 / 2.0;
929 return FWa;
930}
931
932gslpp::complex EWSMOneLoopEW::FbarWa_0(const double s) const
933{
934 return ( gslpp::complex(0.0, 0.0, false));
935}
936
937gslpp::complex EWSMOneLoopEW::FWn_0(const double s, const double Mw_i) const
938{
939 double Mw = Mw_i;
940 double Mw2 = Mw*Mw;
941 double Mz = cache.getSM().getMz();
942 double Rw = Mw * Mw / s;
943
944 /* Two- and three-point one-loop functions */
945 gslpp::complex B0_Mw_s_Mw2_Mw2;
946 gslpp::complex C0_s_Mw2_0_Mw2;
947 if (s == Mz * Mz) {
948 B0_Mw_s_Mw2_Mw2 = cache.B0_Mw2_Mz2_Mw2_Mw2(Mw);
949 C0_s_Mw2_0_Mw2 = cache.C0_Mz2_Mw2_0_Mw2(Mw);
950 } else {
951 B0_Mw_s_Mw2_Mw2 = cache.getPV().B0(Mw2, s, Mw2, Mw2);
952 C0_s_Mw2_0_Mw2 = cache.getPV().C0(s, Mw2, 0.0, Mw2);
953 }
954
955 gslpp::complex FWn(0.0, 0.0, false);
956 FWn = -2.0 * (Rw + 2.0) * Mw * Mw * C0_s_Mw2_0_Mw2
957 - (2.0 * Rw + 7.0 / 3.0 - 3.0 / 2.0 / Rw - 1.0 / 12.0 / Rw / Rw) * B0_Mw_s_Mw2_Mw2
958 + 2.0 * Rw + 9.0 / 2.0 - 11.0 / 18.0 / Rw + 1.0 / 18.0 / Rw / Rw;
959 return FWn;
960}
961
962gslpp::complex EWSMOneLoopEW::FWa_t(const double s, const double Mw_i) const
963{
964 double Mw = Mw_i;
965 double Mw2 = Mw*Mw;
966 double Mz = cache.getSM().getMz();
967 double Rw = Mw * Mw / s;
968 double Mt = cache.getSM().getMtpole();
969 double Mt2 = Mt*Mt;
970 double wt = Mt2 / Mw2;
971
972 /* Logarithm and two- and three-point one-loop functions */
973 double log_wt = -2.0 * cache.logMZtoMTOP() - cache.log_cW2(Mw);
974 double log_Rw;
975 gslpp::complex B0_Mw2_s_Mt2_Mt2;
976 gslpp::complex C0_s_Mt2_Mw2_Mt2, C0_s_0_Mw2_0;
977 if (s == Mz * Mz) {
978 log_Rw = cache.log_cW2(Mw);
979 B0_Mw2_s_Mt2_Mt2 = cache.B0_Mw2_Mz2_Mt2_Mt2(Mw);
980 C0_s_Mt2_Mw2_Mt2 = cache.C0_Mz2_Mt2_Mw2_Mt2(Mw);
981 C0_s_0_Mw2_0 = cache.C0_Mz2_0_Mw2_0(Mw);
982 } else {
983 log_Rw = log(Rw);
984 B0_Mw2_s_Mt2_Mt2 = cache.getPV().B0(Mw2, s, Mt2, Mt2);
985 C0_s_Mt2_Mw2_Mt2 = cache.getPV().C0(s, Mt2, Mw2, Mt2);
986 C0_s_0_Mw2_0 = cache.getPV().C0(s, 0.0, Mw2, 0.0);
987 }
988
989 gslpp::complex FWa(0.0, 0.0, false);
990 FWa = 2.0 * (Rw + 1.0)*(Rw + 1.0) * s * (C0_s_Mt2_Mw2_Mt2 - C0_s_0_Mw2_0)
991 + (2.0 * Rw + 3.0)*(-B0_Mw2_s_Mt2_Mt2 + log_Rw + M_PI * gslpp::complex::i() + 2.0)
992 - wt * ((3.0 * Rw + 2.0 - wt - wt * wt * Rw) * Mw * Mw * C0_s_Mt2_Mw2_Mt2
993 + (Rw + 1.0 / 2.0 + wt * Rw)*(1.0 - B0_Mw2_s_Mt2_Mt2)
994 - (2.0 * Rw + 1.0 / 2.0 - 2.0 / (wt - 1.0)
995 + 3.0 / 2.0 / (wt - 1.0) / (wt - 1.0) + wt * Rw) * log_wt
996 + 3.0 / 2.0 / (wt - 1.0) + 3.0 / 4.0);
997 return FWa;
998}
999
1000gslpp::complex EWSMOneLoopEW::FbarWa_t(const double s, const double Mw_i) const
1001{
1002 double Mw = Mw_i;
1003 double Mw2 = Mw*Mw;
1004 double Mz = cache.getSM().getMz();
1005 double Rw = Mw * Mw / s;
1006 double Mt = cache.getSM().getMtpole();
1007 double Mt2 = Mt*Mt;
1008 double wt = Mt2 / Mw2;
1009
1010 /* Logarithm and two- and three-point one-loop functions */
1011 double log_wt = -2.0 * cache.logMZtoMTOP() - cache.log_cW2(Mw);
1012 gslpp::complex B0_Mw2_s_Mt2_Mt2;
1013 gslpp::complex C0_s_Mt2_Mw2_Mt2;
1014 if (s == Mz * Mz) {
1015 B0_Mw2_s_Mt2_Mt2 = cache.B0_Mw2_Mz2_Mt2_Mt2(Mw);
1016 C0_s_Mt2_Mw2_Mt2 = cache.C0_Mz2_Mt2_Mw2_Mt2(Mw);
1017 } else {
1018 B0_Mw2_s_Mt2_Mt2 = cache.getPV().B0(Mw2, s, Mt2, Mt2);
1019 C0_s_Mt2_Mw2_Mt2 = cache.getPV().C0(s, Mt2, Mw2, Mt2);
1020 }
1021
1022 gslpp::complex FbarWa(0.0, 0.0, false);
1023 FbarWa = -wt * ((Rw + 2.0 - wt * (2.0 - wt) * Rw) * Mw * Mw * C0_s_Mt2_Mw2_Mt2
1024 - (1.0 / 2.0 - Rw + wt * Rw)*(-B0_Mw2_s_Mt2_Mt2 + 1.0)
1025 + wt * Rw * log_wt);
1026 return FbarWa;
1027}
1028
1029gslpp::complex EWSMOneLoopEW::FWn_t(const double s, const double Mw_i) const
1030{
1031 double Mw = Mw_i;
1032 double Mw2 = Mw*Mw;
1033 double Mz = cache.getSM().getMz();
1034 double Rw = Mw * Mw / s;
1035 double Mt = cache.getSM().getMtpole();
1036 double Mt2 = Mt*Mt;
1037 double wt = Mt2 / Mw2;
1038
1039 /* Logarithm and two- and three-point one-loop functions */
1040 double log_wt = -2.0 * cache.logMZtoMTOP() - cache.log_cW2(Mw);
1041 gslpp::complex B0_Mw2_s_Mw2_Mw2;
1042 gslpp::complex C0_s_Mw2_Mt2_Mw2, C0_s_Mw2_0_Mw2;
1043 if (s == Mz * Mz) {
1044 B0_Mw2_s_Mw2_Mw2 = cache.B0_Mw2_Mz2_Mw2_Mw2(Mw);
1045 C0_s_Mw2_Mt2_Mw2 = cache.C0_Mz2_Mw2_Mt2_Mw2(Mw);
1046 C0_s_Mw2_0_Mw2 = cache.C0_Mz2_Mw2_0_Mw2(Mw);
1047 } else {
1048 B0_Mw2_s_Mw2_Mw2 = cache.getPV().B0(Mw2, s, Mw2, Mw2);
1049 C0_s_Mw2_Mt2_Mw2 = cache.getPV().C0(s, Mw2, Mt2, Mw2);
1050 C0_s_Mw2_0_Mw2 = cache.getPV().C0(s, Mw2, 0.0, Mw2);
1051 }
1052
1053 gslpp::complex FWn(0.0, 0.0, false);
1054 FWn = -2.0 * (Rw + 2.0) * Mw * Mw * (C0_s_Mw2_Mt2_Mw2 - C0_s_Mw2_0_Mw2)
1055 + wt * ((3.0 * Rw + 5.0 / 2.0 - 2.0 / Rw - wt * (2.0 - 1.0 / 2.0 / Rw)
1056 + wt * wt * (1.0 / 2.0 - Rw)) * Mw * Mw * C0_s_Mw2_Mt2_Mw2
1057 + (Rw + 1.0 - 1.0 / 4.0 / Rw - wt * (1.0 / 2.0 - Rw))*(B0_Mw2_s_Mw2_Mw2 - 1.0)
1058 + (2.0 * Rw + 1.0 / 2.0 - 2.0 / (wt - 1.0)
1059 + 3.0 / 2.0 / (wt - 1.0) / (wt - 1.0) - wt * (1.0 / 2.0 - Rw)) * log_wt
1060 - 3.0 / 2.0 / (wt - 1.0) + 1.0 / 4.0
1061 - 1.0 / 2.0 / Rw);
1062 return FWn;
1063}
1064
1065gslpp::complex EWSMOneLoopEW::FZ(const double s, const double Mw_i) const
1066{
1067 return ( FZa_0(s, Mw_i));
1068}
1069
1070gslpp::complex EWSMOneLoopEW::FW(const double s, const Particle f, const double Mw_i) const
1071{
1072 double Mw = Mw_i;
1073 double cW2 = cache.getSM().cW2(Mw);
1074
1075 if (f.is("LEPTON")) {
1076 QCD::lepton lprime;
1077 if (f.is("NEUTRINO_1"))
1078 lprime = StandardModel::ELECTRON;
1079 else if (f.is("NEUTRINO_2"))
1080 lprime = StandardModel::MU;
1081 else if (f.is("NEUTRINO_3"))
1082 lprime = StandardModel::TAU;
1083 else if (f.is("ELECTRON"))
1085 else if (f.is("MU"))
1087 else if (f.is("TAU"))
1089 else
1090 throw std::runtime_error("EWSMOneLoopEW::FW(): " + f.getName() + " is not allowed");
1091 return ( cW2 * FWn_0(s, Mw) - cache.sigma_f(cache.getSM().getLeptons(lprime), Mw) / 2.0 * FWa_0(s, Mw)
1092 - FbarWa_0(s) / 2.0);
1093 } else if (f.is("QUARK")) {
1094 QCD::quark qprime;
1095 if (f.is("UP"))
1096 qprime = QCD::DOWN;
1097 else if (f.is("DOWN"))
1098 qprime = QCD::UP;
1099 else if (f.is("CHARM"))
1100 qprime = QCD::STRANGE;
1101 else if (f.is("STRANGE"))
1102 qprime = QCD::CHARM;
1103 else if (f.is("BOTTOM"))
1104 qprime = QCD::TOP;
1105 else
1106 throw std::runtime_error("EWSMOneLoopEW::FW(): TOP is not allowed");
1107 gslpp::complex FW(0.0, 0.0, false);
1108 FW = cW2 * FWn_0(s, Mw) - cache.sigma_f(cache.getSM().getQuarks(qprime), Mw) / 2.0 * FWa_0(s, Mw)
1109 - FbarWa_0(s) / 2.0;
1110 if (f.is("BOTTOM"))
1111 FW += cW2 * FWn_t(s, Mw) - cache.sigma_f(cache.getSM().getQuarks(qprime), Mw) / 2.0 * FWa_t(s, Mw)
1112 - FbarWa_t(s, Mw) / 2.0;
1113 return FW;
1114 } else
1115 throw std::runtime_error("EWSMOneLoopEW::FW_q(): Wrong argument");
1116}
1117
1118
1120
1121gslpp::complex EWSMOneLoopEW::TEST_FWn(const double s, const double mf, const double Mw_i) const
1122{
1123 double Mw = Mw_i;
1124 double Mw2 = Mw*Mw;
1125 double Rw = Mw2 / s;
1126 double mf2 = mf*mf;
1127 double wf = mf2 / Mw2;
1128
1129 /* Logarithm and two- and three-point one-loop functions */
1130 double log_wf = log(wf);
1131 double A0_Mw2 = cache.getPV().A0(Mw2, Mw2);
1132 double A0_mf2 = cache.getPV().A0(Mw2, mf2);
1133 gslpp::complex B0_Mw2_s_Mw2_Mw2 = cache.getPV().B0(Mw2, s, Mw2, Mw2);
1134 gslpp::complex B0_Mw2_0_mf2_Mw2 = cache.getPV().B0(Mw2, 0.0, mf2, Mw2);
1135 gslpp::complex C0_s_Mw2_mf2_Mw2 = cache.getPV().C0(s, Mw2, mf2, Mw2);
1136 //gslpp::complex C0_s_Mw2_0_Mw2 = cache.getPV().C0(s, Mw2, 0.0, Mw2);
1137
1138 gslpp::complex FWn(0.0, 0.0, false);
1139 /* Eq.(5.586) in Bardin and Passarino's book */
1140 FWn = ((2.0 + wf)*(1.0 - wf)*(1.0 - wf) * Rw + 4.0 - 5.0 / 2.0 * wf + 2.0 * wf * wf
1141 - wf * wf * wf / 2.0 + wf * (2.0 - wf / 2.0) / Rw) * Mw * Mw * C0_s_Mw2_mf2_Mw2
1142 - (-(2.0 + wf)*(1.0 - wf) * Rw - 3.0 + 3.0 / 2.0 * wf - wf * wf / 2.0)
1143 *(B0_Mw2_s_Mw2_Mw2 - B0_Mw2_0_mf2_Mw2)
1144 - (2.0 / 3.0 - wf / 2.0 + (3.0 / 2.0 - wf / 4.0) / Rw + 1.0 / 12.0 / Rw / Rw) * B0_Mw2_s_Mw2_Mw2
1145 - A0_mf2 / Mw / Mw - (2.0 / 3.0 + 1.0 / 6.0 / Rw) * A0_Mw2 / Mw / Mw
1146 - 2.0 / 3.0 - wf / 2.0 + (4.0 / 9.0 + wf / 4.0) / Rw - 1.0 / 18.0 / Rw / Rw;
1147
1148 /* Eq.(5.500) in Bardin and Passarino's book */
1149 double wW;
1150 if (mf == 0.0) {
1151 wW = 3.0 / 2.0;
1152 } else {
1153 wW = 5.0 / 4.0 * wf + 3.0 * (1.0 - wf / 2.0) * wf * wf / (wf - 1.0) / (wf - 1.0) * log_wf
1154 - 3.0 / 2.0 / (wf - 1.0);
1155 }
1156
1157 return ( -FWn + wW);
1158}
1159
1160
1161
1162
1163
double rho_GammaW_tmp(const double Qi, const double Qj, const double Mw_i) const
EW radiative corrections to the widths of , denoted as .
gslpp::complex deltaKappa_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
gslpp::complex TEST_FWn(const double s, const double mf, const double Mw_i) const
A test function for with a finite fermion mass.
gslpp::complex SigmabarWW_bos(const double mu, const double s, const double Mw_i) const
The bosonic contribution to the self-energy of the boson in the Unitary gauge, .
gslpp::complex PibarGammaGamma_bos(const double mu, const double s, const double Mw_i) const
The bosonic contribution to the self-energy of the photon in the Unitary gauge, .
double rho_GammaW(const Particle fi, const Particle fj, const double Mw_i) const
EW radiative corrections to the width of , denoted as .
double DeltaRbar_rem(const double Mw_i) const
.
gslpp::complex SigmabarZZ_bos(const double mu, const double s, const double Mw_i) const
The bosonic contribution to the self-energy of the boson in the Unitary gauge, .
double DeltaR_rem(const double Mw_i) const
Remainder contribution of to , denoted as .
const EWSMcache & cache
A reference to an object of type EWSMcache.
gslpp::complex FZa_0(const double s, const double Mw_i) const
The form factor .
gslpp::complex FZ(const double s, const double Mw_i) const
The unified form factor .
gslpp::complex FWn_t(const double s, const double Mw_i) const
The form factor .
double TEST_DeltaRhobar_bos(const double Mw_i) const
A test function.
gslpp::complex SigmabarWW_fer(const double mu, const double s, const double Mw_i) const
The fermionic contribution to the self-energy of the boson in the Unitary gauge, .
gslpp::complex FbarWa_0(const double s) const
The form factor .
gslpp::complex FWn_0(const double s, const double Mw_i) const
The form factor .
gslpp::complex deltaRho_rem_tmp(const gslpp::complex u_f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
double DeltaRhobarW(const double mu, const double Mw_i) const
.
double DeltaAlpha_t(const double s) const
Top-quark contribution of to the electromagnetic coupling , denoted as .
double TEST_DeltaRhobarW_bos(const double Mw_i) const
A test function.
gslpp::complex FWa_t(const double s, const double Mw_i) const
The form factor .
gslpp::complex deltaKappa_rem_tmp(const double deltaf, const gslpp::complex uf, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
double DeltaRho(const double Mw_i) const
Leading one-loop contribution of to , denoted as .
double DeltaAlpha_l(const double s) const
Leptonic contribution of to the electromagnetic coupling , denoted as .
gslpp::complex SigmabarPrime_ZZ_bos_Mz2(const double mu, const double Mw_i) const
The derivative of the bosonic contribution to the self-energy of the boson for in the Unitary gauge...
gslpp::complex PibarZgamma_bos(const double mu, const double s, const double Mw_i) const
The bosonic contribution to the self-energy of the - mixing in the Unitary gauge,...
gslpp::complex FbarWa_t(const double s, const double Mw_i) const
The form factor .
gslpp::complex PibarGammaGamma_fer(const double mu, const double s, const Particle f) const
The fermionic contribution to the self-energy of the photon in the Unitary gauge, associated with loo...
gslpp::complex FWa_0(const double s, const double Mw_i) const
The form factor .
EWSMOneLoopEW(const EWSMcache &cache_i)
Constructor.
double DeltaRhobar(const double mu, const double Mw_i) const
.
gslpp::complex SigmabarZZ_fer(const double mu, const double s, const double Mw_i) const
The fermionic contribution to the self-energy of the boson in the Unitary gauge, .
gslpp::complex SigmabarPrime_WW_bos_Mw2(const double mu, const double Mw_i) const
The derivative of the bosonic contribution to the self-energy of the boson for in the Unitary gauge...
gslpp::complex FW(const double s, const Particle f, const double Mw_i) const
The unified form factor for .
gslpp::complex PibarZgamma_fer(const double mu, const double s, const double Mw_i) const
The fermionic contribution to the self-energy of the - mixing in the Unitary gauge,...
gslpp::complex SigmabarPrime_WW_fer_Mw2(const double mu, const double Mw_i) const
The derivative of the fermionic contribution to the self-energy of the boson for in the Unitary gau...
gslpp::complex deltaRho_rem_f(const Particle f, const double Mw_i) const
Remainder contribution of to the effective couplings , denoted as .
gslpp::complex SigmabarPrime_ZZ_fer_Mz2(const double mu, const double Mw_i) const
The derivative of the fermionic contribution to the self-energy of the boson for in the Unitary gau...
A class for cache variables used in computing radiative corrections to the EW precision observables.
Definition: EWSMcache.h:40
gslpp::complex B1_Mz2_Mw2_mf2_mfprime2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:673
double a_f(const Particle f) const
The tree-level axial-vector coupling for , denoted as .
Definition: EWSMcache.h:301
gslpp::complex C0_Mw2_0_Mz2_0(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:1010
double sigma_f(const Particle f, const double Mw_i) const
.
Definition: EWSMcache.h:312
gslpp::complex B0_Mw2_Mw2_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:439
gslpp::complex B1p_Mw2_Mw2_mf2_mfprime2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:727
gslpp::complex B0p_Mz2_Mz2_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:544
gslpp::complex Bf_Mz2_0_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:796
double A0_Mz2_mh2() const
A cache method.
Definition: EWSMcache.cpp:219
gslpp::complex Bf_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:866
gslpp::complex B1_Mz2_0_mf2_mfprime2(const int gen) const
A cache method.
Definition: EWSMcache.cpp:619
gslpp::complex B0p_Mz2_0_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:499
double log_cW2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:148
gslpp::complex B0_Mw2_Mz2_Mt2_Mt2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:319
gslpp::complex B0_Mz2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:379
gslpp::complex B0_Mz2_0_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:409
gslpp::complex B1p_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:754
gslpp::complex B0_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:484
gslpp::complex C0_Mz2_0_Mz2_0() const
A cache method.
Definition: EWSMcache.cpp:1025
gslpp::complex B0_Mw2_Mw2_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:454
gslpp::complex Bfp_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:908
double A0_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:205
double v_f(const Particle f, const double Mw_i) const
The tree-level vector coupling for , denoted as .
Definition: EWSMcache.h:290
gslpp::complex B0p_Mz2_0_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:529
gslpp::complex B0p_Mz2_Mz2_mh2_Mz2() const
A cache method.
Definition: EWSMcache.cpp:514
double A0_Mz2_Mz2() const
A cache method.
Definition: EWSMcache.cpp:261
gslpp::complex B0_Mz2_Mw2_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:364
gslpp::complex C0_Mz2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:980
gslpp::complex B1_Mz2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:700
double delta_f(const Particle f, const double Mw_i) const
.
Definition: EWSMcache.h:323
gslpp::complex C0_Mz2_0_Mw2_0(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:965
gslpp::complex B0p_Mw2_Mw2_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:559
gslpp::complex Bfp_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:893
gslpp::complex B0p_Mw2_Mw2_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:574
gslpp::complex B0p_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:604
double logMZtoMTOP() const
A cache method.
Definition: EWSMcache.cpp:120
gslpp::complex C0_Mz2_Mt2_Mw2_Mt2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:950
const PVfunctions getPV() const
A get method to access the member reference to the object of type StandardModel passed to the constru...
Definition: EWSMcache.h:106
gslpp::complex Bf_Mz2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:813
gslpp::complex B0_Mz2_0_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:304
double Q_f(const Particle f) const
The charge of an SM fermion .
Definition: EWSMcache.h:268
double A0_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:275
gslpp::complex B0_Mz2_Mw2_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:289
gslpp::complex C0_Mz2_Mw2_Mt2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:935
double mf2(const Particle f, const double mu=0.0, const orders order=FULLNNLO) const
The mass squared of an SM fermion.
Definition: EWSMcache.h:257
gslpp::complex B0_Mz2_Mz2_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:334
gslpp::complex B0_Mw2_Mz2_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:424
gslpp::complex B0_Mz2_Mz2_mh2_Mz2() const
A cache method.
Definition: EWSMcache.cpp:349
gslpp::complex C0_Mw2_Mw2_0_Mz2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:995
double A0_Mw2_mh2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:247
gslpp::complex Bf_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:781
gslpp::complex Bf_Mz2_0_mfprime2_mf2(const int gen) const
A cache method.
Definition: EWSMcache.cpp:839
gslpp::complex B1_Mz2_0_mfprime2_mf2(const int gen) const
A cache method.
Definition: EWSMcache.cpp:646
gslpp::complex B0_Mw2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:469
gslpp::complex B0_Mz2_0_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:394
gslpp::complex B0p_Mw2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:589
double A0_Mw2_Mz2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:233
const StandardModel & getSM() const
Definition: EWSMcache.h:56
An observable class for the -boson mass.
Definition: Mw.h:22
gslpp::complex B1(const double mu2, const double p2, const double m02, const double m12) const
.
gslpp::complex B0(const double mu2, const double p2, const double m02, const double m12) const
.
Definition: PVfunctions.cpp:41
gslpp::complex B0p(const double muIR2, const double p2, const double m02, const double m12) const
.
gslpp::complex Bfp(const double mu2, const double p2, const double m02, const double m12) const
.
gslpp::complex Bf(const double mu2, const double p2, const double m02, const double m12) const
.
double A0(const double mu2, const double m2) const
.
Definition: PVfunctions.cpp:23
gslpp::complex C0(const double p2, const double m02, const double m12, const double m22) const
.
gslpp::complex B1p(const double mu2, const double p2, const double m02, const double m12) const
.
A class for particles.
Definition: Particle.h:26
bool is(std::string name_i) const
Definition: Particle.cpp:23
std::string getName() const
Definition: Particle.h:147
quark
An enum type for quarks.
Definition: QCD.h:323
@ UP
Definition: QCD.h:324
@ TOP
Definition: QCD.h:328
@ DOWN
Definition: QCD.h:325
@ STRANGE
Definition: QCD.h:327
@ CHARM
Definition: QCD.h:326
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
@ NEUTRINO_2
Definition: QCD.h:313
@ NEUTRINO_1
Definition: QCD.h:311
@ MU
Definition: QCD.h:314
@ ELECTRON
Definition: QCD.h:312
@ NEUTRINO_3
Definition: QCD.h:315
@ TAU
Definition: QCD.h:316
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
const Particle & getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
const double getMz() const
A get method to access the mass of the boson .
virtual const double getMHl() const
A get method to retrieve the Higgs mass .
virtual const double cW2(const double Mw_i) const
The square of the cosine of the weak mixing angle in the on-shell scheme, denoted as .
virtual const double sW2(const double Mw_i) const
The square of the sine of the weak mixing angle in the on-shell scheme, denoted as .
const double getAle() const
A get method to retrieve the fine-structure constant .
Test Observable.