Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F7879448
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
View Options
diff --git a/src/Zjets.cc b/src/Zjets.cc
index 10d1e4f..bf369bf 100644
--- a/src/Zjets.cc
+++ b/src/Zjets.cc
@@ -1,169 +1,169 @@
/**
* \authors The HEJ collaboration (see AUTHORS for details)
* \date 2020
* \copyright GPLv2 or later
*/
#include <vector>
#include "HEJ/Constants.hh"
#include "HEJ/EWConstants.hh"
#include "HEJ/jets.hh"
// generated headers
#include "HEJ/currents/jZ_j.hh"
using HEJ::Helicity;
using HEJ::ParticleProperties;
namespace helicity = HEJ::helicity;
namespace {
// Z propagator
COM ZProp(double q, ParticleProperties const & zprop){
return 1. / (q - zprop.mass*zprop.mass + COM(0.,1.)*zprop.width*zprop.mass);
}
// Photon propagator
COM GProp(double q) {
return 1. / q;
}
// Weak charge
double Zq (int PID, Helicity h, double stw2, double ctw) {
// Positive Spin
if (h == helicity::plus) {
// quarks
if (PID == 1 || PID == 3 || PID == 5) return (+ 1.0 * stw2 / 3.0) / ctw;
if (PID == 2 || PID == 4) return (- 2.0 * stw2 / 3.0) / ctw;
if (PID == -1 || PID == -3 || PID == -5) return (- 1.0 * stw2 / 3.0) / ctw;
if (PID == -2 || PID == -4) return (+ 2.0 * stw2 / 3.0) / ctw;
// electron
if (PID == 11) return stw2 / ctw;
}
// Negative Spin
else {
// quarks
if (PID == 1 || PID == 3 || PID == 5) return (-0.5 + 1.0 * stw2 / 3.0) / ctw;
if (PID == 2 || PID == 4) return ( 0.5 - 2.0 * stw2 / 3.0) / ctw;
if (PID == -1 || PID == -3 || PID == -5) return ( 0.5 - 1.0 * stw2 / 3.0) / ctw;
if (PID == -2 || PID == -4) return (-0.5 + 2.0 * stw2 / 3.0) / ctw;
- // electron
+ // electron
if (PID == 11) return (-1.0 / 2.0 + stw2) / ctw;
}
throw std::logic_error("ERROR! No weak charge found");
}
// Electric charge
double Gq (int PID) {
if (PID == 1 || PID == 3 || PID == 5) return -1.0 / 3.0;
if (PID == 2 || PID == 4) return 2.0 / 3.0;
if (PID == -1 || PID == -3 || PID == -5) return 1.0 / 3.0;
if (PID == -2 || PID == -4) return -2.0 / 3.0;
throw std::logic_error("ERROR! No electric charge found");
}
void Z_amp(HLV pa, HLV pb, HLV p1, HLV p2, HLV pep, HLV pem, int aptype, COM PZ, COM PG,
double stw2, double ctw, COM (&res)[2][2][2]
){
using helicity::plus;
using helicity::minus;
const double Zq_a_p = Zq(aptype, (aptype>0 ? plus : minus), stw2, ctw);
const double Zq_a_m = Zq(aptype, (aptype>0 ? minus : plus), stw2, ctw);
const double Ze_p = Zq(HEJ::pid::electron, plus, stw2, ctw);
const double Ze_m = Zq(HEJ::pid::electron, minus, stw2, ctw);
const double Gq_a = Gq(aptype);
const COM pref_pp = -2.*(Zq_a_p * Ze_p * PZ - Gq_a * PG * stw2);
const COM pref_pm = -2.*(Zq_a_p * Ze_m * PZ - Gq_a * PG * stw2);
const COM pref_mm = -2.*(Zq_a_m * Ze_m * PZ - Gq_a * PG * stw2);
const COM pref_mp = -2.*(Zq_a_m * Ze_p * PZ - Gq_a * PG * stw2);
const COM jZ_j_ppp = HEJ::jZ_j<plus, plus, plus> (pa, p1, pb, p2, pem, pep);
const COM jZ_j_ppm = HEJ::jZ_j<plus, plus, minus>(pa, p1, pb, p2, pem, pep);
const COM jZ_j_pmp = HEJ::jZ_j<plus, minus, plus> (pa, p1, pb, p2, pem, pep);
const COM jZ_j_pmm = HEJ::jZ_j<plus, minus, minus>(pa, p1, pb, p2, pem, pep);
res[1][1][1] = (pref_pp * jZ_j_ppp);
res[1][1][0] = (pref_pp * jZ_j_ppm);
res[1][0][1] = (pref_pm * jZ_j_pmp);
res[1][0][0] = (pref_pm * jZ_j_pmm);
res[0][0][0] = (pref_mm * conj(jZ_j_ppp));
res[0][0][1] = (pref_mm * conj(jZ_j_ppm));
res[0][1][0] = (pref_mp * conj(jZ_j_pmp));
res[0][1][1] = (pref_mp * conj(jZ_j_pmm));
}
} // Anonymous Namespace
std::vector <double> ME_Z_qQ(HLV pa, HLV pb, HLV p1, HLV p2, HLV pep, HLV pem,
int aptype, int bptype, ParticleProperties const & zprop,
double stw2, double ctw
){
const HLV pZ = pep + pem;
const COM PZ = ZProp(pZ.m2(), zprop);
const COM PG = GProp(pZ.m2());
COM Coeff_top[2][2][2], Coeff_bot[2][2][2];
Z_amp(pa, pb, p1, p2, pep, pem, aptype, PZ, PG, stw2, ctw, Coeff_top);
Z_amp(pb, pa, p2, p1, pep, pem, bptype, PZ, PG, stw2, ctw, Coeff_bot);
double sum_top=0., sum_bot=0., sum_mix=0.;
for(int h1=0; h1<2; h1++){
for(int hl=0; hl<2; hl++){
for(int h2=0; h2<2; h2++){
sum_top += norm(Coeff_top[h1][hl][h2]);
sum_bot += norm(Coeff_bot[h1][hl][h2]);
sum_mix += 2.0*real(Coeff_top[h1][hl][h2]*conj(Coeff_bot[h2][hl][h1]));
}
}
}
const double t1_top = (pa-p1-pZ).m2();
const double t2_top = (pb-p2 ).m2();
const double t1_bot = (pa-p1 ).m2();
const double t2_bot = (pb-p2-pZ).m2();
sum_top /= t1_top * t2_top;
sum_bot /= t1_bot * t2_bot;
sum_mix /= sqrt(t1_top * t2_top * t1_bot * t2_bot);
// Division by colour and Helicity average (Nc2-1)(4)
// Multiply by Cf^2
const double pref = HEJ::C_F*HEJ::C_F / ((HEJ::N_C*HEJ::N_C - 1)*4);
-
+
return {sum_top*pref, sum_bot*pref, sum_mix*pref};
}
double ME_Z_qg(HLV pa, HLV pb, HLV p1, HLV p2, HLV pep, HLV pem,
- int aptype, int bptype, ParticleProperties const & zprop,
+ int aptype, int /*bptype*/, ParticleProperties const & zprop,
double stw2, double ctw
){
const HLV pZ = pep + pem;
const COM PZ = ZProp(pZ.m2(), zprop);
const COM PG = GProp(pZ.m2());
COM Coeff[2][2][2];
Z_amp(pa, pb, p1, p2, pep, pem, aptype, PZ, PG, stw2, ctw, Coeff);
double sum = 0.;
for(int h1=0; h1<2; h1++){
for(int hl=0; hl<2; hl++){
for(int h2=0; h2<2; h2++){
sum += norm(Coeff[h1][hl][h2]);
}
}
}
sum /= (pa-p1-pZ).m2()*(pb-p2).m2();
// Division by colour and Helicity average (Nc2-1)(4)
// Multiply by Cf
sum *= HEJ::C_F / ((HEJ::N_C*HEJ::N_C - 1)*4);
// Multiply by CAM
return sum * K_g(p2, pb);
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Nov 19, 8:25 PM (1 d, 3 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3804809
Default Alt Text
(5 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment