Rivet analyses referenceZEUS_2007_I756660Three- and four-jet final states in photoproduction at HERAExperiment: ZEUS (HERA) Inspire ID: 756660 Status: VALIDATED Authors:
Beam energies: (920.0, 27.5); (920.0, 27.5); (820.0, 27.5); (820.0, 27.5) GeV Run details:
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}
|