Page MenuHomeHEPForge

No OneTemporary

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

Mime Type
text/x-diff
Expires
Sat, Dec 21, 2:16 PM (12 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4023084
Default Alt Text
(93 KB)

Event Timeline