diff --git a/include/HEJ/jets.hh b/include/HEJ/jets.hh
index 4ffac16..0013971 100644
--- a/include/HEJ/jets.hh
+++ b/include/HEJ/jets.hh
@@ -1,395 +1,339 @@
 /**
  *  \authors   The HEJ collaboration (see AUTHORS for details)
  *  \date      2019
  *  \copyright GPLv2 or later
  */
 /** \file
  *  \brief Functions computing the square of current contractions in pure jets.
  *
  *  This file contains all the necessary functions to compute the
  *  current contractions for all valid pure jet HEJ processes. It will
  *  also contain some pure jet ME components used in other process ME
  *  calculations
  *
  *  @TODO add a namespace
  */
 #pragma once
 
 #include <complex>
 #include <ostream>
 
 #include <CLHEP/Vector/LorentzVector.h>
 
 typedef std::complex<double> COM;
 typedef COM current[4];
 typedef CLHEP::HepLorentzVector HLV;
 
 //! Square of qQ->qQ Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state quark
  *  @param p1in      Momentum of initial state quark
  *  @param p2out     Momentum of final state quark
  *  @param p2in      Momentum of intial state quark
  *  @returns         Square of the current contractions for qQ->qQ Scattering
  */
 double ME_qQ (HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qQbar->qQbar Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state quark
  *  @param p1in      Momentum of initial state quark
  *  @param p2out     Momentum of final state anti-quark
  *  @param p2in      Momentum of intial state anti-quark
  *  @returns         Square of the current contractions for qQbar->qQbar Scattering
  *
  *  @note this can be used for qbarQ->qbarQ Scattering by inputting arguments
  *        appropriately.
  */
 double ME_qQbar (HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qbarQbar->qbarQbar Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state anti-quark
  *  @param p1in      Momentum of initial state anti-quark
  *  @param p2out     Momentum of final state anti-quark
  *  @param p2in      Momentum of intial state anti-quark
  *  @returns         Square of the current contractions for qbarQbar->qbarQbar Scattering
  */
 double ME_qbarQbar (HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qg->qg Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state quark
  *  @param p1in      Momentum of initial state quark
  *  @param p2out     Momentum of final state gluon
  *  @param p2in      Momentum of intial state gluon
  *  @returns         Square of the current contractions for qg->qg Scattering
  *
  *  @note this can be used for gq->gq Scattering by inputting arguments
  *        appropriately.
  */
 double ME_qg (HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qbarg->qbarg Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state anti-quark
  *  @param p1in      Momentum of initial state anti-quark
  *  @param p2out     Momentum of final state gluon
  *  @param p2in      Momentum of intial state gluon
  *  @returns         Square of the current contractions for qbarg->qbarg Scattering
  *
  *  @note this can be used for gqbar->gqbar Scattering by inputting arguments
  *        appropriately.
  */
 double ME_qbarg (HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of gg->gg Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state gluon
  *  @param p1in      Momentum of initial state gluon
  *  @param p2out     Momentum of final state gluon
  *  @param p2in      Momentum of intial state gluon
  *  @returns         Square of the current contractions for gg->gg Scattering
  */
 double ME_gg (HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //Unordered Backwards contributions:
 //! Square of qQ->qQ Pure Jets Scattering Current
 /**
  *  @param p1out     Momentum of final state quark
  *  @param p1in      Momentum of initial state quark
  *  @param pg        Momentum of unordered gluon
  *  @param p2out     Momentum of final state quark
  *  @param p2in      Momentum of intial state quark
  *  @returns         Square of the current contractions for qQ->qQ Scattering
  */
 double ME_unob_qQ (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qbarQ->qbarQ Pure Jets Unordered backwards Scattering Current
 /**
  *  @param p1out     Momentum of final state anti-quark
  *  @param p1in      Momentum of initial state anti-quark
  *  @param pg        Momentum of unordered gluon
  *  @param p2out     Momentum of final state quark
  *  @param p2in      Momentum of intial state quark
  *  @returns         Square of the current contractions for qbarQ->qbarQ Scattering
+ *
+ *  @note this can be used for unof contributions by inputting
+ *        arguments appropriately.
  */
 double ME_unob_qbarQ (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qQbar->qQbar Pure Jets Unordered backwards Scattering Current
 /**
  *  @param p1out     Momentum of final state quark
  *  @param p1in      Momentum of initial state quark
  *  @param pg        Momentum of unordered gluon
  *  @param p2out     Momentum of final state anti-quark
  *  @param p2in      Momentum of intial state anti-quark
  *  @returns         Square of the current contractions for qQbar->qQbar Scattering
+ *
+ *  @note this can be used for unof contributions by inputting
+ *        arguments appropriately.
  */
 double ME_unob_qQbar (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qbarQbar->qbarQbar Pure Jets Unordered backwards Scattering Current
 /**
  *  @param p1out     Momentum of final state anti-quark
  *  @param p1in      Momentum of initial state anti-quark
  *  @param pg        Momentum of unordered gluon
  *  @param p2out     Momentum of final state anti-quark
  *  @param p2in      Momentum of intial state anti-quark
  *  @returns         Square of the current contractions for qbarQbar->qbarQbar Scattering
+ *
+ *  @note this can be used for unof contributions by inputting
+ *        arguments appropriately.
  */
 double ME_unob_qbarQbar (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qg->qg Pure Jets Unordered backwards Scattering Current
 /**
  *  @param p1out     Momentum of final state gluon
  *  @param p1in      Momentum of initial state gluon
  *  @param pg        Momentum of unordered gluon
  *  @param p2out     Momentum of final state quark
  *  @param p2in      Momentum of intial state quark
  *  @returns         Square of the current contractions for qg->qg Scattering
+ *
+ *  @note this can be used for unof contributions by inputting
+ *        arguments appropriately.
  */
 double ME_unob_qg (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 //! Square of qbarg->qbarg Pure Jets Unordered backwards Scattering Current
 /**
  *  @param p1out     Momentum of final state gluon
  *  @param p1in      Momentum of initial state gluon
  *  @param pg        Momentum of unordered gluon
  *  @param p2out     Momentum of final state anti-quark
  *  @param p2in      Momentum of intial state anti-quark
  *  @returns         Square of the current contractions for qbarg->qbarg Scattering
- */
-double ME_unob_qbarg (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
-
-//Unordered Forwards contributions:
-//! Square of qQ->qQ Pure Jets Scattering Current
-/**
- *  @param p1out     Momentum of final state quark
- *  @param p1in      Momentum of initial state quark
- *  @param pg        Momentum of unordered gluon
- *  @param p2out     Momentum of final state quark
- *  @param p2in      Momentum of intial state quark
- *  @returns         Square of the current contractions for qQ->qQ Scattering
- */
-double ME_unof_qQ (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in);
-
-//! Square of qbarQ->qbarQ Pure Jets Unordered forwards Scattering Current
-/**
- *  @param p1out     Momentum of final state anti-quark
- *  @param p1in      Momentum of initial state anti-quark
- *  @param pg        Momentum of unordered gluon
- *  @param p2out     Momentum of final state quark
- *  @param p2in      Momentum of intial state quark
- *  @returns         Square of the current contractions for qbarQ->qbarQ Scattering
- */
-double ME_unof_qbarQ (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in);
-
-//! Square of qQbar->qQbar Pure Jets Unordered forwards Scattering Current
-/**
- *  @param p1out     Momentum of final state quark
- *  @param p1in      Momentum of initial state quark
- *  @param pg        Momentum of unordered gluon
- *  @param p2out     Momentum of final state anti-quark
- *  @param p2in      Momentum of intial state anti-quark
- *  @returns         Square of the current contractions for qQbar->qQbar Scattering
  *
- *  @note this can be used for qbarQ->qbarQ Scattering by inputting arguments
- *        appropriately.
- */
-double ME_unof_qQbar (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in);
-
-//! Square of qbarQbar->qbarQbar Pure Jets Unordered forwards Scattering Current
-/**
- *  @param p1out     Momentum of final state anti-quark
- *  @param p1in      Momentum of initial state anti-quark
- *  @param pg        Momentum of unordered gluon
- *  @param p2out     Momentum of final state anti-quark
- *  @param p2in      Momentum of intial state anti-quark
- *  @returns         Square of the current contractions for qbarQbar->qbarQbar Scattering
+ *  @note this can be used for unof contributions by inputting
+ *        arguments appropriately.
  */
-double ME_unof_qbarQbar (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in);
-
-//! Square of gQ->gQ Pure Jets Unordered forwards Scattering Current
-/**
- *  @param p1out     Momentum of final state gluon
- *  @param p1in      Momentum of initial state gluon
- *  @param pg        Momentum of unordered gluon
- *  @param p2out     Momentum of final state quark
- *  @param p2in      Momentum of intial state quark
- *  @returns         Square of the current contractions for gQ->gQ Scattering
- */
-double ME_unof_gQ (HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in);
-
-//! Square of gQbar->gQbar Pure Jets Unordered forwards Scattering Current
-/**
- *  @param p1out     Momentum of final state gluon
- *  @param p1in      Momentum of initial state gluon
- *  @param pg        Momentum of unordered gluon
- *  @param p2out     Momentum of final state anti-quark
- *  @param p2in      Momentum of intial state anti-quark
- *  @returns         Square of the current contractions for gQbar->gQbar Scattering
- */
-double ME_unof_gQbar(HLV p1out, HLV p1in, HLV pg, HLV p2out, HLV p2in);
-
+double ME_unob_qbarg (HLV pg, HLV p1out, HLV p1in, HLV p2out, HLV p2in);
 
 /** \class CCurrent jets.hh "include/HEJ/jets.hh"
  *  \brief This is the a new class structure for currents.
  */
 class CCurrent
 {
 public:
     CCurrent(COM sc0, COM sc1, COM sc2, COM sc3)
     :c0(sc0),c1(sc1),c2(sc2),c3(sc3)
     {};
     CCurrent(const HLV p)
     {
         c0=p.e();
         c1=p.px();
         c2=p.py();
         c3=p.pz();
     };
     CCurrent()
     {};
     CCurrent operator+(const CCurrent& other);
     CCurrent operator-(const CCurrent& other);
     CCurrent operator*(const double x);
     CCurrent operator*(const COM x);
     CCurrent operator/(const double x);
     CCurrent operator/(const COM x);
 
     friend std::ostream& operator<<(std::ostream& os, const CCurrent& cur);
     COM dot(HLV p1);
     COM dot(CCurrent p1);
     COM c0,c1,c2,c3;
 };
 
 /* std::ostream& operator <<(std::ostream& os, const CCurrent& cur); */
 CCurrent operator * ( double x, CCurrent& m);
 CCurrent operator * ( COM x, CCurrent& m);
 CCurrent operator / ( double x, CCurrent& m);
 CCurrent operator / ( COM x, CCurrent& m);
 
 //! Current <incoming state | mu | outgoing state>
 /**
  * This is a wrapper function around \see joi() note helicity flip to
  * give same answer.
  */
 void jio(HLV pin, bool helin, HLV pout, bool helout, current &cur);
 
 //! Current <outgoing state | mu | outgoing state>
 /**
  * @param pi              bra state momentum
  * @param heli            helicity of pi
  * @param pj              ket state momentum
  * @param helj            helicity of pj. (must be same as heli)
  * @param cur             reference to current which is saved.
  *
  * This function is for building <i (out)| mu |j (out)> currents. It
  * must be called with pi as the bra, and pj as the ket.
  *
  * @TODO Remove heli/helj and just have helicity of current as argument.
  */
 void joo(HLV pi, bool heli, HLV pj, bool helj, current &cur);
 
 //! Current <outgoing state | mu | incoming state>
 /**
  * @param pout            bra state momentum
  * @param helout          helicity of pout
  * @param pin             ket state momentum
  * @param helin           helicity of pin. (must be same as helout)
  * @param cur             reference to current which is saved.
  *
  * This function is for building <out| mu |in> currents. It must be
  * called with pout as the bra, and pin as the ket. jio calls this
  * with flipped helicity
  *
  * @TODO Remove helout/helin and just have helicity of current as argument.
  */
 void joi(HLV pout, bool helout, HLV pin, bool helin, current &cur);
 
 //! Current <outgoing state | mu | incoming state>
 /**
  * This is a wrapper function around the void function of the same name. \see joi
  */
 CCurrent joi (HLV pout, bool helout, HLV pin, bool helin);
 
 //! Current <incoming state | mu | outgoing state>
 /**
  * This is a wrapper function around the void function of the same name. \see jio
  */
 CCurrent jio (HLV pout, bool helout, HLV pin, bool helin);
 
 //! Current <outgoing state | mu | outgoing state>
 /**
  * This is a wrapper function around the void function of the same name. \see joo
  */
 CCurrent joo (HLV pout, bool helout, HLV pin, bool helin);
 
 inline COM cdot(const current & j1, const current & j2)
 {
   return j1[0]*j2[0]-j1[1]*j2[1]-j1[2]*j2[2]-j1[3]*j2[3];
 }
 
 inline COM cdot(const HLV & p, const current & j1) {
   return j1[0]*p.e()-j1[1]*p.x()-j1[2]*p.y()-j1[3]*p.z();
 }
 
 inline void cmult(const COM & factor, const current & j1, current &cur)
 {
   cur[0]=factor*j1[0];
   cur[1]=factor*j1[1];
   cur[2]=factor*j1[2];
   cur[3]=factor*j1[3];
 }
 
 // WHY!?!
 inline void cadd(const current & j1, const current & j2, const current & j3,
           const current & j4, const current & j5, current &sum)
 {
   sum[0]=j1[0]+j2[0]+j3[0]+j4[0]+j5[0];
   sum[1]=j1[1]+j2[1]+j3[1]+j4[1]+j5[1];
   sum[2]=j1[2]+j2[2]+j3[2]+j4[2]+j5[2];
   sum[3]=j1[3]+j2[3]+j3[3]+j4[3]+j5[3];
 }
 
 inline void cadd(const current & j1, const current & j2, const current & j3,
           const current & j4, current &sum) {
   sum[0] = j1[0] + j2[0] + j3[0] + j4[0];
   sum[1] = j1[1] + j2[1] + j3[1] + j4[1];
   sum[2] = j1[2] + j2[2] + j3[2] + j4[2];
   sum[3] = j1[3] + j2[3] + j3[3] + j4[3];
 }
 
 inline void cadd(const current & j1, const current & j2, const current & j3,
          current &sum)
 {
   sum[0]=j1[0]+j2[0]+j3[0];
   sum[1]=j1[1]+j2[1]+j3[1];
   sum[2]=j1[2]+j2[2]+j3[2];
   sum[3]=j1[3]+j2[3]+j3[3];
 }
 
 inline void cadd(const current & j1, const current & j2, current &sum)
 {
   sum[0]=j1[0]+j2[0];
   sum[1]=j1[1]+j2[1];
   sum[2]=j1[2]+j2[2];
   sum[3]=j1[3]+j2[3];
 }
 
 inline double abs2(const COM & a)
 {
     return (a*conj(a)).real();
 }
 
 inline double vabs2(const CCurrent & cur)
 {
     return abs2(cur.c0)-abs2(cur.c1)-abs2(cur.c2)-abs2(cur.c3);
 }
 
 inline double vre(const CCurrent & a, const CCurrent & b)
 {
   return real(a.c0*conj(b.c0)-a.c1*conj(b.c1)-a.c2*conj(b.c2)-a.c3*conj(b.c3));
 }
 //! @TODO These are not currents and should be moved elsewhere.
 double K_g(double p1minus, double paminus);
 double K_g(HLV const & pout, HLV const & pin);
diff --git a/src/jets.cc b/src/jets.cc
index 028aa7d..c9e3d95 100644
--- a/src/jets.cc
+++ b/src/jets.cc
@@ -1,1245 +1,737 @@
 /**
  *  \authors   The HEJ collaboration (see AUTHORS for details)
  *  \date      2019
  *  \copyright GPLv2 or later
  */
 #include "HEJ/jets.hh"
 #include "HEJ/Constants.hh"
 
 // 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
 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]);
 }
 
 void jio(HLV pin, bool helin, HLV pout, bool helout, current &cur) {
   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]);
 }
 
 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]);
 }
 namespace{
 //@{
   /**
    * @brief Pure Jet FKL Contributions, function to handle all incoming types.
    * @param p1out             Outgoing Particle 1.
    * @param p1in              Incoming Particle 1.
    * @param p2out             Outgoing Particle 2
    * @param p2in              Incoming Particle 2
    * @param aqlineb           Bool. Is Backwards quark line an anti-quark line?
    * @param aqlinef           Bool. Is Forwards quark line an anti-quark line?
    *
    * Calculates j_\mu    j^\mu.
    * Handles all possible incoming states.
    */
   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;
 
     // 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());
   }
 } //anonymous namespace
 double ME_qQ(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
   return j_j(p1out, p1in, p2out, p2in, false, false);
 }
 
 double ME_qQbar(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
   return j_j(p1out, p1in, p2out, p2in, false, true);
 }
 
 double ME_qbarQbar(HLV p1out, HLV p1in, HLV p2out, HLV p2in){
   return j_j(p1out, p1in, p2out, p2in, true, true);
 }
 
 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_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);
 }
 //@}
 
 //Unordered bits for pure jet
 double ME_unob_qQ (CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
 {
     //  This construction is taking rapidity order: pg > p1out >> p2out
     //  std::cerr<<"This Uno Current: "<<p1out<<"  "<<p1in<<"  "<<p2out<<"  "<<p2in<<"  "<<pg<<std::endl;
 
     CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
     CLHEP::HepLorentzVector q2=-(p2in-p2out);   // Bottom End
     CLHEP::HepLorentzVector qg=p1in-p1out-pg;  // Extra bit post-gluon
 
     //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
     CCurrent mj1m,mj1p,mj2m,mj2p;
     mj1p=joi(p1out,true,p1in,true);
     mj1m=joi(p1out,false,p1in,false);
     mj2p=joi(p2out,true,p2in,true);
     mj2m=joi(p2out,false,p2in,false);
 
     // Dot products of these which occur again and again
     COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
     COM Mmm=mj1m.dot(mj2m);
     COM Mpp=mj1p.dot(mj2p);
     COM Mpm=mj1p.dot(mj2m);
 
     //  std::cout<< p1out.rapidity() << "  " << p2out.rapidity()<< "  " << qH1 << "  " << qH2 << "\n" <<MHmm << "  " << MHmp << "  "  << MHpm << "  " << MHpp << std::endl;
 
     // 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*(Mmm) + (-2.*mj2m.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmm/2.))/q1.m2();
     Lmp=(qsum*(Mmp) + (-2.*mj2p.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmp/2.))/q1.m2();
     Lpm=(qsum*(Mpm) + (-2.*mj2m.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpm/2.))/q1.m2();
     Lpp=(qsum*(Mpp) + (-2.*mj2p.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpp/2.))/q1.m2();
 
     U1mm=(jgam.dot(mj2m)*j2gm+2.*p1o*Mmm)/(p1out+pg).m2();
     U1mp=(jgam.dot(mj2p)*j2gm+2.*p1o*Mmp)/(p1out+pg).m2();
     U1pm=(jgap.dot(mj2m)*j2gp+2.*p1o*Mpm)/(p1out+pg).m2();
     U1pp=(jgap.dot(mj2p)*j2gp+2.*p1o*Mpp)/(p1out+pg).m2();
     U2mm=((-1.)*j2gm.dot(mj2m)*jgam+2.*p1i*Mmm)/(p1in-pg).m2();
     U2mp=((-1.)*j2gm.dot(mj2p)*jgam+2.*p1i*Mmp)/(p1in-pg).m2();
     U2pm=((-1.)*j2gp.dot(mj2m)*jgap+2.*p1i*Mpm)/(p1in-pg).m2();
     U2pp=((-1.)*j2gp.dot(mj2p)*jgap+2.*p1i*Mpp)/(p1in-pg).m2();
 
     double cf=4./3.;
     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);
 
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
 
     // Now add the t-channels for the Higgs
     double th=q2.m2()*qg.m2();
     ampsq/=th;
     ampsq/=16.;
     ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
     //Higgs coupling is included in Hjets.C
 
     return ampsq;
 }
 
 double ME_unob_qbarQ (CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
 {
     //  This construction is taking rapidity order: pg > p1out >> p2out
     //  std::cerr<<"This Uno Current: "<<p1out<<"  "<<p1in<<"  "<<p2out<<"  "<<p2in<<"  "<<pg<<std::endl;
 
     CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
     CLHEP::HepLorentzVector q2=-(p2in-p2out);   // Bottom End
     CLHEP::HepLorentzVector qg=p1in-p1out-pg;  // Extra bit post-gluon
 
     //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
     CCurrent mj1m,mj1p,mj2m,mj2p;
     mj1p=jio(p1in,true,p1out,true);
     mj1m=jio(p1in,false,p1out,false);
     mj2p=joi(p2out,true,p2in,true);
     mj2m=joi(p2out,false,p2in,false);
 
     // Dot products of these which occur again and again
     COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
     COM Mmm=mj1m.dot(mj2m);
     COM Mpp=mj1p.dot(mj2p);
     COM Mpm=mj1p.dot(mj2m);
 
     // 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*(Mmm) + (-2.*mj2m.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmm/2.))/q1.m2();
     Lmp=(qsum*(Mmp) + (-2.*mj2p.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmp/2.))/q1.m2();
     Lpm=(qsum*(Mpm) + (-2.*mj2m.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpm/2.))/q1.m2();
     Lpp=(qsum*(Mpp) + (-2.*mj2p.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpp/2.))/q1.m2();
 
     U1mm=(jgam.dot(mj2m)*j2gm+2.*p1o*Mmm)/(p1out+pg).m2();
     U1mp=(jgam.dot(mj2p)*j2gm+2.*p1o*Mmp)/(p1out+pg).m2();
     U1pm=(jgap.dot(mj2m)*j2gp+2.*p1o*Mpm)/(p1out+pg).m2();
     U1pp=(jgap.dot(mj2p)*j2gp+2.*p1o*Mpp)/(p1out+pg).m2();
     U2mm=((-1.)*j2gm.dot(mj2m)*jgam+2.*p1i*Mmm)/(p1in-pg).m2();
     U2mp=((-1.)*j2gm.dot(mj2p)*jgam+2.*p1i*Mmp)/(p1in-pg).m2();
     U2pm=((-1.)*j2gp.dot(mj2m)*jgap+2.*p1i*Mpm)/(p1in-pg).m2();
     U2pp=((-1.)*j2gp.dot(mj2p)*jgap+2.*p1i*Mpp)/(p1in-pg).m2();
 
     double cf=4./3.;
     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);
 
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
 
     // Now add the t-channels for the Higgs
     double th=q2.m2()*qg.m2();
     ampsq/=th;
     ampsq/=16.;
     ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
     //Higgs coupling is included in Hjets.C
 
     return ampsq;
 }
 
 double ME_unob_qQbar (CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
 {
     //  This construction is taking rapidity order: pg > p1out >> p2out
     //  std::cerr<<"This Uno Current: "<<p1out<<"  "<<p1in<<"  "<<p2out<<"  "<<p2in<<"  "<<pg<<std::endl;
 
     CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
     CLHEP::HepLorentzVector q2=-(p2in-p2out);   // Bottom End
     CLHEP::HepLorentzVector qg=p1in-p1out-pg;  // Extra bit post-gluon
 
     //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
     CCurrent mj1m,mj1p,mj2m,mj2p;
     mj1p=joi(p1out,true,p1in,true);
     mj1m=joi(p1out,false,p1in,false);
     mj2p=jio(p2in,true,p2out,true);
     mj2m=jio(p2in,false,p2out,false);
 
     // Dot products of these which occur again and again
     COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
     COM Mmm=mj1m.dot(mj2m);
     COM Mpp=mj1p.dot(mj2p);
     COM Mpm=mj1p.dot(mj2m);
 
     // 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*(Mmm) + (-2.*mj2m.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmm/2.))/q1.m2();
     Lmp=(qsum*(Mmp) + (-2.*mj2p.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmp/2.))/q1.m2();
     Lpm=(qsum*(Mpm) + (-2.*mj2m.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpm/2.))/q1.m2();
     Lpp=(qsum*(Mpp) + (-2.*mj2p.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpp/2.))/q1.m2();
 
     U1mm=(jgam.dot(mj2m)*j2gm+2.*p1o*Mmm)/(p1out+pg).m2();
     U1mp=(jgam.dot(mj2p)*j2gm+2.*p1o*Mmp)/(p1out+pg).m2();
     U1pm=(jgap.dot(mj2m)*j2gp+2.*p1o*Mpm)/(p1out+pg).m2();
     U1pp=(jgap.dot(mj2p)*j2gp+2.*p1o*Mpp)/(p1out+pg).m2();
     U2mm=((-1.)*j2gm.dot(mj2m)*jgam+2.*p1i*Mmm)/(p1in-pg).m2();
     U2mp=((-1.)*j2gm.dot(mj2p)*jgam+2.*p1i*Mmp)/(p1in-pg).m2();
     U2pm=((-1.)*j2gp.dot(mj2m)*jgap+2.*p1i*Mpm)/(p1in-pg).m2();
     U2pp=((-1.)*j2gp.dot(mj2p)*jgap+2.*p1i*Mpp)/(p1in-pg).m2();
 
     double cf=4./3.;
     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);
 
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
 
     // Now add the t-channels for the Higgs
     double th=q2.m2()*qg.m2();
     ampsq/=th;
     ampsq/=16.;
     ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
     //Higgs coupling is included in Hjets.C
 
     return ampsq;
 }
 
 double ME_unob_qbarQbar (CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
 {
     //  This construction is taking rapidity order: pg > p1out >> p2out
     //  std::cerr<<"This Uno Current: "<<p1out<<"  "<<p1in<<"  "<<p2out<<"  "<<p2in<<"  "<<pg<<std::endl;
 
     CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
     CLHEP::HepLorentzVector q2=-(p2in-p2out);   // Bottom End
     CLHEP::HepLorentzVector qg=p1in-p1out-pg;  // Extra bit post-gluon
 
     //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
     CCurrent mj1m,mj1p,mj2m,mj2p;
     mj1p=jio(p1in,true,p1out,true);
     mj1m=jio(p1in,false,p1out,false);
     mj2p=jio(p2in,true,p2out,true);
     mj2m=jio(p2in,false,p2out,false);
 
     // Dot products of these which occur again and again
     COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
     COM Mmm=mj1m.dot(mj2m);
     COM Mpp=mj1p.dot(mj2p);
     COM Mpm=mj1p.dot(mj2m);
 
     // 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*(Mmm) + (-2.*mj2m.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmm/2.))/q1.m2();
     Lmp=(qsum*(Mmp) + (-2.*mj2p.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmp/2.))/q1.m2();
     Lpm=(qsum*(Mpm) + (-2.*mj2m.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpm/2.))/q1.m2();
     Lpp=(qsum*(Mpp) + (-2.*mj2p.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpp/2.))/q1.m2();
 
     U1mm=(jgam.dot(mj2m)*j2gm+2.*p1o*Mmm)/(p1out+pg).m2();
     U1mp=(jgam.dot(mj2p)*j2gm+2.*p1o*Mmp)/(p1out+pg).m2();
     U1pm=(jgap.dot(mj2m)*j2gp+2.*p1o*Mpm)/(p1out+pg).m2();
     U1pp=(jgap.dot(mj2p)*j2gp+2.*p1o*Mpp)/(p1out+pg).m2();
     U2mm=((-1.)*j2gm.dot(mj2m)*jgam+2.*p1i*Mmm)/(p1in-pg).m2();
     U2mp=((-1.)*j2gm.dot(mj2p)*jgam+2.*p1i*Mmp)/(p1in-pg).m2();
     U2pm=((-1.)*j2gp.dot(mj2m)*jgap+2.*p1i*Mpm)/(p1in-pg).m2();
     U2pp=((-1.)*j2gp.dot(mj2p)*jgap+2.*p1i*Mpp)/(p1in-pg).m2();
 
     double cf=4./3.;
     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);
 
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
 
     // Now add the t-channels for the Higgs
     double th=q2.m2()*qg.m2();
     ampsq/=th;
     ampsq/=16.;
     //Higgs coupling is included in Hjets.C
     ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
 
     return ampsq;
 }
 
 double ME_unob_qg (CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
 {
     //  This construction is taking rapidity order: pg > p1out >> p2out
     //  std::cerr<<"This Uno Current: "<<p1out<<"  "<<p1in<<"  "<<p2out<<"  "<<p2in<<"  "<<pg<<std::endl;
 
     CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
     CLHEP::HepLorentzVector q2=-(p2in-p2out);   // Bottom End
     CLHEP::HepLorentzVector qg=p1in-p1out-pg;  // Extra bit post-gluon
 
     CCurrent mj1m,mj1p,mj2m,mj2p;
     mj1p=joi(p1out,true,p1in,true);
     mj1m=joi(p1out,false,p1in,false);
     mj2p=joi(p2out,true,p2in,true);
     mj2m=joi(p2out,false,p2in,false);
 
     // Dot products of these which occur again and again
     COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
     COM Mmm=mj1m.dot(mj2m);
     COM Mpp=mj1p.dot(mj2p);
     COM Mpm=mj1p.dot(mj2m);
 
     // 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*(Mmm) + (-2.*mj2m.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmm/2.))/q1.m2();
     Lmp=(qsum*(Mmp) + (-2.*mj2p.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmp/2.))/q1.m2();
     Lpm=(qsum*(Mpm) + (-2.*mj2m.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpm/2.))/q1.m2();
     Lpp=(qsum*(Mpp) + (-2.*mj2p.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpp/2.))/q1.m2();
 
     U1mm=(jgam.dot(mj2m)*j2gm+2.*p1o*Mmm)/(p1out+pg).m2();
     U1mp=(jgam.dot(mj2p)*j2gm+2.*p1o*Mmp)/(p1out+pg).m2();
     U1pm=(jgap.dot(mj2m)*j2gp+2.*p1o*Mpm)/(p1out+pg).m2();
     U1pp=(jgap.dot(mj2p)*j2gp+2.*p1o*Mpp)/(p1out+pg).m2();
     U2mm=((-1.)*j2gm.dot(mj2m)*jgam+2.*p1i*Mmm)/(p1in-pg).m2();
     U2mp=((-1.)*j2gm.dot(mj2p)*jgam+2.*p1i*Mmp)/(p1in-pg).m2();
     U2pm=((-1.)*j2gp.dot(mj2m)*jgap+2.*p1i*Mpm)/(p1in-pg).m2();
     U2pp=((-1.)*j2gp.dot(mj2p)*jgap+2.*p1i*Mpp)/(p1in-pg).m2();
 
     double cf=4./3.;
     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);
 
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
 
     // Now add the t-channels for the Higgs
     double th=q2.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
     //Higgs coupling is included in Hjets.C
 
     double ratio; // p2-/pb- in the notes
     // if (p2in.plus()>0) // if the gluon is the positive
     if (p2in.pz()>0) // if the gluon is the positive
         ratio=p2out.plus()/p2in.plus();
     else // the gluon is the negative
         ratio=p2out.minus()/p2in.minus();
 
     double nonflipcolourmult=(1.-1./9.)/2.*(ratio+1./ratio)+1./9.;
 
     return ampsq*nonflipcolourmult*9./4.; //ca/cf = 9/4
 }
 
 double ME_unob_qbarg (CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
 {
     //  This construction is taking rapidity order: pg > p1out >> p2out
     //  std::cerr<<"This Uno Current: "<<p1out<<"  "<<p1in<<"  "<<p2out<<"  "<<p2in<<"  "<<pg<<std::endl;
 
     CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
     CLHEP::HepLorentzVector q2=-(p2in-p2out);   // Bottom End
     CLHEP::HepLorentzVector qg=p1in-p1out-pg;  // Extra bit post-gluon
 
     CCurrent mj1m,mj1p,mj2m,mj2p;
     mj1p=jio(p1in,true,p1out,true);
     mj1m=jio(p1in,false,p1out,false);
     mj2p=joi(p2out,true,p2in,true);
     mj2m=joi(p2out,false,p2in,false);
 
     // Dot products of these which occur again and again
     COM Mmp=mj1m.dot(mj2p);  // And now for the iggs ones
     COM Mmm=mj1m.dot(mj2m);
     COM Mpp=mj1p.dot(mj2p);
     COM Mpm=mj1p.dot(mj2m);
 
     // 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*(Mmm) + (-2.*mj2m.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmm/2.))/q1.m2();
     Lmp=(qsum*(Mmp) + (-2.*mj2p.dot(pg))*mj1m+2.*mj1m.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mmp/2.))/q1.m2();
     Lpm=(qsum*(Mpm) + (-2.*mj2m.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2m+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpm/2.))/q1.m2();
     Lpp=(qsum*(Mpp) + (-2.*mj2p.dot(pg))*mj1p+2.*mj1p.dot(pg)*mj2p+(p2o/pg.dot(p2out) + p2i/pg.dot(p2in))*(qg.m2()*Mpp/2.))/q1.m2();
 
     U1mm=(jgam.dot(mj2m)*j2gm+2.*p1o*Mmm)/(p1out+pg).m2();
     U1mp=(jgam.dot(mj2p)*j2gm+2.*p1o*Mmp)/(p1out+pg).m2();
     U1pm=(jgap.dot(mj2m)*j2gp+2.*p1o*Mpm)/(p1out+pg).m2();
     U1pp=(jgap.dot(mj2p)*j2gp+2.*p1o*Mpp)/(p1out+pg).m2();
     U2mm=((-1.)*j2gm.dot(mj2m)*jgam+2.*p1i*Mmm)/(p1in-pg).m2();
     U2mp=((-1.)*j2gm.dot(mj2p)*jgam+2.*p1i*Mmp)/(p1in-pg).m2();
     U2pm=((-1.)*j2gp.dot(mj2m)*jgap+2.*p1i*Mpm)/(p1in-pg).m2();
     U2pp=((-1.)*j2gp.dot(mj2p)*jgap+2.*p1i*Mpp)/(p1in-pg).m2();
 
     double cf=4./3.;
     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);
 
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
   // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
   //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
 
     // Now add the t-channels for the Higgs
     double th=q2.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
     //Higgs coupling is included in Hjets.C
 
     double ratio; // p2-/pb- in the notes
     // if (p2in.plus()>0) // if the gluon is the positive
     if (p2in.pz()>0) // if the gluon is the positive
         ratio=p2out.plus()/p2in.plus();
     else // the gluon is the negative
         ratio=p2out.minus()/p2in.minus();
 
     double nonflipcolourmult=(1.-1./9.)/2.*(ratio+1./ratio)+1./9.;
 
     return ampsq*nonflipcolourmult*9./4.; //ca/cf = 9/4
 }
-
-double ME_unof_qQ (CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
-{
-    // std::cout << "####################\n";
-    // std::cout << "# p1in : "<<p1in<< " "<<p1in.plus()<<" "<<p1in.minus()<<std::endl;
-    // std::cout << "# p2in : "<<p2in<< " "<<p2in.plus()<<" "<<p2in.minus()<<std::endl;
-    // std::cout << "# p1out : "<<p1out<< " "<<p1out.rapidity()<<std::endl;
-    // std::cout << "# (qH1-qH2) : "<<(qH1-qH2)<< " "<<(qH1-qH2).rapidity()<<std::endl;
-    // std::cout << "# pg : "<<pg<< " "<<pg.rapidity()<<std::endl;
-    // std::cout << "# p2out : "<<p2out<< " "<<p2out.rapidity()<<std::endl;
-    // std::cout << "####################\n";
-
-    CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
-    CLHEP::HepLorentzVector q2=-(p2in-p2out-pg);  // Extra bit pre-gluon
-    CLHEP::HepLorentzVector q3=-(p2in-p2out);   // Bottom End
-
-    //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
-    CCurrent mj1m,mj1p,mj2m,mj2p;
-    mj1p=joi(p1out,true,p1in,true);
-    mj1m=joi(p1out,false,p1in,false);
-    mj2p=joi(p2out,true,p2in,true);
-    mj2m=joi(p2out,false,p2in,false);
-
-    // Dot products of these which occur again and again
-    COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
-    COM Mmm=mj1m.dot(mj2m);
-    COM Mpp=mj1p.dot(mj2p);
-    COM Mpm=mj1p.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*(Mmm) + (-2.*mj1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmm/2.))/q3.m2();
-    Lmp=((-1.)*qsum*(Mmp) + (-2.*mj1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmp/2.))/q3.m2();
-    Lpm=((-1.)*qsum*(Mpm) + (-2.*mj1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpm/2.))/q3.m2();
-    Lpp=((-1.)*qsum*(Mpp) + (-2.*mj1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpp/2.))/q3.m2();
-    U1mm=(jgbm.dot(mj1m)*j2gm+2.*p2o*Mmm)/(p2out+pg).m2();
-    U1mp=(jgbp.dot(mj1m)*j2gp+2.*p2o*Mmp)/(p2out+pg).m2();
-    U1pm=(jgbm.dot(mj1p)*j2gm+2.*p2o*Mpm)/(p2out+pg).m2();
-    U1pp=(jgbp.dot(mj1p)*j2gp+2.*p2o*Mpp)/(p2out+pg).m2();
-    U2mm=((-1.)*j2gm.dot(mj1m)*jgbm+2.*p2i*Mmm)/(p2in-pg).m2();
-    U2mp=((-1.)*j2gp.dot(mj1m)*jgbp+2.*p2i*Mmp)/(p2in-pg).m2();
-    U2pm=((-1.)*j2gm.dot(mj1p)*jgbm+2.*p2i*Mpm)/(p2in-pg).m2();
-    U2pp=((-1.)*j2gp.dot(mj1p)*jgbp+2.*p2i*Mpp)/(p2in-pg).m2();
-
-    double cf=4./3.;
-    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);
-
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-
-    // Now add the t-channels for the Higgs
-    double th=q1.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_unof_qbarQ (CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
-{
-
-    CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
-    CLHEP::HepLorentzVector q2=-(p2in-p2out-pg);  // Extra bit pre-gluon
-    CLHEP::HepLorentzVector q3=-(p2in-p2out);   // Bottom End
-
-    //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
-    CCurrent mj1m,mj1p,mj2m,mj2p;
-    mj1p=jio(p1in,true,p1out,true);
-    mj1m=jio(p1in,false,p1out,false);
-    mj2p=joi(p2out,true,p2in,true);
-    mj2m=joi(p2out,false,p2in,false);
-
-    // Dot products of these which occur again and again
-    COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
-    COM Mmm=mj1m.dot(mj2m);
-    COM Mpp=mj1p.dot(mj2p);
-    COM Mpm=mj1p.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*(Mmm) + (-2.*mj1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmm/2.))/q3.m2();
-    Lmp=((-1.)*qsum*(Mmp) + (-2.*mj1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmp/2.))/q3.m2();
-    Lpm=((-1.)*qsum*(Mpm) + (-2.*mj1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpm/2.))/q3.m2();
-    Lpp=((-1.)*qsum*(Mpp) + (-2.*mj1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpp/2.))/q3.m2();
-    U1mm=(jgbm.dot(mj1m)*j2gm+2.*p2o*Mmm)/(p2out+pg).m2();
-    U1mp=(jgbp.dot(mj1m)*j2gp+2.*p2o*Mmp)/(p2out+pg).m2();
-    U1pm=(jgbm.dot(mj1p)*j2gm+2.*p2o*Mpm)/(p2out+pg).m2();
-    U1pp=(jgbp.dot(mj1p)*j2gp+2.*p2o*Mpp)/(p2out+pg).m2();
-    U2mm=((-1.)*j2gm.dot(mj1m)*jgbm+2.*p2i*Mmm)/(p2in-pg).m2();
-    U2mp=((-1.)*j2gp.dot(mj1m)*jgbp+2.*p2i*Mmp)/(p2in-pg).m2();
-    U2pm=((-1.)*j2gm.dot(mj1p)*jgbm+2.*p2i*Mpm)/(p2in-pg).m2();
-    U2pp=((-1.)*j2gp.dot(mj1p)*jgbp+2.*p2i*Mpp)/(p2in-pg).m2();
-
-
-    double cf=4./3.;
-    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);
-
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-
-    // Now add the t-channels for the Higgs
-    double th=q1.m2()*q2.m2();
-    ampsq/=th;
-    ampsq/=16.;
-    ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
-    //Higgs coupling is included in Hjets.C
-
-    return ampsq;
-}
-
-
-
-double ME_unof_qQbar (CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
-{
-
-    CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
-    CLHEP::HepLorentzVector q2=-(p2in-p2out-pg);  // Extra bit pre-gluon
-    CLHEP::HepLorentzVector q3=-(p2in-p2out);   // Bottom End
-
-    //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
-    CCurrent mj1m,mj1p,mj2m,mj2p;
-    mj1p=joi(p1out,true,p1in,true);
-    mj1m=joi(p1out,false,p1in,false);
-    mj2p=jio(p2in,true,p2out,true);
-    mj2m=jio(p2in,false,p2out,false);
-
-    // Dot products of these which occur again and again
-    COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
-    COM Mmm=mj1m.dot(mj2m);
-    COM Mpp=mj1p.dot(mj2p);
-    COM Mpm=mj1p.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*(Mmm) + (-2.*mj1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmm/2.))/q3.m2();
-    Lmp=((-1.)*qsum*(Mmp) + (-2.*mj1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmp/2.))/q3.m2();
-    Lpm=((-1.)*qsum*(Mpm) + (-2.*mj1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpm/2.))/q3.m2();
-    Lpp=((-1.)*qsum*(Mpp) + (-2.*mj1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpp/2.))/q3.m2();
-    U1mm=(jgbm.dot(mj1m)*j2gm+2.*p2o*Mmm)/(p2out+pg).m2();
-    U1mp=(jgbp.dot(mj1m)*j2gp+2.*p2o*Mmp)/(p2out+pg).m2();
-    U1pm=(jgbm.dot(mj1p)*j2gm+2.*p2o*Mpm)/(p2out+pg).m2();
-    U1pp=(jgbp.dot(mj1p)*j2gp+2.*p2o*Mpp)/(p2out+pg).m2();
-    U2mm=((-1.)*j2gm.dot(mj1m)*jgbm+2.*p2i*Mmm)/(p2in-pg).m2();
-    U2mp=((-1.)*j2gp.dot(mj1m)*jgbp+2.*p2i*Mmp)/(p2in-pg).m2();
-    U2pm=((-1.)*j2gm.dot(mj1p)*jgbm+2.*p2i*Mpm)/(p2in-pg).m2();
-    U2pp=((-1.)*j2gp.dot(mj1p)*jgbp+2.*p2i*Mpp)/(p2in-pg).m2();
-
-
-
-    double cf=4./3.;
-    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);
-
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-
-    // Now add the t-channels for the Higgs
-    double th=q1.m2()*q2.m2();
-    ampsq/=th;
-    ampsq/=16.;
-    ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
-    //Higgs coupling is included in Hjets.C
-
-    return ampsq;
-}
-
-
-
-double ME_unof_qbarQbar (CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
-{
-
-    CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
-    CLHEP::HepLorentzVector q2=-(p2in-p2out-pg);  // Extra bit pre-gluon
-    CLHEP::HepLorentzVector q3=-(p2in-p2out);   // Bottom End
-
-    //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
-    CCurrent mj1m,mj1p,mj2m,mj2p;
-    mj1p=jio(p1in,true,p1out,true);
-    mj1m=jio(p1in,false,p1out,false);
-    mj2p=jio(p2in,true,p2out,true);
-    mj2m=jio(p2in,false,p2out,false);
-
-    // Dot products of these which occur again and again
-    COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
-    COM Mmm=mj1m.dot(mj2m);
-    COM Mpp=mj1p.dot(mj2p);
-    COM Mpm=mj1p.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*(Mmm) + (-2.*mj1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmm/2.))/q3.m2();
-    Lmp=((-1.)*qsum*(Mmp) + (-2.*mj1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmp/2.))/q3.m2();
-    Lpm=((-1.)*qsum*(Mpm) + (-2.*mj1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpm/2.))/q3.m2();
-    Lpp=((-1.)*qsum*(Mpp) + (-2.*mj1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpp/2.))/q3.m2();
-    U1mm=(jgbm.dot(mj1m)*j2gm+2.*p2o*Mmm)/(p2out+pg).m2();
-    U1mp=(jgbp.dot(mj1m)*j2gp+2.*p2o*Mmp)/(p2out+pg).m2();
-    U1pm=(jgbm.dot(mj1p)*j2gm+2.*p2o*Mpm)/(p2out+pg).m2();
-    U1pp=(jgbp.dot(mj1p)*j2gp+2.*p2o*Mpp)/(p2out+pg).m2();
-    U2mm=((-1.)*j2gm.dot(mj1m)*jgbm+2.*p2i*Mmm)/(p2in-pg).m2();
-    U2mp=((-1.)*j2gp.dot(mj1m)*jgbp+2.*p2i*Mmp)/(p2in-pg).m2();
-    U2pm=((-1.)*j2gm.dot(mj1p)*jgbm+2.*p2i*Mpm)/(p2in-pg).m2();
-    U2pp=((-1.)*j2gp.dot(mj1p)*jgbp+2.*p2i*Mpp)/(p2in-pg).m2();
-
-
-
-    double cf=4./3.;
-    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);
-
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-
-    // Now add the t-channels for the Higgs
-    double th=q1.m2()*q2.m2();
-    ampsq/=th;
-    ampsq/=16.;
-    ampsq*=4.*4./(9.*9.);  // Factor of (Cf/Ca) for each quark to match MH2qQ.
-    //Higgs coupling is included in Hjets.C
-
-
-
-    return ampsq;
-}
-
-double ME_unof_gQ (CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
-{
-    // std::cout << "####################\n";
-    // std::cout << "# p1in : "<<p1in<< " "<<p1in.plus()<<" "<<p1in.minus()<<std::endl;
-    // std::cout << "# p2in : "<<p2in<< " "<<p2in.plus()<<" "<<p2in.minus()<<std::endl;
-    // std::cout << "# p1out : "<<p1out<< " "<<p1out.rapidity()<<std::endl;
-    // std::cout << "# (qH1-qH2) : "<<(qH1-qH2)<< " "<<(qH1-qH2).rapidity()<<std::endl;
-    // std::cout << "# pg : "<<pg<< " "<<pg.rapidity()<<std::endl;
-    // std::cout << "# p2out : "<<p2out<< " "<<p2out.rapidity()<<std::endl;
-    // std::cout << "####################\n";
-
-    CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
-    CLHEP::HepLorentzVector q2=-(p2in-p2out-pg);  // Extra bit pre-gluon
-    CLHEP::HepLorentzVector q3=-(p2in-p2out);   // Bottom End
-
-    //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
-    CCurrent mj1m,mj1p,mj2m,mj2p;
-    mj1p=joi(p1out,true,p1in,true);
-    mj1m=joi(p1out,false,p1in,false);
-    mj2p=joi(p2out,true,p2in,true);
-    mj2m=joi(p2out,false,p2in,false);
-
-    // Dot products of these which occur again and again
-    COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
-    COM Mmm=mj1m.dot(mj2m);
-    COM Mpp=mj1p.dot(mj2p);
-    COM Mpm=mj1p.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*(Mmm) + (-2.*mj1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmm/2.))/q3.m2();
-    Lmp=((-1.)*qsum*(Mmp) + (-2.*mj1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmp/2.))/q3.m2();
-    Lpm=((-1.)*qsum*(Mpm) + (-2.*mj1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpm/2.))/q3.m2();
-    Lpp=((-1.)*qsum*(Mpp) + (-2.*mj1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpp/2.))/q3.m2();
-    U1mm=(jgbm.dot(mj1m)*j2gm+2.*p2o*Mmm)/(p2out+pg).m2();
-    U1mp=(jgbp.dot(mj1m)*j2gp+2.*p2o*Mmp)/(p2out+pg).m2();
-    U1pm=(jgbm.dot(mj1p)*j2gm+2.*p2o*Mpm)/(p2out+pg).m2();
-    U1pp=(jgbp.dot(mj1p)*j2gp+2.*p2o*Mpp)/(p2out+pg).m2();
-    U2mm=((-1.)*j2gm.dot(mj1m)*jgbm+2.*p2i*Mmm)/(p2in-pg).m2();
-    U2mp=((-1.)*j2gp.dot(mj1m)*jgbp+2.*p2i*Mmp)/(p2in-pg).m2();
-    U2pm=((-1.)*j2gm.dot(mj1p)*jgbm+2.*p2i*Mpm)/(p2in-pg).m2();
-    U2pp=((-1.)*j2gp.dot(mj1p)*jgbp+2.*p2i*Mpp)/(p2in-pg).m2();
-
-    double cf=4./3.;
-    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);
-
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-
-    // Now add the t-channels for the Higgs
-    double th=q1.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
-    //Higgs coupling is included in Hjets.C
-
-    double ratio; // p2-/pb- in the notes
-    // if (p2in.plus()>0) // if the gluon is the positive
-    if (p1in.pz()>0) // if the gluon is the positive
-        ratio=p1out.plus()/p1in.plus();
-    else // the gluon is the negative
-        ratio=p1out.minus()/p1in.minus();
-
-    double nonflipcolourmult=(1.-1./9.)/2.*(ratio+1./ratio)+1./9.;
-
-    return ampsq*nonflipcolourmult*9./4.; //ca/cf = 9/4
-}
-
-double ME_unof_gQbar (CLHEP::HepLorentzVector p1out, CLHEP::HepLorentzVector p1in, CLHEP::HepLorentzVector pg, CLHEP::HepLorentzVector p2out, CLHEP::HepLorentzVector p2in)
-{
-
-    CLHEP::HepLorentzVector q1=p1in-p1out;  // Top End
-    CLHEP::HepLorentzVector q2=-(p2in-p2out-pg);  // Extra bit pre-gluon
-    CLHEP::HepLorentzVector q3=-(p2in-p2out);   // Bottom End
-
-    //  std::cerr<<"Current:  "<<q1.m2()<<"  "<<q2.m2()<<std::endl;
-    CCurrent mj1m,mj1p,mj2m,mj2p;
-    mj1p=joi(p1out,true,p1in,true);
-    mj1m=joi(p1out,false,p1in,false);
-    mj2p=jio(p2in,true,p2out,true);
-    mj2m=jio(p2in,false,p2out,false);
-
-    // Dot products of these which occur again and again
-    COM Mmp=mj1m.dot(mj2p);  // And now for the Higgs ones
-    COM Mmm=mj1m.dot(mj2m);
-    COM Mpp=mj1p.dot(mj2p);
-    COM Mpm=mj1p.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*(Mmm) + (-2.*mj1m.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmm/2.))/q3.m2();
-    Lmp=((-1.)*qsum*(Mmp) + (-2.*mj1m.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1m+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mmp/2.))/q3.m2();
-    Lpm=((-1.)*qsum*(Mpm) + (-2.*mj1p.dot(pg))*mj2m+2.*mj2m.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpm/2.))/q3.m2();
-    Lpp=((-1.)*qsum*(Mpp) + (-2.*mj1p.dot(pg))*mj2p+2.*mj2p.dot(pg)*mj1p+(p1o/pg.dot(p1out) + p1i/pg.dot(p1in))*(q2.m2()*Mpp/2.))/q3.m2();
-    U1mm=(jgbm.dot(mj1m)*j2gm+2.*p2o*Mmm)/(p2out+pg).m2();
-    U1mp=(jgbp.dot(mj1m)*j2gp+2.*p2o*Mmp)/(p2out+pg).m2();
-    U1pm=(jgbm.dot(mj1p)*j2gm+2.*p2o*Mpm)/(p2out+pg).m2();
-    U1pp=(jgbp.dot(mj1p)*j2gp+2.*p2o*Mpp)/(p2out+pg).m2();
-    U2mm=((-1.)*j2gm.dot(mj1m)*jgbm+2.*p2i*Mmm)/(p2in-pg).m2();
-    U2mp=((-1.)*j2gp.dot(mj1m)*jgbp+2.*p2i*Mmp)/(p2in-pg).m2();
-    U2pm=((-1.)*j2gm.dot(mj1p)*jgbm+2.*p2i*Mpm)/(p2in-pg).m2();
-    U2pp=((-1.)*j2gp.dot(mj1p)*jgbp+2.*p2i*Mpp)/(p2in-pg).m2();
-
-
-
-    double cf=4./3.;
-    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);
-
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) > 1.0000001)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-  // if ((vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm))/(2*vre(Lmm-U1mm,Lmm+U2mm)) < 0.9999999)
-  //   std::cout << " Big Problem!! " << vabs2(Lmm-U1mm+U2mm)+vabs2(Lmm)-vabs2(U1mm)-vabs2(U2mm) << "  " << 2*vre(Lmm-U1mm,Lmm+U2mm) << std::endl;
-
-    // Now add the t-channels for the Higgs
-    double th=q1.m2()*q2.m2();
-    ampsq/=th;
-    ampsq/=16.;
-    ampsq*=4./9.*4./9.;  // Factor of (Cf/Ca) for each quark to match MH2qQ.
-    //Higgs coupling is included in Hjets.C
-
-    double ratio; // p2-/pb- in the notes
-    // if (p2in.plus()>0) // if the gluon is the positive
-    if (p1in.pz()>0) // if the gluon is the positive
-        ratio=p1out.plus()/p1in.plus();
-    else // the gluon is the negative
-        ratio=p1out.minus()/p1in.minus();
-
-    double nonflipcolourmult=(1.-1./9.)/2.*(ratio+1./ratio)+1./9.;
-
-    return ampsq*nonflipcolourmult*9./4.; //ca/cf = 9/4
-
-}