rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ZEUS_2008_I780108

Multi-jet cross-sections in charged current $e^{\pm} p$ scattering at HERA
Experiment: ZEUS (HERA)
Inspire ID: 780108
Status: VALIDATED
Authors:
  • Andrii Verbytskyi andrii.verbytskyi@mpp.mpg.de
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^{\pm}p$ scattering at high boson virtualities $Q^2$ with the ZEUS detector at HERA II using an integrated luminosity of $0.36 fb^{-1}$. Differential cross sections are presented for inclusive-jet production as functions of $Q^2$, 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^{\pm}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
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/DISFinalState.hh"
  6#include "Rivet/Projections/DISKinematics.hh"
  7
  8namespace Rivet {
  9
 10
 11  /// @brief Multi-jet cross-sections in charged current $e^{\pm} p$ scattering at HERA
 12  class ZEUS_2008_I780108 : public Analysis {
 13  public:
 14
 15      /// Constructor
 16      RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2008_I780108);
 17
 18      /// @name Analysis methods
 19      /// @{
 20
 21      /// Book histograms and initialise projections before the run
 22      void init() {
 23
 24          // Projections
 25          const DISKinematics diskin;
 26          declare(diskin, "Kinematics");
 27	  declare(DISLepton(), "Lepton");
 28          const DISFinalState disfs(DISFinalState::BoostFrame::LAB);
 29          FastJets jets(disfs, FastJets::KT, 1.0);
 30          declare(jets, "Jets");
 31
 32          // Table 11
 33          book(_h_eta_incl[0], 11, 1, 1);
 34          book(_h_eta_incl[1], 11, 1, 2);
 35          // Table 12
 36          book(_h_eta_di[0], 12, 1, 1);
 37          book(_h_eta_di[1], 12, 1, 2);
 38          // Table 13
 39          book(_h_eta_tri[0], 13, 1, 1);
 40          book(_h_eta_tri[1], 13, 1, 2);
 41          // Table 14
 42          book(_h_et_incl[0], 14, 1, 1);
 43          book(_h_et_incl[1], 14, 1, 2);
 44          // Table 15
 45          book(_h_et_di[0], 15, 1, 1);
 46          book(_h_et_di[1], 15, 1, 2);
 47          // Table 16
 48          book(_h_et_tri[0], 16, 1, 1);
 49          book(_h_et_tri[1], 16, 1, 2);
 50          // Table 17
 51          book(_h_q2_incl[0], 17, 1, 1);
 52          book(_h_q2_incl[1], 17, 1, 2);
 53          // Table 18
 54          book(_h_q2_di[0], 18, 1, 1);
 55          book(_h_q2_di[1], 18, 1, 2);
 56          // Table 19
 57          book(_h_q2_tri[0], 19, 1, 1);
 58          book(_h_q2_tri[1], 19, 1, 2);
 59
 60          // Table 20
 61          book(_h_x_incl[0], 20, 1, 1);
 62          book(_h_x_incl[1], 20, 1, 2);
 63          // Table 22
 64          book(_h_m_di[0], 22, 1, 1);
 65          book(_h_m_di[1], 22, 1, 2);
 66          // Table 23
 67          book(_h_m_tri[0], 23, 1, 1);
 68          book(_h_m_tri[1], 23, 1, 2);
 69
 70      }
 71
 72
 73      /// Perform the per-event analysis
 74      void analyze(const Event& event) {
 75
 76          int fLepton = 0;
 77
 78          const ParticlePair bs = event.beams();
 79          if (bs.first.pid() == PID::POSITRON || bs.second.pid() == PID::POSITRON) fLepton = 1;
 80          const Particle& bproton = (bs.first.pid() == PID::PROTON) ? bs.first : bs.second;
 81          const int orientation = sign(bproton.momentum().pz());
 82          // DIS kinematics
 83          const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
 84          double q2  = dk.Q2();
 85          double x   = dk.x();
 86          double y   = dk.y();
 87
 88          if (q2 < 200) vetoEvent;
 89          if (y > 0.9) vetoEvent;
 90	  // make sure charged current
 91	  const DISLepton& dl = applyProjection<DISLepton>(event,"Lepton");
 92	  if ( ! PID::isNeutrino(dl.out().abspid()) ) vetoEvent; 
 93          // Jet selection
 94          const Jets jets = apply<FastJets>(event, "Jets").jets(Cuts::Et > 5*GeV && Cuts::etaIn(-1*orientation, 2.5*orientation), cmpMomByEt);
 95          MSG_DEBUG("Jet multiplicity = " << jets.size());
 96          if (jets.size() < 1) vetoEvent;
 97          if (jets[0].Et() < 14*GeV) vetoEvent;
 98
 99          double eta12 = 0;
100          double et12 = 0;
101
102          double et123 = 0;
103          double eta123 =0;
104
105          for (size_t i = 0; i < jets.size(); i++)
106          {
107              if (jets[i].Et() < 14*GeV) continue;
108              _h_eta_incl[fLepton]->fill(orientation*jets[i].eta());
109              _h_et_incl[fLepton]->fill(jets[i].Et());
110              _h_q2_incl[fLepton]->fill(q2);
111              _h_x_incl[fLepton]->fill(x);
112          }
113
114          if (jets.size() > 1)
115          {
116              eta12 = orientation*(jets[0].eta() + jets[1].eta())/2;
117              et12 = (jets[0].Et() + jets[1].Et())/2;
118              _h_eta_di[fLepton]->fill(eta12);
119              _h_et_di[fLepton]->fill(et12);
120              _h_q2_di[fLepton]->fill(q2);
121              _h_m_di[fLepton]->fill(   (jets[0].momentum()+jets[1].momentum()).mass());
122          }
123
124          if (jets.size() > 2)
125          {
126              eta123 = orientation*(jets[0].eta() + jets[1].eta()+jets[2].eta())/3;
127              et123 = (jets[0].Et() + jets[1].Et()+jets[2].Et())/3;
128
129              _h_eta_tri[fLepton]->fill(eta123);
130              _h_et_tri[fLepton]->fill(et123);
131              _h_q2_tri[fLepton]->fill(q2);
132              _h_m_tri[fLepton]->fill(   (jets[0].momentum()+jets[1].momentum()+jets[2].momentum()).mass());
133          }
134      }
135
136
137      /// Normalise histograms etc., after the run
138      void finalize() {
139          const double sf = crossSection()/picobarn/sumOfWeights();
140
141
142          scale(_h_eta_incl, sf);
143          scale(_h_eta_di,   sf);
144          scale(_h_eta_tri,  sf);
145          scale(_h_et_incl,  sf);
146          scale(_h_et_di,    sf);
147          scale(_h_et_tri,   sf);
148          scale(_h_q2_incl,  sf);
149          scale(_h_q2_di,    sf);
150          scale(_h_q2_tri,   sf);
151          scale(_h_x_incl,   sf);
152          scale(_h_m_di,     sf);
153          scale(_h_m_tri,    sf);
154
155      }
156
157      /// @}
158
159
160      /// @name Histograms
161      /// @{
162      Histo1DPtr _h_eta_incl[2], _h_eta_di[2], _h_eta_tri[2];
163      Histo1DPtr _h_et_incl[2], _h_et_di[2], _h_et_tri[2];
164      Histo1DPtr _h_q2_incl[2], _h_q2_di[2], _h_q2_tri[2];
165      Histo1DPtr _h_x_incl[2], _h_x_di[2], _h_x_tri[2];
166      Histo1DPtr _h_m_di[2], _h_m_tri[2];
167      /// @}
168  };
169
170
171  RIVET_DECLARE_PLUGIN(ZEUS_2008_I780108);
172
173}