Rivet analyses referenceZEUS_1995_I392386Charged particle multiplicity and momentum spectra in Breit frame at ZEUSExperiment: ZEUS (HERA) Inspire ID: 392386 Status: VALIDATED Authors:
Beam energies: (26.7, 820.0); (820.0, 26.7) GeV
Charged particle multiplicity and momentum spectra in Deep Inelastic Scattering event are measured at ZEUS. The analysis is performed in Breit frame. The analysis covers the kinematic range of $10 < Q^2 < 1280$ GeV$^2$ and $6 \times 10^{-4} < x_{bj} < 5 \times 10^{-2}$. Source code: ZEUS_1995_I392386.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/ChargedFinalState.hh"
5#include "Rivet/Projections/DISKinematics.hh"
6
7
8namespace Rivet {
9
10const vector<double> QEdges {10., 20., 40., 80., 160., 320.};
11const vector<double> xEdges {0.6e-3,1.2e-3,2.4e-3,1.0e-2,5.0e-2};
12
13 /// @brief Charged particle multiplicity and momentum spectra in Breit frame at ZEUS
14 class ZEUS_1995_I392386 : public Analysis {
15 public:
16
17 /// Constructor
18 RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_1995_I392386);
19
20
21 /// @name Analysis methods
22 ///@{
23
24 /// Book histograms and initialise projections before the run
25 void init() {
26
27 // Initialise and register projections
28 declare(DISKinematics(), "Kinematics");
29
30 // The basic final-state projection:
31 // all final-state particles within
32 // the given eta acceptance
33 const ChargedFinalState fs;
34 declare(fs, "FS");
35
36
37 // Book histograms
38 // specify custom binning
39 // take binning from reference data using HEPData ID (digits in "d01-x01-y01" etc.)
40
41 for(int iQ = 0; iQ < 11; ++iQ) {
42 book(_Nevt_after_cuts_Q[iQ], "TMP/Nevt_after_cuts_Q"+ to_string(iQ));
43 }
44
45
46 book(_h["mult1"],"TMP/mult 1", refData(1, 1, 1)); // Multiplicity
47 book(_h["mult1_Q"],"TMP/mult 1_1", refData(1, 1, 1));
48 book(_h["mult2"],"TMP/mult 2", refData(2, 1, 1));
49 book(_h["mult2_Q"],"TMP/mult 2_1", refData(2, 1, 1));
50 book(_h["mult3"], "TMP/mult 3", refData(3, 1, 1));
51 book(_h["mult3_Q"], "TMP/mult 3_1",refData(3, 1, 1));
52 book(_h["mult4"], "TMP/mult 4", refData(4, 1, 1));
53 book(_h["mult4_Q"],"TMP/mult 4_1", refData(4, 1, 1));
54
55 book(_h["mom1"], "TMP/mult 5", refData(5, 1, 1)); // Momentum spectra
56 book(_h["mom1_Q"],"TMP/mult 5_1", refData(5, 1, 1));
57 book(_h["mom2"], "TMP/mult 6", refData(6, 1, 1));
58 book(_h["mom2_Q"],"TMP/mult 6_1", refData(6, 1, 1));
59 book(_h["mom3"], "TMP/mult 7", refData(7, 1, 1));
60 book(_h["mom3_Q"],"TMP/mult 7_1", refData(7, 1, 1));
61 book(_h["mom4"], "TMP/mult 8", refData(8, 1, 1));
62 book(_h["mom4_Q"], "TMP/mult 8_1", refData(8, 1, 1));
63
64 book(_h_mult1, 1,1,1);
65 book(_h_mult2, 2,1,1);
66 book(_h_mult3, 3,1,1);
67 book(_h_mult4, 4,1,1);
68 book(_h_mom1, 5,1,1);
69 book(_h_mom2, 6,1,1);
70 book(_h_mom3, 7,1,1);
71 book(_h_mom4, 8,1,1);
72
73 book(_h["nch1"], 9, 1, 1); // Multiplicity
74 book(_h["nch2"], 10, 1, 1);
75 book(_h["nch3"], 10, 1, 2);
76 book(_h["nch4"], 10, 1, 3);
77 book(_h["nch5"], 11, 1, 1);
78 book(_h["nch6"], 11, 1, 2);
79 book(_h["nch7"], 11, 1, 3);
80 book(_h["nch8"], 11, 1, 4);
81 book(_h["nch9"], 12, 1, 1);
82 book(_h["nch10"], 12, 1, 2);
83
84 book(_h["loginvmom1"], 13, 1, 1); // Momentum spectra
85 book(_h["loginvmom2"], 14, 1, 1);
86 book(_h["loginvmom3"], 14, 1, 2);
87 book(_h["loginvmom4"], 14, 1, 3);
88 book(_h["loginvmom5"], 15, 1, 1);
89 book(_h["loginvmom6"], 15, 1, 2);
90 book(_h["loginvmom7"], 15, 1, 3);
91 book(_h["loginvmom8"], 15, 1, 4);
92 book(_h["loginvmom9"], 16, 1, 1);
93 book(_h["loginvmom10"], 16, 1, 2);
94
95 }
96
97
98 /// Perform the per-event analysis
99 void analyze(const Event& event) {
100 const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "FS");
101 const DISKinematics& dk = applyProjection<DISKinematics>(event, "Kinematics");
102
103 double xbj = dk.x(); // momentum fraction
104 double Q2 = dk.Q2()/GeV; // momentum transfer
105 const LorentzTransform Breitboost = dk.boostBreit();
106
107 // Multiplicity counters
108 int n911(0), n1011(0), n1012(0), n1013(0), n1111(0), n1112(0), n1113(0), n1114(0), n1211(0), n1212(0);
109
110
111 if(0.6e-3<xbj && xbj<1.2e-3) {
112 if(10<Q2 && Q2<20) {
113 _Nevt_after_cuts_Q[1] -> fill();
114 }
115 if(10<Q2 && Q2<20) {
116 _Nevt_after_cuts_Q[2] -> fill();
117 }
118 if(20<Q2 && Q2<40) {
119 _Nevt_after_cuts_Q[3] -> fill();
120 }
121 if(40<Q2 && Q2<80) {
122 _Nevt_after_cuts_Q[4] -> fill();
123 }
124 }
125 if(2.4e-3<xbj && xbj<1.0e-2) {
126 if(20<Q2 && Q2<40) {
127 _Nevt_after_cuts_Q[5] -> fill();
128 }
129 if(40<Q2 && Q2<80){
130 _Nevt_after_cuts_Q[6] -> fill();
131 }
132 if(80<Q2 && Q2<160) {
133 _Nevt_after_cuts_Q[7] -> fill();
134 }
135 if(160<Q2 && Q2<320) {
136 _Nevt_after_cuts_Q[8] -> fill();
137 }
138 }
139 if(1.0e-2<xbj && xbj<5.0e-2) {
140 if(320<Q2 && Q2<640) {
141 _Nevt_after_cuts_Q[9] -> fill();
142 }
143 if(640<Q2 && Q2<1280) {
144 _Nevt_after_cuts_Q[10] -> fill();
145 }
146 }
147
148
149 for (const Particle& p : cfs.particles()) {
150 //??? calculating ln(1/x_p) ??? --> part to ask
151 const FourMomentum BrMom = Breitboost.transform(p.momentum());
152 double pp = sqrt(BrMom.px()*BrMom.px() + BrMom.py()*BrMom.py() + BrMom.pz()*BrMom.pz() );
153 double xp = 2*pp/(sqrt(Q2));
154 const double logInvScaledMom = log(1/xp);
155
156 if ( BrMom.pz() > 0. ) continue;
157
158 if(0.6e-3<xbj && xbj<1.2e-3) {
159 _h["mom1"] ->fill(Q2, logInvScaledMom);
160 _h["mom1_Q"] ->fill(Q2);
161 if(10<Q2 && Q2<20) {
162 _h["loginvmom1"] ->fill(logInvScaledMom);
163 ++n911;
164 }
165 }
166
167 if(1.2e-3<xbj && xbj<2.4e-3) {
168 _h["mom2"] ->fill(Q2, logInvScaledMom);
169 _h["mom2_Q"] ->fill(Q2);
170 if(10<Q2 && Q2<20) {
171 _h["loginvmom2"] ->fill(logInvScaledMom);
172 ++n1011;
173 }
174 if(20<Q2 && Q2<40) {
175 _h["loginvmom3"] ->fill(logInvScaledMom);
176 ++n1012;
177 }
178 if(40<Q2 && Q2<80) {
179 _h["loginvmom4"] ->fill(logInvScaledMom);
180 ++n1013;
181 }
182 }
183
184 if(2.4e-3<xbj && xbj<1.0e-2) {
185 _h["mom3"] ->fill(Q2, logInvScaledMom);
186 _h["mom3_Q"] ->fill(Q2);
187 if(20<Q2 && Q2<40) {
188 _h["loginvmom5"] ->fill(logInvScaledMom);
189 ++n1111;
190 }
191 if(40<Q2 && Q2<80){
192 _h["loginvmom6"] ->fill(logInvScaledMom);
193 ++n1112;
194 }
195 if(80<Q2 && Q2<160) {
196 _h["loginvmom7"] ->fill(logInvScaledMom);
197 ++n1113;
198 }
199 if(160<Q2 && Q2<320) {
200 _h["loginvmom8"] ->fill(logInvScaledMom);
201 ++n1114;
202 }
203 }
204
205 if(1.0e-2<xbj && xbj<5.0e-2) {
206 _h["mom4"] ->fill(Q2,logInvScaledMom);
207 _h["mom4_Q"] ->fill(Q2);
208 if(320<Q2 && Q2<640) {
209 _h["loginvmom9"] ->fill(logInvScaledMom);
210 ++n1211;
211 }
212 if(640<Q2 && Q2<1280) {
213 _h["loginvmom10"] ->fill(logInvScaledMom);
214 ++n1212;
215 }
216 }
217
218 }
219
220 if(0.6e-3<xbj && xbj<1.2e-3) {
221 if(10<Q2 && Q2<20) {
222 _h["mult1"] ->fill(Q2, n911);
223 _h["mult1_Q"] ->fill(Q2);
224 _h["nch1"] ->fill(n911);
225 }
226 }
227
228 if(1.2e-3<xbj && xbj<2.4e-3) {
229 if(10<Q2 && Q2<80) {
230 _h["mult2"] ->fill(Q2, n1011+n1012+n1013);
231 _h["mult2_Q"] ->fill(Q2);
232 if(10<Q2 && Q2<20) {
233 _h["nch2"] ->fill(n1011); }
234 if(20<Q2 && Q2<40) {
235 _h["nch3"] ->fill(n1012);}
236 if(40<Q2 && Q2<80) {
237 _h["nch4"] ->fill(n1013);}
238 }
239 }
240
241 if(2.4e-3<xbj && xbj<1.0e-2) {
242 _h["mult3"] ->fill(Q2,n1111+n1112+n1113+n1114);
243 _h["mult3_Q"] ->fill(Q2);
244 if(20<Q2 && Q2<40) {
245 _h["nch5"] ->fill(n1111);}
246 if(40<Q2 && Q2<80) {
247 _h["nch6"] ->fill(n1112);}
248 if(80<Q2 && Q2<160) {
249 _h["nch7"] ->fill(n1113);}
250 if(160<Q2 && Q2<320) {
251 _h["nch8"] ->fill(n1114);}
252
253 }
254
255 if(1.0e-2<xbj && xbj<5.0e-2) {
256 _h["mult4"] ->fill(Q2, n1211+n1212);
257 _h["mult4_Q"] ->fill(Q2);
258 if(320<Q2 && Q2<640) {
259 _h["nch9"] ->fill(n1211);}
260 if(640<Q2 && Q2<1280) {
261 _h["nch10"] ->fill(n1212); }
262 }
263
264 }
265
266
267 /// Normalise histograms etc., after the run
268 void finalize() {
269 // normalize(_h["XXXX"]); // normalize to unity
270 divide(_h["mult1"],_h["mult1_Q"],_h_mult1); // Q versus Multiplicity
271 divide(_h["mult2"],_h["mult2_Q"],_h_mult2);
272 divide(_h["mult3"],_h["mult3_Q"],_h_mult3);
273 divide(_h["mult4"],_h["mult4_Q"],_h_mult4);
274 divide(_h["mom1"],_h["mom1_Q"],_h_mom1); // Q versus Momentum
275 divide(_h["mom2"],_h["mom2_Q"],_h_mom2);
276 divide(_h["mom3"],_h["mom3_Q"],_h_mom3);
277 divide(_h["mom4"],_h["mom4_Q"],_h_mom4);
278
279
280 normalize(_h["nch1"]); //multiplicity
281 normalize(_h["nch2"]);
282 normalize(_h["nch3"]);
283 normalize(_h["nch4"]);
284 normalize(_h["nch5"]);
285 normalize(_h["nch6"]);
286 normalize(_h["nch7"]);
287 normalize(_h["nch8"]);
288 normalize(_h["nch9"]);
289 normalize(_h["nch10"]);
290
291 if(dbl(*_Nevt_after_cuts_Q[1])>0 ) scale(_h["loginvmom1"],1./ *_Nevt_after_cuts_Q[1]); //momentum
292 if(dbl(*_Nevt_after_cuts_Q[2])>0 ) scale(_h["loginvmom2"],1./ *_Nevt_after_cuts_Q[2]);
293 if(dbl(*_Nevt_after_cuts_Q[3])>0 ) scale(_h["loginvmom3"],1./ *_Nevt_after_cuts_Q[3] );
294 if(dbl(*_Nevt_after_cuts_Q[4])>0 ) scale(_h["loginvmom4"],1./ *_Nevt_after_cuts_Q[4] );
295 if(dbl(*_Nevt_after_cuts_Q[5])>0 ) scale(_h["loginvmom5"],1./ *_Nevt_after_cuts_Q[5] );
296 if(dbl(*_Nevt_after_cuts_Q[6])>0 ) scale(_h["loginvmom6"],1./ *_Nevt_after_cuts_Q[6]);
297 if(dbl(*_Nevt_after_cuts_Q[7])>0 ) scale(_h["loginvmom7"],1./ *_Nevt_after_cuts_Q[7]);
298 if(dbl(*_Nevt_after_cuts_Q[8])>0 ) scale(_h["loginvmom8"],1./ *_Nevt_after_cuts_Q[8]);
299 if(dbl(*_Nevt_after_cuts_Q[9])>0 ) scale(_h["loginvmom9"],1./ *_Nevt_after_cuts_Q[9] );
300 if(dbl(*_Nevt_after_cuts_Q[10])>0 ) scale(_h["loginvmom10"],1./ *_Nevt_after_cuts_Q[10] );
301
302
303
304 // scale(_h["ZZZZ"], crossSection()/picobarn/sumW()); // norm to generated cross-section in pb (after cuts)
305
306 }
307
308 ///@}
309
310
311 /// @name Histograms
312 ///@{
313
314 Scatter2DPtr _h_mult1;
315 Scatter2DPtr _h_mult2;
316 Scatter2DPtr _h_mult3;
317 Scatter2DPtr _h_mult4;
318 Scatter2DPtr _h_mom1;
319 Scatter2DPtr _h_mom2;
320 Scatter2DPtr _h_mom3;
321 Scatter2DPtr _h_mom4;
322
323 map<string, Histo1DPtr> _h;
324 map<string, Profile1DPtr> _p;
325 map<string, CounterPtr> _c;
326 CounterPtr _Nevt_after_cuts_Q[11];
327 BinnedHistogram _h_invmom1,_h_invmom2,_h_invmom3;
328
329 ///@}
330
331
332 };
333
334
335 RIVET_DECLARE_PLUGIN(ZEUS_1995_I392386);
336
337}
|