Rivet analyses

Multi-jet cross-sections in charged current e±p scattering at HERA

Experiment: ZEUS (HERA)

Inspire ID: 780108

Status: VALIDATED

Authors: - Andrii Verbytskyi

References: - arXiv: 0802.3955 - Phys. Rev. D78 (2008) 032004

Beams: p+ e-, p+ e+, e- p+, e+ p+

Beam energies: ANY

Run details: - inclusive ep collisons

Jet cross sections were measured in charged current deep inelastic e±p scattering at high boson virtualities Q2 with the ZEUS detector at HERA II using an integrated luminosity of 0.36fb−1. Differential cross sections are presented for inclusive-jet production as functions of Q2, Bjorken x and the jet transverse energy and pseudorapidity. The dijet invariant mass cross section is also presented. Observation of three- and four-jet events in charged-current e±p processes is reported for the first time. The predictions of next-to-leading-order (NLO) QCD calculations are compared to the measurements. The measured inclusive-jet cross sections are well described in shape and normalization by the NLO predictions. The data have the potential to constrain the u and d valence quark distributions in the proton if included as input to global fits.

Source code:ZEUS_2008_I780108.cc

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/DISFinalState.hh"
#include "Rivet/Projections/DISKinematics.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/FinalState.hh"

namespace Rivet {


  /// @brief Multi-jet cross-sections in charged current $e^{\pm} p$ scattering at HERA
  class ZEUS_2008_I780108 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2008_I780108);

    /// @name Analysis methods
    /// @{

    /// Book histograms and initialise projections before the run
    void init() {

      // Projections
      const DISKinematics diskin;
      declare(diskin, "Kinematics");
      declare(DISLepton(), "Lepton");
      const DISFinalState disfs(DISFrame::LAB);
      FastJets jets(disfs, JetAlg::KT, 1.0);
      declare(jets, "Jets");

      // Table 11
      book(_h_eta_incl[0], 11, 1, 1);
      book(_h_eta_incl[1], 11, 1, 2);
      // Table 12
      book(_h_eta_di[0], 12, 1, 1);
      book(_h_eta_di[1], 12, 1, 2);
      // Table 13
      book(_h_eta_tri[0], 13, 1, 1);
      book(_h_eta_tri[1], 13, 1, 2);
      // Table 14
      book(_h_et_incl[0], 14, 1, 1);
      book(_h_et_incl[1], 14, 1, 2);
      // Table 15
      book(_h_et_di[0], 15, 1, 1);
      book(_h_et_di[1], 15, 1, 2);
      // Table 16
      book(_h_et_tri[0], 16, 1, 1);
      book(_h_et_tri[1], 16, 1, 2);
      // Table 17
      book(_h_q2_incl[0], 17, 1, 1);
      book(_h_q2_incl[1], 17, 1, 2);
      // Table 18
      book(_h_q2_di[0], 18, 1, 1);
      book(_h_q2_di[1], 18, 1, 2);
      // Table 19
      book(_h_q2_tri[0], 19, 1, 1);
      book(_h_q2_tri[1], 19, 1, 2);

      // Table 20
      book(_h_x_incl[0], 20, 1, 1);
      book(_h_x_incl[1], 20, 1, 2);
      // Table 22
      book(_h_m_di[0], 22, 1, 1);
      book(_h_m_di[1], 22, 1, 2);
      // Table 23
      book(_h_m_tri[0], 23, 1, 1);
      book(_h_m_tri[1], 23, 1, 2);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {

      int fLepton = 0;

      const ParticlePair bs = event.beams();
      if (bs.first.pid() == PID::POSITRON || bs.second.pid() == PID::POSITRON) fLepton = 1;
      const Particle& bproton = (bs.first.pid() == PID::PROTON) ? bs.first : bs.second;
      const int orientation = sign(bproton.momentum().pz());
      // DIS kinematics
      const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
      double q2 = dk.Q2();
      double x = dk.x();
      double y = dk.y();

      if (q2 < 200) vetoEvent;
      if (y > 0.9) vetoEvent;
      // make sure charged current
      const DISLepton& dl = apply<DISLepton>(event, "Lepton");
      if (!PID::isNeutrino(dl.out().abspid())) vetoEvent;
      // Jet selection
      const Jets jets = apply<FastJets>(event, "Jets")
                            .jets(Cuts::Et > 5 * GeV && Cuts::etaIn(-1 * orientation, 2.5 * orientation),
                                  cmpMomByEt);
      MSG_DEBUG("Jet multiplicity = " << jets.size());
      if (jets.size() < 1) vetoEvent;
      if (jets[0].Et() < 14 * GeV) vetoEvent;

      double eta12 = 0;
      double et12 = 0;

      double et123 = 0;
      double eta123 = 0;

      for (size_t i = 0; i < jets.size(); ++i) {
        if (jets[i].Et() < 14 * GeV) continue;
        _h_eta_incl[fLepton]->fill(orientation * jets[i].eta());
        _h_et_incl[fLepton]->fill(jets[i].Et());
        _h_q2_incl[fLepton]->fill(q2);
        _h_x_incl[fLepton]->fill(x);
      }

      if (jets.size() > 1) {
        eta12 = orientation * (jets[0].eta() + jets[1].eta()) / 2;
        et12 = (jets[0].Et() + jets[1].Et()) / 2;
        _h_eta_di[fLepton]->fill(eta12);
        _h_et_di[fLepton]->fill(et12);
        _h_q2_di[fLepton]->fill(q2);
        _h_m_di[fLepton]->fill((jets[0].momentum() + jets[1].momentum()).mass());
      }

      if (jets.size() > 2) {
        eta123 = orientation * (jets[0].eta() + jets[1].eta() + jets[2].eta()) / 3;
        et123 = (jets[0].Et() + jets[1].Et() + jets[2].Et()) / 3;

        _h_eta_tri[fLepton]->fill(eta123);
        _h_et_tri[fLepton]->fill(et123);
        _h_q2_tri[fLepton]->fill(q2);
        _h_m_tri[fLepton]->fill((jets[0].momentum() + jets[1].momentum() + jets[2].momentum()).mass());
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      const double sf = crossSection() / picobarn / sumOfWeights();


      scale(_h_eta_incl, sf);
      scale(_h_eta_di, sf);
      scale(_h_eta_tri, sf);
      scale(_h_et_incl, sf);
      scale(_h_et_di, sf);
      scale(_h_et_tri, sf);
      scale(_h_q2_incl, sf);
      scale(_h_q2_di, sf);
      scale(_h_q2_tri, sf);
      scale(_h_x_incl, sf);
      scale(_h_m_di, sf);
      scale(_h_m_tri, sf);
    }

    /// @}


    /// @name Histograms
    /// @{
    Histo1DPtr _h_eta_incl[2], _h_eta_di[2], _h_eta_tri[2];
    Histo1DPtr _h_et_incl[2], _h_et_di[2], _h_et_tri[2];
    Histo1DPtr _h_q2_incl[2], _h_q2_di[2], _h_q2_tri[2];
    Histo1DPtr _h_x_incl[2], _h_x_di[2], _h_x_tri[2];
    Histo1DPtr _h_m_di[2], _h_m_tri[2];
    /// @}
  };


  RIVET_DECLARE_PLUGIN(ZEUS_2008_I780108);

}