rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ZEUS_1995_I395196

Neutral strange particle production in deep inelastic scattering at HERA (ZEUS)
Experiment: ZEUS (HERA)
Inspire ID: 395196
Status: VALIDATED
Authors:
  • Can Sueslue
  • Hannes Jung
References: Beams: e- p+, p+ e-
Beam energies: (26.7, 820.0); (820.0, 26.7) GeV
Run details:
  • Cuts are $10<Q2<640 GeV^2$, $0.0003<x_{bj}<0.01$,and $y>0.04$. For Kaons, $1.3< \eta <1.3$ and $0.5< p_t<4.0 GeV$. For Lambdas $1.3< \eta <1.3 $ and $0.5< p_t<3.5 GeV$.

Measurements of $K^0$ and $\Lambda$ production in neutral current, deep inelastic scattering of 26.7 GeV electrons and 820 GeV protons in the kinematic range $10<Q^2<640$, $0.0003<x<0.01$, and $y>0.04$. Average multiplicities for $K^0$ and $\Lambda$ production are determined for transverse momenta $p_T >0.5> $ GeV and pseudorapidities $|\eta| < 1.3 $. The production properties of $K^0$ in events with and without a large rapidity gap with respect to the proton direction are compared. The ratio of neutral $K^0$ to charged particles per event in the measured kinematic range is, within the present statistics, the same in both samples.

Source code: ZEUS_1995_I395196.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5#include "Rivet/Projections/FastJets.hh"
  6#include "Rivet/Projections/DISKinematics.hh"
  7#include "Rivet/Projections/DISLepton.hh"
  8#include "Rivet/Projections/ChargedFinalState.hh"
  9#include "Rivet/Projections/DISRapidityGap.hh"
 10namespace Rivet {
 11
 12
 13  /// @brief Neutral strange particle production in deep inelastic scattering at HERA (ZEUS)
 14  class ZEUS_1995_I395196 : public Analysis {
 15  public:
 16
 17    /// Constructor
 18    RIVET_DEFAULT_ANALYSIS_CTOR(ZEUS_1995_I395196);
 19
 20
 21    void init() {
 22
 23      declare(DISLepton(), "Lepton");
 24      declare(DISKinematics(), "Kinematics");
 25      declare(DISRapidityGap(), "Rapidity Gap");
 26
 27      const Cut cut = Cuts::abseta < 1.3;
 28
 29      const FinalState fs(cut);
 30      declare(fs, "FS");
 31      const UnstableParticles ufs(cut);
 32      declare(ufs, "UFS");
 33
 34      const ChargedFinalState cfs(cut);
 35      declare(cfs, "CFS");
 36
 37       // take binning from reference data using HEPData ID (digits in "d01-x01-y01" etc.)
 38      book(_h["pT_kaon"], 1, 1, 1);
 39      book(_h["eta_kaon"], 2, 1, 1);
 40      book(_h["pT_lambda"], 3, 1, 1);
 41      book(_h["eta_lambda"], 4, 1, 1);
 42      book(_h_multK0_0,"TMP/mult_0", refData<YODA::BinnedEstimate<string> >(5,1,1));
 43      book(_h_multK0_1,"TMP/mult_1", refData<YODA::BinnedEstimate<string> >(5,1,1));
 44      book(_h_multK0_2,"TMP/mult_2", refData<YODA::BinnedEstimate<string> >(6,1,1));
 45      book(_h_multK0_3,"TMP/mult_3", refData<YODA::BinnedEstimate<string> >(6,1,1));
 46      book(_h_scatratio, 6, 1, 1);
 47      book(_h["K0_NRG_data_pT"], 7, 1, 1);
 48      book(_h["K0_LRG_data_pT"], 8, 1, 1);
 49      book(_h["K0_NRG_data_eta"], 9, 1, 1);
 50      book(_h["K0_LRG_data_eta"], 10, 1, 1);
 51      book(_h_scat,5,1,1);
 52      book(_c["dis"],"TMP/Nevt_after_cuts");
 53
 54
 55    }
 56
 57
 58    /// Perform the per-event analysis
 59    void analyze(const Event& event) {
 60      if(_edges.empty()) _edges = _h_multK0_0->xEdges();;
 61      
 62      const FinalState& fs = apply<FinalState>(event, "FS");
 63      const UnstableParticles & ufs = apply<UnstableParticles>(event, "UFS");
 64      const DISKinematics& dk = apply<DISKinematics>(event, "Kinematics");
 65
 66      const DISRapidityGap& g = apply<DISRapidityGap>(event, "Rapidity Gap");
 67
 68      const ChargedFinalState& charged = apply<ChargedFinalState>(event, "CFS");
 69      const size_t numPartcharged = charged.particles().size();
 70      //const size_t numPart = fs.particles().size();
 71      //_c["charged"] -> fill(numPartcharged);
 72      //_c["all"] -> fill(numPart);
 73      const size_t numParticles = fs.particles().size();
 74      if (numParticles < 2) {
 75        MSG_DEBUG("Failed leptonic event cut");
 76        vetoEvent;
 77      }
 78
 79      double rgap = g.gap();
 80      // Get the DIS kinematics
 81      double xbj  = dk.x();
 82      double ybj = dk.y();
 83      double Q2 = dk.Q2()/GeV;
 84      double W = sqrt(dk.W2()/GeV);
 85      bool cut = Q2 >10 && Q2<640 && xbj>0.0003 && xbj<0.01 && ybj>0.04 && ybj<1.0;
 86      if (!cut) vetoEvent;
 87
 88
 89      size_t idx = _axis.index(Q2);
 90      string edge = "OTHER";
 91      if(idx && idx <= _edges.size()) edge=_edges[idx-1];
 92
 93      
 94      _h_multK0_1 -> fill(edge);
 95      _h_multK0_2 -> fill(edge,numPartcharged);
 96
 97      _c["dis"] -> fill();
 98
 99      for(const Particle& p : ufs.particles()){
100          const double eta= p.eta();
101          const double pT = p.pT()/GeV;
102	  const int pid = abs(p.pid());
103          //const double ybj= (p.E()-p.pz())/(2*27.5);
104          if (pid == 310 || pid == 130) {  //K0S
105             //cout << " pid " << pid << " eta " << eta << endl;
106             if (pT>0.5  && pT<4.0){
107                //fill histograms related to the kaons in here.
108                _h["pT_kaon"] -> fill(pT,0.5/pT);
109                _h["eta_kaon"] -> fill(eta);
110                _h_multK0_0 -> fill(edge);
111                _h_multK0_3 -> fill(edge);
112                if(rgap<1.5 && W>140.0 ) {
113                   _h["K0_LRG_data_pT"] -> fill(pT,0.5/pT);
114                   _h["K0_LRG_data_eta"] -> fill(eta);
115                   //cout<< abs(eta) <<endl;
116                }
117                else if(rgap>1.5 && W>140.0) {
118                   _h["K0_NRG_data_pT"] -> fill(pT,0.5/pT);
119                   _h["K0_NRG_data_eta"] -> fill(eta);
120                }
121             }
122          }
123          else if (pid==3122){ // Lambda
124             if (pT>0.5  && pT<3.5){
125                //fill histograms related to the lambdas  in here.
126                _h["pT_lambda"] -> fill(pT,0.5/pT);
127                _h["eta_lambda"] -> fill(eta);
128             }
129          }
130     }
131
132    }
133
134
135    /// Normalise histograms etc., after the run
136    void finalize() {
137      divide(_h_multK0_0, _h_multK0_1, _h_scat);
138      divide(_h_multK0_3, _h_multK0_2, _h_scatratio);
139
140
141      //cout<< "#of kaons per events"<< kaon/numEvents() <<endl;
142      //cout<< "Num mean charged p multiplicity"<< *_c["charged"]<< endl;
143      scale(_h["pT_kaon"],1./ *_c["dis"]);
144      scale(_h["eta_kaon"],1./ *_c["dis"]);
145      scale(_h["pT_lambda"],1./ *_c["dis"]);
146      scale(_h["eta_lambda"],1./ *_c["dis"]);
147      scale(_h["K0_LRG_data_pT"],1./ *_c["dis"]);
148      scale(_h["K0_NRG_data_pT"],1./ *_c["dis"]);
149      scale(_h["K0_LRG_data_eta"],1./ *_c["dis"]);
150      scale(_h["K0_NRG_data_eta"],1./ *_c["dis"]);
151
152    }
153
154    ///@}
155
156
157   private:
158    
159    /// @name Histograms
160    ///@{
161    map<string, Histo1DPtr> _h;
162    map<string, Profile1DPtr> _p;
163    map<string, CounterPtr> _c;
164    BinnedEstimatePtr<string> _h_scat, _h_scatratio ;
165    BinnedHistoPtr<string> _h_multK0_0 , _h_multK0_1 ,_h_multK0_2 ,_h_multK0_3 ;
166    YODA::Axis<double> _axis = YODA::Axis<double>{8.98, 12.195, 15.41, 32.535,106.89, 240.31};
167    vector<string> _edges;
168    ///@}
169    
170  };
171
172
173  RIVET_DECLARE_PLUGIN(ZEUS_1995_I395196);
174
175}