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