Rivet analyses
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 < |η| < 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 xP, 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γ, is in the region 0.1 to 1. Jets are reconstructed in the range −1 < |η| < 2.4 using the k⟂ algorithm with an R parameter of 1.0. The minimum p⟂ of the leading jet should be greater than 14~GeV, and at least one other jet must have p⟂ > 11$~GeV.
Source
code:ZEUS_2001_I568665.cc
// -*- 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