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 book(_p["mult1"], 1,1,1);
46 book(_p["mult2"], 2,1,1);
47 book(_p["mult3"], 3,1,1);
48 book(_p["mult4"], 4,1,1);
49 book(_p["mom1"], 5,1,1);
50 book(_p["mom2"], 6,1,1);
51 book(_p["mom3"], 7,1,1);
52 book(_p["mom4"], 8,1,1);
53
54 book(_i["nch1"], 9, 1, 1); // Multiplicity
55 book(_i["nch2"], 10, 1, 1);
56 book(_i["nch3"], 10, 1, 2);
57 book(_i["nch4"], 10, 1, 3);
58 book(_i["nch5"], 11, 1, 1);
59 book(_i["nch6"], 11, 1, 2);
60 book(_i["nch7"], 11, 1, 3);
61 book(_i["nch8"], 11, 1, 4);
62 book(_i["nch9"], 12, 1, 1);
63 book(_i["nch10"], 12, 1, 2);
64
65 book(_h["loginvmom1"], 13, 1, 1); // Momentum spectra
66 book(_h["loginvmom2"], 14, 1, 1);
67 book(_h["loginvmom3"], 14, 1, 2);
68 book(_h["loginvmom4"], 14, 1, 3);
69 book(_h["loginvmom5"], 15, 1, 1);
70 book(_h["loginvmom6"], 15, 1, 2);
71 book(_h["loginvmom7"], 15, 1, 3);
72 book(_h["loginvmom8"], 15, 1, 4);
73 book(_h["loginvmom9"], 16, 1, 1);
74 book(_h["loginvmom10"], 16, 1, 2);
75
76 }
77
78
79 /// Perform the per-event analysis
80 void analyze(const Event& event) {
81 const ChargedFinalState& cfs = apply<ChargedFinalState>(event, "FS");
82 const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
83
84 double xbj = dk.x(); // momentum fraction
85 double Q2 = dk.Q2()/GeV; // momentum transfer
86 const LorentzTransform Breitboost = dk.boostBreit();
87
88 // Multiplicity counters
89 int n911(0), n1011(0), n1012(0), n1013(0), n1111(0), n1112(0), n1113(0), n1114(0), n1211(0), n1212(0);
90
91
92 if(0.6e-3<xbj && xbj<1.2e-3) {
93 if(10<Q2 && Q2<20) {
94 _Nevt_after_cuts_Q[1] -> fill();
95 }
96 if(10<Q2 && Q2<20) {
97 _Nevt_after_cuts_Q[2] -> fill();
98 }
99 if(20<Q2 && Q2<40) {
100 _Nevt_after_cuts_Q[3] -> fill();
101 }
102 if(40<Q2 && Q2<80) {
103 _Nevt_after_cuts_Q[4] -> fill();
104 }
105 }
106 if(2.4e-3<xbj && xbj<1.0e-2) {
107 if(20<Q2 && Q2<40) {
108 _Nevt_after_cuts_Q[5] -> fill();
109 }
110 if(40<Q2 && Q2<80){
111 _Nevt_after_cuts_Q[6] -> fill();
112 }
113 if(80<Q2 && Q2<160) {
114 _Nevt_after_cuts_Q[7] -> fill();
115 }
116 if(160<Q2 && Q2<320) {
117 _Nevt_after_cuts_Q[8] -> fill();
118 }
119 }
120 if(1.0e-2<xbj && xbj<5.0e-2) {
121 if(320<Q2 && Q2<640) {
122 _Nevt_after_cuts_Q[9] -> fill();
123 }
124 if(640<Q2 && Q2<1280) {
125 _Nevt_after_cuts_Q[10] -> fill();
126 }
127 }
128
129
130 for (const Particle& p : cfs.particles()) {
131 //??? calculating ln(1/x_p) ??? --> part to ask
132 const FourMomentum BrMom = Breitboost.transform(p.momentum());
133 double pp = sqrt(BrMom.px()*BrMom.px() + BrMom.py()*BrMom.py() + BrMom.pz()*BrMom.pz() );
134 double xp = 2*pp/(sqrt(Q2));
135 const double logInvScaledMom = log(1/xp);
136
137 if ( BrMom.pz() > 0. ) continue;
138
139 if(0.6e-3<xbj && xbj<1.2e-3) {
140 _p["mom1"] ->fill(Q2, logInvScaledMom);
141 if(10<Q2 && Q2<20) {
142 _h["loginvmom1"] ->fill(logInvScaledMom);
143 ++n911;
144 }
145 }
146
147 if(1.2e-3<xbj && xbj<2.4e-3) {
148 _p["mom2"] ->fill(Q2, logInvScaledMom);
149 if(10<Q2 && Q2<20) {
150 _h["loginvmom2"] ->fill(logInvScaledMom);
151 ++n1011;
152 }
153 if(20<Q2 && Q2<40) {
154 _h["loginvmom3"] ->fill(logInvScaledMom);
155 ++n1012;
156 }
157 if(40<Q2 && Q2<80) {
158 _h["loginvmom4"] ->fill(logInvScaledMom);
159 ++n1013;
160 }
161 }
162
163 if(2.4e-3<xbj && xbj<1.0e-2) {
164 _p["mom3"] ->fill(Q2, logInvScaledMom);
165 if(20<Q2 && Q2<40) {
166 _h["loginvmom5"] ->fill(logInvScaledMom);
167 ++n1111;
168 }
169 if(40<Q2 && Q2<80){
170 _h["loginvmom6"] ->fill(logInvScaledMom);
171 ++n1112;
172 }
173 if(80<Q2 && Q2<160) {
174 _h["loginvmom7"] ->fill(logInvScaledMom);
175 ++n1113;
176 }
177 if(160<Q2 && Q2<320) {
178 _h["loginvmom8"] ->fill(logInvScaledMom);
179 ++n1114;
180 }
181 }
182
183 if(1.0e-2<xbj && xbj<5.0e-2) {
184 _p["mom4"] ->fill(Q2,logInvScaledMom);
185 if(320<Q2 && Q2<640) {
186 _h["loginvmom9"] ->fill(logInvScaledMom);
187 ++n1211;
188 }
189 if(640<Q2 && Q2<1280) {
190 _h["loginvmom10"] ->fill(logInvScaledMom);
191 ++n1212;
192 }
193 }
194
195 }
196
197 if(0.6e-3<xbj && xbj<1.2e-3) {
198 if(10<Q2 && Q2<20) {
199 _p["mult1"] ->fill(Q2, n911);
200 _i["nch1"] ->fill(n911);
201 }
202 }
203
204 if(1.2e-3<xbj && xbj<2.4e-3) {
205 if(10<Q2 && Q2<80) {
206 _p["mult2"] ->fill(Q2, n1011+n1012+n1013);
207 if(10<Q2 && Q2<20) {
208 _i["nch2"] ->fill(n1011); }
209 if(20<Q2 && Q2<40) {
210 _i["nch3"] ->fill(n1012);}
211 if(40<Q2 && Q2<80) {
212 _i["nch4"] ->fill(n1013);}
213 }
214 }
215
216 if(2.4e-3<xbj && xbj<1.0e-2) {
217 _p["mult3"] ->fill(Q2,n1111+n1112+n1113+n1114);
218 if(20<Q2 && Q2<40) {
219 _i["nch5"] ->fill(n1111);}
220 if(40<Q2 && Q2<80) {
221 _i["nch6"] ->fill(n1112);}
222 if(80<Q2 && Q2<160) {
223 _i["nch7"] ->fill(n1113);}
224 if(160<Q2 && Q2<320) {
225 _i["nch8"] ->fill(n1114);}
226
227 }
228
229 if(1.0e-2<xbj && xbj<5.0e-2) {
230 _p["mult4"] ->fill(Q2, n1211+n1212);
231 if(320<Q2 && Q2<640) {
232 _i["nch9"] ->fill(n1211);}
233 if(640<Q2 && Q2<1280) {
234 _i["nch10"] ->fill(n1212); }
235 }
236
237 }
238
239
240 /// Normalise histograms etc., after the run
241 void finalize() {
242 normalize(_i["nch1"]); //multiplicity
243 normalize(_i["nch2"]);
244 normalize(_i["nch3"]);
245 normalize(_i["nch4"]);
246 normalize(_i["nch5"]);
247 normalize(_i["nch6"]);
248 normalize(_i["nch7"]);
249 normalize(_i["nch8"]);
250 normalize(_i["nch9"]);
251 normalize(_i["nch10"]);
252
253 if(dbl(*_Nevt_after_cuts_Q[1])>0 ) scale(_h["loginvmom1"],1./ *_Nevt_after_cuts_Q[1]); //momentum
254 if(dbl(*_Nevt_after_cuts_Q[2])>0 ) scale(_h["loginvmom2"],1./ *_Nevt_after_cuts_Q[2]);
255 if(dbl(*_Nevt_after_cuts_Q[3])>0 ) scale(_h["loginvmom3"],1./ *_Nevt_after_cuts_Q[3] );
256 if(dbl(*_Nevt_after_cuts_Q[4])>0 ) scale(_h["loginvmom4"],1./ *_Nevt_after_cuts_Q[4] );
257 if(dbl(*_Nevt_after_cuts_Q[5])>0 ) scale(_h["loginvmom5"],1./ *_Nevt_after_cuts_Q[5] );
258 if(dbl(*_Nevt_after_cuts_Q[6])>0 ) scale(_h["loginvmom6"],1./ *_Nevt_after_cuts_Q[6]);
259 if(dbl(*_Nevt_after_cuts_Q[7])>0 ) scale(_h["loginvmom7"],1./ *_Nevt_after_cuts_Q[7]);
260 if(dbl(*_Nevt_after_cuts_Q[8])>0 ) scale(_h["loginvmom8"],1./ *_Nevt_after_cuts_Q[8]);
261 if(dbl(*_Nevt_after_cuts_Q[9])>0 ) scale(_h["loginvmom9"],1./ *_Nevt_after_cuts_Q[9] );
262 if(dbl(*_Nevt_after_cuts_Q[10])>0 ) scale(_h["loginvmom10"],1./ *_Nevt_after_cuts_Q[10] );
263
264 }
265
266 ///@}
267
268
269 /// @name Histograms
270 ///@{
271
272 Estimate1DPtr _h_mult1;
273 Estimate1DPtr _h_mult2;
274 Estimate1DPtr _h_mult3;
275 Estimate1DPtr _h_mult4;
276 Estimate1DPtr _h_mom1;
277 Estimate1DPtr _h_mom2;
278 Estimate1DPtr _h_mom3;
279 Estimate1DPtr _h_mom4;
280
281 map<string, Histo1DPtr> _h;
282 map<string, BinnedHistoPtr<int> > _i;
283 map<string, Profile1DPtr> _p;
284 map<string, CounterPtr> _c;
285 CounterPtr _Nevt_after_cuts_Q[11];
286
287 ///@}
288
289
290 };
291
292
293 RIVET_DECLARE_PLUGIN(ZEUS_1995_I392386);
294
295}
|