Rivet analyses


title: H1_2002_I588263

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 < Q^2 < 100$ GeV$^2$ and inelasticity $0.2 < y < 0.6$. Jet selection is done with the $k_T$-cluster algorithm, with additional cuts to their transverse energies in the Breit frame $E_T > 5$ GeV and pseudorapidities in the lab frame $-1 < \eta_{lab} < 2.8$.

Source code:H1_2002_I588263.cc

```c++ // -- 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 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);

} ```