Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8309087
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
93 KB
Subscribers
None
View Options
diff --git a/src/currents.cc b/src/currents.cc
index da32b0a..168de11 100644
--- a/src/currents.cc
+++ b/src/currents.cc
@@ -1,2423 +1,1337 @@
/**
* \authors The HEJ collaboration (see AUTHORS for details)
* \date 2019
* \copyright GPLv2 or later
*/
#include "HEJ/currents.hh"
#include <iostream>
#include <limits>
#include <utility>
#include <vector>
+#include <assert.h>
#ifdef HEJ_BUILD_WITH_QCDLOOP
#include "qcdloop/qcdloop.h"
#endif
#include "HEJ/Constants.hh"
#include "HEJ/exceptions.hh"
#include "HEJ/PDG_codes.hh"
const COM looprwfactor = (COM(0.,1.)*M_PI*M_PI)/pow((2.*M_PI),4);
constexpr double infinity = std::numeric_limits<double>::infinity();
namespace {
// Loop integrals
#ifdef HEJ_BUILD_WITH_QCDLOOP
COM B0DD(HLV q, double mq)
{
static std::vector<std::complex<double>> result(3);
static auto ql_B0 = [](){
ql::Bubble<std::complex<double>,double,double> ql_B0;
ql_B0.setCacheSize(100);
return ql_B0;
}();
static std::vector<double> masses(2);
static std::vector<double> momenta(1);
for(auto & m: masses) m = mq*mq;
momenta.front() = q.m2();
ql_B0.integral(result, 1, masses, momenta);
return result[0];
}
COM C0DD(HLV q1, HLV q2, double mq)
{
static std::vector<std::complex<double>> result(3);
static auto ql_C0 = [](){
ql::Triangle<std::complex<double>,double,double> ql_C0;
ql_C0.setCacheSize(100);
return ql_C0;
}();
static std::vector<double> masses(3);
static std::vector<double> momenta(3);
for(auto & m: masses) m = mq*mq;
momenta[0] = q1.m2();
momenta[1] = q2.m2();
momenta[2] = (q1+q2).m2();
ql_C0.integral(result, 1, masses, momenta);
return result[0];
}
COM D0DD(HLV q1,HLV q2, HLV q3, double mq)
{
static std::vector<std::complex<double>> result(3);
static auto ql_D0 = [](){
ql::Box<std::complex<double>,double,double> ql_D0;
ql_D0.setCacheSize(100);
return ql_D0;
}();
static std::vector<double> masses(4);
static std::vector<double> momenta(6);
for(auto & m: masses) m = mq*mq;
momenta[0] = q1.m2();
momenta[1] = q2.m2();
momenta[2] = q3.m2();
momenta[3] = (q1+q2+q3).m2();
momenta[4] = (q1+q2).m2();
momenta[5] = (q2+q3).m2();
ql_D0.integral(result, 1, masses, momenta);
return result[0];
}
COM A1(HLV q1, HLV q2, double mt)
// As given in Eq. (B.2) of VDD
{
double q12,q22,Q2;
HLV Q;
double Delta3,mt2;
COM ans(COM(0.,0.));
q12=q1.m2();
q22=q2.m2();
Q=-q1-q2; // Define all momenta ingoing as in appendix of VDD
Q2=Q.m2();
Delta3=q12*q12+q22*q22+Q2*Q2-2*q12*q22-2*q12*Q2-2*q22*Q2;
- if (mt < 0.)
- std::cerr<<"Problem in A1! mt = "<<mt<<std::endl;
+
+ assert(mt > 0.);
+
mt2=mt*mt;
ans=looprwfactor*COM(0,-1)*C0DD(q1,q2,mt)*( 4.*mt2/Delta3*(Q2-q12-q22)
-1.-4.*q12*q22/Delta3-12.*q12*q22*Q2/Delta3/Delta3*(q12+q22-Q2) )
- looprwfactor*COM(0,-1)*( B0DD(q2,mt)-B0DD(Q,mt) )
* ( 2.*q22/Delta3+12.*q12*q22/Delta3/Delta3*(q22-q12+Q2) )
- looprwfactor*COM(0,-1)*( B0DD(q1,mt)-B0DD(Q,mt) )
* ( 2.*q12/Delta3+12.*q12*q22/Delta3/Delta3*(q12-q22+Q2) )
- 2./Delta3/16/M_PI/M_PI*(q12+q22-Q2);
return ans;
}
COM A2(HLV q1, HLV q2, double mt)
// As given in Eq. (B.2) of VDD, but with high energy limit
// of invariants taken.
{
double q12,q22,Q2;
HLV Q;
double Delta3,mt2;
COM ans(COM(0.,0.));
- if (mt < 0.)
- std::cerr<<"Problem in A2! mt = "<<mt<<std::endl;
+ assert(mt > 0.);
+
mt2=mt*mt;
q12=q1.m2();
q22=q2.m2();
Q=-q1-q2; // Define all momenta ingoing as in appendix of VDD
Q2=Q.m2();
Delta3=q12*q12+q22*q22+Q2*Q2-2*q12*q22-2*q12*Q2-2*q22*Q2;
ans=looprwfactor*COM(0,-1)*C0DD(q1,q2,mt)*( 2.*mt2+1./2.*(q12+q22-Q2)
+2.*q12*q22*Q2/Delta3 )
+looprwfactor*COM(0,-1)*(B0DD(q2,mt)-B0DD(Q,mt))
*q22*(q22-q12-Q2)/Delta3
+looprwfactor*COM(0,-1)*(B0DD(q1,mt)-B0DD(Q,mt))
*q12*(q12-q22-Q2)/Delta3+1./16/M_PI/M_PI;
return ans;
}
#else // no QCDloop
COM A1(HLV, HLV, double) {
throw std::logic_error{"A1 called without QCDloop support"};
}
COM A2(HLV, HLV, double) {
throw std::logic_error{"A2 called without QCDloop support"};
}
#endif
void to_current(const HLV & q, current & ret){
ret[0]=q.e();
ret[1]=q.x();
ret[2]=q.y();
ret[3]=q.z();
}
} // namespace anonymous
// Colour acceleration multiplier for gluons see eq. (7) in arXiv:0910.5113
// @TODO: this is not a current and should be moved somewhere else
double K_g(double p1minus, double paminus) {
return 1./2.*(p1minus/paminus + paminus/p1minus)*(HEJ::C_A - 1./HEJ::C_A) + 1./HEJ::C_A;
}
double K_g(
HLV const & pout,
HLV const & pin
) {
if(pin.z() > 0) return K_g(pout.plus(), pin.plus());
return K_g(pout.minus(), pin.minus());
}
CCurrent CCurrent::operator+(const CCurrent& other)
{
COM result_c0=c0 + other.c0;
COM result_c1=c1 + other.c1;
COM result_c2=c2 + other.c2;
COM result_c3=c3 + other.c3;
return CCurrent(result_c0,result_c1,result_c2,result_c3);
}
CCurrent CCurrent::operator-(const CCurrent& other)
{
COM result_c0=c0 - other.c0;
COM result_c1=c1 - other.c1;
COM result_c2=c2 - other.c2;
COM result_c3=c3 - other.c3;
return CCurrent(result_c0,result_c1,result_c2,result_c3);
}
CCurrent CCurrent::operator*(const double x)
{
COM result_c0=x*CCurrent::c0;
COM result_c1=x*CCurrent::c1;
COM result_c2=x*CCurrent::c2;
COM result_c3=x*CCurrent::c3;
return CCurrent(result_c0,result_c1,result_c2,result_c3);
}
CCurrent CCurrent::operator/(const double x)
{
COM result_c0=CCurrent::c0/x;
COM result_c1=CCurrent::c1/x;
COM result_c2=CCurrent::c2/x;
COM result_c3=CCurrent::c3/x;
return CCurrent(result_c0,result_c1,result_c2,result_c3);
}
CCurrent CCurrent::operator*(const COM x)
{
COM result_c0=x*CCurrent::c0;
COM result_c1=x*CCurrent::c1;
COM result_c2=x*CCurrent::c2;
COM result_c3=x*CCurrent::c3;
return CCurrent(result_c0,result_c1,result_c2,result_c3);
}
CCurrent CCurrent::operator/(const COM x)
{
COM result_c0=(CCurrent::c0)/x;
COM result_c1=(CCurrent::c1)/x;
COM result_c2=(CCurrent::c2)/x;
COM result_c3=(CCurrent::c3)/x;
return CCurrent(result_c0,result_c1,result_c2,result_c3);
}
std::ostream& operator <<(std::ostream& os, const CCurrent& cur)
{
os << "("<<cur.c0<< " ; "<<cur.c1<<" , "<<cur.c2<<" , "<<cur.c3<<")";
return os;
}
CCurrent operator * ( double x, CCurrent& m)
{
return m*x;
}
CCurrent operator * ( COM x, CCurrent& m)
{
return m*x;
}
CCurrent operator / ( double x, CCurrent& m)
{
return m/x;
}
CCurrent operator / ( COM x, CCurrent& m)
{
return m/x;
}
COM CCurrent::dot(HLV p1)
{
// Current goes (E,px,py,pz)
// Vector goes (px,py,pz,E)
return p1[3]*c0-p1[0]*c1-p1[1]*c2-p1[2]*c3;
}
COM CCurrent::dot(CCurrent p1)
{
return p1.c0*c0-p1.c1*c1-p1.c2*c2-p1.c3*c3;
}
//Current Functions
// Current for <outgoing state | mu | incoming state>
/// @TODO always use this instead of "j"
/// @TODO isn't this jio with flipt helicities?
void joi(HLV pout, bool helout, HLV pin, bool helin, current &cur) {
cur[0]=0.;
cur[1]=0.;
cur[2]=0.;
cur[3]=0.;
const double sqpop = sqrt(pout.plus());
const double sqpom = sqrt(pout.minus());
const COM poperp = pout.x() + COM(0, 1) * pout.y();
if (helout != helin) {
throw std::invalid_argument{"Non-matching helicities"};
} else if (helout == false) { // negative helicity
if (pin.plus() > pin.minus()) { // if forward
const double sqpip = sqrt(pin.plus());
cur[0] = sqpop * sqpip;
cur[1] = sqpom * sqpip * poperp / abs(poperp);
cur[2] = -COM(0,1) * cur[1];
cur[3] = cur[0];
} else { // if backward
const double sqpim = sqrt(pin.minus());
cur[0] = -sqpom * sqpim * poperp / abs(poperp);
cur[1] = -sqpim * sqpop;
cur[2] = COM(0,1) * cur[1];
cur[3] = -cur[0];
}
} else { // positive helicity
if (pin.plus() > pin.minus()) { // if forward
const double sqpip = sqrt(pin.plus());
cur[0] = sqpop * sqpip;
cur[1] = sqpom * sqpip * conj(poperp) / abs(poperp);
cur[2] = COM(0,1) * cur[1];
cur[3] = cur[0];
} else { // if backward
const double sqpim = sqrt(pin.minus());
cur[0] = -sqpom * sqpim * conj(poperp) / abs(poperp);
cur[1] = -sqpim * sqpop;
cur[2] = -COM(0,1) * cur[1];
cur[3] = -cur[0];
}
}
}
CCurrent joi (HLV pout, bool helout, HLV pin, bool helin)
{
current cur;
joi(pout, helout, pin, helin, cur);
return CCurrent(cur[0],cur[1],cur[2],cur[3]);
}
// Current for <incoming state | mu | outgoing state>
void jio(HLV pin, bool helin, HLV pout, bool helout, current &cur) {
-
- cur[0] = 0.0;
- cur[1] = 0.0;
- cur[2] = 0.0;
- cur[3] = 0.0;
- const double sqpop = sqrt(pout.plus());
- const double sqpom = sqrt(pout.minus());
- const COM poperp = pout.x() + COM(0, 1) * pout.y();
-
- if (helout != helin) {
- throw std::invalid_argument{"Non-matching helicities"};
- } else if (helout == false) { // negative helicity
- if (pin.plus() > pin.minus()) { // if forward
- const double sqpip = sqrt(pin.plus());
- cur[0] = sqpop * sqpip;
- cur[1] = sqpom * sqpip * conj(poperp) / abs(poperp);
- cur[2] = COM(0,1) * cur[1];
- cur[3] = cur[0];
- } else { // if backward
- const double sqpim = sqrt(pin.minus());
- cur[0] = -sqpom * sqpim * conj(poperp) / abs(poperp);
- cur[1] = -sqpim * sqpop;
- cur[2] = -COM(0,1) * cur[1];
- cur[3] = -cur[0];
- }
- } else { // positive helicity
- if (pin.plus() > pin.minus()) { // if forward
- const double sqpip = sqrt(pin.plus());
- cur[0] = sqpop * sqpip;
- cur[1] = sqpom * sqpip * poperp / abs(poperp);
- cur[2] = -COM(0,1) * cur[1];
- cur[3] = cur[0];
- } else { // if backward
- const double sqpim = sqrt(pin.minus());
- cur[0] = -sqpom * sqpim * poperp / abs(poperp);
- cur[1] = -sqpim * sqpop;
- cur[2] = COM(0,1) * cur[1];
- cur[3] = -cur[0];
- }
- }
+ joi(pout, !helout, pin, !helin, cur);
}
CCurrent jio (HLV pin, bool helin, HLV pout, bool helout)
{
current cur;
jio(pin, helin, pout, helout, cur);
return CCurrent(cur[0],cur[1],cur[2],cur[3]);
}
// Current for <outgoing state | mu | outgoing state>
void joo(HLV pi, bool heli, HLV pj, bool helj, current &cur) {
// Zero our current
cur[0] = 0.0;
cur[1] = 0.0;
cur[2] = 0.0;
cur[3] = 0.0;
if (heli!=helj) {
throw std::invalid_argument{"Non-matching helicities"};
} else if ( heli == true ) { // If positive helicity swap momenta
std::swap(pi,pj);
}
const double sqpjp = sqrt(pj.plus());
const double sqpjm = sqrt(pj.minus());
const double sqpip = sqrt(pi.plus());
const double sqpim = sqrt(pi.minus());
const COM piperp = pi.x() + COM(0,1) * pi.y();
const COM pjperp = pj.x() + COM(0,1) * pj.y();
const COM phasei = piperp / abs(piperp);
const COM phasej = pjperp / abs(pjperp);
cur[0] = sqpim * sqpjm * phasei * conj(phasej) + sqpip * sqpjp;
cur[1] = sqpim * sqpjp * phasei + sqpip * sqpjm * conj(phasej);
cur[2] = -COM(0, 1) * (sqpim * sqpjp * phasei - sqpip * sqpjm * conj(phasej));
cur[3] = -sqpim * sqpjm * phasei * conj(phasej) + sqpip * sqpjp;
}
CCurrent joo (HLV pi, bool heli, HLV pj, bool helj)
{
current cur;
joo(pi, heli, pj, helj, cur);
return CCurrent(cur[0],cur[1],cur[2],cur[3]);
}
-
-double ME_qQ (HLV p1out, HLV p1in, HLV p2out, HLV p2in)
-{
-
+//@{
+double j_j(HLV p1out, HLV p1in, HLV p2out, HLV p2in, bool aqlineb, bool aqlinef){
HLV q1=p1in-p1out;
HLV q2=-(p2in-p2out);
current mj1m,mj1p,mj2m,mj2p;
- joi(p1out,true,p1in,true,mj1p);
- joi(p1out,false,p1in,false,mj1m);
- joi(p2out,true,p2in,true,mj2p);
- joi(p2out,false,p2in,false,mj2m);
+
+ // Note need to flip helicities in anti-quark case.
+ joi(p1out,!aqlineb, p1in,!aqlineb, mj1p);
+ joi(p1out, aqlineb, p1in, aqlineb, mj1m);
+ joi(p2out,!aqlinef, p2in,!aqlinef, mj2p);
+ joi(p2out, aqlinef, p2in, aqlinef, mj2m);
COM Mmp=cdot(mj1m,mj2p);
COM Mmm=cdot(mj1m,mj2m);
COM Mpp=cdot(mj1p,mj2p);
COM Mpm=cdot(mj1p,mj2m);
double sst=abs2(Mmm)+abs2(Mmp)+abs2(Mpp)+abs2(Mpm);
// Multiply by Cf^2
return HEJ::C_F*HEJ::C_F*(sst)/(q1.m2()*q2.m2());
}
-double ME_qQbar (HLV p1out, HLV p1in, HLV p2out, HLV p2in)
-{
- HLV q1=p1in-p1out;
- HLV q2=-(p2in-p2out);
- current mj1m,mj1p,mj2m,mj2p;
- joi(p1out,true,p1in,true,mj1p);
- joi(p1out,false,p1in,false,mj1m);
- jio(p2in,true,p2out,true,mj2p);
- jio(p2in,false,p2out,false,mj2m);
-
- COM Mmp=cdot(mj1m,mj2p);
- COM Mmm=cdot(mj1m,mj2m);
- COM Mpp=cdot(mj1p,mj2p);
- COM Mpm=cdot(mj1p,mj2m);
-
- double sumsq=abs2(Mmm)+abs2(Mmp)+abs2(Mpp)+abs2(Mpm);
-
- // Multiply by Cf^2
- return HEJ::C_F*HEJ::C_F*(sumsq)/(q1.m2()*q2.m2());
+double ME_qQ(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
+ return j_j(p1out, p1in, p2out, p2in, false, false);
}
-double ME_qbarQbar (HLV p1out, HLV p1in, HLV p2out, HLV p2in)
-{
- HLV q1=p1in-p1out;
- HLV q2=-(p2in-p2out);
- current mj1m,mj1p,mj2m,mj2p;
- jio(p1in,true,p1out,true,mj1p);
- jio(p1in,false,p1out,false,mj1m);
- jio(p2in,true,p2out,true,mj2p);
- jio(p2in,false,p2out,false,mj2m);
-
- COM Mmp=cdot(mj1m,mj2p);
- COM Mmm=cdot(mj1m,mj2m);
- COM Mpp=cdot(mj1p,mj2p);
- COM Mpm=cdot(mj1p,mj2m);
-
- double sumsq=abs2(Mmm)+abs2(Mmp)+abs2(Mpp)+abs2(Mpm);
-
- // Multiply by Cf^2
- return HEJ::C_F*HEJ::C_F*(sumsq)/(q1.m2()*q2.m2());
+double ME_qQbar(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
+ return j_j(p1out, p1in, p2out, p2in, false, true);
}
-double ME_qg (HLV p1out, HLV p1in, HLV p2out, HLV p2in)
-// Calculates the square of the current contractions for qg scattering
-// p1: quark
-// p2: gluon
-{
- HLV q1=p1in-p1out;
- HLV q2=-(p2in-p2out);
-
- current mj1m,mj1p,mj2m,mj2p;
- joi(p1out,true,p1in,true,mj1p);
- joi(p1out,false,p1in,false,mj1m);
- joi(p2out,true,p2in,true,mj2p);
- joi(p2out,false,p2in,false,mj2m);
-
- COM Mmp=cdot(mj1m,mj2p);
- COM Mmm=cdot(mj1m,mj2m);
- COM Mpp=cdot(mj1p,mj2p);
- COM Mpm=cdot(mj1p,mj2m);
-
- const double K = K_g(p2out, p2in);
-
- // sum of spinor strings ||^2
- double a2Mmp=abs2(Mmp);
- double a2Mmm=abs2(Mmm);
- double a2Mpp=abs2(Mpp);
- double a2Mpm=abs2(Mpm);
- double sst = K/HEJ::C_A*(a2Mpp+a2Mpm+a2Mmp+a2Mmm);
-
- return HEJ::C_F*HEJ::C_A*sst/(q1.m2()*q2.m2());
-
+double ME_qbarQbar(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
+ return j_j(p1out, p1in, p2out, p2in, true, true);
}
-double ME_qbarg (HLV p1out, HLV p1in, HLV p2out, HLV p2in)
-// Calculates the square of the current contractions for qg scattering
-// p1: quark
-// p2: gluon
-{
- HLV q1=p1in-p1out;
- HLV q2=-(p2in-p2out);
-
- current mj1m,mj1p,mj2m,mj2p;
- jio(p1in,true,p1out,true,mj1p);
- jio(p1in,false,p1out,false,mj1m);
- joi(p2out,true,p2in,true,mj2p);
- joi(p2out,false,p2in,false,mj2m);
-
- COM Mmp=cdot(mj1m,mj2p);
- COM Mmm=cdot(mj1m,mj2m);
- COM Mpp=cdot(mj1p,mj2p);
- COM Mpm=cdot(mj1p,mj2m);
-
- const double K = K_g(p2out, p2in);
-
- // sum of spinor strings ||^2
- double a2Mmp=abs2(Mmp);
- double a2Mmm=abs2(Mmm);
- double a2Mpp=abs2(Mpp);
- double a2Mpm=abs2(Mpm);
- double sst = K/HEJ::C_A*(a2Mpp+a2Mpm+a2Mmp+a2Mmm);
-
- // Cf*Ca=4
- return HEJ::C_F*HEJ::C_A*sst/(q1.m2()*q2.m2());
-
+double ME_qg(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
+ return j_j(p1out, p1in, p2out, p2in, false, false)*K_g(p2out, p2in)/HEJ::C_F;
}
-double ME_gg (HLV p1out, HLV p1in, HLV p2out, HLV p2in)
-// Calculates the square of the current contractions for gg scattering
-// p1: gluon
-// p2: gluon
-{
- HLV q1=p1in-p1out;
- HLV q2=-(p2in-p2out);
-
- current mj1m,mj1p,mj2m,mj2p;
- joi(p1out,true,p1in,true,mj1p);
- joi(p1out,false,p1in,false,mj1m);
- joi(p2out,true,p2in,true,mj2p);
- joi(p2out,false,p2in,false,mj2m);
-
- COM Mmp=cdot(mj1m,mj2p);
- COM Mmm=cdot(mj1m,mj2m);
- COM Mpp=cdot(mj1p,mj2p);
- COM Mpm=cdot(mj1p,mj2m);
-
- const double K_g1 = K_g(p1out, p1in);
- const double K_g2 = K_g(p2out, p2in);
-
- // sum of spinor strings ||^2
- double a2Mmp=abs2(Mmp);
- double a2Mmm=abs2(Mmm);
- double a2Mpp=abs2(Mpp);
- double a2Mpm=abs2(Mpm);
- double sst = K_g1/HEJ::C_A*K_g2/HEJ::C_A*(a2Mpp+a2Mpm+a2Mmp+a2Mmm);
- // Ca*Ca=9
- return HEJ::C_A*HEJ::C_A*sst/(q1.m2()*q2.m2());
+double ME_qbarg(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
+ return j_j(p1out, p1in, p2out, p2in, true, false)*K_g(p2out, p2in)/(HEJ::C_F);
}
+double ME_gg(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
+ return j_j(p1out, p1in, p2out, p2in, false, false)*K_g(p1out, p1in)*K_g(p2out, p2in)/(HEJ::C_F*HEJ::C_F);
+}
+//@}
namespace {
/**
* @brief Higgs vertex contracted with current @param C1 and @param C2
*/
COM cHdot(const current & C1, const current & C2, const current & q1,
const current & q2, double mt, bool incBot, double mb)
{
if (mt == infinity) {
- return (cdot(C1,C2)*cdot(q1,q2)-cdot(C1,q2)*cdot(C2,q1))/(6*M_PI*HEJ::vev);
+ return (cdot(C1,C2)*cdot(q1,q2)-cdot(C1,q2)*cdot(C2,q1))/(3*M_PI*HEJ::vev);
}
else {
HLV vq1,vq2;
vq1.set(q1[1].real(),q1[2].real(),q1[3].real(),q1[0].real());
vq2.set(q2[1].real(),q2[2].real(),q2[3].real(),q2[0].real());
// first minus sign obtained because of q1-difference to VDD
- // Factor is because 4 mt^2 g^2/HEJ::vev A1 -> 16 pi mt^2/HEJ::vev alphas,
- // and we divide by a factor 4 at the amp sqaured level later
- // which I absorb here (i.e. I divide by 2)
- /// @TODO move factor 1/2 from S to |ME|^2 => consistent with general notation
+ // Factor is because 4 mt^2 g^2/HEJ::vev A1 -> 16 pi mt^2/HEJ::vev alphas,
if(!(incBot))
- return 8.*M_PI*mt*mt/HEJ::vev*(-cdot(C1,q2)*cdot(C2,q1)*A1(-vq1,vq2,mt)-cdot(C1,C2)*A2(-vq1,vq2,mt));
+ return 16.*M_PI*mt*mt/HEJ::vev*(-cdot(C1,q2)*cdot(C2,q1)*A1(-vq1,vq2,mt)-cdot(C1,C2)*A2(-vq1,vq2,mt));
else
- return 8.*M_PI*mt*mt/HEJ::vev*(-cdot(C1,q2)*cdot(C2,q1)*A1(-vq1,vq2,mt)-cdot(C1,C2)*A2(-vq1,vq2,mt))
- + 8.*M_PI*mb*mb/HEJ::vev*(-cdot(C1,q2)*cdot(C2,q1)*A1(-vq1,vq2,mb)-cdot(C1,C2)*A2(-vq1,vq2,mb));
+ return 16.*M_PI*mt*mt/HEJ::vev*(-cdot(C1,q2)*cdot(C2,q1)*A1(-vq1,vq2,mt)-cdot(C1,C2)*A2(-vq1,vq2,mt))
+ + 16.*M_PI*mb*mb/HEJ::vev*(-cdot(C1,q2)*cdot(C2,q1)*A1(-vq1,vq2,mb)-cdot(C1,C2)*A2(-vq1,vq2,mb));
}
}
} // namespace anonymous
-
-double ME_H_qQ (HLV p1out, HLV p1in,
- HLV p2out, HLV p2in,
- HLV q1, HLV q2,
- double mt, bool incBot, double mb)
-{
+//@{
+double j_h_j(HLV p1out, HLV p1in, HLV p2out, HLV p2in,
+ HLV q1, HLV q2, double mt, bool incBot,
+ double mb, bool aqlineb, bool aqlinef){
current j1p,j1m,j2p,j2m, q1v, q2v;
- joi (p1out,true,p1in,true,j1p);
- joi (p1out,false,p1in,false,j1m);
-
- joi (p2out,true,p2in,true,j2p);
- joi (p2out,false,p2in,false,j2m);
+ // Note need to flip helicities in anti-quark case.
+ joi(p1out,!aqlineb, p1in,!aqlineb, j1p);
+ joi(p1out, aqlineb, p1in, aqlineb, j1m);
+ joi(p2out,!aqlinef, p2in,!aqlinef, j2p);
+ joi(p2out, aqlinef, p2in, aqlinef, j2m);
to_current(q1, q1v);
to_current(q2, q2v);
COM Mmp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
COM Mmm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
COM Mpp=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
COM Mpm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
- double sst=abs2(Mmp)+abs2(Mmm)+abs2(Mpp)+abs2(Mpm);
- return sst/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
-}
-
-double ME_H_qQbar (HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
- double mt, bool incBot, double mb
-){
- current j1p,j1m,j2p,j2m,q1v,q2v;
-
- joi (p1out,true,p1in,true,j1p);
- joi (p1out,false,p1in,false,j1m);
- jio (p2in,true,p2out,true,j2p);
-
- jio (p2in,false,p2out,false,j2m);
-
- to_current(q1, q1v);
- to_current(q2, q2v);
-
- COM Mmp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
- COM Mmm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
- COM Mpp=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
- COM Mpm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
+ // average over helicities
+ const double sst=(abs2(Mmp)+abs2(Mmm)+abs2(Mpp)+abs2(Mpm))/4.;
- double sst=abs2(Mmp)+abs2(Mmm)+abs2(Mpp)+abs2(Mpm);
return sst/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
}
-double ME_H_qbarQ (HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
- double mt, bool incBot, double mb
-){
- current j1p,j1m,j2p,j2m,q1v,q2v;
-
- jio (p1in,true,p1out,true,j1p);
- jio (p1in,false,p1out,false,j1m);
-
- joi (p2out,true,p2in,true,j2p);
- joi (p2out,false,p2in,false,j2m);
-
- to_current(q1, q1v);
- to_current(q2, q2v);
-
- COM Mmp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
- COM Mmm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
- COM Mpp=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
- COM Mpm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
-
- double sst=abs2(Mmp)+abs2(Mmm)+abs2(Mpp)+abs2(Mpm);
- return sst/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
+double ME_H_qQ(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, false, false);
}
-double ME_H_qbarQbar (HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
- double mt, bool incBot, double mb
-){
- current j1p,j1m,j2p,j2m,q1v,q2v;
-
- jio (p1in,true,p1out,true,j1p);
- jio (p1in,false,p1out,false,j1m);
-
- jio (p2in,true,p2out,true,j2p);
- jio (p2in,false,p2out,false,j2m);
-
- to_current(q1, q1v);
- to_current(q2, q2v);
-
- COM Mmp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
- COM Mmm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
- COM Mpp=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
- COM Mpm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
-
- double sst=abs2(Mmp)+abs2(Mmm)+abs2(Mpp)+abs2(Mpm);
- return sst/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
+double ME_H_qQbar(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, false, true);
}
-double ME_H_qg (HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
- double mt, bool incBot, double mb
-){
-// q~p1 g~p2 (i.e. ALWAYS p1 for quark, p2 for gluon)
-// should be called with q1 meant to be contracted with p2 in first part of vertex
-// (i.e. if g is backward, q1 is forward)
- current j1p,j1m,j2p,j2m,q1v,q2v;
-
- joi (p1out,true,p1in,true,j1p);
- joi (p1out,false,p1in,false,j1m);
-
- joi (p2out,true,p2in,true,j2p);
- joi (p2out,false,p2in,false,j2m);
-
- to_current(q1, q1v);
- to_current(q2, q2v);
-
- // First, calculate the non-flipping amplitudes:
-
- COM Mpp=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
- COM Mpm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
- COM Mmp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
- COM Mmm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
-
- const double K = K_g(p2out, p2in);
-
- double sst=K/HEJ::C_A*(abs2(Mmp)+abs2(Mmm)+abs2(Mpp)+abs2(Mpm));
-
- return sst/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
+double ME_H_qbarQ(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, true, false);
}
-double ME_H_qbarg (HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
- double mt, bool incBot, double mb
-){
-// qbar~p1 g~p2 (i.e. ALWAYS p1 for anti-quark, p2 for gluon)
-// should be called with q1 meant to be contracted with p2 in first part of vertex
-// (i.e. if g is backward, q1 is forward)
- current j1p,j1m,j2p,j2m,q1v,q2v;
-
- jio (p1in,true,p1out,true,j1p);
- jio (p1in,false,p1out,false,j1m);
-
- joi (p2out,true,p2in,true,j2p);
- joi (p2out,false,p2in,false,j2m);
-
- to_current(q1, q1v);
- to_current(q2, q2v);
-
- // First, calculate the non-flipping amplitudes:
-
- COM amp,amm,apm,app;
- app=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
- apm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
- amp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
- amm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
-
- double MH2sum = abs2(app)+abs2(amm)+abs2(apm)+abs2(amp);
-
- const double K = K_g(p2out, p2in);
- MH2sum*=K/HEJ::C_A;
-
- return MH2sum/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
+double ME_H_qbarQbar(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, true, true);
}
-double ME_H_gg (HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
- double mt, bool incBot, double mb
-){
-// g~p1 g~p2
-// should be called with q1 meant to be contracted with p2 in first part of vertex
-// (i.e. if g is backward, q1 is forward)
- current j1p,j1m,j2p,j2m,q1v,q2v;
-
- joi (p1out,true,p1in,true,j1p);
- joi (p1out,false,p1in,false,j1m);
-
- joi (p2out,true,p2in,true,j2p);
- joi (p2out,false,p2in,false,j2m);
-
- to_current(q1, q1v);
- to_current(q2, q2v);
-
- // First, calculate the non-flipping amplitudes:
-
- COM amp,amm,apm,app;
- app=cHdot(j1p,j2p,q1v,q2v,mt, incBot, mb);
- apm=cHdot(j1p,j2m,q1v,q2v,mt, incBot, mb);
- amp=cHdot(j1m,j2p,q1v,q2v,mt, incBot, mb);
- amm=cHdot(j1m,j2m,q1v,q2v,mt, incBot, mb);
-
- double MH2sum = abs2(app)+abs2(amm)+abs2(apm)+abs2(amp);
-
- const double K_g1 = K_g(p1out, p1in);
- const double K_g2 = K_g(p2out, p2in);
-
- MH2sum*=K_g1/HEJ::C_A*K_g2/HEJ::C_A;
+double ME_H_qg(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, false, false)*K_g(p2out,p2in)/HEJ::C_A;
+}
- return MH2sum/((p1in-p1out).m2()*(p2in-p2out).m2()*q1.m2()*q2.m2());
+double ME_H_qbarg(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, true, false)*K_g(p2out,p2in)/HEJ::C_A;
}
+double ME_H_gg(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV q1, HLV q2,
+ double mt, bool incBot, double mb){
+ return j_h_j(p1out, p1in, p2out, p2in, q1, q2, mt, incBot, mb, false, false)*(K_g(p2out,p2in)/HEJ::C_A)*(K_g(p1out,p1in)/HEJ::C_A);
+}
+//@}
namespace {
//@{
/// @brief Higgs vertex contracted with one current
- CCurrent jH (HLV pout, bool helout, HLV pin,
+ CCurrent jH(HLV pout, bool helout, HLV pin,
bool helin, HLV q1, HLV q2,
double mt, bool incBot, double mb)
{
CCurrent j2 = joi(pout,helout,pin,helin);
CCurrent jq2(q2.e(),q2.px(),q2.py(),q2.pz());
if(mt == infinity)
return ((q1.dot(q2))*j2 - j2.dot(q1)*jq2)/(3*M_PI*HEJ::vev);
else
{
if(incBot)
return (-16.*M_PI*mb*mb/HEJ::vev*j2.dot(q1)*jq2*A1(-q1,q2,mb)-16.*M_PI*mb*mb/HEJ::vev*j2*A2(-q1,q2,mb))
+ (-16.*M_PI*mt*mt/HEJ::vev*j2.dot(q1)*jq2*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j2*A2(-q1,q2,mt));
else
return (-16.*M_PI*mt*mt/HEJ::vev*j2.dot(q1)*jq2*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j2*A2(-q1,q2,mt));
}
}
-
- CCurrent jioH (HLV pin, bool helin, HLV pout,
- bool helout, HLV q1, HLV q2,
- double mt, bool incBot, double mb)
- {
-
- CCurrent j2 = jio(pin,helin,pout,helout);
- CCurrent jq2(q2.e(),q2.px(),q2.py(),q2.pz());
-
- if(mt == infinity)
- return ((q1.dot(q2))*j2 - j2.dot(q1)*jq2)/(3*M_PI*HEJ::vev);
- else
- {
- if(incBot)
- return (-16.*M_PI*mb*mb/HEJ::vev*j2.dot(q1)*jq2*A1(-q1,q2,mb)-16.*M_PI*mb*mb/HEJ::vev*j2*A2(-q1,q2,mb))
- + (-16.*M_PI*mt*mt/HEJ::vev*j2.dot(q1)*jq2*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j2*A2(-q1,q2,mt));
- else
- return (-16.*M_PI*mt*mt/HEJ::vev*j2.dot(q1)*jq2*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j2*A2(-q1,q2,mt));
- }
- }
-
- CCurrent jHtop (HLV pout, bool helout, HLV pin,
- bool helin, HLV q1, HLV q2,
- double mt, bool incBot, double mb)
- {
-
- CCurrent j1 = joi(pout,helout,pin,helin);
- CCurrent jq1(q1.e(),q1.px(),q1.py(),q1.pz());
-
- if(mt == infinity)
- return ((q1.dot(q2))*j1 - j1.dot(q2)*jq1)/(3*M_PI*HEJ::vev);
- else
- {
- if(incBot)
- return (-16.*M_PI*mb*mb/HEJ::vev*j1.dot(q2)*jq1*A1(-q1,q2,mb)-16.*M_PI*mb*mb/HEJ::vev*j1*A2(-q1,q2,mb))
- + (-16.*M_PI*mt*mt/HEJ::vev*j1.dot(q2)*jq1*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j1*A2(-q1,q2,mt));
- else
- return (-16.*M_PI*mt*mt/HEJ::vev*j1.dot(q2)*jq1*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j1*A2(-q1,q2,mt));
- }
- }
-
- CCurrent jioHtop (HLV pin, bool helin, HLV pout,
- bool helout, HLV q1, HLV q2,
- double mt, bool incBot, double mb)
- {
-
- CCurrent j1 = jio(pin,helin,pout,helout);
- CCurrent jq1(q1.e(),q1.px(),q1.py(),q1.pz());
-
- if(mt == infinity)
- return ((q1.dot(q2))*j1 - j1.dot(q2)*jq1)/(3*M_PI*HEJ::vev);
- else
- {
- if(incBot)
- return (-16.*M_PI*mb*mb/HEJ::vev*j1.dot(q2)*jq1*A1(-q1,q2,mb)-16.*M_PI*mb*mb/HEJ::vev*j1*A2(-q1,q2,mb))
- + (-16.*M_PI*mt*mt/HEJ::vev*j1.dot(q2)*jq1*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j1*A2(-q1,q2,mt));
- else
- return (-16.*M_PI*mt*mt/HEJ::vev*j1.dot(q2)*jq1*A1(-q1,q2,mt)-16.*M_PI*mt*mt/HEJ::vev*j1*A2(-q1,q2,mt));
- }
- }
//@}
} // namespace anonymous
-double ME_H_unof_qQ (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV qH1,
- HLV qH2, double mt, bool incBot, double mb
+//@{
+double j_h_juno(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV qH1, HLV qH2,
+ double mt, bool incBot, double mb, bool aqlineb
){
// This construction is taking rapidity order: pg > p1out >> p2out
-
HLV q1=p1in-p1out; // Top End
HLV q2=-(p2in-p2out); // Bottom End
HLV qg=p1in-p1out-pg; // Extra bit post-gluon
- CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p;
- mj1p=joi(p1out,true,p1in,true);
- mj1m=joi(p1out,false,p1in,false);
- mjH2p=jH(p2out,true,p2in,true,qH1,qH2, mt, incBot, mb);
- mjH2m=jH(p2out,false,p2in,false,qH1,qH2, mt, incBot, mb);
+ CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p,jgam,jgap,j2gm,j2gp;
+ CCurrent test1, test2, test3, test4;
+ // Note <p1|eps|pa> current split into two by gauge choice.
+ // See James C's Thesis (p72). <p1|eps|pa> -> <p1|pg><pg|pa>
+ mj1p=joi(p1out,!aqlineb, p1in,!aqlineb);
+ mj1m=joi(p1out, aqlineb, p1in, aqlineb);
+ jgap=joi(pg, !aqlineb, p1in,!aqlineb);
+ jgam=joi(pg, aqlineb, p1in, aqlineb);
+
+ // Note for function joo(): <p1+|pg+> = <pg-|p1->.
+ j2gp=joo(p1out, !aqlineb, pg, !aqlineb);
+ j2gm=joo(p1out, aqlineb, pg, aqlineb);
+
+ mjH2p=jH(p2out, true,p2in, true,qH1,qH2,mt,incBot,mb);
+ mjH2m=jH(p2out,false,p2in,false,qH1,qH2,mt,incBot,mb);
// Dot products of these which occur again and again
COM MHmp=mj1m.dot(mjH2p); // And now for the Higgs ones
COM MHmm=mj1m.dot(mjH2m);
COM MHpp=mj1p.dot(mjH2p);
COM MHpm=mj1p.dot(mjH2m);
- // Currents with pg
- CCurrent jgam,jgap,j2gm,j2gp;
- j2gp=joo(p1out,true,pg,true);
- j2gm=joo(p1out,false,pg,false);
- jgap=joi(pg,true,p1in,true);
- jgam=joi(pg,false,p1in,false);
-
- CCurrent qsum(q1+qg);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p2o(p2out),p2i(p2in);
- CCurrent p1o(p1out);
- CCurrent p1i(p1in);
+ CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm;
+ CCurrent p2o(p2out), p2i(p2in), p1o(p1out), p1i(p1in), qsum(q1+qg);
Lmm=(qsum*(MHmm) + (-2.*mjH2m.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2m
+ ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmm/2.) )/q1.m2();
Lmp=(qsum*(MHmp) + (-2.*mjH2p.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2p
+ ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmp/2.) )/q1.m2();
Lpm=(qsum*(MHpm) + (-2.*mjH2m.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2m
+ ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpm/2.) )/q1.m2();
Lpp=(qsum*(MHpp) + (-2.*mjH2p.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2p
+ ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpp/2.) )/q1.m2();
U1mm=(jgam.dot(mjH2m)*j2gm+2.*p1o*MHmm)/(p1out+pg).m2();
U1mp=(jgam.dot(mjH2p)*j2gm+2.*p1o*MHmp)/(p1out+pg).m2();
U1pm=(jgap.dot(mjH2m)*j2gp+2.*p1o*MHpm)/(p1out+pg).m2();
U1pp=(jgap.dot(mjH2p)*j2gp+2.*p1o*MHpp)/(p1out+pg).m2();
U2mm=((-1.)*j2gm.dot(mjH2m)*jgam+2.*p1i*MHmm)/(p1in-pg).m2();
U2mp=((-1.)*j2gm.dot(mjH2p)*jgam+2.*p1i*MHmp)/(p1in-pg).m2();
U2pm=((-1.)*j2gp.dot(mjH2m)*jgap+2.*p1i*MHpm)/(p1in-pg).m2();
U2pp=((-1.)*j2gp.dot(mjH2p)*jgap+2.*p1i*MHpp)/(p1in-pg).m2();
- const double cf=HEJ::C_F;
double amm,amp,apm,app;
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
+ amm=HEJ::C_F*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*HEJ::C_F*HEJ::C_F/3.*vabs2(U1mm+U2mm);
+ amp=HEJ::C_F*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*HEJ::C_F*HEJ::C_F/3.*vabs2(U1mp+U2mp);
+ apm=HEJ::C_F*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*HEJ::C_F*HEJ::C_F/3.*vabs2(U1pm+U2pm);
+ app=HEJ::C_F*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*HEJ::C_F*HEJ::C_F/3.*vabs2(U1pp+U2pp);
double ampsq=-(amm+amp+apm+app)/(q2.m2()*qH2.m2());
// Now add the t-channels for the Higgs
double th=qH1.m2()*qg.m2();
ampsq/=th;
ampsq/=16.;
- // Factor of (Cf/Ca) for each quark to match MH2qQ.
+ // Factor of (Cf/Ca) for each quark to match ME_H_qQ.
ampsq*=HEJ::C_F*HEJ::C_F/HEJ::C_A/HEJ::C_A;
return ampsq;
}
-double ME_H_unof_qbarQ (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
- // This construction is taking rapidity order: pg > p1out >> p2out
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out); // Bottom End
- HLV qg=p1in-p1out-pg; // Extra bit post-gluon
-
- CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p;
- mj1p=jio(p1in,true,p1out,true);
- mj1m=jio(p1in,false,p1out,false);
- mjH2p=jH(p2out,true,p2in,true,qH1,qH2, mt, incBot, mb);
- mjH2m=jH(p2out,false,p2in,false,qH1,qH2, mt, incBot, mb);
-
- // Dot products of these which occur again and again
- COM MHmp=mj1m.dot(mjH2p); // And now for the Higgs ones
- COM MHmm=mj1m.dot(mjH2m);
- COM MHpp=mj1p.dot(mjH2p);
- COM MHpm=mj1p.dot(mjH2m);
-
- // Currents with pg
- CCurrent jgam,jgap,j2gm,j2gp;
- j2gp=joo(pg,true,p1out,true);
- j2gm=joo(pg,false,p1out,false);
- jgap=jio(p1in,true,pg,true);
- jgam=jio(p1in,false,pg,false);
-
- CCurrent qsum(q1+qg);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p2o(p2out),p2i(p2in);
- CCurrent p1o(p1out);
- CCurrent p1i(p1in);
-
- Lmm=(qsum*(MHmm) + (-2.*mjH2m.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmm/2. ) )/q1.m2();
- Lmp=(qsum*(MHmp) + (-2.*mjH2p.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmp/2. ) )/q1.m2();
- Lpm=(qsum*(MHpm) + (-2.*mjH2m.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpm/2. ) )/q1.m2();
- Lpp=(qsum*(MHpp) + (-2.*mjH2p.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpp/2. ) )/q1.m2();
-
- U1mm=(jgam.dot(mjH2m)*j2gm+2.*p1o*MHmm)/(p1out+pg).m2();
- U1mp=(jgam.dot(mjH2p)*j2gm+2.*p1o*MHmp)/(p1out+pg).m2();
- U1pm=(jgap.dot(mjH2m)*j2gp+2.*p1o*MHpm)/(p1out+pg).m2();
- U1pp=(jgap.dot(mjH2p)*j2gp+2.*p1o*MHpp)/(p1out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH2m)*jgam+2.*p1i*MHmm)/(p1in-pg).m2();
- U2mp=((-1.)*j2gm.dot(mjH2p)*jgam+2.*p1i*MHmp)/(p1in-pg).m2();
- U2pm=((-1.)*j2gp.dot(mjH2m)*jgap+2.*p1i*MHpm)/(p1in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH2p)*jgap+2.*p1i*MHpp)/(p1in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q2.m2()*qH2.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH1.m2()*qg.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4.*4./(9.*9.); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unof_qQ(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV qH1,
+ HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p1out, p1in, p2out, p2in, qH1, qH2, mt, incBot, mb, false);
}
-double ME_H_unof_qQbar (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
- // This construction is taking rapidity order: pg > p1out >> p2out
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out); // Bottom End
- HLV qg=p1in-p1out-pg; // Extra bit post-gluon
-
- CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p;
- mj1p=joi(p1out,true,p1in,true);
- mj1m=joi(p1out,false,p1in,false);
- mjH2p=jioH(p2in,true,p2out,true,qH1,qH2, mt, incBot, mb);
- mjH2m=jioH(p2in,false,p2out,false,qH1,qH2, mt, incBot, mb);
-
- // Dot products of these which occur again and again
- COM MHmp=mj1m.dot(mjH2p); // And now for the Higgs ones
- COM MHmm=mj1m.dot(mjH2m);
- COM MHpp=mj1p.dot(mjH2p);
- COM MHpm=mj1p.dot(mjH2m);
-
- // Currents with pg
- CCurrent jgam,jgap,j2gm,j2gp;
- j2gp=joo(p1out,true,pg,true);
- j2gm=joo(p1out,false,pg,false);
- jgap=joi(pg,true,p1in,true);
- jgam=joi(pg,false,p1in,false);
-
- CCurrent qsum(q1+qg);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p2o(p2out),p2i(p2in);
- CCurrent p1o(p1out);
- CCurrent p1i(p1in);
-
- Lmm=( qsum*(MHmm) + (-2.*mjH2m.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmm/2. ) )/q1.m2();
- Lmp=( qsum*(MHmp) + (-2.*mjH2p.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmp/2. ) )/q1.m2();
- Lpm=( qsum*(MHpm) + (-2.*mjH2m.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpm/2. ) )/q1.m2();
- Lpp=( qsum*(MHpp) + (-2.*mjH2p.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpp/2. ) )/q1.m2();
-
- U1mm=(jgam.dot(mjH2m)*j2gm+2.*p1o*MHmm)/(p1out+pg).m2();
- U1mp=(jgam.dot(mjH2p)*j2gm+2.*p1o*MHmp)/(p1out+pg).m2();
- U1pm=(jgap.dot(mjH2m)*j2gp+2.*p1o*MHpm)/(p1out+pg).m2();
- U1pp=(jgap.dot(mjH2p)*j2gp+2.*p1o*MHpp)/(p1out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH2m)*jgam+2.*p1i*MHmm)/(p1in-pg).m2();
- U2mp=((-1.)*j2gm.dot(mjH2p)*jgam+2.*p1i*MHmp)/(p1in-pg).m2();
- U2pm=((-1.)*j2gp.dot(mjH2m)*jgap+2.*p1i*MHpm)/(p1in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH2p)*jgap+2.*p1i*MHpp)/(p1in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q2.m2()*qH2.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH1.m2()*qg.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4.*4./(9.*9.); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unof_qbarQ(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p1out, p1in, p2out, p2in, qH1, qH2, mt, incBot, mb, true);
}
-double ME_H_unof_qbarQbar (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
- // This construction is taking rapidity order: pg > p1out >> p2out
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out); // Bottom End
- HLV qg=p1in-p1out-pg; // Extra bit post-gluon
-
- CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p;
- mj1p=jio(p1in,true,p1out,true);
- mj1m=jio(p1in,false,p1out,false);
- mjH2p=jioH(p2in,true,p2out,true,qH1,qH2, mt, incBot, mb);
- mjH2m=jioH(p2in,false,p2out,false,qH1,qH2, mt, incBot, mb);
-
- // Dot products of these which occur again and again
- COM MHmp=mj1m.dot(mjH2p); // And now for the Higgs ones
- COM MHmm=mj1m.dot(mjH2m);
- COM MHpp=mj1p.dot(mjH2p);
- COM MHpm=mj1p.dot(mjH2m);
-
- // Currents with pg
- CCurrent jgam,jgap,j2gm,j2gp;
- j2gp=joo(pg,true,p1out,true);
- j2gm=joo(pg,false,p1out,false);
- jgap=jio(p1in,true,pg,true);
- jgam=jio(p1in,false,pg,false);
-
- CCurrent qsum(q1+qg);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p2o(p2out),p2i(p2in);
- CCurrent p1o(p1out);
- CCurrent p1i(p1in);
-
- Lmm=( qsum*(MHmm) + (-2.*mjH2m.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmm/2. ) )/q1.m2();
- Lmp=( qsum*(MHmp) + (-2.*mjH2p.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmp/2. ) )/q1.m2();
- Lpm=( qsum*(MHpm) + (-2.*mjH2m.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpm/2. ) )/q1.m2();
- Lpp=( qsum*(MHpp) + (-2.*mjH2p.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpp/2. ) )/q1.m2();
-
- U1mm=(jgam.dot(mjH2m)*j2gm+2.*p1o*MHmm)/(p1out+pg).m2();
- U1mp=(jgam.dot(mjH2p)*j2gm+2.*p1o*MHmp)/(p1out+pg).m2();
- U1pm=(jgap.dot(mjH2m)*j2gp+2.*p1o*MHpm)/(p1out+pg).m2();
- U1pp=(jgap.dot(mjH2p)*j2gp+2.*p1o*MHpp)/(p1out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH2m)*jgam+2.*p1i*MHmm)/(p1in-pg).m2();
- U2mp=((-1.)*j2gm.dot(mjH2p)*jgam+2.*p1i*MHmp)/(p1in-pg).m2();
- U2pm=((-1.)*j2gp.dot(mjH2m)*jgap+2.*p1i*MHpm)/(p1in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH2p)*jgap+2.*p1i*MHpp)/(p1in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q2.m2()*qH2.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH1.m2()*qg.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4.*4./(9.*9.); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unof_qQbar(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p1out, p1in, p2out, p2in, qH1, qH2, mt, incBot, mb, false);
}
-double ME_H_unof_qg (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
- // This construction is taking rapidity order: pg > p1out >> p2out
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out); // Bottom End
- HLV qg=p1in-p1out-pg; // Extra bit post-gluon
-
- CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p;
- mj1p=joi(p1out,true,p1in,true);
- mj1m=joi(p1out,false,p1in,false);
- mjH2p=jH(p2out,true,p2in,true,qH1,qH2, mt, incBot, mb);
- mjH2m=jH(p2out,false,p2in,false,qH1,qH2, mt, incBot, mb);
-
- // Dot products of these which occur again and again
- COM MHmp=mj1m.dot(mjH2p); // And now for the Higgs ones
- COM MHmm=mj1m.dot(mjH2m);
- COM MHpp=mj1p.dot(mjH2p);
- COM MHpm=mj1p.dot(mjH2m);
-
- // Currents with pg
- CCurrent jgam,jgap,j2gm,j2gp;
- j2gp=joo(p1out,true,pg,true);
- j2gm=joo(p1out,false,pg,false);
- jgap=joi(pg,true,p1in,true);
- jgam=joi(pg,false,p1in,false);
-
- CCurrent qsum(q1+qg);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p2o(p2out),p2i(p2in);
- CCurrent p1o(p1out);
- CCurrent p1i(p1in);
-
- Lmm=( qsum*(MHmm) + (-2.*mjH2m.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmm/2. ) )/q1.m2();
- Lmp=( qsum*(MHmp) + (-2.*mjH2p.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmp/2. ) )/q1.m2();
- Lpm=( qsum*(MHpm) + (-2.*mjH2m.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpm/2. ) )/q1.m2();
- Lpp=( qsum*(MHpp) + (-2.*mjH2p.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpp/2. ) )/q1.m2();
-
- U1mm=(jgam.dot(mjH2m)*j2gm+2.*p1o*MHmm)/(p1out+pg).m2();
- U1mp=(jgam.dot(mjH2p)*j2gm+2.*p1o*MHmp)/(p1out+pg).m2();
- U1pm=(jgap.dot(mjH2m)*j2gp+2.*p1o*MHpm)/(p1out+pg).m2();
- U1pp=(jgap.dot(mjH2p)*j2gp+2.*p1o*MHpp)/(p1out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH2m)*jgam+2.*p1i*MHmm)/(p1in-pg).m2();
- U2mp=((-1.)*j2gm.dot(mjH2p)*jgam+2.*p1i*MHmp)/(p1in-pg).m2();
- U2pm=((-1.)*j2gp.dot(mjH2m)*jgap+2.*p1i*MHpm)/(p1in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH2p)*jgap+2.*p1i*MHpp)/(p1in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q2.m2()*qH2.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH1.m2()*qg.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4./9.*4./9.; // Factor of (Cf/Ca) for each quark to match MH2qQ.
- // here we need 2 to match with the normalization
- // gq is 9./4. times the qQ
-
- const double K = K_g(p2out, p2in);
-
- return ampsq*K/HEJ::C_A*9./4.; //ca/cf = 9/4
+double ME_H_unof_qbarQbar(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p1out, p1in, p2out, p2in, qH1, qH2, mt, incBot, mb, true);
}
-double ME_H_unof_qbarg (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
- // This construction is taking rapidity order: pg > p1out >> p2out
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out); // Bottom End
- HLV qg=p1in-p1out-pg; // Extra bit post-gluon
-
- CCurrent mj1m,mj1p,mj2m,mj2p,mjH2m,mjH2p;
- mj1p=jio(p1in,true,p1out,true);
- mj1m=jio(p1in,false,p1out,false);
- mjH2p=jH(p2out,true,p2in,true,qH1,qH2, mt, incBot, mb);
- mjH2m=jH(p2out,false,p2in,false,qH1,qH2, mt, incBot, mb);
-
- // Dot products of these which occur again and again
- COM MHmp=mj1m.dot(mjH2p); // And now for the Higgs ones
- COM MHmm=mj1m.dot(mjH2m);
- COM MHpp=mj1p.dot(mjH2p);
- COM MHpm=mj1p.dot(mjH2m);
-
- // Currents with pg
- CCurrent jgam,jgap,j2gm,j2gp;
- j2gp=joo(pg,true,p1out,true);
- j2gm=joo(pg,false,p1out,false);
- jgap=jio(p1in,true,pg,true);
- jgam=jio(p1in,false,pg,false);
-
- CCurrent qsum(q1+qg);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p2o(p2out),p2i(p2in);
- CCurrent p1o(p1out);
- CCurrent p1i(p1in);
-
- Lmm=( qsum*(MHmm) + (-2.*mjH2m.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmm/2. ) )/q1.m2();
- Lmp=( qsum*(MHmp) + (-2.*mjH2p.dot(pg))*mj1m + 2.*mj1m.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHmp/2. ) )/q1.m2();
- Lpm=( qsum*(MHpm) + (-2.*mjH2m.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2m
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpm/2. ) )/q1.m2();
- Lpp=( qsum*(MHpp) + (-2.*mjH2p.dot(pg))*mj1p + 2.*mj1p.dot(pg)*mjH2p
- + ( p2o/pg.dot(p2out) + p2i/pg.dot(p2in) )*( qg.m2()*MHpp/2. ) )/q1.m2();
-
- U1mm=(jgam.dot(mjH2m)*j2gm+2.*p1o*MHmm)/(p1out+pg).m2();
- U1mp=(jgam.dot(mjH2p)*j2gm+2.*p1o*MHmp)/(p1out+pg).m2();
- U1pm=(jgap.dot(mjH2m)*j2gp+2.*p1o*MHpm)/(p1out+pg).m2();
- U1pp=(jgap.dot(mjH2p)*j2gp+2.*p1o*MHpp)/(p1out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH2m)*jgam+2.*p1i*MHmm)/(p1in-pg).m2();
- U2mp=((-1.)*j2gm.dot(mjH2p)*jgam+2.*p1i*MHmp)/(p1in-pg).m2();
- U2pm=((-1.)*j2gp.dot(mjH2m)*jgap+2.*p1i*MHpm)/(p1in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH2p)*jgap+2.*p1i*MHpp)/(p1in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q2.m2()*qH2.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH1.m2()*qg.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4./9.*4./9.; // Factor of (Cf/Ca) for each quark to match MH2qQ.
- // here we need 2 to match with the normalization
- // gq is 9./4. times the qQ
-
- const double K = K_g(p2out, p2in);
-
- return ampsq*K/HEJ::C_F;
+double ME_H_unof_qg(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p1out, p1in, p2out, p2in, qH1, qH2, mt, incBot, mb, false)*K_g(p2out,p2in)/HEJ::C_F;
}
-double ME_H_unob_qQ (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out-pg); // Extra bit pre-gluon
- HLV q3=-(p2in-p2out); // Bottom End
-
- CCurrent mjH1m,mjH1p,mj2m,mj2p;
- mjH1p=jHtop(p1out,true,p1in,true,qH1,qH2, mt, incBot, mb);
- mjH1m=jHtop(p1out,false,p1in,false,qH1,qH2, mt, incBot, mb);
- mj2p=joi(p2out,true,p2in,true);
- mj2m=joi(p2out,false,p2in,false);
-
- // Dot products of these which occur again and again
- COM MHmp=mjH1m.dot(mj2p); // And now for the Higgs ones
- COM MHmm=mjH1m.dot(mj2m);
- COM MHpp=mjH1p.dot(mj2p);
- COM MHpm=mjH1p.dot(mj2m);
-
- // Currents with pg
- CCurrent jgbm,jgbp,j2gm,j2gp;
- j2gp=joo(p2out,true,pg,true);
- j2gm=joo(p2out,false,pg,false);
- jgbp=joi(pg,true,p2in,true);
- jgbm=joi(pg,false,p2in,false);
-
- CCurrent qsum(q2+q3);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p1o(p1out),p1i(p1in);
- CCurrent p2o(p2out);
- CCurrent p2i(p2in);
-
- CCurrent pplus((p1in+p1out)/2.);
- CCurrent pminus((p2in+p2out)/2.);
-
- Lmm=((-1.)*qsum*(MHmm) + (-2.*mjH1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mjH1m
- + (p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*MHmm/2.))/q3.m2();
- Lmp=((-1.)*qsum*(MHmp) + (-2.*mjH1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mjH1m
- +(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*MHmp/2.))/q3.m2();
- Lpm=((-1.)*qsum*(MHpm) + (-2.*mjH1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mjH1p
- +(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*MHpm/2.))/q3.m2();
- Lpp=((-1.)*qsum*(MHpp) + (-2.*mjH1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mjH1p
- +(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*MHpp/2.))/q3.m2();
- U1mm=(jgbm.dot(mjH1m)*j2gm+2.*p2o*MHmm)/(p2out+pg).m2();
- U1mp=(jgbp.dot(mjH1m)*j2gp+2.*p2o*MHmp)/(p2out+pg).m2();
- U1pm=(jgbm.dot(mjH1p)*j2gm+2.*p2o*MHpm)/(p2out+pg).m2();
- U1pp=(jgbp.dot(mjH1p)*j2gp+2.*p2o*MHpp)/(p2out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH1m)*jgbm+2.*p2i*MHmm)/(p2in-pg).m2();
- U2mp=((-1.)*j2gp.dot(mjH1m)*jgbp+2.*p2i*MHmp)/(p2in-pg).m2();
- U2pm=((-1.)*j2gm.dot(mjH1p)*jgbm+2.*p2i*MHpm)/(p2in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH1p)*jgbp+2.*p2i*MHpp)/(p2in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- // 1/3. = 1/HEJ::C_A ?
- double ampsq=-(amm+amp+apm+app)/(q1.m2()*qH1.m2());
-
- // Now add the t-channels for the Higgs
- const double th=qH2.m2()*q2.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=HEJ::C_F*HEJ::C_F/(HEJ::C_A*HEJ::C_A); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unof_qbarg(HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p1out, p1in, p2out, p2in, qH1, qH2, mt, incBot, mb, true)*K_g(p2out,p2in)/HEJ::C_F;
}
-double ME_H_unob_qbarQ (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out-pg); // Extra bit pre-gluon
- HLV q3=-(p2in-p2out); // Bottom End
-
- CCurrent mjH1m,mjH1p,mj2m,mj2p;
- mjH1p=jioHtop(p1in,true,p1out,true,qH1,qH2, mt, incBot, mb);
- mjH1m=jioHtop(p1in,false,p1out,false,qH1,qH2, mt, incBot, mb);
- mj2p=joi(p2out,true,p2in,true);
- mj2m=joi(p2out,false,p2in,false);
-
- // Dot products of these which occur again and again
- COM MHmp=mjH1m.dot(mj2p); // And now for the Higgs ones
- COM MHmm=mjH1m.dot(mj2m);
- COM MHpp=mjH1p.dot(mj2p);
- COM MHpm=mjH1p.dot(mj2m);
-
- // Currents with pg
- CCurrent jgbm,jgbp,j2gm,j2gp;
- j2gp=joo(p2out,true,pg,true);
- j2gm=joo(p2out,false,pg,false);
- jgbp=joi(pg,true,p2in,true);
- jgbm=joi(pg,false,p2in,false);
-
- CCurrent qsum(q2+q3);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p1o(p1out),p1i(p1in);
- CCurrent p2o(p2out);
- CCurrent p2i(p2in);
-
- CCurrent pplus((p1in+p1out)/2.);
- CCurrent pminus((p2in+p2out)/2.);
-
- // COM test=pminus.dot(p1in);
-
- Lmm=( (-1.)*qsum*(MHmm) + (-2.*mjH1m.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmm/2. ) )/q3.m2();
- Lmp=( (-1.)*qsum*(MHmp) + (-2.*mjH1m.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmp/2. ) )/q3.m2();
- Lpm=( (-1.)*qsum*(MHpm) + (-2.*mjH1p.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpm/2. ) )/q3.m2();
- Lpp=( (-1.)*qsum*(MHpp) + (-2.*mjH1p.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpp/2. ) )/q3.m2();
- U1mm=(jgbm.dot(mjH1m)*j2gm+2.*p2o*MHmm)/(p2out+pg).m2();
- U1mp=(jgbp.dot(mjH1m)*j2gp+2.*p2o*MHmp)/(p2out+pg).m2();
- U1pm=(jgbm.dot(mjH1p)*j2gm+2.*p2o*MHpm)/(p2out+pg).m2();
- U1pp=(jgbp.dot(mjH1p)*j2gp+2.*p2o*MHpp)/(p2out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH1m)*jgbm+2.*p2i*MHmm)/(p2in-pg).m2();
- U2mp=((-1.)*j2gp.dot(mjH1m)*jgbp+2.*p2i*MHmp)/(p2in-pg).m2();
- U2pm=((-1.)*j2gm.dot(mjH1p)*jgbm+2.*p2i*MHpm)/(p2in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH1p)*jgbp+2.*p2i*MHpp)/(p2in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q1.m2()*qH1.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH2.m2()*q2.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4.*4./(9.*9.); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unob_qQ(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p2out, p2in, p1out, p1in, qH2, qH1, mt, incBot, mb, false);
}
-double ME_H_unob_qQbar (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out-pg); // Extra bit pre-gluon
- HLV q3=-(p2in-p2out); // Bottom End
-
- CCurrent mjH1m,mjH1p,mj2m,mj2p;
- mjH1p=jHtop(p1out,true,p1in,true,qH1,qH2,mt, incBot, mb);
- mjH1m=jHtop(p1out,false,p1in,false,qH1,qH2,mt, incBot, mb);
- mj2p=jio(p2in,true,p2out,true);
- mj2m=jio(p2in,false,p2out,false);
-
- // Dot products of these which occur again and again
- COM MHmp=mjH1m.dot(mj2p); // And now for the Higgs ones
- COM MHmm=mjH1m.dot(mj2m);
- COM MHpp=mjH1p.dot(mj2p);
- COM MHpm=mjH1p.dot(mj2m);
-
- // Currents with pg
- CCurrent jgbm,jgbp,j2gm,j2gp;
- j2gp=joo(pg,true,p2out,true);
- j2gm=joo(pg,false,p2out,false);
- jgbp=jio(p2in,true,pg,true);
- jgbm=jio(p2in,false,pg,false);
-
- CCurrent qsum(q2+q3);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p1o(p1out),p1i(p1in);
- CCurrent p2o(p2out);
- CCurrent p2i(p2in);
-
- CCurrent pplus((p1in+p1out)/2.);
- CCurrent pminus((p2in+p2out)/2.);
-
- // COM test=pminus.dot(p1in);
-
- Lmm=( (-1.)*qsum*(MHmm) + (-2.*mjH1m.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmm/2. ) )/q3.m2();
- Lmp=( (-1.)*qsum*(MHmp) + (-2.*mjH1m.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmp/2. ) )/q3.m2();
- Lpm=( (-1.)*qsum*(MHpm) + (-2.*mjH1p.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpm/2. ) )/q3.m2();
- Lpp=( (-1.)*qsum*(MHpp) + (-2.*mjH1p.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpp/2. ) )/q3.m2();
- U1mm=(jgbm.dot(mjH1m)*j2gm+2.*p2o*MHmm)/(p2out+pg).m2();
- U1mp=(jgbp.dot(mjH1m)*j2gp+2.*p2o*MHmp)/(p2out+pg).m2();
- U1pm=(jgbm.dot(mjH1p)*j2gm+2.*p2o*MHpm)/(p2out+pg).m2();
- U1pp=(jgbp.dot(mjH1p)*j2gp+2.*p2o*MHpp)/(p2out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH1m)*jgbm+2.*p2i*MHmm)/(p2in-pg).m2();
- U2mp=((-1.)*j2gp.dot(mjH1m)*jgbp+2.*p2i*MHmp)/(p2in-pg).m2();
- U2pm=((-1.)*j2gm.dot(mjH1p)*jgbm+2.*p2i*MHpm)/(p2in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH1p)*jgbp+2.*p2i*MHpp)/(p2in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q1.m2()*qH1.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH2.m2()*q2.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4.*4./(9.*9.); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unob_qbarQ(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p2out, p2in, p1out, p1in, qH2, qH1, mt, incBot, mb, false);
}
-double ME_H_unob_qbarQbar (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out-pg); // Extra bit pre-gluon
- HLV q3=-(p2in-p2out); // Bottom End
-
- CCurrent mjH1m,mjH1p,mj2m,mj2p;
- mjH1p=jioHtop(p1in,true,p1out,true,qH1,qH2,mt, incBot, mb);
- mjH1m=jioHtop(p1in,false,p1out,false,qH1,qH2,mt, incBot, mb);
- mj2p=jio(p2in,true,p2out,true);
- mj2m=jio(p2in,false,p2out,false);
-
- // Dot products of these which occur again and again
- COM MHmp=mjH1m.dot(mj2p); // And now for the Higgs ones
- COM MHmm=mjH1m.dot(mj2m);
- COM MHpp=mjH1p.dot(mj2p);
- COM MHpm=mjH1p.dot(mj2m);
-
- // Currents with pg
- CCurrent jgbm,jgbp,j2gm,j2gp;
- j2gp=joo(pg,true,p2out,true);
- j2gm=joo(pg,false,p2out,false);
- jgbp=jio(p2in,true,pg,true);
- jgbm=jio(p2in,false,pg,false);
-
- CCurrent qsum(q2+q3);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p1o(p1out),p1i(p1in);
- CCurrent p2o(p2out);
- CCurrent p2i(p2in);
-
- CCurrent pplus((p1in+p1out)/2.);
- CCurrent pminus((p2in+p2out)/2.);
-
- // COM test=pminus.dot(p1in);
-
- Lmm=( (-1.)*qsum*(MHmm) + (-2.*mjH1m.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmm/2. ) )/q3.m2();
- Lmp=( (-1.)*qsum*(MHmp) + (-2.*mjH1m.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmp/2. ) )/q3.m2();
- Lpm=( (-1.)*qsum*(MHpm) + (-2.*mjH1p.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpm/2. ) )/q3.m2();
- Lpp=( (-1.)*qsum*(MHpp) + (-2.*mjH1p.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpp/2. ) )/q3.m2();
- U1mm=(jgbm.dot(mjH1m)*j2gm+2.*p2o*MHmm)/(p2out+pg).m2();
- U1mp=(jgbp.dot(mjH1m)*j2gp+2.*p2o*MHmp)/(p2out+pg).m2();
- U1pm=(jgbm.dot(mjH1p)*j2gm+2.*p2o*MHpm)/(p2out+pg).m2();
- U1pp=(jgbp.dot(mjH1p)*j2gp+2.*p2o*MHpp)/(p2out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH1m)*jgbm+2.*p2i*MHmm)/(p2in-pg).m2();
- U2mp=((-1.)*j2gp.dot(mjH1m)*jgbp+2.*p2i*MHmp)/(p2in-pg).m2();
- U2pm=((-1.)*j2gm.dot(mjH1p)*jgbm+2.*p2i*MHpm)/(p2in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH1p)*jgbp+2.*p2i*MHpp)/(p2in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q1.m2()*qH1.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH2.m2()*q2.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4.*4./(9.*9.); // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- return ampsq;
+double ME_H_unob_qQbar(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p2out, p2in, p1out, p1in, qH2, qH1, mt, incBot, mb, true);
}
-double ME_H_unob_gQ (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out-pg); // Extra bit pre-gluon
- HLV q3=-(p2in-p2out); // Bottom End
-
- CCurrent mjH1m,mjH1p,mj2m,mj2p;
- mjH1p=jHtop(p1out,true,p1in,true,qH1,qH2,mt, incBot, mb);
- mjH1m=jHtop(p1out,false,p1in,false,qH1,qH2,mt, incBot, mb);
- mj2p=joi(p2out,true,p2in,true);
- mj2m=joi(p2out,false,p2in,false);
-
- // Dot products of these which occur again and again
- COM MHmp=mjH1m.dot(mj2p); // And now for the Higgs ones
- COM MHmm=mjH1m.dot(mj2m);
- COM MHpp=mjH1p.dot(mj2p);
- COM MHpm=mjH1p.dot(mj2m);
-
- // Currents with pg
- CCurrent jgbm,jgbp,j2gm,j2gp;
- j2gp=joo(p2out,true,pg,true);
- j2gm=joo(p2out,false,pg,false);
- jgbp=joi(pg,true,p2in,true);
- jgbm=joi(pg,false,p2in,false);
-
- CCurrent qsum(q2+q3);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p1o(p1out),p1i(p1in);
- CCurrent p2o(p2out);
- CCurrent p2i(p2in);
-
- CCurrent pplus((p1in+p1out)/2.);
- CCurrent pminus((p2in+p2out)/2.);
-
- // COM test=pminus.dot(p1in);
-
- Lmm=( (-1.)*qsum*(MHmm) + (-2.*mjH1m.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmm/2. ) )/q3.m2();
- Lmp=( (-1.)*qsum*(MHmp) + (-2.*mjH1m.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmp/2. ) )/q3.m2();
- Lpm=( (-1.)*qsum*(MHpm) + (-2.*mjH1p.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpm/2. ) )/q3.m2();
- Lpp=( (-1.)*qsum*(MHpp) + (-2.*mjH1p.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpp/2. ) )/q3.m2();
- U1mm=(jgbm.dot(mjH1m)*j2gm+2.*p2o*MHmm)/(p2out+pg).m2();
- U1mp=(jgbp.dot(mjH1m)*j2gp+2.*p2o*MHmp)/(p2out+pg).m2();
- U1pm=(jgbm.dot(mjH1p)*j2gm+2.*p2o*MHpm)/(p2out+pg).m2();
- U1pp=(jgbp.dot(mjH1p)*j2gp+2.*p2o*MHpp)/(p2out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH1m)*jgbm+2.*p2i*MHmm)/(p2in-pg).m2();
- U2mp=((-1.)*j2gp.dot(mjH1m)*jgbp+2.*p2i*MHmp)/(p2in-pg).m2();
- U2pm=((-1.)*j2gm.dot(mjH1p)*jgbm+2.*p2i*MHpm)/(p2in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH1p)*jgbp+2.*p2i*MHpp)/(p2in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q1.m2()*qH1.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH2.m2()*q2.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4./9.*4./9.; // Factor of (Cf/Ca) for each quark to match MH2qQ.
- // need twice to match the normalization
-
- const double K = K_g(p1out, p1in);
-
- return ampsq*K/HEJ::C_F;
+double ME_H_unob_qbarQbar(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p2out, p2in, p1out, p1in, qH2, qH1, mt, incBot, mb, true);
}
-double ME_H_unob_gQbar (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
- HLV qH1, HLV qH2, double mt, bool incBot, double mb
-){
-
- HLV q1=p1in-p1out; // Top End
- HLV q2=-(p2in-p2out-pg); // Extra bit pre-gluon
- HLV q3=-(p2in-p2out); // Bottom End
-
- CCurrent mjH1m,mjH1p,mj2m,mj2p;
- mjH1p=jHtop(p1out,true,p1in,true,qH1,qH2,mt, incBot, mb);
- mjH1m=jHtop(p1out,false,p1in,false,qH1,qH2,mt, incBot, mb);
- mj2p=jio(p2in,true,p2out,true);
- mj2m=jio(p2in,false,p2out,false);
-
- // Dot products of these which occur again and again
- COM MHmp=mjH1m.dot(mj2p); // And now for the Higgs ones
- COM MHmm=mjH1m.dot(mj2m);
- COM MHpp=mjH1p.dot(mj2p);
- COM MHpm=mjH1p.dot(mj2m);
-
- // Currents with pg
- CCurrent jgbm,jgbp,j2gm,j2gp;
- j2gp=joo(pg,true,p2out,true);
- j2gm=joo(pg,false,p2out,false);
- jgbp=jio(p2in,true,pg,true);
- jgbm=jio(p2in,false,pg,false);
-
- CCurrent qsum(q2+q3);
-
- CCurrent Lmp,Lmm,Lpp,Lpm,U1mp,U1mm,U1pp,U1pm,U2mp,U2mm,U2pp,U2pm,p1o(p1out),p1i(p1in);
- CCurrent p2o(p2out);
- CCurrent p2i(p2in);
-
- CCurrent pplus((p1in+p1out)/2.);
- CCurrent pminus((p2in+p2out)/2.);
-
- Lmm=( (-1.)*qsum*(MHmm) + (-2.*mjH1m.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmm/2. ) )/q3.m2();
- Lmp=( (-1.)*qsum*(MHmp) + (-2.*mjH1m.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1m
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHmp/2. ) )/q3.m2();
- Lpm=( (-1.)*qsum*(MHpm) + (-2.*mjH1p.dot(pg))*mj2m + 2.*mj2m.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpm/2. ) )/q3.m2();
- Lpp=( (-1.)*qsum*(MHpp) + (-2.*mjH1p.dot(pg))*mj2p + 2.*mj2p.dot(pg)*mjH1p
- + ( p1o/pg.dot(p1out) + p1i/pg.dot(p1in) )*( q2.m2()*MHpp/2. ) )/q3.m2();
- U1mm=(jgbm.dot(mjH1m)*j2gm+2.*p2o*MHmm)/(p2out+pg).m2();
- U1mp=(jgbp.dot(mjH1m)*j2gp+2.*p2o*MHmp)/(p2out+pg).m2();
- U1pm=(jgbm.dot(mjH1p)*j2gm+2.*p2o*MHpm)/(p2out+pg).m2();
- U1pp=(jgbp.dot(mjH1p)*j2gp+2.*p2o*MHpp)/(p2out+pg).m2();
- U2mm=((-1.)*j2gm.dot(mjH1m)*jgbm+2.*p2i*MHmm)/(p2in-pg).m2();
- U2mp=((-1.)*j2gp.dot(mjH1m)*jgbp+2.*p2i*MHmp)/(p2in-pg).m2();
- U2pm=((-1.)*j2gm.dot(mjH1p)*jgbm+2.*p2i*MHpm)/(p2in-pg).m2();
- U2pp=((-1.)*j2gp.dot(mjH1p)*jgbp+2.*p2i*MHpp)/(p2in-pg).m2();
-
- const double cf=HEJ::C_F;
- double amm,amp,apm,app;
-
- amm=cf*(2.*vre(Lmm-U1mm,Lmm+U2mm))+2.*cf*cf/3.*vabs2(U1mm+U2mm);
- amp=cf*(2.*vre(Lmp-U1mp,Lmp+U2mp))+2.*cf*cf/3.*vabs2(U1mp+U2mp);
- apm=cf*(2.*vre(Lpm-U1pm,Lpm+U2pm))+2.*cf*cf/3.*vabs2(U1pm+U2pm);
- app=cf*(2.*vre(Lpp-U1pp,Lpp+U2pp))+2.*cf*cf/3.*vabs2(U1pp+U2pp);
- double ampsq=-(amm+amp+apm+app)/(q1.m2()*qH1.m2());
-
- // Now add the t-channels for the Higgs
- double th=qH2.m2()*q2.m2();
- ampsq/=th;
- ampsq/=16.;
- ampsq*=4./9.*4./9.; // Factor of (Cf/Ca) for each quark to match MH2qQ.
-
- const double K = K_g(p1out, p1in);
-
- return ampsq*K/HEJ::C_F;
+double ME_H_unob_gQ(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p2out, p2in, p1out, p1in, qH2, qH1, mt, incBot, mb, false)*K_g(p1out,p1in)/HEJ::C_F;
+}
+double ME_H_unob_gQbar(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in,
+ HLV qH1, HLV qH2, double mt, bool incBot, double mb){
+ return j_h_juno(pg, p2out, p2in, p1out, p1in, qH2, qH1, mt, incBot, mb, true)*K_g(p1out,p1in)/HEJ::C_F;
}
+//@}
// Begin finite mass stuff
#ifdef HEJ_BUILD_WITH_QCDLOOP
namespace {
// All the stuff needed for the box functions in qg->qgH now...
COM E1(HLV k1, HLV k2, HLV kh, double mq){
HLV q2=-(k1+k2+kh);
double Delta, Sigma, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
Sigma = 4.*s12*s34 - pow(S1+S2,2);
return looprwfactor*(-s12*D0DD(k2, k1, q2, mq)*(1 - 8.*mq*mq/s12 + S2/(2.*s12) +
S2*(s12 - 8.*mq*mq)*(s34 + S1)/(2.*s12*Delta) +
2.*(s34 + S1)*(s34 + S1)/Delta +
S2*pow((s34 + S1),3)/Delta/Delta) - ((s12 + S2)*C0DD(k2,
k1 + q2, mq) -
s12*C0DD(k1, k2, mq) + (S1 - S2)*C0DD(k1 + k2, q2, mq) -
S1*C0DD(k1, q2,
mq))*(S2*(s12 - 4.*mq*mq)/(2.*s12*Delta) +
2.*(s34 + S1)/Delta +
S2*pow((s34 + S1),2)/Delta/Delta) + (C0DD(k1, q2, mq) -
C0DD(k1 + k2, q2, mq))*(1. - 4.*mq*mq/s12) -
C0DD(k1 + k2, q2, mq)*2.*s34/
S1 - (B0DD(k1 + q2, mq) -
B0DD(k1 + k2 + q2, mq))*2.*s34*(s34 +
S1)/(S1*Delta) + (B0DD(q2, mq) -
B0DD(k1 + k2 + q2, mq) +
s12*C0DD(k1 + k2, q2,
mq))*(2.*s34*(s34 +
S1)*(S1 - S2)/(Delta*Sigma) +
2.*s34*(s34 + S1)/(S1*Delta)) + (B0DD(k1 + k2, mq) -
B0DD(k1 + k2 + q2,
mq) - (s34 + S1 + S2)*C0DD(k1 + k2, q2, mq))*2.*(s34 +
S1)*(2.*s12*s34 -
S2*(S1 + S2))/(Delta*Sigma));
}
COM F1(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, Sigma, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
Sigma = 4.*s12*s34 - pow(S1+S2,2);
return looprwfactor*(-S2*D0DD(k1, k2, q2,
mq)*(0.5 - (s12 - 8.*mq*mq)*(s34 + S2)/(2.*Delta) -
s12*pow((s34 + S2),3)/Delta/Delta) + ((s12 + S1)*C0DD(k1,
k2 + q2, mq) -
s12*C0DD(k1, k2, mq) - (S1 - S2)*C0DD(k1 + k2, q2, mq) -
S2*C0DD(k2, q2,
mq))*(S2*(s12 - 4.*mq*mq)/(2.*s12*Delta) +
S2*pow((s34 + S2),2)/Delta/Delta) - (C0DD(k1 + k2, q2, mq) - C0DD(k1, k2 + q2, mq))*(1. - 4.*mq*mq/s12) -
C0DD(k1, k2 + q2, mq) + (B0DD(k2 + q2, mq) -
B0DD(k1 + k2 + q2,
mq))*2.*pow((s34 + S2),2)/((s12 + S1)*Delta) - (B0DD(
q2, mq) - B0DD(k1 + k2 + q2, mq) +
s12*C0DD(k1 + k2, q2, mq))*2.*s34*(s34 +
S2)*(S2 - S1)/(Delta*Sigma) + (B0DD(
k1 + k2, mq) -
B0DD(k1 + k2 + q2,
mq) - (s34 + S1 + S2)*C0DD(k1 + k2, q2, mq))*2.*(s34 +
S2)*(2.*s12*s34 -
S2*(S1 + S2))/(Delta*Sigma));
}
COM G1(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
return looprwfactor*(S2*D0DD(k1, q2, k2,
mq)*(Delta/s12/s12 - 4.*mq*mq/s12) -
S2*((s12 + S1)*C0DD(k1, k2 + q2, mq) -
S1*C0DD(k1, q2, mq))*(1./
s12/s12 - (s12 - 4.*mq*mq)/(2.*s12*Delta)) -
S2*((s12 + S2)*C0DD(k1 + q2, k2, mq) -
S2*C0DD(k2, q2, mq))*(1./
s12/s12 + (s12 - 4.*mq*mq)/(2.*s12*Delta)) -
C0DD(k1, q2, mq) - (C0DD(k1, k2 + q2, mq) -
C0DD(k1, q2, mq))*4.*mq*mq/
s12 + (B0DD(k1 + q2, mq) - B0DD(k1 + k2 + q2, mq))*2./
s12 + (B0DD(k1 + q2, mq) -
B0DD(q2, mq))*2.*s34/(s12*S1) + (B0DD(k2 + q2, mq) -
B0DD(k1 + k2 + q2, mq))*2.*(s34 + S2)/(s12*(s12 + S1)));
}
COM E4(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, Sigma, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
Sigma = 4.*s12*s34 - pow(S1+S2,2);
return looprwfactor* (-s12*D0DD(k2, k1, q2,
mq)*(0.5 - (S1 - 8.*mq*mq)*(s34 + S1)/(2.*Delta) -
s12*pow((s34 + S1),3)/Delta/Delta) + ((s12 + S2)*C0DD(k2,
k1 + q2, mq) -
s12*C0DD(k1, k2, mq) + (S1 - S2)*C0DD(k1 + k2, q2, mq) -
S1*C0DD(k1, q2, mq))*((S1 - 4.*mq*mq)/(2.*Delta) +
s12*pow((s34 + S1),2)/Delta/Delta) -
C0DD(k1 + k2, q2, mq) + (B0DD(k1 + q2, mq) -
B0DD(k1 + k2 + q2, mq))*(2.*s34/Delta +
2.*s12*(s34 + S1)/((s12 + S2)*Delta)) - (B0DD(
q2, mq) - B0DD(k1 + k2 + q2, mq) +
s12*C0DD(k1 + k2, q2,
mq))*((2.*s34*(2.*s12*s34 - S2*(S1 + S2) +
s12*(S1 -
S2)))/(Delta*Sigma)) + (B0DD(k1 + k2, mq) -
B0DD(k1 + k2 + q2, mq) - (s34 + S1 + S2)*C0DD(k1 + k2, q2, mq))*((2.*s12*(2.*s12*s34 - S1*(S1 + S2) +
s34*(S2 - S1)))/(Delta*Sigma)));
}
COM F4(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, Sigma, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
Sigma = 4.*s12*s34 - pow(S1+S2,2);
return looprwfactor* (-s12*D0DD(k1, k2, q2,
mq)*(0.5 + (S1 - 8.*mq*mq)*(s34 + S2)/(2.*Delta) +
s12*pow((s34 + S2),3)/Delta/Delta) - ((s12 + S1)*C0DD(k1,
k2 + q2, mq) -
s12*C0DD(k1, k2, mq) - (S1 - S2)*C0DD(k1 + k2, q2, mq) -
S2*C0DD(k2, q2, mq))*((S1 - 4.*mq*mq)/(2.*Delta) +
s12*pow((s34 + S2),2)/Delta/Delta) -
C0DD(k1 + k2, q2, mq) - (B0DD(k2 + q2, mq) -
B0DD(k1 + k2 + q2, mq))*2.*(s34 +
S2)/Delta + (B0DD(q2, mq) -
B0DD(k1 + k2 + q2, mq) +
s12*C0DD(k1 + k2, q2, mq))*2.*s34*(2.*s12*s34 -
S1*(S1 + S2) +
s12*(S2 - S1))/(Delta*Sigma) - (B0DD(k1 + k2, mq) -
B0DD(k1 + k2 + q2, mq) - (s34 + S1 + S2)*C0DD(k1 + k2, q2, mq))*(2.*s12*(2.*s12*s34 - S2*(S1 + S2) +
s34*(S1 - S2))/(Delta*Sigma)));
}
COM G4(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
return looprwfactor* (-D0DD(k1, q2, k2,
mq)*(Delta/s12 + (s12 + S1)/2. -
4.*mq*mq) + ((s12 + S1)*C0DD(k1, k2 + q2, mq) -
S1*C0DD(k1, q2, mq))*(1./
s12 - (S1 - 4.*mq*mq)/(2.*Delta)) + ((s12 + S2)*C0DD(
k1 + q2, k2, mq) -
S2*C0DD(k2, q2, mq))*(1./
s12 + (S1 - 4.*mq*mq)/(2.*Delta)) + (B0DD(
k1 + k2 + q2, mq) -
B0DD(k1 + q2, mq))*2./(s12 + S2));
}
COM E10(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, Sigma, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
Sigma = 4.*s12*s34 - pow(S1+S2,2);
return looprwfactor*(-s12*D0DD(k2, k1, q2, mq)*((s34 + S1)/Delta +
12.*mq*mq*S1*(s34 + S1)/Delta/Delta -
4.*s12*S1*pow((s34 + S1),3)/Delta/Delta/Delta) - ((s12 + S2)*C0DD(k2, k1 + q2, mq) -
s12*C0DD(k1, k2, mq) + (S1 - S2)*C0DD(k1 + k2, q2, mq) -
S1*C0DD(k1, q2, mq))*(1./Delta +
4.*mq*mq*S1/Delta/Delta -
4.*s12*S1*pow((s34 + S1),2)/Delta/Delta/Delta) +
C0DD(k1 + k2, q2, mq)*(4.*s12*s34*(S1 - S2)/(Delta*Sigma) -
4.*(s12 -
2.*mq*mq)*(2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma)) + (B0DD(k1 + q2, mq) -
B0DD(k1 + k2 + q2, mq))*(4.*(s34 + S1)/((s12 + S2)*Delta) +
8.*S1*(s34 + S1)/Delta/Delta) + (B0DD(q2, mq) -
B0DD(k1 + k2 + q2, mq) +
s12*C0DD(k1 + k2, q2, mq))*(12.*s34*(2.*s12 + S1 +
S2)*(2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma*Sigma) -
4.*s34*(4.*s12 + 3.*S1 +
S2)/(Delta*Sigma) +
8.*s12*s34*(s34*(s12 + S2) -
S1*(s34 +
S1))/(Delta*Delta*Sigma)) + (B0DD(k1 + k2, mq) -
B0DD(k1 + k2 + q2, mq) - (s34 + S1 + S2)*C0DD(k1 + k2, q2,
mq))*(12.*s12*(2.*s34 + S1 +
S2)*(2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma*Sigma) +
8.*s12*S1*(s34*(s12 + S2) -
S1*(s34 +
S1))/(Delta*Delta*Sigma))) + (COM(0.,1.)/(4.*M_PI*M_PI))*((2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma));
}
COM F10(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, Sigma, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
Sigma = 4.*s12*s34 - pow(S1+S2,2);
return looprwfactor* (s12*D0DD(k1, k2, q2,
mq)*((s34 + S2)/Delta - 4.*mq*mq/Delta +
12.*mq*mq*s34*(s12 + S1)/Delta/Delta -
4.*s12*pow((s34 + S2),2)/Delta/Delta -
4.*s12*S1*pow((s34 + S2),3)/Delta/Delta/Delta) + ((s12 + S1)*C0DD(k1, k2 + q2, mq) -
s12*C0DD(k1, k2, mq) - (S1 - S2)*C0DD(k1 + k2, q2, mq) -
S2*C0DD(k2, q2, mq))*(1./Delta +
4.*mq*mq*S1/Delta/Delta -
4.*s12*(s34 + S2)/Delta/Delta -
4.*s12*S1*pow((s34 + S2),2)/Delta/Delta/Delta) -
C0DD(k1 + k2, q2, mq)*(4.*s12*s34/(S2*Delta) +
4.*s12*s34*(S2 - S1)/(Delta*Sigma) +
4.*(s12 -
2.*mq*mq)*(2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma)) - (B0DD(
k2 + q2, mq) -
B0DD(k1 + k2 + q2, mq))*(4.*s34/(S2*Delta) +
8.*s34*(s12 + S1)/Delta/Delta) - (B0DD(q2, mq) -
B0DD(k1 + k2 + q2, mq) +
s12*C0DD(k1 + k2, q2,
mq))*(-12*s34*(2*s12 + S1 +
S2)*(2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma*Sigma) -
4.*s12*s34*s34/(S2*Delta*Delta) +
4.*s34*S1/(Delta*Sigma) -
4.*s34*(s12*s34*(2.*s12 + S2) -
S1*S1*(2.*s12 +
S1))/(Delta*Delta*Sigma)) - (B0DD(k1 + k2, mq) -
B0DD(k1 + k2 + q2, mq) - (s34 + S1 + S2)*C0DD(k1 + k2, q2, mq))*(-12.*s12*(2.*s34 + S1 +
S2)*(2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma*Sigma) +
8.*s12*(2.*s34 + S1)/(Delta*Sigma) -
8.*s12*s34*(2.*s12*s34 - S1*(S1 + S2) +
s12*(S2 -
S1))/(Delta*Delta*Sigma))) + (COM(0.,1.)/(4.*M_PI*M_PI))*((2.*s12*s34 -
S1*(S1 + S2))/(Delta*Sigma));
}
COM G10(HLV k1, HLV k2, HLV kh, double mq){
HLV q2 = -(k1+k2+kh);
double Delta, S1, S2, s12, s34;
S1 = 2.*k1.dot(q2);
S2 = 2.*k2.dot(q2);
s12 = 2.*k1.dot(k2);
s34 = q2.m2();
Delta = s12*s34 - S1*S2;
return looprwfactor* (-D0DD(k1, q2, k2, mq)*(1. +
4.*S1*mq*mq/Delta) + ((s12 + S1)*C0DD(k1,
k2 + q2, mq) -
S1*C0DD(k1, q2, mq))*(1./Delta +
4.*S1*mq*mq/Delta/Delta) - ((s12 + S2)*C0DD(k1 + q2,
k2, mq) - S2*C0DD(k2, q2, mq))*(1./Delta +
4.*S1*mq*mq/Delta/Delta) + (B0DD(k1 + k2 + q2, mq) -
B0DD(k1 + q2, mq))*4.*(s34 +
S1)/(Delta*(s12 + S2)) + (B0DD(q2, mq) -
B0DD(k2 + q2, mq))*4.*s34/(Delta*S2));
}
COM H1(HLV k1, HLV k2, HLV kh, double mq){
return E1(k1,k2,kh,mq)+F1(k1,k2,kh,mq)+G1(k1,k2,kh,mq);
}
COM H4(HLV k1, HLV k2, HLV kh, double mq){
return E4(k1,k2,kh,mq)+F4(k1,k2,kh,mq)+G4(k1,k2,kh,mq);
}
COM H10(HLV k1, HLV k2, HLV kh, double mq){
return E10(k1,k2,kh,mq)+F10(k1,k2,kh,mq)+G10(k1,k2,kh,mq);
}
COM H2(HLV k1, HLV k2, HLV kh, double mq){
return -1.*H1(k2,k1,kh,mq);
}
COM H5(HLV k1, HLV k2, HLV kh, double mq){
return -1.*H4(k2,k1,kh,mq);
}
COM H12(HLV k1, HLV k2, HLV kh, double mq){
return -1.*H10(k2,k1,kh,mq);
}
// FL and FT functions
COM FL(HLV q1, HLV q2, double mq){
HLV Q = q1 + q2;
double detQ2 = q1.m2()*q2.m2() - q1.dot(q2)*q1.dot(q2);
return -1./(2.*detQ2)*((2.-
3.*q1.m2()*q2.dot(Q)/detQ2)*(B0DD(q1, mq) -
B0DD(Q, mq)) + (2. -
3.*q2.m2()*q1.dot(Q)/detQ2)*(B0DD(q2, mq) -
B0DD(Q, mq)) - (4.*mq*mq + q1.m2() + q2.m2() +
Q.m2() - 3.*q1.m2()*q2.m2()*Q.m2()/detQ2)*C0DD(
q1, q2, mq) - 2.);
}
COM FT(HLV q1, HLV q2, double mq){
HLV Q = q1 + q2;
double detQ2 = q1.m2()*q2.m2() - q1.dot(q2)*q1.dot(q2);
return -1./(2.*detQ2)*(Q.m2()*(B0DD(q1, mq) + B0DD(q2, mq) - 2.*B0DD(Q, mq) -
2.*q1.dot(q2)*C0DD(q1, q2, mq)) + (q1.m2() -
q2.m2()) *(B0DD(q1, mq) - B0DD(q2, mq))) -
q1.dot(q2)*FL(q1, q2, mq);
}
HLV ParityFlip(HLV p){
HLV flippedVector;
flippedVector.setE(p.e());
flippedVector.setX(-p.x());
flippedVector.setY(-p.y());
flippedVector.setZ(-p.z());
return flippedVector;
}
/// @brief HC amp for qg->qgH with finite top (i.e. j^{++}_H)
void g_gH_HC(HLV pa, HLV p1,
HLV pH, double mq, current &retAns)
{
current cura1,pacur,p1cur,pHcur,conjeps1,conjepsH1,epsa,epsHa,epsHapart1,
epsHapart2,conjepsH1part1,conjepsH1part2;
COM ang1a,sqa1;
const double F = 4.*mq*mq/HEJ::vev;
// Easier to have the whole thing as current object so I can use cdot functionality.
// Means I need to write pa,p1 as current objects
to_current(pa, pacur);
to_current(p1,p1cur);
to_current(pH,pHcur);
bool gluonforward = true;
if(pa.z() < 0)
gluonforward = false;
//HEJ gauge
jio(pa,false,p1,false,cura1);
if(gluonforward){
// sqrt(2pa_-/p1_-)*p1_perp/abs(p1_perp)
ang1a = sqrt(pa.plus()*p1.minus())*(p1.x()+COM(0.,1.)*p1.y())/p1.perp();
// sqrt(2pa_-/p1_-)*p1_perp*/abs(p1_perp)
sqa1 = sqrt(pa.plus()*p1.minus())*(p1.x()-COM(0.,1.)*p1.y())/p1.perp();
} else {
ang1a = sqrt(pa.minus()*p1.plus());
sqa1 = sqrt(pa.minus()*p1.plus());
}
const double prop = (pa-p1-pH).m2();
cmult(-1./sqrt(2)/ang1a,cura1,conjeps1);
cmult(1./sqrt(2)/sqa1,cura1,epsa);
const COM Fta = FT(-pa,pa-pH,mq)/(pa-pH).m2();
const COM Ft1 = FT(-p1-pH,p1,mq)/(p1+pH).m2();
const COM h4 = H4(p1,-pa,pH,mq);
const COM h5 = H5(p1,-pa,pH,mq);
const COM h10 = H10(p1,-pa,pH,mq);
const COM h12 = H12(p1,-pa,pH,mq);
cmult(Fta*pa.dot(pH), epsa, epsHapart1);
cmult(-1.*Fta*cdot(pHcur,epsa), pacur, epsHapart2);
cmult(Ft1*cdot(pHcur,conjeps1), p1cur, conjepsH1part1);
cmult(-Ft1*p1.dot(pH), conjeps1, conjepsH1part2);
cadd(epsHapart1, epsHapart2, epsHa);
cadd(conjepsH1part1, conjepsH1part2, conjepsH1);
const COM aH1 = cdot(pHcur, cura1);
current T1,T2,T3,T4,T5,T6,T7,T8,T9,T10;
if(gluonforward){
cmult(sqrt(2.)*sqrt(p1.plus()/pa.plus())*prop/sqa1, conjepsH1, T1);
cmult(-sqrt(2.)*sqrt(pa.plus()/p1.plus())*prop/ang1a, epsHa, T2);
}
else{
cmult(-sqrt(2.)*sqrt(p1.minus()/pa.minus())
*((p1.x()-COM(0.,1.)*p1.y())/p1.perp())*prop/sqa1, conjepsH1, T1);
cmult(sqrt(2.)*sqrt(pa.minus()/p1.minus())
*((p1.x()-COM(0.,1.)*p1.y())/p1.perp())*prop/ang1a, epsHa, T2);
}
cmult(sqrt(2.)/ang1a*aH1, epsHa, T3);
cmult(sqrt(2.)/sqa1*aH1, conjepsH1, T4);
cmult(-sqrt(2.)*Fta*pa.dot(p1)*aH1/sqa1, conjeps1, T5);
cmult(-sqrt(2.)*Ft1*pa.dot(p1)*aH1/ang1a, epsa, T6);
cmult(-aH1/sqrt(2.)/sqa1*h4*8.*COM(0.,1.)*M_PI*M_PI, conjeps1, T7);
cmult(aH1/sqrt(2.)/ang1a*h5*8.*COM(0.,1.)*M_PI*M_PI, epsa, T8);
cmult(aH1*aH1/2./ang1a/sqa1*h10*8.*COM(0.,1.)*M_PI*M_PI, pacur, T9);
cmult(-aH1*aH1/2./ang1a/sqa1*h12*8.*COM(0.,1.)*M_PI*M_PI, p1cur, T10);
current ans;
for(int i=0;i<4;i++)
{
ans[i] = T1[i]+T2[i]+T3[i]+T4[i]+T5[i]+T6[i]+T7[i]+T8[i]+T9[i]+T10[i];
}
retAns[0] = F/prop*ans[0];
retAns[1] = F/prop*ans[1];
retAns[2] = F/prop*ans[2];
retAns[3] = F/prop*ans[3];
}
/// @brief HNC amp for qg->qgH with finite top (i.e. j^{+-}_H)
void g_gH_HNC(HLV pa, HLV p1, HLV pH, double mq, current &retAns)
{
const double F = 4.*mq*mq/HEJ::vev;
COM ang1a,sqa1;
current conjepsH1,epsHa,p1cur,pacur,pHcur,conjeps1,epsa,paplusp1cur,
p1minuspacur,cur1a,cura1,epsHapart1,epsHapart2,conjepsH1part1,
conjepsH1part2;
// Find here if pa, meaning the gluon, is forward or backward
bool gluonforward = true;
if(pa.z() < 0)
gluonforward = false;
jio(pa,true,p1,true,cura1);
joi(p1,true,pa,true,cur1a);
to_current(pa,pacur);
to_current(p1,p1cur);
to_current(pH,pHcur);
to_current(pa+p1,paplusp1cur);
to_current(p1-pa,p1minuspacur);
const COM aH1 = cdot(pHcur,cura1);
const COM oneHa = std::conj(aH1); // = cdot(pHcur,cur1a)
if(gluonforward){
// sqrt(2pa_-/p1_-)*p1_perp/abs(p1_perp)
ang1a = sqrt(pa.plus()*p1.minus())*(p1.x()+COM(0.,1.)*p1.y())/p1.perp();
// sqrt(2pa_-/p1_-)*p1_perp*/abs(p1_perp)
sqa1 = sqrt(pa.plus()*p1.minus())*(p1.x()-COM(0.,1.)*p1.y())/p1.perp();
}
else {
ang1a = sqrt(pa.minus()*p1.plus());
sqa1 = sqrt(pa.minus()*p1.plus());
}
const double prop = (pa-p1-pH).m2();
cmult(1./sqrt(2)/sqa1, cur1a, epsa);
cmult(-1./sqrt(2)/sqa1, cura1, conjeps1);
const COM phase = cdot(conjeps1, epsa);
const COM Fta = FT(-pa,pa-pH,mq)/(pa-pH).m2();
const COM Ft1 = FT(-p1-pH,p1,mq)/(p1+pH).m2();
const COM Falpha = FT(p1-pa,pa-p1-pH,mq);
const COM Fbeta = FL(p1-pa,pa-p1-pH,mq);
const COM h1 = H1(p1,-pa, pH, mq);
const COM h2 = H2(p1,-pa, pH, mq);
const COM h4 = H4(p1,-pa, pH, mq);
const COM h5 = H5(p1,-pa, pH, mq);
const COM h10 = H10(p1,-pa, pH, mq);
const COM h12 = H12(p1,-pa, pH, mq);
cmult(Fta*pa.dot(pH), epsa, epsHapart1);
cmult(-1.*Fta*cdot(pHcur,epsa), pacur, epsHapart2);
cmult(Ft1*cdot(pHcur,conjeps1), p1cur, conjepsH1part1);
cmult(-Ft1*p1.dot(pH), conjeps1, conjepsH1part2);
cadd(epsHapart1, epsHapart2, epsHa);
cadd(conjepsH1part1, conjepsH1part2, conjepsH1);
current T1,T2,T3,T4,T5a,T5b,T6,T7,T8a,T8b,T9,T10,T11a,
T11b,T12a,T12b,T13;
if(gluonforward){
cmult(sqrt(2.)*sqrt(p1.plus()/pa.plus())*prop/sqa1, conjepsH1, T1);
cmult(-sqrt(2.)*sqrt(pa.plus()/p1.plus())*prop/sqa1, epsHa, T2);
}
else{
cmult(-sqrt(2.)*sqrt(p1.minus()/pa.minus())*((p1.x()-COM(0.,1.)*p1.y())/p1.perp())
*prop/sqa1, conjepsH1, T1);
cmult(sqrt(2.)*sqrt(pa.minus()/p1.minus())*((p1.x()+COM(0.,1.)*p1.y())/p1.perp())
*prop/sqa1, epsHa, T2);
}
const COM boxdiagFact = 8.*COM(0.,1.)*M_PI*M_PI;
cmult(aH1*sqrt(2.)/sqa1, epsHa, T3);
cmult(oneHa*sqrt(2.)/sqa1, conjepsH1, T4);
cmult(-2.*phase*Fta*pa.dot(pH), p1cur, T5a);
cmult(2.*phase*Ft1*p1.dot(pH), pacur, T5b);
cmult(-sqrt(2.)*Fta*p1.dot(pa)*oneHa/sqa1, conjeps1, T6);
cmult(-sqrt(2.)*Ft1*pa.dot(p1)*aH1/sqa1, epsa, T7);
cmult(-boxdiagFact*phase*h2, pacur, T8a);
cmult(boxdiagFact*phase*h1, p1cur, T8b);
cmult(boxdiagFact*aH1/sqrt(2.)/sqa1*h5, epsa, T9);
cmult(-boxdiagFact*oneHa/sqrt(2.)/sqa1*h4, conjeps1, T10);
cmult(boxdiagFact*aH1*oneHa/2./sqa1/sqa1*h10, pacur, T11a);
cmult(-boxdiagFact*aH1*oneHa/2./sqa1/sqa1*h12, p1cur, T11b);
cmult(-phase/(pa-p1).m2()*Falpha*(p1-pa).dot(pa-p1-pH), paplusp1cur, T12a);
cmult(phase/(pa-p1).m2()*Falpha*(pa+p1).dot(pa-p1-pH), p1minuspacur, T12b);
cmult(-phase*Fbeta*(pa-p1-pH).m2(), paplusp1cur, T13);
current ans;
for(int i=0;i<4;i++)
{
ans[i] = T1[i]+T2[i]+T3[i]+T4[i]+T5a[i]+T5b[i]+T6[i]+T7[i]+T8a[i]+T8b[i]+T9[i]+T10[i]+T11a[i]+T11b[i]+T12a[i]+T12b[i]+T13[i];
}
retAns[0] = F/prop*ans[0];
retAns[1] = F/prop*ans[1];
retAns[2] = F/prop*ans[2];
retAns[3] = F/prop*ans[3];
}
} // namespace anonymous
// JDC - new amplitude with Higgs emitted close to gluon with full mt effects. Keep usual HEJ-style function call
double ME_Houtside_gq(HLV p1out, HLV p1in, HLV p2out, HLV p2in, HLV pH, double mq, bool includeBottom, double mq2)
{
current cur2bplus,cur2bminus, cur2bplusFlip, cur2bminusFlip;
current retAns,retAnsb;
joi(p2out,true,p2in,true,cur2bplus);
joi(p2out,false,p2in,false,cur2bminus);
joi(ParityFlip(p2out),true,ParityFlip(p2in),true,cur2bplusFlip);
joi(ParityFlip(p2out),false,ParityFlip(p2in),false,cur2bminusFlip);
COM app1,app2,apm1,apm2;
COM app3, app4, apm3, apm4;
if(!includeBottom)
{
g_gH_HC(p1in,p1out,pH,mq,retAns);
app1=cdot(retAns,cur2bplus);
app2=cdot(retAns,cur2bminus);
g_gH_HC(ParityFlip(p1in),ParityFlip(p1out),ParityFlip(pH),mq,retAns);
app3=cdot(retAns,cur2bplusFlip);
app4=cdot(retAns,cur2bminusFlip);
// And non-conserving bits
g_gH_HNC(p1in,p1out,pH,mq,retAns);
apm1=cdot(retAns,cur2bplus);
apm2=cdot(retAns,cur2bminus);
g_gH_HNC(ParityFlip(p1in),ParityFlip(p1out),ParityFlip(pH),mq,retAns);
apm3=cdot(retAns,cur2bplusFlip);
apm4=cdot(retAns,cur2bminusFlip);
} else {
g_gH_HC(p1in,p1out,pH,mq,retAns);
g_gH_HC(p1in,p1out,pH,mq2,retAnsb);
app1=cdot(retAns,cur2bplus) + cdot(retAnsb,cur2bplus);
app2=cdot(retAns,cur2bminus) + cdot(retAnsb,cur2bminus);
g_gH_HC(ParityFlip(p1in),ParityFlip(p1out),ParityFlip(pH),mq,retAns);
g_gH_HC(ParityFlip(p1in),ParityFlip(p1out),ParityFlip(pH),mq2,retAnsb);
app3=cdot(retAns,cur2bplusFlip) + cdot(retAnsb,cur2bplusFlip);
app4=cdot(retAns,cur2bminusFlip) + cdot(retAnsb,cur2bminusFlip);
// And non-conserving bits
g_gH_HNC(p1in,p1out,pH,mq,retAns);
g_gH_HNC(p1in,p1out,pH,mq2,retAnsb);
apm1=cdot(retAns,cur2bplus) + cdot(retAnsb,cur2bplus);
apm2=cdot(retAns,cur2bminus) + cdot(retAnsb,cur2bminus);
g_gH_HNC(ParityFlip(p1in),ParityFlip(p1out),ParityFlip(pH),mq,retAns);
g_gH_HNC(ParityFlip(p1in),ParityFlip(p1out),ParityFlip(pH),mq2,retAnsb);
apm3=cdot(retAns,cur2bplusFlip) + cdot(retAnsb,cur2bplusFlip);
apm4=cdot(retAns,cur2bminusFlip) + cdot(retAnsb,cur2bminusFlip);
}
return abs2(app1) + abs2(app2) + abs2(app3) + abs2(app4) + abs2(apm1)
+ abs2(apm2) + abs2(apm3) + abs2(apm4);
}
#endif // HEJ_BUILD_WITH_QCDLOOP
double C2gHgm(HLV p2, HLV p1, HLV pH)
{
static double A=1./(3.*M_PI*HEJ::vev);
// Implements Eq. (4.22) in hep-ph/0301013 with modifications to incoming plus momenta
double s12,p1p,p2p;
COM p1perp,p3perp,phperp;
// Determine first whether this is the case p1p\sim php>>p3p og the opposite
s12=p1.invariantMass2(-p2);
if (p2.pz()>0.) { // case considered in hep-ph/0301013
p1p=p1.plus();
p2p=p2.plus();
} else { // opposite case
p1p=p1.minus();
p2p=p2.minus();
}
p1perp=p1.px()+COM(0,1)*p1.py();
phperp=pH.px()+COM(0,1)*pH.py();
p3perp=-(p1perp+phperp);
COM temp=COM(0,1)*A/(2.*s12)*(p2p/p1p*conj(p1perp)*p3perp+p1p/p2p*p1perp*conj(p3perp));
temp=temp*conj(temp);
return temp.real();
}
double C2gHgp(HLV p2, HLV p1, HLV pH)
{
static double A=1./(3.*M_PI*HEJ::vev);
// Implements Eq. (4.23) in hep-ph/0301013
double s12,php,p1p,phm;
COM p1perp,p3perp,phperp;
// Determine first whether this is the case p1p\sim php>>p3p or the opposite
s12=p1.invariantMass2(-p2);
if (p2.pz()>0.) { // case considered in hep-ph/0301013
php=pH.plus();
phm=pH.minus();
p1p=p1.plus();
} else { // opposite case
php=pH.minus();
phm=pH.plus();
p1p=p1.minus();
}
p1perp=p1.px()+COM(0,1)*p1.py();
phperp=pH.px()+COM(0,1)*pH.py();
p3perp=-(p1perp+phperp);
COM temp=-COM(0,1)*A/(2.*s12)*( conj(p1perp*p3perp)*pow(php/p1p,2)/(1.+php/p1p)
+s12*(pow(conj(phperp),2)/(pow(abs(phperp),2)+p1p*phm)
-pow(conj(p3perp)
+(1.+php/p1p)*conj(p1perp),2)/((1.+php/p1p)*(pH.m2()+2.*p1.dot(pH)))) );
temp=temp*conj(temp);
return temp.real();
}
double C2qHqm(HLV p2, HLV p1, HLV pH)
{
static double A=1./(3.*M_PI*HEJ::vev);
// Implements Eq. (4.22) in hep-ph/0301013
double s12,p2p,p1p;
COM p1perp,p3perp,phperp;
// Determine first whether this is the case p1p\sim php>>p3p or the opposite
s12=p1.invariantMass2(-p2);
if (p2.pz()>0.) { // case considered in hep-ph/0301013
p2p=p2.plus();
p1p=p1.plus();
} else { // opposite case
p2p=p2.minus();
p1p=p1.minus();
}
p1perp=p1.px()+COM(0,1)*p1.py();
phperp=pH.px()+COM(0,1)*pH.py();
p3perp=-(p1perp+phperp);
COM temp=A/(2.*s12)*( sqrt(p2p/p1p)*p3perp*conj(p1perp)
+sqrt(p1p/p2p)*p1perp*conj(p3perp) );
temp=temp*conj(temp);
return temp.real();
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Dec 21, 2:16 PM (10 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4023084
Default Alt Text
(93 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment