Page MenuHomeHEPForge

No OneTemporary

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

Mime Type
text/x-diff
Expires
Tue, Nov 19, 8:25 PM (1 d, 5 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3804809
Default Alt Text
(5 KB)

Event Timeline