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        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}