Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F7877316
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
63 KB
Subscribers
None
View Options
diff --git a/src/Wjets.cc b/src/Wjets.cc
index 6abe7dd..5458ed6 100644
--- a/src/Wjets.cc
+++ b/src/Wjets.cc
@@ -1,796 +1,796 @@
/**
* \authors The HEJ collaboration (see AUTHORS for details)
* \date 2020
* \copyright GPLv2 or later
*/
#include "HEJ/Wjets.hh"
#include <algorithm>
#include <array>
#include <cassert>
#include <cmath>
#include <iostream>
#include "HEJ/Constants.hh"
#include "HEJ/EWConstants.hh"
#include "HEJ/jets.hh"
#include "HEJ/LorentzVector.hh"
#include "HEJ/exceptions.hh"
// generated headers
#include "HEJ/currents/jV_j.hh"
#include "HEJ/currents/jVuno_j.hh"
#include "HEJ/currents/jWqqbar_j.hh"
#include "HEJ/currents/jW_qqbar_j.hh"
#include "HEJ/currents/j_Wqqbar_j.hh"
#include "HEJ/currents/jW_jqqbar.hh"
#include "HEJ/currents/jV_juno.hh"
namespace HEJ {
namespace currents {
namespace {
// short hands
using std::abs;
using std::conj;
using std::pow;
// --- Helper Functions ---
// FKL W Helper Functions
double WProp(const HLV & plbar, const HLV & pl,
ParticleProperties const & wprop
){
COM propW = COM(0.,-1.)/( (pl+plbar).m2() - wprop.mass*wprop.mass
+ COM(0.,1.)*wprop.mass*wprop.width);
double PropFactor=(propW*conj(propW)).real();
return PropFactor;
}
/**
* @brief Contraction of W + unordered jet current with FKL current
*
* See eq:wunocurrent in the developer manual for the definition
* of the W + unordered jet current
*/
template<Helicity h1, Helicity h2, Helicity pol>
double jM2Wuno(
HLV const & pg, HLV const & p1, HLV const & plbar, HLV const & pl,
HLV const & pa, HLV const & p2, HLV const & pb,
ParticleProperties const & wprop
){
using helicity::minus;
const COM u1 = U1<h1, minus, h2, pol>(p1, p2, pa, pb, pg, pl, plbar);
const COM u2 = U2<h1, minus, h2, pol>(p1, p2, pa, pb, pg, pl, plbar);
const COM l = L<h1, minus, h2, pol>(p1, p2, pa, pb, pg, pl, plbar);
const COM x = u1 - l;
const COM y = u2 + l;
double amp = C_A*C_F*C_F/2.*(norm(x)+norm(y)) - C_F/2.*(x*conj(y)).real();
amp *= WProp(plbar, pl, wprop);
const HLV q1g = pa-pl-plbar-p1-pg;
const HLV q2 = p2-pb;
const double t1 = q1g.m2();
const double t2 = q2.m2();
amp /= (t1*t2);
return amp;
}
/**
* @brief Contraction of W + extremal qqbar current with FKL current
*
* See eq:crossed in the developer manual for the definition
* of the W + extremal qqbar current.
*
*/
template<Helicity h1, Helicity h2, Helicity hg>
double jM2_W_extremal_qqbar(
HLV const & pg, HLV const & pq, HLV const & plbar, HLV const & pl,
HLV const & pqbar, HLV const & p3, HLV const & pb,
ParticleProperties const & wprop
){
const COM u1Xcontr = U1X<h1, h2, hg>(pg, pq, plbar, pl, pqbar, p3, pb);
const COM u2Xcontr = U2X<h1, h2, hg>(pg, pq, plbar, pl, pqbar, p3, pb);
const COM lXcontr = LX<h1, h2, hg>(pg, pq, plbar, pl, pqbar, p3, pb);
const COM x = u1Xcontr - lXcontr;
const COM y = u2Xcontr + lXcontr;
double amp = C_A*C_F*C_F/2.*(norm(x)+norm(y)) - C_F/2.*(x*conj(y)).real();
amp *= WProp(plbar, pl, wprop);
const HLV q1 = pg-pl-plbar-pq-pqbar;
const HLV q2 = p3-pb;
const double t1 = q1.m2();
const double t2 = q2.m2();
amp /= (t1*t2);
return amp;
}
//! W+Jets FKL Contributions
/**
* @brief W+Jets FKL Contributions, function to handle all incoming types.
* @param p1out Outgoing Particle 1. (W emission)
* @param plbar Outgoing election momenta
* @param pl Outgoing neutrino momenta
* @param p1in Incoming Particle 1. (W emission)
* @param p2out Outgoing Particle 2
* @param p2in Incoming Particle 2
* @param aqlineb Bool. Is Backwards quark line an anti-quark line?
* @param aqlinef Bool. Is Forwards quark line an anti-quark line?
*
* Calculates j_W ^\mu j_\mu.
* Handles all possible incoming states.
*/
double jW_j(HLV const & p1out, HLV plbar, HLV pl,
HLV const & p1in, HLV const & p2out, HLV const & p2in,
bool aqlineb, bool /* aqlinef */,
ParticleProperties const & wprop
){
using helicity::minus;
using helicity::plus;
const HLV q1=p1in-p1out-plbar-pl;
const HLV q2=-(p2in-p2out);
- const double WPropfact = WProp(plbar, pl, wprop);
+ const double wPropfact = WProp(plbar, pl, wprop);
// we assume that the W is emitted off a quark line
// if this is not the case, we have to apply CP conjugation,
// which is equivalent to swapping lepton and antilepton momenta
if(aqlineb) std::swap(pl, plbar);
const COM ampm = jV_j<minus, minus, minus>(p1in,p1out,p2in,p2out,pl,plbar);
const COM ampp = jV_j<minus, minus, plus>(p1in,p1out,p2in,p2out,pl,plbar);
const double Msqr = std::norm(ampm) + std::norm(ampp);
// Division by colour and Helicity average (Nc2-1)(4)
// Multiply by Cf^2
- return C_F*C_F*WPropfact*Msqr/(q1.m2()*q2.m2()*(N_C*N_C - 1)*4);
+ return C_F*C_F*wPropfact*Msqr/(q1.m2()*q2.m2()*(N_C*N_C - 1)*4);
}
} // Anonymous Namespace
double ME_W_qQ(
HLV const & p1out,
HLV const & plbar, HLV const & pl,
HLV const & p1in,
HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jW_j(p1out, plbar, pl, p1in, p2out, p2in, false, false, wprop);
}
double ME_W_qQbar(
HLV const & p1out,
HLV const & plbar, HLV const & pl,
HLV const & p1in,
HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jW_j(p1out, plbar, pl, p1in, p2out, p2in, false, true, wprop);
}
double ME_W_qbarQ(
HLV const & p1out,
HLV const & plbar, HLV const & pl,
HLV const & p1in,
HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jW_j(p1out, plbar, pl, p1in, p2out, p2in, true, false, wprop);
}
double ME_W_qbarQbar(
HLV const & p1out,
HLV const & plbar, HLV const & pl,
HLV const & p1in,
HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jW_j(p1out, plbar, pl, p1in, p2out, p2in, true, true, wprop);
}
double ME_W_qg(
HLV const & p1out,
HLV const & plbar, HLV const & pl,
HLV const & p1in,
HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jW_j(p1out, plbar, pl, p1in, p2out, p2in, false, false, wprop)
*K_g(p2out, p2in)/C_F;
}
double ME_W_qbarg(
HLV const & p1out,
HLV const & plbar, HLV const & pl,
HLV const & p1in,
HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jW_j(p1out, plbar, pl, p1in, p2out, p2in, true, false, wprop)
*K_g(p2out, p2in)/C_F;
}
namespace {
// helicity amplitude squares for contraction of W current with unordered
// current
template<Helicity h2, Helicity hg>
double ampsq_jW_juno(
HLV const & pa, HLV const & p1,
HLV const & pb, HLV const & p2,
HLV const & pg,
HLV const & pl, HLV const & plbar
){
using helicity::minus;
const COM u1 = U1_jV<minus, minus, h2, hg>(pa,p1,pb,p2,pg,pl,plbar);
const COM u2 = U2_jV<minus, minus, h2, hg>(pa,p1,pb,p2,pg,pl,plbar);
const COM l = L_jV<minus, minus, h2, hg>(pa,p1,pb,p2,pg,pl,plbar);
return 2.*C_F*std::real((l-u1)*std::conj(l+u2))
+ 2.*C_F*C_F/3.*std::norm(u1+u2)
;
}
/**
* @brief W+Jets Unordered Contributions, function to handle all incoming types.
* @param p1out Outgoing Particle 1. (W emission)
* @param plbar Outgoing election momenta
* @param pl Outgoing neutrino momenta
* @param p1in Incoming Particle 1. (W emission)
* @param p2out Outgoing Particle 2 (Quark, unordered emission this side.)
* @param p2in Incoming Particle 2 (Quark, unordered emission this side.)
* @param pg Unordered Gluon momenta
* @param aqlineb Bool. Is Backwards quark line an anti-quark line?
* @param aqlinef Bool. Is Forwards quark line an anti-quark line?
*
* Calculates j_W ^\mu j_{uno}_\mu. Ie, unordered with W emission
* opposite side. Handles all possible incoming states.
*
* @TODO use const & for pl plbar
*/
double jW_juno(
HLV const & p1out, HLV plbar, HLV pl, HLV const & p1in,
HLV const & p2out, HLV const & p2in, HLV const & pg, bool aqlineb,
bool /* aqlinef */,
ParticleProperties const & wprop
){
using helicity::minus;
using helicity::plus;
// we assume that the W is emitted off a quark line
// if this is not the case, we have to apply CP conjugation,
// which is equivalent to swapping lepton and antilepton momenta
if(aqlineb) std::swap(pl, plbar);
// helicity assignments assume aqlinef == false
// in the end, this is irrelevant since we sum over all helicities
const double ampsq =
+ ampsq_jW_juno<minus, minus>(p1in,p1out,p2in,p2out,pg,pl,plbar)
+ ampsq_jW_juno<minus, plus>(p1in,p1out,p2in,p2out,pg,pl,plbar)
+ ampsq_jW_juno<plus, minus>(p1in,p1out,p2in,p2out,pg,pl,plbar)
+ ampsq_jW_juno<plus, plus>(p1in,p1out,p2in,p2out,pg,pl,plbar)
;
const HLV q1=p1in-p1out-plbar-pl;
const HLV q2=-(p2in-p2out-pg);
return WProp(plbar, pl, wprop)*ampsq/((16)*(q2.m2()*q1.m2()));
}
} // Anonymous Namespace
double ME_W_unob_qQ(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl, ParticleProperties
const & wprop
){
return jW_juno(p2out, plbar, pl, p2in, p1out, p1in, pg, false, false, wprop);
}
double ME_W_unob_qQbar(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jW_juno(p2out, plbar, pl, p2in, p1out, p1in, pg, false, true, wprop);
}
double ME_W_unob_qbarQ(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jW_juno(p2out, plbar, pl, p2in, p1out, p1in, pg, true, false, wprop);
}
double ME_W_unob_qbarQbar(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jW_juno(p2out, plbar, pl, p2in, p1out, p1in, pg, true, true, wprop);
}
namespace {
// helicity sum helper for jWuno_j(...)
template<Helicity h1>
double jWuno_j_helsum(
HLV const & pg, HLV const & p1, HLV const & plbar, HLV const & pl,
HLV const & pa, HLV const & p2, HLV const & pb,
ParticleProperties const & wprop
){
using helicity::minus;
using helicity::plus;
const double ME2h1pp = jM2Wuno<h1, plus, plus>(
pg, p1, plbar, pl, pa, p2, pb, wprop
);
const double ME2h1pm = jM2Wuno<h1, plus, minus>(
pg, p1, plbar, pl, pa, p2, pb, wprop
);
const double ME2h1mp = jM2Wuno<h1, minus, plus>(
pg, p1, plbar, pl, pa, p2, pb, wprop
);
const double ME2h1mm = jM2Wuno<h1, minus, minus>(
pg, p1, plbar, pl, pa, p2, pb, wprop
);
return ME2h1pp + ME2h1pm + ME2h1mp + ME2h1mm;
}
/**
* @brief W+Jets Unordered Contributions, function to handle all incoming
* @types.
* @param pg Unordered Gluon momenta
* @param p1out Outgoing Particle 1. (Quark - W and Uno emission)
* @param plbar Outgoing election momenta
* @param pl Outgoing neutrino momenta
* @param p1in Incoming Particle 1. (Quark - W and Uno emission)
* @param p2out Outgoing Particle 2
* @param p2in Incoming Particle 2
* @param aqlineb Bool. Is Backwards quark line an anti-quark line?
*
* Calculates j_W_{uno} ^\mu j_\mu. Ie, unordered with W emission same
* side. Handles all possible incoming states. Note this handles both forward
* and back- -ward Wuno emission. For forward, ensure p1out is the uno and W
* emission parton.
* @TODO: Include separate wrapper functions for forward and backward to clean
up * ME_W_unof_current in `MatrixElement.cc`.
*/
double jWuno_j(
HLV const & pg, HLV const & p1out, HLV const & plbar, HLV const & pl,
HLV const & p1in, HLV const & p2out, HLV const & p2in, bool aqlineb,
ParticleProperties const & wprop
){
const auto helsum = aqlineb?
jWuno_j_helsum<helicity::plus>:
jWuno_j_helsum<helicity::minus>;
//Helicity sum and average over initial states
return helsum(pg, p1out,plbar,pl,p1in,p2out,p2in, wprop)/(4.*C_A*C_A);
}
} // Anonymous Namespace
double ME_Wuno_qQ(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jWuno_j(pg, p1out, plbar, pl, p1in, p2out, p2in, false, wprop);
}
double ME_Wuno_qQbar(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jWuno_j(pg, p1out, plbar, pl, p1in, p2out, p2in, false, wprop);
}
double ME_Wuno_qbarQ(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jWuno_j(pg, p1out, plbar, pl, p1in, p2out, p2in, true, wprop);
}
double ME_Wuno_qbarQbar(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jWuno_j(pg, p1out, plbar, pl, p1in, p2out, p2in, true, wprop);
}
double ME_Wuno_qg(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jWuno_j(pg, p1out, plbar, pl, p1in, p2out, p2in, false, wprop)
*K_g(p2out, p2in)/C_F;
}
double ME_Wuno_qbarg(
HLV const & p1out, HLV const & p1in, HLV const & p2out, HLV const & p2in,
HLV const & pg, HLV const & plbar, HLV const & pl,
ParticleProperties const & wprop
){
return jWuno_j(pg, p1out, plbar, pl, p1in, p2out, p2in, true, wprop)
*K_g(p2out, p2in)/C_F;
}
// helicity sum helper for jWqqx_j(...)
template<Helicity h1>
double jWqqx_j_helsum(
HLV const & pg, HLV const & pq, HLV const & plbar, HLV const & pl,
HLV const & pqbar, HLV const & p3, HLV const & pb,
ParticleProperties const & wprop
){
using helicity::minus;
using helicity::plus;
- const double ME2h1pp = jM2_W_extremal_qqbar<h1, plus, plus>(
+ const double amp_h1pp = jM2_W_extremal_qqbar<h1, plus, plus>(
pg, pq, plbar, pl, pqbar, p3, pb, wprop
);
- const double ME2h1pm = jM2_W_extremal_qqbar<h1, plus, minus>(
+ const double amp_h1pm = jM2_W_extremal_qqbar<h1, plus, minus>(
pg, pq, plbar, pl, pqbar, p3, pb, wprop
);
- const double ME2h1mp = jM2_W_extremal_qqbar<h1, minus, plus>(
+ const double amp_h1mp = jM2_W_extremal_qqbar<h1, minus, plus>(
pg, pq, plbar, pl, pqbar, p3, pb, wprop
);
- const double ME2h1mm = jM2_W_extremal_qqbar<h1, minus, minus>(
+ const double amp_h1mm = jM2_W_extremal_qqbar<h1, minus, minus>(
pg, pq, plbar, pl, pqbar, p3, pb, wprop
);
- return ME2h1pp + ME2h1pm + ME2h1mp + ME2h1mm;
+ return amp_h1pp + amp_h1pm + amp_h1mp + amp_h1mm;
}
/**
* @brief W+Jets Extremal qqx Contributions, function to handle all incoming
* @types.
* @param pgin Incoming gluon which will split into qqx.
* @param pqout Quark of extremal qqx outgoing (W-Emission).
* @param plbar Outgoing anti-lepton momenta
* @param pl Outgoing lepton momenta
* @param pqbarout Anti-quark of extremal qqx pair. (W-Emission)
* @param pout Outgoing Particle 2 (end of FKL chain)
* @param p2in Incoming Particle 2
* @param aqlinef Bool. Is Forwards quark line an anti-quark line?
*
* Calculates j_W_{qqx} ^\mu j_\mu. Ie, Ex-QQX with W emission same side.
* Handles all possible incoming states. Calculated via crossing symmetry from
* jWuno_j.
*/
double jWqqx_j(
HLV const & pgin, HLV const & pqout, HLV const & plbar, HLV const & pl,
HLV const & pqbarout, HLV const & p2out, HLV const & p2in, bool aqlinef,
ParticleProperties const & wprop
){
const auto helsum = aqlinef?
jWqqx_j_helsum<helicity::plus>:
jWqqx_j_helsum<helicity::minus>;
//Helicity sum and average over initial states.
double ME2 = helsum(pgin, pqout, plbar, pl, pqbarout, p2out, p2in, wprop)/
(4.*C_A*C_A);
//Correct colour averaging after crossing:
ME2*=(3.0/8.0);
return ME2;
}
double ME_WExqqx_qbarqQ(
HLV const & pgin, HLV const & pqout, HLV const & plbar, HLV const & pl,
HLV const & pqbarout, HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jWqqx_j(pgin, pqout, plbar, pl, pqbarout, p2out, p2in, false, wprop);
}
double ME_WExqqx_qqbarQ(
HLV const & pgin, HLV const & pqbarout, HLV const & plbar, HLV const & pl,
HLV const & pqout, HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jWqqx_j(pgin, pqbarout, plbar, pl, pqout, p2out, p2in, true, wprop);
}
double ME_WExqqx_qbarqg(
HLV const & pgin, HLV const & pqout, HLV const & plbar, HLV const & pl,
HLV const & pqbarout, HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jWqqx_j(pgin, pqout, plbar, pl, pqbarout, p2out, p2in, false, wprop)
*K_g(p2out,p2in)/C_F;
}
double ME_WExqqx_qqbarg(
HLV const & pgin, HLV const & pqbarout, HLV const & plbar, HLV const & pl,
HLV const & pqout, HLV const & p2out, HLV const & p2in,
ParticleProperties const & wprop
){
return jWqqx_j(pgin, pqbarout, plbar, pl, pqout, p2out, p2in, true, wprop)
*K_g(p2out,p2in)/C_F;
}
namespace {
template<Helicity h1, Helicity hg>
double jW_jqqbar(
HLV const & pb,
HLV const & p2,
HLV const & p3,
HLV const & pa,
HLV const & p1,
HLV const & pl,
HLV const & plbar
){
static constexpr COM cm1m1 = 8./3.;
static constexpr COM cm2m2 = 8./3.;
static constexpr COM cm3m3 = 6.;
static constexpr COM cm1m2 =-1./3.;
static constexpr COM cm1m3 = COM{0.,-3.};
static constexpr COM cm2m3 = COM{0.,3.};
const COM m1 = jW_qggm1<h1,hg>(pb,p2,p3,pa,p1,pl,plbar);
const COM m2 = jW_qggm2<h1,hg>(pb,p2,p3,pa,p1,pl,plbar);
const COM m3 = jW_qggm3<h1,hg>(pb,p2,p3,pa,p1,pl,plbar);
return real(
cm1m1*pow(abs(m1),2) + cm2m2*pow(abs(m2),2)
+ cm3m3*pow(abs(m3),2) + 2.*real(cm1m2*m1*conj(m2))
)
+ 2.*real(cm1m3*m1*conj(m3))
+ 2.*real(cm2m3*m2*conj(m3)) ;
}
} // Anonymous Namespace
// contraction of W current with extremal qqbar on the other side
double ME_W_Exqqx_QQq(
HLV const & pa, HLV const & pb,
HLV const & p1, HLV const & p2,
HLV const & p3, HLV const & plbar, HLV const & pl, bool aqlinepa,
ParticleProperties const & wprop
){
using helicity::minus;
using helicity::plus;
- const double WPropfact = WProp(plbar, pl, wprop);
- const double prefactor = 2.*WPropfact/24./4./(
+ const double wPropfact = WProp(plbar, pl, wprop);
+ const double prefactor = 2.*wPropfact/24./4./(
(pa-p1-pl-plbar).m2()*(p2+p3-pb).m2()
);
if(aqlinepa) {
return prefactor*(
jW_jqqbar<plus, minus>(pb,p2,p3,pa,p1,pl,plbar)
+ jW_jqqbar<plus, plus>(pb,p2,p3,pa,p1,pl,plbar)
);
}
return prefactor*(
jW_jqqbar<minus, minus>(pb,p2,p3,pa,p1,pl,plbar)
+ jW_jqqbar<minus, plus>(pb,p2,p3,pa,p1,pl,plbar)
);
}
namespace {
// helper function for matrix element for W + Jets with central qqbar
template<Helicity h1a, Helicity h4b>
double amp_WCenqqx_qq(
HLV const & pa, HLV const & p1,
HLV const & pb, HLV const & p4,
HLV const & pq, HLV const & pqbar,
HLV const & pl, HLV const & plbar,
HLV const & q11, HLV const & q12
){
const COM sym = M_sym_W<h1a, h4b>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, q11, q12
);
const COM cross = M_cross_W<h1a, h4b>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, q11, q12
);
const COM uncross = M_uncross_W<h1a, h4b>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, q11, q12
);
// Colour factors
static constexpr COM cmsms = 3.;
static constexpr COM cmumu = 4./3.;
static constexpr COM cmcmc = 4./3.;
static constexpr COM cmsmu = COM{0., 3./2.};
static constexpr COM cmsmc = COM{0.,-3./2.};
static constexpr COM cmumc = -1./6.;
return real(
cmsms*pow(abs(sym),2)
+cmumu*pow(abs(uncross),2)
+cmcmc*pow(abs(cross),2)
)
+2.*real(cmsmu*sym*conj(uncross))
+2.*real(cmsmc*sym*conj(cross))
+2.*real(cmumc*uncross*conj(cross))
;
}
} // Anonymous Namespace
// matrix element for W + Jets with W emission off central qqbar
double ME_WCenqqx_qq(
HLV const & pa, HLV const & pb, HLV const & pl, HLV const & plbar,
std::vector<HLV> const & partons, bool /* aqlinepa */, bool /* aqlinepb */, bool
qqxmarker, int nabove, ParticleProperties const & wprop
){
using helicity::plus;
using helicity::minus;
CLHEP::HepLorentzVector q1 = pa;
for(int i = 0; i <= nabove; ++i){
q1 -= partons[i];
}
const auto qq = split_into_lightlike(q1);
// since q1.m2() < 0 the following assertion is always true
// see documentation for split_into_lightlike
assert(qq.second.e() < 0);
HLV pq, pqbar;
if (qqxmarker){
pqbar = partons[nabove+1];
pq = partons[nabove+2];}
else{
pq = partons[nabove+1];
pqbar = partons[nabove+2];
}
const HLV p1 = partons.front();
const HLV p4 = partons.back();
// 4 Different Helicity Choices (Differs from Pure Jet Case, where there is
// also the choice in qqbar helicity.
// the first helicity label is for aqlinepa == true,
// the second one for aqlinepb == true
// In principle the corresponding helicity should be flipped
// if either of them is false, but we sum up all helicities,
// so this has no effect in the end.
const double amp_mm = amp_WCenqqx_qq<minus, minus>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double amp_mp = amp_WCenqqx_qq<minus, plus>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double amp_pm = amp_WCenqqx_qq<plus, minus>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double amp_pp = amp_WCenqqx_qq<plus, plus>(
pa, p1, pb, p4, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double t1 = q1.m2();
const double t3 = (q1-pl-plbar-pq-pqbar).m2();
const double amp = WProp(plbar, pl, wprop)*(
amp_mm+amp_mp+amp_pm+amp_pp
)/(9.*4.*t1*t1*t3*t3);
return amp;
}
// helper function for matrix element for W + Jets with central qqbar
// W emitted off extremal parton
// @TODO: code duplication with amp_WCenqqx_qq
template<Helicity h1a, Helicity hqqbar>
double amp_W_Cenqqx_qq(
HLV const & pa, HLV const & p1,
HLV const & pb, HLV const & pn,
HLV const & pq, HLV const & pqbar,
HLV const & pl, HLV const & plbar,
HLV const & q11, HLV const & q12
){
const COM crossed = M_cross<h1a, hqqbar>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, q11, q12
);
const COM uncrossed = M_qbar<h1a, hqqbar>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, q11, q12
);
const COM sym = M_sym<h1a, hqqbar>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, q11, q12
);
//Colour factors:
static constexpr COM cmsms = 3.;
static constexpr COM cmumu = 4./3.;
static constexpr COM cmcmc = 4./3.;
static constexpr COM cmsmu = COM{0.,3./2.};
static constexpr COM cmsmc = COM{0.,-3./2.};
static constexpr COM cmumc = -1./6.;
return real(
cmsms*pow(abs(sym),2)
+cmumu*pow(abs(uncrossed),2)
+cmcmc*pow(abs(crossed),2)
)
+2.*real(cmsmu*sym*conj(uncrossed))
+2.*real(cmsmc*sym*conj(crossed))
+2.*real(cmumc*uncrossed*conj(crossed))
;
}
// matrix element for W + Jets with W emission *not* off central qqbar
double ME_W_Cenqqx_qq(
HLV pa, HLV pb, HLV pl,HLV plbar,
std::vector<HLV> partons, bool aqlinepa, bool aqlinepb,
bool qqxmarker, int nabove, int nbelow, bool forwards,
ParticleProperties const & wprop
){
using helicity::minus;
using helicity::plus;
if (!forwards){ //If Emission from Leg a instead, flip process.
std::swap(pa, pb);
std::reverse(partons.begin(),partons.end());
std::swap(aqlinepa, aqlinepb);
qqxmarker = !qqxmarker;
std::swap(nabove,nbelow);
}
HLV q1=pa;
for(int i=0;i<nabove+1;++i){
q1-=partons.at(i);
}
const auto qq = split_into_lightlike(q1);
HLV pq, pqbar;
if (qqxmarker){
pqbar = partons[nabove+1];
pq = partons[nabove+2];}
else{
pq = partons[nabove+1];
pqbar = partons[nabove+2];}
// we assume that the W is emitted off a quark line
// if this is not the case, we have to apply CP conjugation,
// which is equivalent to swapping lepton and antilepton momenta
if(aqlinepb) std::swap(pl, plbar);
const HLV p1 = partons.front();
const HLV pn = partons.back();
// helicity labels are for aqlinepa == aqlineb == false,
// In principle the helicities should be flipped
// if either of them is true, but we sum up all helicities,
// so this has no effect in the end.
const double amp_mm = amp_W_Cenqqx_qq<minus, minus>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double amp_mp = amp_W_Cenqqx_qq<minus, plus>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double amp_pm = amp_W_Cenqqx_qq<plus, minus>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double amp_pp = amp_W_Cenqqx_qq<plus, plus>(
pa, p1, pb, pn, pq, pqbar, pl, plbar, qq.first, -qq.second
);
const double t1 = q1.m2();
const double t3 = (q1 - pq - pqbar).m2();
const double amp= WProp(plbar, pl, wprop)*(
amp_mm+amp_mp+amp_pm+amp_pp
)/(9.*4.*t1*t1*t3*t3);
return amp;
}
} // namespace currents
} // namespace HEJ
diff --git a/src/Zjets.cc b/src/Zjets.cc
index 3b32cbd..77be9e8 100644
--- a/src/Zjets.cc
+++ b/src/Zjets.cc
@@ -1,510 +1,511 @@
/**
* \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/PDG_codes.hh"
#include "HEJ/jets.hh"
// generated headers
#include "HEJ/currents/jV_j.hh"
#include "HEJ/currents/jVuno_j.hh"
#include "HEJ/currents/jV_juno.hh"
namespace HEJ {
namespace currents {
namespace {
// Z propagator
COM ZProp(const double q, ParticleProperties const & zprop){
return 1. / (q - zprop.mass*zprop.mass + COM(0.,1.)*zprop.width*zprop.mass);
}
// Photon propagator
COM GProp(const double q) {
return 1. / q;
}
// Weak charge
double Zq (const ParticleID PID, const Helicity h, const double stw2, const double ctw) {
using namespace pid;
// Positive Spin
if (h == helicity::plus) {
// quarks
if (PID == d || PID == s || PID == b) return (+ 1.0 * stw2 / 3.0) / ctw;
if (PID == u || PID == c) return (- 2.0 * stw2 / 3.0) / ctw;
// antiquarks
if (PID == d_bar || PID == s_bar || PID == b_bar) return (+ 0.5 - 1.0 * stw2 / 3.0) / ctw;
if (PID == u_bar || PID == c_bar) return (- 0.5 + 2.0 * stw2 / 3.0) / ctw;
// electron
if (PID == electron) return stw2 / ctw;
}
// Negative Spin
else {
// quarks
if (PID == d || PID == s || PID == b) return (- 0.5 + 1.0 * stw2 / 3.0) / ctw;
if (PID == u || PID == c) return (+ 0.5 - 2.0 * stw2 / 3.0) / ctw;
// antiquarks
if (PID == d_bar || PID == s_bar || PID == b_bar) return (- 1.0 * stw2 / 3.0) / ctw;
if (PID == u_bar || PID == c_bar) return (+ 2.0 * stw2 / 3.0) / ctw;
// electron
if (PID == electron) return (-1.0 / 2.0 + stw2) / ctw;
}
throw std::logic_error("ERROR! No weak charge found");
}
// Electric charge
double Gq (const ParticleID PID) {
using namespace pid;
if (PID == d || PID == s || PID == b) return -1./3.;
if (PID == u || PID == c) return +2./3.;
if (PID == d_bar || PID == s_bar || PID == b_bar) return +1./3.;
if (PID == u_bar || PID == c_bar) return -2./3.;
throw std::logic_error("ERROR! No electric charge found");
}
//! Prefactor for Z+Jets Contributions
/**
* @brief Z+Jets Contributions Prefactor
* @param aptype Incoming Particle 1 type (Z emission)
- * @param PZ Z Propagator
- * @param PG Photon Propagator
+ * @param propZ Z Propagator
+ * @param propG Photon Propagator
* @param stw2 Value of sin(theta_w)^2
* @param ctw Value of cos(theta_w)
* @param res Ouput: pref[h1][hl]
*
* Calculates prefactor for Z+Jets (includes couplings and propagators)
*/
- void Z_amp_pref(const ParticleID aptype, const COM PZ, const COM PG,
+ void Z_amp_pref(const ParticleID aptype,
+ COM const & propZ, COM const & propG,
const double stw2, const double ctw, COM (&res)[2][2]
){
using helicity::plus;
using helicity::minus;
- const double Zq_a_p = Zq(aptype, plus, stw2, ctw);
- const double Zq_a_m = Zq(aptype, minus, stw2, ctw);
- const double Ze_p = Zq(pid::electron, plus, stw2, ctw);
- const double Ze_m = Zq(pid::electron, minus, stw2, ctw);
- const double Gq_a = Gq(aptype);
+ const double zq_a_p = Zq(aptype, plus, stw2, ctw);
+ const double zq_a_m = Zq(aptype, minus, stw2, ctw);
+ const double ze_p = Zq(pid::electron, plus, stw2, ctw);
+ const double ze_m = Zq(pid::electron, minus, stw2, ctw);
+ const double gq_a = Gq(aptype);
- res[1][1] = -2.*(Zq_a_p * Ze_p * PZ - Gq_a * PG * stw2);
- res[1][0] = -2.*(Zq_a_p * Ze_m * PZ - Gq_a * PG * stw2);
- res[0][0] = -2.*(Zq_a_m * Ze_m * PZ - Gq_a * PG * stw2);
- res[0][1] = -2.*(Zq_a_m * Ze_p * PZ - Gq_a * PG * stw2);
+ res[1][1] = -2.*(zq_a_p * ze_p * propZ - gq_a * propG * stw2);
+ res[1][0] = -2.*(zq_a_p * ze_m * propZ - gq_a * propG * stw2);
+ res[0][0] = -2.*(zq_a_m * ze_m * propZ - gq_a * propG * stw2);
+ res[0][1] = -2.*(zq_a_m * ze_p * propZ - gq_a * propG * stw2);
}
//! Z+Jets FKL Contribution
/**
* @brief Z+Jets FKL Contribution
* @param pa Incoming Particle 1 (Z emission)
* @param pb Incoming Particle 2
* @param p1 Outgoing Particle 1 (Z emission)
* @param p2 Outgoing Particle 2
* @param pep Outgoing positron
* @param pem Outgoing electron
* @param res Ouput: jZ_j[h1][hl][h2]
*
* Calculates j_Z^\mu j_\mu.
*/
void jZ_j(const HLV & pa, const HLV & pb, const HLV & p1, const HLV & p2,
const HLV & pep, const HLV & pem, COM (&res)[2][2][2]
){
using helicity::plus;
using helicity::minus;
res[1][1][1] = jV_j<plus, plus, plus> (pa, p1, pb, p2, pem, pep);
res[1][1][0] = jV_j<plus, plus, minus>(pa, p1, pb, p2, pem, pep);
res[1][0][1] = jV_j<plus, minus, plus> (pa, p1, pb, p2, pem, pep);
res[1][0][0] = jV_j<plus, minus, minus>(pa, p1, pb, p2, pem, pep);
res[0][0][0] = conj(res[1][1][1]);
res[0][0][1] = conj(res[1][1][0]);
res[0][1][0] = conj(res[1][0][1]);
res[0][1][1] = conj(res[1][0][0]);
}
/**
* @brief Z+Jets Unordered Contribution, unordered on Z side
* @param pa Incoming Particle 1 (Z and Uno emission)
* @param pb Incoming Particle 2
* @param pg Unordered Gluon
* @param p1 Outgoing Particle 1 (Z and Uno emission)
* @param p2 Outgoing Particle 2
* @param pep Outgoing positron
* @param pem Outgoing electron
- * @param X Ouput: (U1-L)[h1][hl][h2][hg]
- * @param Y Ouput: (U2+L)[h1][hl][h2][hg]
+ * @param x Ouput: (U1-L)[h1][hl][h2][hg]
+ * @param y Ouput: (U2+L)[h1][hl][h2][hg]
*
* Calculates j_Z_{uno}^\mu j_\mu. Ie, unordered with Z emission same side.
*/
void jZuno_j(const HLV & pa, const HLV & pb, const HLV & pg, const HLV & p1, const HLV & p2,
- const HLV & pep, const HLV & pem, COM (&X)[2][2][2][2], COM (&Y)[2][2][2][2]
+ const HLV & pep, const HLV & pem, COM (&x)[2][2][2][2], COM (&y)[2][2][2][2]
){
using helicity::plus;
using helicity::minus;
- COM U1[2][2][2][2];
- U1[1][1][1][1] = HEJ::U1<plus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[1][1][1][0] = HEJ::U1<plus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U1[1][1][0][1] = HEJ::U1<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[1][1][0][0] = HEJ::U1<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- U1[1][0][1][1] = HEJ::U1<plus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[1][0][1][0] = HEJ::U1<plus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U1[1][0][0][1] = HEJ::U1<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[1][0][0][0] = HEJ::U1<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- U1[0][1][1][1] = HEJ::U1<minus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[0][1][1][0] = HEJ::U1<minus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U1[0][1][0][1] = HEJ::U1<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[0][1][0][0] = HEJ::U1<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- U1[0][0][1][1] = HEJ::U1<minus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[0][0][1][0] = HEJ::U1<minus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U1[0][0][0][1] = HEJ::U1<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U1[0][0][0][0] = HEJ::U1<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- COM U2[2][2][2][2];
- U2[1][1][1][1] = HEJ::U2<plus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[1][1][1][0] = HEJ::U2<plus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U2[1][1][0][1] = HEJ::U2<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[1][1][0][0] = HEJ::U2<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- U2[1][0][1][1] = HEJ::U2<plus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[1][0][1][0] = HEJ::U2<plus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U2[1][0][0][1] = HEJ::U2<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[1][0][0][0] = HEJ::U2<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- U2[0][1][1][1] = HEJ::U2<minus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[0][1][1][0] = HEJ::U2<minus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U2[0][1][0][1] = HEJ::U2<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[0][1][0][0] = HEJ::U2<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- U2[0][0][1][1] = HEJ::U2<minus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[0][0][1][0] = HEJ::U2<minus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- U2[0][0][0][1] = HEJ::U2<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- U2[0][0][0][0] = HEJ::U2<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- COM L[2][2][2][2];
- L[1][1][1][1] = HEJ::L<plus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[1][1][1][0] = HEJ::L<plus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- L[1][1][0][1] = HEJ::L<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[1][1][0][0] = HEJ::L<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- L[1][0][1][1] = HEJ::L<plus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[1][0][1][0] = HEJ::L<plus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- L[1][0][0][1] = HEJ::L<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[1][0][0][0] = HEJ::L<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- L[0][1][1][1] = HEJ::L<minus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[0][1][1][0] = HEJ::L<minus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- L[0][1][0][1] = HEJ::L<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[0][1][0][0] = HEJ::L<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
-
- L[0][0][1][1] = HEJ::L<minus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[0][0][1][0] = HEJ::L<minus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
- L[0][0][0][1] = HEJ::L<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
- L[0][0][0][0] = HEJ::L<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ COM u1[2][2][2][2];
+ u1[1][1][1][1] = U1<plus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[1][1][1][0] = U1<plus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u1[1][1][0][1] = U1<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[1][1][0][0] = U1<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ u1[1][0][1][1] = U1<plus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[1][0][1][0] = U1<plus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u1[1][0][0][1] = U1<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[1][0][0][0] = U1<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ u1[0][1][1][1] = U1<minus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[0][1][1][0] = U1<minus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u1[0][1][0][1] = U1<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[0][1][0][0] = U1<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ u1[0][0][1][1] = U1<minus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[0][0][1][0] = U1<minus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u1[0][0][0][1] = U1<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u1[0][0][0][0] = U1<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ COM u2[2][2][2][2];
+ u2[1][1][1][1] = U2<plus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[1][1][1][0] = U2<plus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u2[1][1][0][1] = U2<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[1][1][0][0] = U2<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ u2[1][0][1][1] = U2<plus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[1][0][1][0] = U2<plus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u2[1][0][0][1] = U2<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[1][0][0][0] = U2<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ u2[0][1][1][1] = U2<minus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[0][1][1][0] = U2<minus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u2[0][1][0][1] = U2<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[0][1][0][0] = U2<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ u2[0][0][1][1] = U2<minus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[0][0][1][0] = U2<minus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ u2[0][0][0][1] = U2<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ u2[0][0][0][0] = U2<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ COM l[2][2][2][2];
+ l[1][1][1][1] = L<plus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[1][1][1][0] = L<plus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ l[1][1][0][1] = L<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[1][1][0][0] = L<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ l[1][0][1][1] = L<plus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[1][0][1][0] = L<plus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ l[1][0][0][1] = L<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[1][0][0][0] = L<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ l[0][1][1][1] = L<minus, plus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[0][1][1][0] = L<minus, plus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ l[0][1][0][1] = L<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[0][1][0][0] = L<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
+
+ l[0][0][1][1] = L<minus, minus, plus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[0][0][1][0] = L<minus, minus, plus, minus>(p1, p2, pa, pb, pg, pem, pep);
+ l[0][0][0][1] = L<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
+ l[0][0][0][0] = L<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
for(int h1=0; h1<2; h1++){
for(int hl=0; hl<2; hl++){
for(int h2=0; h2<2; h2++){
for(int hg=0; hg<2; hg++){
- X[h1][hl][h2][hg] = U1[h1][hl][h2][hg] - L[h1][hl][h2][hg];
- Y[h1][hl][h2][hg] = U2[h1][hl][h2][hg] + L[h1][hl][h2][hg];
+ x[h1][hl][h2][hg] = u1[h1][hl][h2][hg] - l[h1][hl][h2][hg];
+ y[h1][hl][h2][hg] = u2[h1][hl][h2][hg] + l[h1][hl][h2][hg];
}
}
}
}
}
/**
* @brief Z+Jets Unordered Contribution, unordered opposite to Z side
* @param pa Incoming Particle 1 (Z emission)
* @param pb Incoming Particle 2 (unordered emission)
* @param p1 Outgoing Particle 1 (Z emission)
* @param p2 Outgoing Particle 2 (unordered emission)
* @param pg Unordered Gluon
* @param pep Outgoing positron
* @param pem Outgoing electron
- * @param X Ouput: (U1-L)[h1][hl][h2][hg]
- * @param Y Ouput: (U2+L)[h1][hl][h2][hg]
+ * @param x Ouput: (U1-L)[h1][hl][h2][hg]
+ * @param y Ouput: (U2+L)[h1][hl][h2][hg]
*
* Calculates j_Z^\mu j_{uno}_\mu. Ie, unordered with Z emission opposite side.
*/
void jZ_juno(const HLV & pa, const HLV & pb, const HLV & p1, const HLV & p2, const HLV & pg,
- const HLV & pep, const HLV & pem, COM (&X)[2][2][2][2], COM (&Y)[2][2][2][2]
+ const HLV & pep, const HLV & pem, COM (&x)[2][2][2][2], COM (&y)[2][2][2][2]
){
using helicity::plus;
using helicity::minus;
- COM U1[2][2][2][2];
- U1[1][1][1][1] = HEJ::U1_jV<plus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[1][1][1][0] = HEJ::U1_jV<plus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U1[1][1][0][1] = HEJ::U1_jV<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[1][1][0][0] = HEJ::U1_jV<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- U1[1][0][1][1] = HEJ::U1_jV<plus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[1][0][1][0] = HEJ::U1_jV<plus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U1[1][0][0][1] = HEJ::U1_jV<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[1][0][0][0] = HEJ::U1_jV<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- U1[0][1][1][1] = HEJ::U1_jV<minus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[0][1][1][0] = HEJ::U1_jV<minus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U1[0][1][0][1] = HEJ::U1_jV<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[0][1][0][0] = HEJ::U1_jV<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- U1[0][0][1][1] = HEJ::U1_jV<minus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[0][0][1][0] = HEJ::U1_jV<minus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U1[0][0][0][1] = HEJ::U1_jV<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U1[0][0][0][0] = HEJ::U1_jV<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- COM U2[2][2][2][2];
- U2[1][1][1][1] = HEJ::U2_jV<plus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[1][1][1][0] = HEJ::U2_jV<plus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U2[1][1][0][1] = HEJ::U2_jV<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[1][1][0][0] = HEJ::U2_jV<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- U2[1][0][1][1] = HEJ::U2_jV<plus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[1][0][1][0] = HEJ::U2_jV<plus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U2[1][0][0][1] = HEJ::U2_jV<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[1][0][0][0] = HEJ::U2_jV<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- U2[0][1][1][1] = HEJ::U2_jV<minus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[0][1][1][0] = HEJ::U2_jV<minus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U2[0][1][0][1] = HEJ::U2_jV<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[0][1][0][0] = HEJ::U2_jV<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- U2[0][0][1][1] = HEJ::U2_jV<minus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[0][0][1][0] = HEJ::U2_jV<minus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- U2[0][0][0][1] = HEJ::U2_jV<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- U2[0][0][0][0] = HEJ::U2_jV<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- COM L[2][2][2][2];
- L[1][1][1][1] = HEJ::L_jV<plus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[1][1][1][0] = HEJ::L_jV<plus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- L[1][1][0][1] = HEJ::L_jV<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[1][1][0][0] = HEJ::L_jV<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- L[1][0][1][1] = HEJ::L_jV<plus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[1][0][1][0] = HEJ::L_jV<plus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- L[1][0][0][1] = HEJ::L_jV<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[1][0][0][0] = HEJ::L_jV<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- L[0][1][1][1] = HEJ::L_jV<minus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[0][1][1][0] = HEJ::L_jV<minus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- L[0][1][0][1] = HEJ::L_jV<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[0][1][0][0] = HEJ::L_jV<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
-
- L[0][0][1][1] = HEJ::L_jV<minus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[0][0][1][0] = HEJ::L_jV<minus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
- L[0][0][0][1] = HEJ::L_jV<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
- L[0][0][0][0] = HEJ::L_jV<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ COM u1[2][2][2][2];
+ u1[1][1][1][1] = U1_jV<plus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[1][1][1][0] = U1_jV<plus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u1[1][1][0][1] = U1_jV<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[1][1][0][0] = U1_jV<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ u1[1][0][1][1] = U1_jV<plus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[1][0][1][0] = U1_jV<plus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u1[1][0][0][1] = U1_jV<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[1][0][0][0] = U1_jV<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ u1[0][1][1][1] = U1_jV<minus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[0][1][1][0] = U1_jV<minus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u1[0][1][0][1] = U1_jV<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[0][1][0][0] = U1_jV<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ u1[0][0][1][1] = U1_jV<minus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[0][0][1][0] = U1_jV<minus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u1[0][0][0][1] = U1_jV<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u1[0][0][0][0] = U1_jV<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ COM u2[2][2][2][2];
+ u2[1][1][1][1] = U2_jV<plus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[1][1][1][0] = U2_jV<plus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u2[1][1][0][1] = U2_jV<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[1][1][0][0] = U2_jV<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ u2[1][0][1][1] = U2_jV<plus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[1][0][1][0] = U2_jV<plus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u2[1][0][0][1] = U2_jV<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[1][0][0][0] = U2_jV<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ u2[0][1][1][1] = U2_jV<minus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[0][1][1][0] = U2_jV<minus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u2[0][1][0][1] = U2_jV<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[0][1][0][0] = U2_jV<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ u2[0][0][1][1] = U2_jV<minus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[0][0][1][0] = U2_jV<minus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ u2[0][0][0][1] = U2_jV<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ u2[0][0][0][0] = U2_jV<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ COM l[2][2][2][2];
+ l[1][1][1][1] = L_jV<plus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[1][1][1][0] = L_jV<plus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ l[1][1][0][1] = L_jV<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[1][1][0][0] = L_jV<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ l[1][0][1][1] = L_jV<plus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[1][0][1][0] = L_jV<plus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ l[1][0][0][1] = L_jV<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[1][0][0][0] = L_jV<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ l[0][1][1][1] = L_jV<minus, plus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[0][1][1][0] = L_jV<minus, plus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ l[0][1][0][1] = L_jV<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[0][1][0][0] = L_jV<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
+
+ l[0][0][1][1] = L_jV<minus, minus, plus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[0][0][1][0] = L_jV<minus, minus, plus, minus>(pa, p1, pb, p2, pg, pem, pep);
+ l[0][0][0][1] = L_jV<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
+ l[0][0][0][0] = L_jV<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
for(int h1=0; h1<2; h1++){
for(int hl=0; hl<2; hl++){
for(int h2=0; h2<2; h2++){
for(int hg=0; hg<2; hg++){
- X[h1][hl][h2][hg] = U1[h1][hl][h2][hg] - L[h1][hl][h2][hg];
- Y[h1][hl][h2][hg] = U2[h1][hl][h2][hg] + L[h1][hl][h2][hg];
+ x[h1][hl][h2][hg] = u1[h1][hl][h2][hg] - l[h1][hl][h2][hg];
+ y[h1][hl][h2][hg] = u2[h1][hl][h2][hg] + l[h1][hl][h2][hg];
}
}
}
}
}
} // Anonymous Namespace
std::vector <double> ME_Z_qQ(const HLV & pa, const HLV & pb, const HLV & p1, const HLV & p2,
const HLV & pep, const HLV & pem,
const ParticleID aptype, const ParticleID bptype,
ParticleProperties const & zprop,
const double stw2, const double ctw
){
const HLV pZ = pep + pem;
- const COM PZ = ZProp(pZ.m2(), zprop);
- const COM PG = GProp(pZ.m2());
+ const COM propZ = ZProp(pZ.m2(), zprop);
+ const COM propG = GProp(pZ.m2());
COM pref_top[2][2], pref_bot[2][2];
- Z_amp_pref(aptype, PZ, PG, stw2, ctw, pref_top);
- Z_amp_pref(bptype, PZ, PG, stw2, ctw, pref_bot);
+ Z_amp_pref(aptype, propZ, propG, stw2, ctw, pref_top);
+ Z_amp_pref(bptype, propZ, propG, stw2, ctw, pref_bot);
- COM Coeff_top[2][2][2], Coeff_bot[2][2][2];
- jZ_j(pa, pb, p1, p2, pep, pem, Coeff_top);
- jZ_j(pb, pa, p2, p1, pep, pem, Coeff_bot);
+ COM coeff_top[2][2][2], coeff_bot[2][2][2];
+ jZ_j(pa, pb, p1, p2, pep, pem, coeff_top);
+ jZ_j(pb, pa, p2, p1, pep, pem, 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++){
- const COM res_top = pref_top[h1][hl] * Coeff_top[h1][hl][h2];
- const COM res_bot = pref_bot[h2][hl] * Coeff_bot[h2][hl][h1];
+ const COM res_top = pref_top[h1][hl] * coeff_top[h1][hl][h2];
+ const COM res_bot = pref_bot[h2][hl] * coeff_bot[h2][hl][h1];
sum_top += norm(res_top);
sum_bot += norm(res_bot);
sum_mix += 2.0 * real(res_top * conj(res_bot));
}
}
}
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);
// Colour factor: (CF*CA)/2
// Colour and helicity average: 1/(4*Nc^2)
const double pref = (C_F*C_A) / (8*N_C*N_C);
return {sum_top*pref, sum_bot*pref, sum_mix*pref};
}
double ME_Z_qg(const HLV & pa, const HLV & pb, const HLV & p1, const HLV & p2,
const HLV & pep, const HLV & pem,
const ParticleID aptype, const ParticleID /*bptype*/,
ParticleProperties const & zprop,
const double stw2, const double ctw
){
const HLV pZ = pep + pem;
- const COM PZ = ZProp(pZ.m2(), zprop);
- const COM PG = GProp(pZ.m2());
+ const COM propZ = ZProp(pZ.m2(), zprop);
+ const COM propG = GProp(pZ.m2());
- COM pref[2][2], Coeff[2][2][2];
- Z_amp_pref(aptype, PZ, PG, stw2, ctw, pref);
- jZ_j(pa, pb, p1, p2, pep, pem, Coeff);
+ COM pref[2][2], coeff[2][2][2];
+ Z_amp_pref(aptype, propZ, propG, stw2, ctw, pref);
+ jZ_j(pa, pb, p1, p2, pep, pem, 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(pref[h1][hl] * Coeff[h1][hl][h2]);
+ sum += norm(pref[h1][hl] * coeff[h1][hl][h2]);
}
}
}
sum /= (pa-p1-pZ).m2()*(pb-p2).m2();
// Colour factor: (CF*CA)/2
// Colour and helicity average: 1/(4*Nc^2)
// Divide by CF because of gluon (K_g -> CA)
sum *= C_A / (8*N_C*N_C);
// Multiply by CAM
return sum * K_g(p2, pb);
}
std::vector <double> ME_Zuno_qQ(const HLV & pa, const HLV & pb,
const HLV & pg, const HLV & p1, const HLV & p2,
const HLV & pep, const HLV & pem,
const ParticleID aptype, const ParticleID bptype,
ParticleProperties const & zprop,
const double stw2, const double ctw
){
const HLV pZ = pep + pem;
- const COM PZ = ZProp(pZ.m2(), zprop);
- const COM PG = GProp(pZ.m2());
+ const COM propZ = ZProp(pZ.m2(), zprop);
+ const COM propG = GProp(pZ.m2());
COM prefact_top[2][2], prefact_bot[2][2];
- Z_amp_pref(aptype, PZ, PG, stw2, ctw, prefact_top);
- Z_amp_pref(bptype, PZ, PG, stw2, ctw, prefact_bot);
+ Z_amp_pref(aptype, propZ, propG, stw2, ctw, prefact_top);
+ Z_amp_pref(bptype, propZ, propG, stw2, ctw, prefact_bot);
- COM CoeffX_top[2][2][2][2], CoeffY_top[2][2][2][2];
- jZuno_j(pa, pb, pg, p1, p2, pep, pem, CoeffX_top, CoeffY_top);
+ COM coeffX_top[2][2][2][2], coeffY_top[2][2][2][2];
+ jZuno_j(pa, pb, pg, p1, p2, pep, pem, coeffX_top, coeffY_top);
- COM CoeffX_bot[2][2][2][2], CoeffY_bot[2][2][2][2];
- jZ_juno(pb, pa, p2, p1, pg, pep, pem, CoeffX_bot, CoeffY_bot);
+ COM coeffX_bot[2][2][2][2], coeffY_bot[2][2][2][2];
+ jZ_juno(pb, pa, p2, p1, pg, pep, pem, coeffX_bot, coeffY_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++){
for(int hg=0; hg<2; hg++){
const COM pref_top = prefact_top[h1][hl];
- const COM X_top = CoeffX_top[h1][hl][h2][hg];
- const COM Y_top = CoeffY_top[h1][hl][h2][hg];
+ const COM x_top = coeffX_top[h1][hl][h2][hg];
+ const COM y_top = coeffY_top[h1][hl][h2][hg];
const COM pref_bot = prefact_bot[h2][hl];
- const COM X_bot = CoeffX_bot[h2][hl][h1][hg];
- const COM Y_bot = CoeffY_bot[h2][hl][h1][hg];
-
- sum_top += norm(pref_top) * (C_A*C_F*C_F/2.*(norm(X_top)+norm(Y_top))
- - C_F/2.*(X_top*conj(Y_top)).real());
- sum_bot += norm(pref_bot) * (C_A*C_F*C_F/2.*(norm(X_bot)+norm(Y_bot))
- - C_F/2.*(X_bot*conj(Y_bot)).real());
-
- const COM XX = C_A*C_F*C_F/2. * pref_top * X_top * conj(pref_bot * X_bot);
- const COM YY = C_A*C_F*C_F/2. * pref_top * Y_top * conj(pref_bot * Y_bot);
- const COM XY = -C_F/2. * (pref_top * X_top * conj(pref_bot * Y_bot)
- + pref_top * Y_top * conj(pref_bot * X_bot));
- sum_mix += 2.0 * real(XX + YY + XY);
+ const COM x_bot = coeffX_bot[h2][hl][h1][hg];
+ const COM y_bot = coeffY_bot[h2][hl][h1][hg];
+
+ sum_top += norm(pref_top) * (C_A*C_F*C_F/2.*(norm(x_top)+norm(y_top))
+ - C_F/2.*(x_top*conj(y_top)).real());
+ sum_bot += norm(pref_bot) * (C_A*C_F*C_F/2.*(norm(x_bot)+norm(y_bot))
+ - C_F/2.*(x_bot*conj(y_bot)).real());
+
+ const COM xx = C_A*C_F*C_F/2. * pref_top * x_top * conj(pref_bot * x_bot);
+ const COM yy = C_A*C_F*C_F/2. * pref_top * y_top * conj(pref_bot * y_bot);
+ const COM xy = -C_F/2. * (pref_top * x_top * conj(pref_bot * y_bot)
+ + pref_top * y_top * conj(pref_bot * x_bot));
+ sum_mix += 2.0 * real(xx + yy + xy);
}
}
}
}
const double t1_top = (pa-pg-p1-pZ).m2();
const double t2_top = (pb-p2 ).m2();
const double t1_bot = (pa-pg-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);
//Helicity sum and average over initial states
const double pref = 1./(4.*C_A*C_A);
return {sum_top*pref, sum_bot*pref, sum_mix*pref};
}
double ME_Zuno_qg(const HLV & pa, const HLV & pb,
const HLV & pg, const HLV & p1, const HLV & p2,
const HLV & pep, const HLV & pem,
const ParticleID aptype, const ParticleID /*bptype*/,
ParticleProperties const & zprop,
const double stw2, const double ctw
){
const HLV pZ = pep + pem;
- const COM PZ = ZProp(pZ.m2(), zprop);
- const COM PG = GProp(pZ.m2());
+ const COM propZ = ZProp(pZ.m2(), zprop);
+ const COM propG = GProp(pZ.m2());
- COM pref[2][2], CoeffX[2][2][2][2], CoeffY[2][2][2][2];
- Z_amp_pref(aptype, PZ, PG, stw2, ctw, pref);
- jZuno_j(pa, pb, pg, p1, p2, pep, pem, CoeffX, CoeffY);
+ COM pref[2][2], coeffX[2][2][2][2], coeffY[2][2][2][2];
+ Z_amp_pref(aptype, propZ, propG, stw2, ctw, pref);
+ jZuno_j(pa, pb, pg, p1, p2, pep, pem, coeffX, coeffY);
double sum = 0.;
for(int h1=0; h1<2; h1++){
for(int hl=0; hl<2; hl++){
for(int h2=0; h2<2; h2++){
for(int hg=0; hg<2; hg++){
- const COM X = CoeffX[h1][hl][h2][hg];
- const COM Y = CoeffY[h1][hl][h2][hg];
- sum += norm(pref[h1][hl]) * (C_A*C_F*C_F/2.*(norm(X)+norm(Y))
- - C_F/2.*(X*conj(Y)).real());
+ const COM x = coeffX[h1][hl][h2][hg];
+ const COM y = coeffY[h1][hl][h2][hg];
+ sum += norm(pref[h1][hl]) * (C_A*C_F*C_F/2.*(norm(x)+norm(y))
+ - C_F/2.*(x*conj(y)).real());
}
}
}
}
sum /= (pa-pg-p1-pZ).m2()*(p2-pb).m2();
//Helicity sum and average over initial states
sum /= (4.*C_A*C_A);
// Multiply by CAM
return sum * (K_g(p2, pb) / C_F);
}
} // namespace currents
} // namespace HEJ
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Nov 19, 3:09 PM (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3804916
Default Alt Text
(63 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment