diff --git a/src/Zjets.cc b/src/Zjets.cc
index 86c591d..61148d1 100644
--- a/src/Zjets.cc
+++ b/src/Zjets.cc
@@ -1,509 +1,509 @@
 /**
  *  \authors   The HEJ collaboration (see AUTHORS for details)
  *  \date      2020
  *  \copyright GPLv2 or later
  */
 #include <vector>
 
 #include "HEJ/Constants.hh"
 #include "HEJ/EWConstants.hh"
 #include "HEJ/PDG_codes.hh"
 #include "HEJ/jets.hh"
 
 // generated headers
 #include "HEJ/currents/jZ_j.hh"
 #include "HEJ/currents/jZuno_j.hh"
 #include "HEJ/currents/jZ_juno.hh"
 
 using HEJ::Helicity;
 using HEJ::ParticleProperties;
 using HEJ::ParticleID;
 
 namespace helicity = HEJ::helicity;
 
 namespace {
   // Z propagator
   COM ZProp(double q, ParticleProperties const & zprop){
     return 1. / (q - zprop.mass*zprop.mass + COM(0.,1.)*zprop.width*zprop.mass);
   }
 
   // Photon propagator
   COM GProp(double q) {
     return 1. / q;
   }
 
   // Weak charge
   double Zq (int PID, Helicity h, double stw2, double ctw) {
     // Positive Spin
     if (h == helicity::plus) {
       // quarks
       if (PID ==  1 || PID ==  3 || PID ==  5) return (+ 1.0 * stw2 / 3.0) / ctw;
       if (PID ==  2 || PID ==  4)              return (- 2.0 * stw2 / 3.0) / ctw;
       if (PID == -1 || PID == -3 || PID == -5) return (- 1.0 * stw2 / 3.0) / ctw;
       if (PID == -2 || PID == -4)              return (+ 2.0 * stw2 / 3.0) / ctw;
       // electron
       if (PID == 11) return stw2 / ctw;
     }
     // Negative Spin
     else {
       // quarks
       if (PID ==  1 || PID ==  3 || PID ==  5) return (-0.5 + 1.0 * stw2 / 3.0) / ctw;
       if (PID ==  2 || PID ==  4)              return ( 0.5 - 2.0 * stw2 / 3.0) / ctw;
       if (PID == -1 || PID == -3 || PID == -5) return ( 0.5 - 1.0 * stw2 / 3.0) / ctw;
       if (PID == -2 || PID == -4)              return (-0.5 + 2.0 * stw2 / 3.0) / ctw;
       // electron
       if (PID == 11) return (-1.0 / 2.0 + stw2) / ctw;
     }
     throw std::logic_error("ERROR! No weak charge found");
   }
 
   // Electric charge
   double Gq (int PID) {
     if (PID ==  1 || PID ==  3 || PID ==  5) return -1.0 / 3.0;
     if (PID ==  2 || PID ==  4)              return  2.0 / 3.0;
     if (PID == -1 || PID == -3 || PID == -5) return  1.0 / 3.0;
     if (PID == -2 || PID == -4)              return -2.0 / 3.0;
     throw std::logic_error("ERROR! No electric charge found");
   }
 
   //! Prefactor for Z+Jets Contributions
   /**
    * @brief Z+Jets Contributions Prefactor
    * @param aptype         Incoming Particle 1 type (Z emission)
    * @param PZ             Z Propagator
    * @param PG             Photon Propagator
    * @param stw2           Value of sin(theta_w)^2
    * @param ctw            Value of cos(theta_w)
    * @param res            Ouput: pref[h1][hl]
    *
    * Calculates prefactor for Z+Jets (includes couplings and propagators)
    */
   void Z_amp_pref(ParticleID aptype, COM PZ, COM PG, double stw2, double ctw, COM (&res)[2][2]
   ){
     using helicity::plus;
     using helicity::minus;
 
     const double Zq_a_p = Zq(aptype, (aptype>0 ? plus : minus), stw2, ctw);
     const double Zq_a_m = Zq(aptype, (aptype>0 ? minus : plus), stw2, ctw);
     const double Ze_p   = Zq(HEJ::pid::electron, plus,  stw2, ctw);
     const double Ze_m   = Zq(HEJ::pid::electron, minus, stw2, ctw);
     const double Gq_a   = Gq(aptype);
 
     res[1][1] = -2.*(Zq_a_p * Ze_p * PZ - Gq_a * PG * stw2);
     res[1][0] = -2.*(Zq_a_p * Ze_m * PZ - Gq_a * PG * stw2);
     res[0][0] = -2.*(Zq_a_m * Ze_m * PZ - Gq_a * PG * stw2);
     res[0][1] = -2.*(Zq_a_m * Ze_p * PZ - Gq_a * PG * stw2);
   }
 
   //! Z+Jets FKL Contribution
   /**
    * @brief Z+Jets FKL Contribution
    * @param pa             Incoming Particle 1 (Z emission)
    * @param pb             Incoming Particle 2
    * @param p1             Outgoing Particle 1 (Z emission)
    * @param p2             Outgoing Particle 2
    * @param pep            Outgoing positron
    * @param pem            Outgoing electron
    * @param res            Ouput: jZ_j[h1][hl][h2]
    *
    * Calculates j_Z^\mu j_\mu.
    */
   void jZ_j(HLV pa, HLV pb, HLV p1, HLV p2, HLV pep, HLV pem, COM (&res)[2][2][2]
   ){
     using helicity::plus;
     using helicity::minus;
 
     const COM jZ_j_ppp = HEJ::jZ_j<plus, plus,  plus> (pa, p1, pb, p2, pem, pep);
     const COM jZ_j_ppm = HEJ::jZ_j<plus, plus,  minus>(pa, p1, pb, p2, pem, pep);
     const COM jZ_j_pmp = HEJ::jZ_j<plus, minus, plus> (pa, p1, pb, p2, pem, pep);
     const COM jZ_j_pmm = HEJ::jZ_j<plus, minus, minus>(pa, p1, pb, p2, pem, pep);
 
     res[1][1][1] = jZ_j_ppp;
     res[1][1][0] = jZ_j_ppm;
     res[1][0][1] = jZ_j_pmp;
     res[1][0][0] = jZ_j_pmm;
     res[0][0][0] = conj(jZ_j_ppp);
     res[0][0][1] = conj(jZ_j_ppm);
     res[0][1][0] = conj(jZ_j_pmp);
     res[0][1][1] = conj(jZ_j_pmm);
   }
 
   /**
    * @brief Z+Jets Unordered Contribution, unordered on Z side
    * @param pa             Incoming Particle 1 (Z and Uno emission)
    * @param pb             Incoming Particle 2
    * @param pg             Unordered Gluon
    * @param p1             Outgoing Particle 1 (Z and Uno emission)
    * @param p2             Outgoing Particle 2
    * @param pep            Outgoing positron
    * @param pem            Outgoing electron
    * @param X              Ouput: (U1-L)[h1][hl][h2][hg]
    * @param Y              Ouput: (U2+L)[h1][hl][h2][hg]
    *
    * Calculates j_Z_{uno}^\mu j_\mu. Ie, unordered with Z emission same side.
    */
   void jZuno_j(HLV pa, HLV pb, HLV pg, HLV p1, HLV p2, HLV pep, HLV pem,
                COM (&X)[2][2][2][2], COM (&Y)[2][2][2][2]
   ){
     using helicity::plus;
     using helicity::minus;
 
     COM U1[2][2][2][2];
     U1[1][1][1][1] = HEJ::U1<plus, plus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[1][1][1][0] = HEJ::U1<plus, plus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U1[1][1][0][1] = HEJ::U1<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[1][1][0][0] = HEJ::U1<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     U1[1][0][1][1] = HEJ::U1<plus, minus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[1][0][1][0] = HEJ::U1<plus, minus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U1[1][0][0][1] = HEJ::U1<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[1][0][0][0] = HEJ::U1<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     U1[0][1][1][1] = HEJ::U1<minus, plus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[0][1][1][0] = HEJ::U1<minus, plus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U1[0][1][0][1] = HEJ::U1<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[0][1][0][0] = HEJ::U1<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     U1[0][0][1][1] = HEJ::U1<minus, minus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[0][0][1][0] = HEJ::U1<minus, minus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U1[0][0][0][1] = HEJ::U1<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U1[0][0][0][0] = HEJ::U1<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     COM U2[2][2][2][2];
     U2[1][1][1][1] = HEJ::U2<plus, plus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[1][1][1][0] = HEJ::U2<plus, plus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U2[1][1][0][1] = HEJ::U2<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[1][1][0][0] = HEJ::U2<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     U2[1][0][1][1] = HEJ::U2<plus, minus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[1][0][1][0] = HEJ::U2<plus, minus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U2[1][0][0][1] = HEJ::U2<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[1][0][0][0] = HEJ::U2<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     U2[0][1][1][1] = HEJ::U2<minus, plus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[0][1][1][0] = HEJ::U2<minus, plus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U2[0][1][0][1] = HEJ::U2<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[0][1][0][0] = HEJ::U2<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     U2[0][0][1][1] = HEJ::U2<minus, minus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[0][0][1][0] = HEJ::U2<minus, minus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     U2[0][0][0][1] = HEJ::U2<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     U2[0][0][0][0] = HEJ::U2<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     COM L[2][2][2][2];
     L[1][1][1][1] = HEJ::L<plus, plus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     L[1][1][1][0] = HEJ::L<plus, plus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     L[1][1][0][1] = HEJ::L<plus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     L[1][1][0][0] = HEJ::L<plus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     L[1][0][1][1] = HEJ::L<plus, minus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     L[1][0][1][0] = HEJ::L<plus, minus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     L[1][0][0][1] = HEJ::L<plus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     L[1][0][0][0] = HEJ::L<plus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     L[0][1][1][1] = HEJ::L<minus, plus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     L[0][1][1][0] = HEJ::L<minus, plus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     L[0][1][0][1] = HEJ::L<minus, plus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     L[0][1][0][0] = HEJ::L<minus, plus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     L[0][0][1][1] = HEJ::L<minus, minus, plus,  plus> (p1, p2, pa, pb, pg, pem, pep);
     L[0][0][1][0] = HEJ::L<minus, minus, plus,  minus>(p1, p2, pa, pb, pg, pem, pep);
     L[0][0][0][1] = HEJ::L<minus, minus, minus, plus> (p1, p2, pa, pb, pg, pem, pep);
     L[0][0][0][0] = HEJ::L<minus, minus, minus, minus>(p1, p2, pa, pb, pg, pem, pep);
 
     for(int h1=0; h1<2; h1++){
       for(int hl=0; hl<2; hl++){
         for(int h2=0; h2<2; h2++){
           for(int hg=0; hg<2; hg++){
             X[h1][hl][h2][hg] = U1[h1][hl][h2][hg] - L[h1][hl][h2][hg];
             Y[h1][hl][h2][hg] = U2[h1][hl][h2][hg] + L[h1][hl][h2][hg];
           }
         }
       }
     }
   }
 
   /**
    * @brief Z+Jets Unordered Contribution, unordered opposite to Z side
    * @param pa             Incoming Particle 1 (Z emission)
    * @param pb             Incoming Particle 2 (unordered emission)
    * @param p1             Outgoing Particle 1 (Z emission)
    * @param p2             Outgoing Particle 2 (unordered emission)
    * @param pg             Unordered Gluon
    * @param pep            Outgoing positron
    * @param pem            Outgoing electron
    * @param X              Ouput: (U1-L)[h1][hl][h2][hg]
    * @param Y              Ouput: (U2+L)[h1][hl][h2][hg]
    *
    * Calculates j_Z^\mu j_{uno}_\mu. Ie, unordered with Z emission opposite side.
    */
   void jZ_juno(HLV pa, HLV pb, HLV p1, HLV p2, HLV pg, HLV pep, HLV pem,
                COM (&X)[2][2][2][2], COM (&Y)[2][2][2][2]
   ){
     using helicity::plus;
     using helicity::minus;
 
     COM U1[2][2][2][2];
     U1[1][1][1][1] = HEJ::U1_jZ<plus, plus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[1][1][1][0] = HEJ::U1_jZ<plus, plus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U1[1][1][0][1] = HEJ::U1_jZ<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[1][1][0][0] = HEJ::U1_jZ<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     U1[1][0][1][1] = HEJ::U1_jZ<plus, minus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[1][0][1][0] = HEJ::U1_jZ<plus, minus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U1[1][0][0][1] = HEJ::U1_jZ<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[1][0][0][0] = HEJ::U1_jZ<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     U1[0][1][1][1] = HEJ::U1_jZ<minus, plus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[0][1][1][0] = HEJ::U1_jZ<minus, plus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U1[0][1][0][1] = HEJ::U1_jZ<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[0][1][0][0] = HEJ::U1_jZ<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     U1[0][0][1][1] = HEJ::U1_jZ<minus, minus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[0][0][1][0] = HEJ::U1_jZ<minus, minus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U1[0][0][0][1] = HEJ::U1_jZ<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U1[0][0][0][0] = HEJ::U1_jZ<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     COM U2[2][2][2][2];
     U2[1][1][1][1] = HEJ::U2_jZ<plus, plus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[1][1][1][0] = HEJ::U2_jZ<plus, plus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U2[1][1][0][1] = HEJ::U2_jZ<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[1][1][0][0] = HEJ::U2_jZ<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     U2[1][0][1][1] = HEJ::U2_jZ<plus, minus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[1][0][1][0] = HEJ::U2_jZ<plus, minus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U2[1][0][0][1] = HEJ::U2_jZ<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[1][0][0][0] = HEJ::U2_jZ<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     U2[0][1][1][1] = HEJ::U2_jZ<minus, plus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[0][1][1][0] = HEJ::U2_jZ<minus, plus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U2[0][1][0][1] = HEJ::U2_jZ<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[0][1][0][0] = HEJ::U2_jZ<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     U2[0][0][1][1] = HEJ::U2_jZ<minus, minus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[0][0][1][0] = HEJ::U2_jZ<minus, minus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     U2[0][0][0][1] = HEJ::U2_jZ<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     U2[0][0][0][0] = HEJ::U2_jZ<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     COM L[2][2][2][2];
     L[1][1][1][1] = HEJ::L_jZ<plus, plus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     L[1][1][1][0] = HEJ::L_jZ<plus, plus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     L[1][1][0][1] = HEJ::L_jZ<plus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     L[1][1][0][0] = HEJ::L_jZ<plus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     L[1][0][1][1] = HEJ::L_jZ<plus, minus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     L[1][0][1][0] = HEJ::L_jZ<plus, minus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     L[1][0][0][1] = HEJ::L_jZ<plus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     L[1][0][0][0] = HEJ::L_jZ<plus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     L[0][1][1][1] = HEJ::L_jZ<minus, plus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     L[0][1][1][0] = HEJ::L_jZ<minus, plus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     L[0][1][0][1] = HEJ::L_jZ<minus, plus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     L[0][1][0][0] = HEJ::L_jZ<minus, plus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     L[0][0][1][1] = HEJ::L_jZ<minus, minus, plus,  plus> (pa, p1, pb, p2, pg, pem, pep);
     L[0][0][1][0] = HEJ::L_jZ<minus, minus, plus,  minus>(pa, p1, pb, p2, pg, pem, pep);
     L[0][0][0][1] = HEJ::L_jZ<minus, minus, minus, plus> (pa, p1, pb, p2, pg, pem, pep);
     L[0][0][0][0] = HEJ::L_jZ<minus, minus, minus, minus>(pa, p1, pb, p2, pg, pem, pep);
 
     for(int h1=0; h1<2; h1++){
       for(int hl=0; hl<2; hl++){
         for(int h2=0; h2<2; h2++){
           for(int hg=0; hg<2; hg++){
             X[h1][hl][h2][hg] = U1[h1][hl][h2][hg] - L[h1][hl][h2][hg];
             Y[h1][hl][h2][hg] = U2[h1][hl][h2][hg] + L[h1][hl][h2][hg];
           }
         }
       }
     }
   }
 } // Anonymous Namespace
 
 
 std::vector <double> ME_Z_qQ(HLV pa, HLV pb, HLV p1, HLV p2, HLV pep, HLV pem,
                              ParticleID aptype, ParticleID bptype,
                              ParticleProperties const & zprop,
                              double stw2, double ctw
 ){
   const HLV pZ = pep + pem;
   const COM PZ = ZProp(pZ.m2(), zprop);
   const COM PG = GProp(pZ.m2());
 
   COM pref_top[2][2], pref_bot[2][2];
   Z_amp_pref(aptype, PZ, PG, stw2, ctw, pref_top);
   Z_amp_pref(bptype, PZ, PG, stw2, ctw, pref_bot);
 
   COM Coeff_top[2][2][2], Coeff_bot[2][2][2];
   jZ_j(pa, pb, p1, p2, pep, pem, Coeff_top);
   jZ_j(pb, pa, p2, p1, pep, pem, Coeff_bot);
 
   double sum_top=0., sum_bot=0., sum_mix=0.;
   for(int h1=0; h1<2; h1++){
     for(int hl=0; hl<2; hl++){
       for(int h2=0; h2<2; h2++){
         COM res_top = pref_top[h1][hl] * Coeff_top[h1][hl][h2];
         COM res_bot = pref_bot[h2][hl] * Coeff_bot[h2][hl][h1];
         sum_top += norm(res_top);
         sum_bot += norm(res_bot);
         sum_mix += 2.0 * real(res_top * conj(res_bot));
       }
     }
   }
 
   const double t1_top = (pa-p1-pZ).m2();
   const double t2_top = (pb-p2   ).m2();
 
   const double t1_bot = (pa-p1   ).m2();
   const double t2_bot = (pb-p2-pZ).m2();
 
   sum_top /= t1_top * t2_top;
   sum_bot /= t1_bot * t2_bot;
   sum_mix /= sqrt(t1_top * t2_top * t1_bot * t2_bot);
 
   // Colour factor: (CF*CA)/2
   // Colour and helicity average: 1/(4*Nc^2)
   const double pref = (HEJ::C_F*HEJ::C_A) / (8*HEJ::N_C*HEJ::N_C);
 
   return {sum_top*pref, sum_bot*pref, sum_mix*pref};
 }
 
 
 double ME_Z_qg(HLV pa, HLV pb, HLV p1, HLV p2, HLV pep, HLV pem,
                ParticleID aptype, ParticleID /*bptype*/,
                ParticleProperties const & zprop,
                double stw2, double ctw
 ){
   const HLV pZ = pep + pem;
   const COM PZ = ZProp(pZ.m2(), zprop);
   const COM PG = GProp(pZ.m2());
 
   COM pref[2][2], Coeff[2][2][2];
   Z_amp_pref(aptype, PZ, PG, stw2, ctw, pref);
   jZ_j(pa, pb, p1, p2, pep, pem, Coeff);
 
   double sum = 0.;
   for(int h1=0; h1<2; h1++){
     for(int hl=0; hl<2; hl++){
       for(int h2=0; h2<2; h2++){
         sum += norm(pref[h1][hl] * Coeff[h1][hl][h2]);
       }
     }
   }
 
   sum /= (pa-p1-pZ).m2()*(pb-p2).m2();
 
   // Colour factor: (CF*CA)/2
   // Colour and helicity average: 1/(4*Nc^2)
   // Divide by CF because of gluon (K_g -> CA)
   sum *= HEJ::C_A / (8*HEJ::N_C*HEJ::N_C);
 
   // Multiply by CAM
   return sum * K_g(p2, pb);
 }
 
 
 std::vector <double> ME_Zuno_qQ(HLV pa, HLV pb, HLV pg, HLV p1, HLV p2, HLV pep, HLV pem,
                                 ParticleID aptype, ParticleID bptype,
                                 ParticleProperties const & zprop,
                                 double stw2, double ctw
 ){
   using HEJ::C_A;
   using HEJ::C_F;
 
   const HLV pZ = pep + pem;
   const COM PZ = ZProp(pZ.m2(), zprop);
   const COM PG = GProp(pZ.m2());
 
   COM prefact_top[2][2], prefact_bot[2][2];
   Z_amp_pref(aptype, PZ, PG, stw2, ctw, prefact_top);
   Z_amp_pref(bptype, PZ, PG, stw2, ctw, prefact_bot);
 
   COM CoeffX_top[2][2][2][2], CoeffY_top[2][2][2][2];
   jZuno_j(pa, pb, pg, p1, p2, pep, pem, CoeffX_top, CoeffY_top);
 
   COM CoeffX_bot[2][2][2][2], CoeffY_bot[2][2][2][2];
   jZ_juno(pb, pa, p2, p1, pg, pep, pem, CoeffX_bot, CoeffY_bot);
 
   double sum_top=0., sum_bot=0., sum_mix=0.;
   for(int h1=0; h1<2; h1++){
     for(int hl=0; hl<2; hl++){
       for(int h2=0; h2<2; h2++){
         for(int hg=0; hg<2; hg++){
           COM pref_top = prefact_top[h1][hl];
           COM X_top = CoeffX_top[h1][hl][h2][hg];
           COM Y_top = CoeffY_top[h1][hl][h2][hg];
 
           COM pref_bot = prefact_bot[h2][hl];
           COM X_bot = CoeffX_bot[h2][hl][h1][hg];
           COM Y_bot = CoeffY_bot[h2][hl][h1][hg];
 
           sum_top += norm(pref_top) * (C_A*C_F*C_F/2.*(norm(X_top)+norm(Y_top))
                                        - C_F/2.*(X_top*conj(Y_top)).real());
           sum_bot += norm(pref_bot) * (C_A*C_F*C_F/2.*(norm(X_bot)+norm(Y_bot))
                                        - C_F/2.*(X_bot*conj(Y_bot)).real());
 
           COM XX = C_A*C_F*C_F/2. * pref_top * X_top * conj(pref_bot * X_bot);
           COM YY = C_A*C_F*C_F/2. * pref_top * Y_top * conj(pref_bot * Y_bot);
           COM XY = -C_F/2. * (pref_top * X_top * conj(pref_bot * Y_bot)
                               + pref_top * Y_top * conj(pref_bot * X_bot));
           sum_mix += 2.0 * real(XX + YY + XY);
         }
       }
     }
   }
 
   const double t1_top = (pa-pg-p1-pZ).m2();
   const double t2_top = (pb-p2      ).m2();
 
   const double t1_bot = (pa-pg-p1).m2();
   const double t2_bot = (pb-p2-pZ).m2();
 
   sum_top /= t1_top * t2_top;
   sum_bot /= t1_bot * t2_bot;
   sum_mix /= sqrt(t1_top * t2_top * t1_bot * t2_bot);
 
   //Helicity sum and average over initial states
   const double pref = 1./(4.*C_A*C_A);
 
   return {sum_top*pref, sum_bot*pref, sum_mix*pref};
 }
 
 
 double ME_Zuno_qg(HLV pa, HLV pb, HLV pg, HLV p1, HLV p2, HLV pep, HLV pem,
-                  ParticleID aptype, ParticleID bptype,
+                  ParticleID aptype, ParticleID /*bptype*/,
                   ParticleProperties const & zprop,
                   double stw2, double ctw
 ){
   using HEJ::C_A;
   using HEJ::C_F;
 
   const HLV pZ = pep + pem;
   const COM PZ = ZProp(pZ.m2(), zprop);
   const COM PG = GProp(pZ.m2());
 
   COM pref[2][2], CoeffX[2][2][2][2], CoeffY[2][2][2][2];
   Z_amp_pref(aptype, PZ, PG, stw2, ctw, pref);
   jZuno_j(pa, pb, pg, p1, p2, pep, pem, CoeffX, CoeffY);
 
   double sum = 0.;
   for(int h1=0; h1<2; h1++){
     for(int hl=0; hl<2; hl++){
       for(int h2=0; h2<2; h2++){
         for(int hg=0; hg<2; hg++){
           COM X = CoeffX[h1][hl][h2][hg];
           COM Y = CoeffY[h1][hl][h2][hg];
           sum += norm(pref[h1][hl]) * (C_A*C_F*C_F/2.*(norm(X)+norm(Y))
                                        - C_F/2.*(X*conj(Y)).real());
         }
       }
     }
   }
 
   sum /= (pa-pg-p1-pZ).m2()*(p2-pb).m2();
 
   //Helicity sum and average over initial states
   sum /= (4.*C_A*C_A);
 
   // Multiply by CAM
   return sum * (K_g(p2, pb) / C_F);
 }
\ No newline at end of file