Rivet analyses
Diffractive photoproduction of dijets
Experiment: ZEUS (HERA Run II)
Inspire ID: 763404
Status: UNVALIDATED
Authors: - Ilkka Helenius - Christine O. Rasmussen
References: - Eur.Phys.J.C55:177,2008 - DESY 07/161 - arXiv: 0710.1498
Beams: p+ e+
Beam energies: (920.0, 27.5)GeV
Run details: - 920 GeV protons colliding with 27.5 GeV positrons; Diffractive photoproduction of dijets; Leading jet pT > 7.5 GeV, second jet pT > 6.5 GeV; Jet pseudorapidity −1.5 < ηjet < 1.5
ZEUS analysis for diffractive photoproduction of dijets in proton-positron collisions with beam energies of 920~GeV on 27.5~GeV at the ep collider HERA using an integrated luminosity of 77.2 pb-1. The measurements were made in the kinematic range Q2 < 1 GeV^2, 0.20 < y < 0.85 and xIP < 0.025, where Q2 is the photon virtuality, y is the inelasticity and xIP is the fraction of the proton momentum taken by the diffractive exchange. The two jets with the highest transverse energy, Ejet, were required to satisfy E_jet > 7.5 and 6.5 GeV, respectively, and to lie in the pseudorapidity range -1.5 < η_{jet} < 1.5.
Source
code:ZEUS_2008_I763404.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/Beam.hh"
#include "Rivet/Projections/DISKinematics.hh"
#include "Rivet/Projections/DISDiffHadron.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.
///
/// @author Ilkka Helenius
class ZEUS_2008_I763404 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2008_I763404);
/// @name Analysis methods
/// @{
// Book projections and histograms
void init() {
/// @todo Acceptance
FinalState fs;
// Final state particles with central tracking detector.
declare(FastJets(fs, JetAlg::KT, 1.0), "Jets");
// Projections
declare(DISKinematics(), "Kinematics");
declare(DISDiffHadron(), "Hadron");
book(_h_dsigma_all[0], 1, 1, 1);
book(_h_dsigma_all[1], 2, 1, 1);
book(_h_dsigma_all[2], 3, 1, 1);
book(_h_dsigma_all[3], 4, 1, 1);
book(_h_dsigma_all[4], 5, 1, 1);
book(_h_dsigma_all[5], 6, 1, 1);
book(_h_xgamma, 7, 1, 1);
book(_h_dsigma_xgamma[0][0], 8, 1, 1);
book(_h_dsigma_xgamma[0][1], 9, 1, 1);
book(_h_dsigma_xgamma[0][2], 10, 1, 1);
book(_h_dsigma_xgamma[0][3], 11, 1, 1);
book(_h_dsigma_xgamma[1][0], 12, 1, 1);
book(_h_dsigma_xgamma[1][1], 13, 1, 1);
book(_h_dsigma_xgamma[1][2], 14, 1, 1);
book(_h_dsigma_xgamma[1][3], 15, 1, 1);
nVeto0 = 0;
nVeto1 = 0;
nVeto2 = 0;
nVeto3 = 0;
nVeto4 = 0;
}
// Do the analysis
void analyze(const Event& event) {
// Derive the DIS kinematics.
const DISKinematics& kin = apply<DISKinematics>(event, "Kinematics");
// Derive the diffractive kinematics (should be used for diffractive only).
Particle hadronOut;
Particle hadronIn;
try {
const DISDiffHadron & diffhadr = apply<DISDiffHadron>(event, "Hadron");
hadronOut = diffhadr.out();
hadronIn = diffhadr.in();
} catch (const Error& e){
vetoEvent;
}
// Determine event orientation, since coord system is for +z = proton direction
const int orientation = kin.orientation();
// Calculate the photon 4-momentum from the incoming and outgoing lepton.
const FourMomentum qleptonIn = kin.beamLepton().momentum();
const FourMomentum qleptonOut = kin.scatteredLepton().momentum();
const FourMomentum qphoton = qleptonIn - qleptonOut;
// Calculate the Pomeron 4-momentum from the incoming and outgoing hadron
const FourMomentum pHadOut = hadronOut.momentum();
const FourMomentum pHadIn = hadronIn.momentum();
const FourMomentum pPomeron = pHadIn - pHadOut;
// Q2 and inelasticity cuts
if (kin.Q2() > 1*GeV2) vetoEvent;
++nVeto0;
if (!inRange(kin.y(), 0.2, 0.85)) vetoEvent;
++nVeto1;
// Jet selection and veto.
const Jets jets = apply<FastJets>(event, "Jets") \
.jets(Cuts::Et > 6.5*GeV && Cuts::etaIn(-1.5*orientation, 1.5*orientation), cmpMomByEt);
MSG_DEBUG("Jet multiplicity = " << jets.size());
if (jets.size() < 2) vetoEvent;
++nVeto2;
const Jet& j1 = jets[0];
const Jet& j2 = jets[1];
if (j1.Et() < 7.5*GeV) vetoEvent;
++nVeto3;
// Veto on x_Pomeron.
const double xPom = ( pPomeron * qphoton ) / (pHadIn * qphoton);
if (xPom > 0.025) vetoEvent;
++nVeto4;
// Computation of event-level variables.
const double eta1 = orientation*j1.eta(), eta2 = orientation*j2.eta();
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) ? 1 : 0;
const double zPobs = (j1.Et() * exp(eta1) + j2.Et() * exp(eta2)) / (2*xPom*kin.beamHadron().E());
const double M_X = sqrt( (pPomeron + qphoton).mass2() );
// Fill histograms
_h_dsigma_all[0]->fill(kin.y());
_h_dsigma_all[1]->fill(M_X);
_h_dsigma_all[2]->fill(xPom);
_h_dsigma_all[3]->fill(zPobs);
_h_dsigma_all[4]->fill(j1.Et());
_h_dsigma_all[5]->fill(eta1);
_h_xgamma->fill(xyobs);
_h_dsigma_xgamma[i_xyobs][0]->fill(kin.y());
_h_dsigma_xgamma[i_xyobs][1]->fill(M_X);
_h_dsigma_xgamma[i_xyobs][2]->fill(xPom);
_h_dsigma_xgamma[i_xyobs][3]->fill(zPobs);
}
// Finalize
void finalize() {
const double norm = crossSection()/picobarn/sumOfWeights();
scale(_h_xgamma, norm);
for (auto& h : _h_dsigma_all) scale(h, norm);
for (auto& h : _h_dsigma_xgamma[0]) scale(h, norm);
for (auto& h : _h_dsigma_xgamma[1]) scale(h, norm);
// Cross section in nb for these observables.
scale(_h_dsigma_all[2], 1e-3);
scale(_h_dsigma_xgamma[0][2], 1e-3);
scale(_h_dsigma_xgamma[1][2], 1e-3);
double dPHO = nVeto1;
MSG_INFO("ZEUS_2008_I763403");
MSG_INFO("Cross section = " << crossSection()/picobarn);
MSG_INFO("Number of events = " << numEvents() << ", sumW = " << sumOfWeights());
MSG_INFO("Events passing electron veto1= " << nVeto0 << " (" << nVeto0/dPHO * 100. << "%)" );
MSG_INFO("Events passing electron veto2= " << nVeto1 << " (" << nVeto1/dPHO * 100. << "%)" );
MSG_INFO("Events passing jet size veto = " << nVeto2 << " (" << nVeto2/dPHO * 100. << "%)" );
MSG_INFO("Events passing jet Et veto = " << nVeto3 << " (" << nVeto3/dPHO * 100. << "%)" );
MSG_INFO("Events passing xPom veto = " << nVeto4 << " (" << nVeto4/dPHO * 100. << "%)" );
}
/// @}
private:
/// @name Histograms
/// @{
Histo1DPtr _h_dsigma_all[6];
Histo1DPtr _h_xgamma;
Histo1DPtr _h_dsigma_xgamma[2][4];
/// @}
int nVeto0, nVeto1, nVeto2, nVeto3, nVeto4;
};
RIVET_DECLARE_PLUGIN(ZEUS_2008_I763404);
}