rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ZEUS_2007_I756660

Three- and four-jet final states in photoproduction at HERA
Experiment: ZEUS (HERA)
Inspire ID: 756660
Status: VALIDATED
Authors:
  • Vithyaban Anjelo Narendran
  • Bradley Pattengale
  • Matthew Wing
References:
  • Nucl.Phys.B 792 (2008) 1-47
  • DOI:10.1016/j.nuclphysb.2007.08.021
  • arXiv: 0707.3749
Beams: p+ e+, p+ e-, p+ e+, p+ e-
Beam energies: (920.0, 27.5); (920.0, 27.5); (820.0, 27.5); (820.0, 27.5) GeV
Run details:
  • Photoproduction in ep collisions, jets with pT>6 GeV

Three- and four-jet events were measured from photoproduction events at HERA. This data was taken with center of mass energies of $\sqrt{s} = 300$ GeV and $\sqrt{s} = 318$ GeV. The kinematic cuts applied were $E_T^{jet} > 6$ GeV, $|\eta| < 2.4$, $Q^2 < 1$ GeV$^2$, and $0.2 \leq y \leq 0.85$. Cross sections are presented as a function of $M_{nj}$, $x_{\gamma}$, $E_T^{jet}$, $\eta$, $y$, and $cos(\phi_3)$

Source code: ZEUS_2007_I756660.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/DirectFinalState.hh"
  6#include "Rivet/Projections/DISKinematics.hh"
  7#include "Rivet/Projections/Beam.hh"
  8
  9namespace Rivet {
 10
 11  /// @brief Three- and four-jet final states in photoproduction at HERA
 12  class ZEUS_2007_I756660 : public Analysis {
 13  public:
 14
 15    /// Constructor
 16    RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_2007_I756660);
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    /// Book histograms and initialise projections before the run
 22    void init() {
 23
 24      // Jets
 25      const FinalState fs;
 26      declare(FastJets(fs, fastjet::JetAlgorithm::kt_algorithm,
 27                       fastjet::RecombinationScheme::pt2_scheme, 1.0), "Jets");
 28
 29      // DIS Kinematics
 30      declare(DISKinematics(), "Kinematics");
 31
 32      // Book Histos
 33      book(_h["M3j"], 1, 1, 1); // T2, F3A
 34
 35      book(_h["M4j"], 2, 1, 1); // T3, F3B
 36
 37      // T4, F4A,4B
 38      book(_h["x_gamma_obs_low_M3j"], 3, 1, 1);
 39      book(_h["x_gamma_obs_high_M3j"], 3, 1, 2);
 40
 41      // T5, F4C,4D
 42      book(_h["x_gamma_obs_low_M4j"], 4, 1, 1);
 43      book(_h["x_gamma_obs_high_M4j"], 4, 1, 2);
 44
 45      // T6, F5A,5B
 46      book(_h["y_low_M3j"], 5, 1, 1);
 47      book(_h["y_high_M3j"], 5, 1, 2);
 48
 49      // T7, F5C,5D
 50      book(_h["y_low_M4j"], 6, 1, 1);
 51      book(_h["y_high_M4j"], 6, 1, 2);
 52
 53      // T8, F6A,6B
 54      book(_h["Et1_low_M3j"], 7, 1, 1);
 55      book(_h["Et1_high_M3j"], 7, 1, 2);
 56
 57      // T9, F6A,6B
 58      book(_h["Et2_low_M3j"], 8, 1, 1);
 59      book(_h["Et2_high_M3j"], 8, 1, 2);
 60
 61      // T10, F6A,6B
 62      book(_h["Et3_low_M3j"], 9, 1, 1);
 63      book(_h["Et3_high_M3j"], 9, 1, 2);
 64
 65      // T11, F7A,7B
 66      book(_h["Et1_low_M4j"], 10, 1, 1);
 67      book(_h["Et1_high_M4j"], 10, 1, 2);
 68
 69      // T12, F7A,7B
 70      book(_h["Et2_low_M4j"], 11, 1, 1);
 71      book(_h["Et2_high_M4j"], 11, 1, 2);
 72
 73      // T13, F7A,7B
 74      book(_h["Et3_low_M4j"], 12, 1, 1);
 75      book(_h["Et3_high_M4j"], 12, 1, 2);
 76
 77      // T14, F7A,7B
 78      book(_h["Et4_low_M4j"], 13, 1, 1);
 79      book(_h["Et4_high_M4j"], 13, 1, 2);
 80
 81      // T15, F8A,8B
 82      book(_h["Eta1_low_M3j"], 14, 1, 1);
 83      book(_h["Eta1_high_M3j"], 14, 1, 2);
 84
 85      // T16, F8A,8B
 86      book(_h["Eta2_low_M3j"], 15, 1, 1);
 87      book(_h["Eta2_high_M3j"], 15, 1, 2);
 88
 89      // T17, F8A,8B
 90      book(_h["Eta3_low_M3j"], 16, 1, 1);
 91      book(_h["Eta3_high_M3j"], 16, 1, 2);
 92
 93      // T18, F9A,9B
 94      book(_h["Eta1_low_M4j"], 17, 1, 1);
 95      book(_h["Eta1_high_M4j"], 17, 1, 2);
 96
 97      // T19, F9A,9B
 98      book(_h["Eta2_low_M4j"], 18, 1, 1);
 99      book(_h["Eta2_high_M4j"], 18, 1, 2);
100
101      // T20, F9A,9B
102      book(_h["Eta3_low_M4j"], 19, 1, 1);
103      book(_h["Eta3_high_M4j"], 19, 1, 2);
104
105      // T21, F9A,9B
106      book(_h["Eta4_low_M4j"], 20, 1, 1);
107      book(_h["Eta4_high_M4j"], 20, 1, 2);
108
109      // T22, F10A,10B
110      book(_h["Cos_phi3_low_M3j"], 21, 1, 1);
111      book(_h["Cos_phi3_high_M3j"], 21, 1, 2);
112    }
113
114    /// Perform the per-event analysis
115    void analyze(const Event &event) {
116
117      // DIS Kinematics & Warnings
118      const DISKinematics &kin = apply<DISKinematics>(event, "Kinematics");
119      if (kin.failed()) vetoEvent;
120      const int orientation = kin.orientation();
121
122      if (kin.Q2() > 1 * GeV2) vetoEvent;
123      if (!inRange(kin.y(), 0.2, 0.85)) vetoEvent;
124
125      // Jets
126      const Jets jets = apply<FastJets>(event, "Jets").jets(Cuts::Et > 6 * GeV && Cuts::etaIn(-2.4 * orientation, 2.4 * orientation), cmpMomByEt);
127
128      // Veto event by number of jets
129      if (jets.size() < 3) vetoEvent;
130
131      // Define jet numbers
132      const Jet &j1 = jets[0];
133      const Jet &j2 = jets[1];
134      const Jet &j3 = jets[2];
135
136      // Define eta (with orientations)
137      const double eta1 = orientation * j1.eta(), eta2 = orientation * j2.eta(), eta3 = orientation * j3.eta();
138
139      // Get jet momenta
140      FourMomentum j1_p(j1.momentum());
141      FourMomentum j2_p(j2.momentum());
142      FourMomentum j3_p(j3.momentum());
143
144      // Three jet events
145      if (j3.Et() > 6 * GeV) {
146
147        // x_obs_gamma
148        const double x_gamma_3j = (j1.Et() * exp(-eta1) + j2.Et() * exp(-eta2) + j3.Et() * exp(-eta3)) / (2 * kin.y() * kin.beamLepton().E());
149
150        // Invariant Mass
151        const double M3j = FourMomentum(j1_p + j2_p + j3_p).mass();
152
153        // Three Momentum
154        ThreeMomentum p3 = j1_p.p3();
155        ThreeMomentum p4 = j2_p.p3();
156        ThreeMomentum p5 = j3_p.p3();
157        ThreeMomentum p_beam = kin.beamHadron().p3() - kin.beamLepton().p3();
158
159        Vector3 plane1 = cross(p_beam, p3);
160        Vector3 plane2 = cross(p4, p5);
161
162        const double mag_plane1 = abs(sqrt(sqr(plane1[0]) + sqr(plane1[1]) + sqr(plane1[2])));
163        const double mag_plane2 = abs(sqrt(sqr(plane2[0]) + sqr(plane2[1]) + sqr(plane2[2])));
164
165        const double norm_cos_phi3 = mag_plane1 * mag_plane2;
166
167        const double cos_phi3 = (dot(plane1, plane2)) / norm_cos_phi3;
168
169        _h["M3j"]->fill(M3j / GeV);
170
171        if (inRange(M3j, 25 * GeV, 50 * GeV)) {
172          _h["x_gamma_obs_low_M3j"]->fill(x_gamma_3j);
173          _h["y_low_M3j"]->fill(kin.y());
174          _h["Et1_low_M3j"]->fill(j1.Et());
175          _h["Et2_low_M3j"]->fill(j2.Et());
176          _h["Et3_low_M3j"]->fill(j3.Et());
177          _h["Eta1_low_M3j"]->fill(eta1);
178          _h["Eta2_low_M3j"]->fill(eta2);
179          _h["Eta3_low_M3j"]->fill(eta3);
180          _h["Cos_phi3_low_M3j"]->fill(cos_phi3);
181        }
182
183        if (M3j >= 50 * GeV) {
184          _h["x_gamma_obs_high_M3j"]->fill(x_gamma_3j);
185          _h["y_high_M3j"]->fill(kin.y());
186          _h["Et1_high_M3j"]->fill(j1.Et());
187          _h["Et2_high_M3j"]->fill(j2.Et());
188          _h["Et3_high_M3j"]->fill(j3.Et());
189          _h["Eta1_high_M3j"]->fill(eta1);
190          _h["Eta2_high_M3j"]->fill(eta2);
191          _h["Eta3_high_M3j"]->fill(eta3);
192          _h["Cos_phi3_high_M3j"]->fill(cos_phi3);
193        }
194      }
195
196      // Four jet events
197      if (jets.size() > 3) {
198        const Jet &j4 = jets[3];
199
200        if (j4.Et() > 6 * GeV) {
201
202          // Jet4 info
203          FourMomentum j4_p(j4.momentum());
204          const double eta4 = orientation * j4.eta();
205          if (abs(eta4) > 2.4) vetoEvent;
206
207          // x_obs_gamma
208          const double x_gamma_4j = (j1.Et() * exp(-eta1) + j2.Et() * exp(-eta2) + j3.Et() * exp(-eta3) + j4.Et() * exp(-eta4)) / (2 * kin.y() * kin.beamLepton().E());
209
210          // Invariant Mass
211          double M4j = FourMomentum(j1_p + j2_p + j3_p + j4_p).mass();
212
213          _h["M4j"]->fill(M4j / GeV);
214
215          if (inRange(M4j, 25 * GeV, 50 * GeV)) {
216            _h["x_gamma_obs_low_M4j"]->fill(x_gamma_4j);
217            _h["y_low_M4j"]->fill(kin.y());
218            _h["Et1_low_M4j"]->fill(j1.Et());
219            _h["Et2_low_M4j"]->fill(j2.Et());
220            _h["Et3_low_M4j"]->fill(j3.Et());
221            _h["Et4_low_M4j"]->fill(j4.Et());
222            _h["Eta1_low_M4j"]->fill(eta1);
223            _h["Eta2_low_M4j"]->fill(eta2);
224            _h["Eta3_low_M4j"]->fill(eta3);
225            _h["Eta4_low_M4j"]->fill(eta4);
226          }
227
228          if (M4j >= 50 * GeV) {
229            _h["x_gamma_obs_high_M4j"]->fill(x_gamma_4j);
230            _h["y_high_M4j"]->fill(kin.y());
231            _h["Et1_high_M4j"]->fill(j1.Et());
232            _h["Et2_high_M4j"]->fill(j2.Et());
233            _h["Et3_high_M4j"]->fill(j3.Et());
234            _h["Et4_high_M4j"]->fill(j4.Et());
235            _h["Eta1_high_M4j"]->fill(eta1);
236            _h["Eta2_high_M4j"]->fill(eta2);
237            _h["Eta3_high_M4j"]->fill(eta3);
238            _h["Eta4_high_M4j"]->fill(eta4);
239          }
240        }
241      }
242    }
243
244    /// Normalise histograms etc., after the run
245    void finalize() {
246      scale(_h, crossSection() / picobarn / sumW());
247    }
248
249    /// @}
250
251    /// @name Histograms
252    /// @{
253    map<string, Histo1DPtr> _h;
254
255
256  };
257
258  RIVET_DECLARE_PLUGIN(ZEUS_2007_I756660);
259
260}