rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ZEUS_1995_I392386

Charged particle multiplicity and momentum spectra in Breit frame at ZEUS
Experiment: ZEUS (HERA)
Inspire ID: 392386
Status: VALIDATED
Authors:
  • Suzie Kim
  • Hannes Jung
References:
  • Z.Phys.C67:93-108,1995
  • DOI:10.1007/BF01564824
  • arXiv: hep-ex/9501012
  • DESY 95-007
Beams: e- p+, p+ e-
Beam energies: (26.7, 820.0); (820.0, 26.7) GeV
    No run details listed

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 = apply<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    Estimate1DPtr _h_mult1;
315    Estimate1DPtr _h_mult2;
316    Estimate1DPtr _h_mult3;
317    Estimate1DPtr _h_mult4;
318    Estimate1DPtr _h_mom1;
319    Estimate1DPtr _h_mom2;
320    Estimate1DPtr _h_mom3;
321    Estimate1DPtr _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
328    ///@}
329
330
331  };
332
333
334  RIVET_DECLARE_PLUGIN(ZEUS_1995_I392386);
335
336}