Rivet analyses


title: ZEUS_2001_I568665

Dijet photoproduction analysis

Experiment: ZEUS (HERA Run I)

Inspire ID: 568665

Status: VALIDATED

Authors: - Andy Buckley - Ilkka Helenius - Jon Butterworth

References: - Eur.Phys.J.C23:615,2002 - DESY 01/220 - hep-ex/0112029

Beams: p+ e+

Beam energies: (820.0, 27.5)GeV

Run details: - 820 GeV protons colliding with 27.5 GeV positrons; Direct and resolved photoproduction of dijets; Leading jet $pT > 14$ GeV, second jet $pT > 11$ GeV; Jet pseudorapidity $-1 < |\eta| < 2.4$

ZEUS photoproduction of jets from proton--positron collisions at beam energies of 820~GeV on 27.5~GeV. Photoproduction can either be direct, in which case the photon interacts directly with the parton, or resolved, in which case the photon acts as a source of quarks and gluons. A photon-proton centre of mass energy of between 134~GeV and 227~GeV is probed, with values of $x_P$, the fractional momentum of the partons inside the proton, predominantly in the region between 0.01 and 0.1. The fractional momentum of the partons from the photon, $x_\gamma$, is in the region 0.1 to 1. Jets are reconstructed in the range $-1 < |\eta| < 2.4$ using the $k_\perp$ algorithm with an $R$ parameter of 1.0. The minimum $p_\perp$ of the leading jet should be greater than 14~GeV, and at least one other jet must have $p_\perp$ > 11$~GeV.

Source code:ZEUS_2001_I568665.cc

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/Beam.hh"

include "Rivet/Projections/DISKinematics.hh"

include "Rivet/Projections/FastJets.hh"

namespace Rivet {

/// @brief ZEUS dijet photoproduction study used in the ZEUS jets PDF fit /// /// This class is a reproduction of the HZTool routine for the ZEUS /// dijet photoproduction paper which was used in the ZEUS jets PDF fit. /// /// @note Cleaning cuts on event pT/sqrt(Et) and y_e are not needed in MC analysis. /// /// @author Andy Buckley /// @author Ilkka Helenius class ZEUS_2001_I568665 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2001_I568665);


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

// Book projections and histograms
void init() {

  // Projections
  /// @todo Acceptance
  // checking recombination scheme and radius checked with original code from M.Wing
  FinalState fs;
  declare(FastJets(fs, fastjet::JetAlgorithm::kt_algorithm, fastjet::RecombinationScheme::Et_scheme, 1.0),
          "Jets");
  declare(DISKinematics(), "Kinematics");

  // Table 1
  book(_h_costh[0], 1, 1, 1);
  book(_h_costh[1], 1, 1, 2);
  // Table 2
  book(_h_etjet1[1][0], 2, 1, 1);
  book(_h_etjet1[1][1], 3, 1, 1);
  book(_h_etjet1[1][2], 4, 1, 1);
  book(_h_etjet1[1][3], 5, 1, 1);
  book(_h_etjet1[1][4], 6, 1, 1);
  book(_h_etjet1[1][5], 7, 1, 1);
  // Table 3
  book(_h_etjet1[0][0], 8, 1, 1);
  book(_h_etjet1[0][1], 9, 1, 1);
  book(_h_etjet1[0][2], 10, 1, 1);
  book(_h_etjet1[0][3], 11, 1, 1);
  book(_h_etjet1[0][4], 12, 1, 1);
  book(_h_etjet1[0][5], 13, 1, 1);
  // Table 4
  book(_h_etajet2[1][0], 14, 1, 1);
  book(_h_etajet2[1][1], 15, 1, 1);
  book(_h_etajet2[1][2], 16, 1, 1);
  // Table 5
  book(_h_etajet2[0][0], 17, 1, 1);
  book(_h_etajet2[0][1], 18, 1, 1);
  book(_h_etajet2[0][2], 19, 1, 1);
  // Table 6
  book(_h_xobsy[0], 20, 1, 1);
  book(_h_xobsy[1], 21, 1, 1);
  book(_h_xobsy[2], 22, 1, 1);
  book(_h_xobsy[3], 23, 1, 1);
}


// Do the analysis
void analyze(const Event& event) {

  // Determine kinematics, including event orientation since ZEUS coord system is for +z = proton direction
  const DISKinematics& kin = apply<DISKinematics>(event, "Kinematics");
  if (kin.failed()) vetoEvent;
  const int orientation = kin.orientation();

  // Q2 and inelasticity cuts
  if (kin.Q2() > 1 * GeV2) vetoEvent;
  if (!inRange(kin.y(), 0.2, 0.85)) vetoEvent;

  // Jet selection
  const Jets jets = apply<FastJets>(event, "Jets")
                        .jets(Cuts::Et > 11 * GeV && Cuts::etaIn(-1 * orientation, 2.4 * orientation),
                              cmpMomByEt);
  MSG_DEBUG("Jet multiplicity = " << jets.size());
  if (jets.size() < 2) vetoEvent;
  const Jet& j1 = jets[0];
  const Jet& j2 = jets[1];
  if (j1.Et() < 14 * GeV) vetoEvent;

  // Jet eta and cos(theta*) computation
  const double eta1 = orientation * j1.eta(), eta2 = orientation * j2.eta();
  const double etabar = (eta1 + eta2) / 2;
  const double etadiff = eta1 - eta2;
  const double costhetastar = tanh(etadiff / 2);

  // Computation of x_y^obs
  /// @note Assuming Ee is the lab frame positron momentum, not in proton rest frame cf. the ambiguous phrase in the paper
  const double xyobs = (j1.Et() * exp(-eta1) + j2.Et() * exp(-eta2))
      / (2 * kin.y() * kin.beamLepton().E());
  const size_t i_xyobs = (xyobs < 0.75) ? 0 : 1;

  // Calculate the invariant mass of the dijet as in the paper
  const double mjj = sqrt(2. * j1.Et() * j2.Et()
                          * (cosh(j1.eta() - j2.eta()) - cos(j1.phi() - j2.phi())));

  // Fill histograms
  // T1
  if (mjj > 42 * GeV && inRange(etabar, 0.1, 1.3)) _h_costh[i_xyobs]->fill(abs(costhetastar));
  // T2, T3: Symmetrize eta selection, each event contribute twice to the cross section
  for (size_t isel = 0; isel < 2; ++isel) {
    double etaJet1 = (isel == 0) ? orientation * j1.eta() : orientation * j2.eta();
    double etaJet2 = (isel == 0) ? orientation * j2.eta() : orientation * j1.eta();
    if (inRange(etaJet1, -1, 0) && inRange(etaJet2, -1, 0))
      _h_etjet1[i_xyobs][0]->fill(j1.Et() / GeV);
    else if (inRange(etaJet1, 0, 1) && inRange(etaJet2, -1, 0))
      _h_etjet1[i_xyobs][1]->fill(j1.Et() / GeV);
    else if (inRange(etaJet1, 0, 1) && inRange(etaJet2, 0, 1))
      _h_etjet1[i_xyobs][2]->fill(j1.Et() / GeV);
    else if (inRange(etaJet1, 1, 2.4) && inRange(etaJet2, -1, 0))
      _h_etjet1[i_xyobs][3]->fill(j1.Et() / GeV);
    else if (inRange(etaJet1, 1, 2.4) && inRange(etaJet2, 0, 1))
      _h_etjet1[i_xyobs][4]->fill(j1.Et() / GeV);
    else if (inRange(etaJet1, 1, 2.4) && inRange(etaJet2, 1, 2.4))
      _h_etjet1[i_xyobs][5]->fill(j1.Et() / GeV);
    // T4, T5
    if (inRange(etaJet1, -1, 0))
      _h_etajet2[i_xyobs][0]->fill(etaJet2);
    else if (inRange(etaJet1, 0, 1))
      _h_etajet2[i_xyobs][1]->fill(etaJet2);
    else if (inRange(etaJet1, 1, 2.4))
      _h_etajet2[i_xyobs][2]->fill(etaJet2);
  }
  // T6
  if (inRange(j1.Et() / GeV, 14, 17))
    _h_xobsy[0]->fill(xyobs);
  else if (inRange(j1.Et() / GeV, 17, 25))
    _h_xobsy[1]->fill(xyobs);
  else if (inRange(j1.Et() / GeV, 25, 35))
    _h_xobsy[2]->fill(xyobs);
  else if (inRange(j1.Et() / GeV, 35, 90))
    _h_xobsy[3]->fill(xyobs);
}


// Finalize
void finalize() {
  const double sf = crossSection() / picobarn / sumOfWeights();
  for (size_t ix = 0; ix < 2; ++ix) {
    scale(_h_costh[ix], sf);
    for (auto& h : _h_etjet1[ix]) scale(h, sf);
    for (auto& h : _h_etajet2[ix]) scale(h, sf);
  }
  for (auto& h : _h_xobsy) scale(h, sf);
}

/// @}

private:

/// @name Histograms
/// @{
Histo1DPtr _h_costh[2], _h_etjet1[2][6], _h_etajet2[2][3], _h_xobsy[4];
/// @}

};

RIVET_DECLARE_ALIASED_PLUGIN(ZEUS_2001_I568665, ZEUS_2001_S4815815);

} ```

Aliases: - ZEUS_2001_S4815815