Rivet analyses
H1 inclusive jet cross sections in DIS
Experiment: H1 (HERA)
Inspire ID: 588263
Status: VALIDATED
Authors: - Joni Laulainen - Ilkka Helenius
References: - Phys.Lett.B542:193-206,2002 - DOI:10.1016/s0370-2693(02)02375-4 - arXiv: hep-ex/0206029
Beams: p+ e+, e+ p+, p+ e-, e- p+
Beam energies: (820.0, 27.5); (27.5, 820.0); (820.0, 27.5); (27.5, 820.0)GeV
Run details: - NC DIS events
Inclusive jet cross sections in neutral current deep inelastic scattering of protons and positrons are measured with the H1 detector, with an integrated luminosity of 21.1 pb−1. The phase space is restricted by cuts to photon virtuality 5 < Q2 < 100 GeV2 and inelasticity 0.2 < y < 0.6. Jet selection is done with the kT-cluster algorithm, with additional cuts to their transverse energies in the Breit frame ET > 5 GeV and pseudorapidities in the lab frame −1 < ηlab < 2.8.
Source
code:H1_2002_I588263.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/DISKinematics.hh"
#include "Rivet/Projections/DISFinalState.hh"
namespace Rivet {
/// @brief Inclusive jet cross sections, differential in
/// jet transverse energy E_T.
class H1_2002_I588263 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(H1_2002_I588263);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Initialise and register projections
declare(DISKinematics(), "Kinematics");
// The final-state particles are clustered in Breit frame
// using FastJet with the kT algorithm and a jet-radius parameter of 1.
const DISFinalState DISfs(DISFrame::BREIT);
FastJets jets(DISfs, JetAlg::KT, 1.0);
declare(jets, "Jets");
// Book histograms.
// Transverse jet energies separated into pseudorapidity ranges.
book(_h_etjet_eta[0], 1, 1, 1);
book(_h_etjet_eta[1], 1, 1, 2);
book(_h_etjet_eta[2], 1, 1, 3);
// Transverse jet energies separated into Q2 ranges.
book(_h_etjet_q2[0], 2, 1, 1);
book(_h_etjet_q2[1], 2, 1, 2);
book(_h_etjet_q2[2], 2, 1, 3);
book(_h_etjet_q2[3], 2, 1, 4);
book(_h_etjet_q2[4], 2, 1, 5);
// ET^2 by Q^2, separated into pseudorapidity ranges.
book(_h_et2q2jet_eta[0], 3, 1, 1);
book(_h_et2q2jet_eta[1], 4, 1, 1);
book(_h_et2q2jet_eta[2], 5, 1, 1);
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// Lorentz invariant DIS quantities
DISKinematics dis = apply<DISKinematics>(event, "Kinematics");
double Q2 = dis.Q2();
double y = dis.y();
// Kinematic cuts on virtuality and inelasticity.
if ( !inRange(Q2, 5.*GeV2, 100.*GeV2) ) vetoEvent;
if ( !inRange(y, 0.2, 0.6) ) vetoEvent;
// Lorentz boosts for Breit and lab frames.
const LorentzTransform breitboost = dis.boostBreit();
const LorentzTransform labboost = breitboost.inverse();
// Retrieve clustered jets in Breit frame, sorted by pT.
Jets jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::Et > 5*GeV);
// Boost jets to lab frame.
for (size_t i = 0; i < jets.size(); ++i) {
jets[i].transformBy(labboost);
}
// Cut on Pseurdorapidity in lab frame.
// 1 if hadron in "conventional" +z direction, -1 if in -z.
const int orientation = dis.orientation();
Jets labJets;
for (size_t i = 0; i < jets.size(); ++i) {
double etaJet = jets[i].eta()*orientation;
if ( inRange(etaJet, -1., 2.8) ) {
labJets += jets[i];
}
}
// Boost jets back to Breit frame.
Jets breitJets = labJets;
for (size_t i = 0; i < breitJets.size(); ++i){
breitJets[i].transformBy(breitboost);
}
// Fill histograms.
for (size_t i = 0; i < labJets.size(); ++i) {
// Jets are in the same order in both frames.
double etaJet = labJets[i].eta()*orientation;
double eTJet = breitJets[i].Et();
double eT2Q2 = eTJet*eTJet / Q2;
// ET in 3 different eta ranges
if ( inRange(etaJet, -1., 0.5) ) {
_h_etjet_eta[0]->fill(eTJet);
_h_et2q2jet_eta[0]->fill(eT2Q2);
} else if ( inRange(etaJet, 0.5, 1.5) ) {
_h_etjet_eta[1]->fill(eTJet);
_h_et2q2jet_eta[1]->fill(eT2Q2);
} else if ( inRange(etaJet, 1.5, 2.8) ) {
_h_etjet_eta[2]->fill(eTJet);
_h_et2q2jet_eta[2]->fill(eT2Q2);
}
// ET of forward region, in 5 different Q2 ranges
if ( inRange(etaJet, 1.5, 2.8) ){
if (5*GeV2 < Q2 && Q2 < 10*GeV2) {
_h_etjet_q2[0]->fill(eTJet);
} else if (10*GeV2 < Q2 && Q2 < 20*GeV2) {
_h_etjet_q2[1]->fill(eTJet);
} else if (20*GeV2 < Q2 && Q2 < 35*GeV2) {
_h_etjet_q2[2]->fill(eTJet);
} else if (35*GeV2 < Q2 && Q2 < 70*GeV2) {
_h_etjet_q2[3]->fill(eTJet);
} else if (70*GeV2 < Q2 && Q2 < 100*GeV2) {
_h_etjet_q2[4]->fill(eTJet);
}
}
}
}
/// Normalise histograms after the run
void finalize() {
// Scaling factor
const double sf = crossSection()/picobarn/sumW();
scale(_h_etjet_eta[0], sf);
scale(_h_etjet_eta[1], sf);
scale(_h_etjet_eta[2], sf);
scale(_h_etjet_q2[0], sf);
scale(_h_etjet_q2[1], sf);
scale(_h_etjet_q2[2], sf);
scale(_h_etjet_q2[3], sf);
scale(_h_etjet_q2[4], sf);
scale(_h_et2q2jet_eta[0], sf);
scale(_h_et2q2jet_eta[1], sf);
scale(_h_et2q2jet_eta[2], sf);
}
/// @}
private:
/// @name Histograms
/// @{
Histo1DPtr _h_etjet_eta[3];
Histo1DPtr _h_etjet_q2[5];
Histo1DPtr _h_et2q2jet_eta[3];
/// @}
};
RIVET_DECLARE_PLUGIN(H1_2002_I588263);
}