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/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/DISFinalState.hh"
#include "Rivet/Projections/DISKinematics.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);
}