rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1989_I276860

Spectra for $\pi^\pm$, $K^\pm$, $K^0_S$ and $\bar{p}$ in $e^+e^-$ collisions at the $\Upsilon(1S)$ and continuum
Experiment: ARGUS (DORIS)
Inspire ID: 276860
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C44 (1989) 547, 1989
Beams: e- e+
Beam energies: (4.7, 4.7); (5.0, 5.0) GeV
Run details:
  • $e^+ e^-$ analysis near the $\Upsilon$ resonances

Spectra for the production of $\pi^\pm$, $K^\pm$, $K^0_S$ and $\bar{p}$ in $e^+e^-$ collisions. Data are taken on the $\Upsilon(1S)$ and in the nearby continuum.

Source code: ARGUS_1989_I276860.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief pi+- K+- K0S pbar spectra continuum and Upsilon 1s
 10  class ARGUS_1989_I276860 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1989_I276860);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22
 23      // Initialise and register projections
 24      declare(FinalState(), "FS");
 25      declare(UnstableParticles(), "UFS");
 26      // Book histograms
 27      book(_h_pi_ups1_p,  5, 1, 1);
 28      book(_h_pi_cont_p,  5, 1, 2);
 29      book(_h_pi_ups1_z,  9, 1, 1);
 30      book(_h_pi_cont_z,  9, 1, 2);
 31
 32      book(_h_Kp_ups1_p,  6, 1, 1);
 33      book(_h_Kp_cont_p,  6, 1, 2);
 34      book(_h_Kp_ups1_z, 10, 1, 1);
 35      book(_h_Kp_cont_z, 10, 1, 2);
 36
 37      book(_h_KS_ups1_p,  7, 1, 1);
 38      book(_h_KS_cont_p,  7, 1, 2);
 39      book(_h_KS_ups1_z, 11, 1, 1);
 40      book(_h_KS_cont_z, 11, 1, 2);
 41
 42      book(_h_pt_ups1_p,  8, 1, 1);
 43      book(_h_pt_cont_p,  8, 1, 2);
 44      book(_h_pt_ups1_z, 12, 1, 1);
 45      book(_h_pt_cont_z, 12, 1, 2);
 46
 47      // Counters
 48      book(_n_PiA,1,1,1);
 49      book(_n_PiB,1,1,2);
 50      book(_n_KS ,2,1,1);
 51      book(_n_Kp ,3,1,1);
 52      book(_n_ptA,4,1,1);
 53      book(_n_ptB,4,1,2);
 54      
 55      // weights
 56      book(_weightSum_cont,"/TMP/weightSum_cont");
 57      book(_weightSum_Ups1,"/TMP/weightSum_Ups1");
 58    }
 59
 60   /// Recursively walk the decay tree to find decay products of @a p
 61    void findDecayProducts(Particle mother, Particles& unstable) {
 62      for(const Particle & p: mother.children()) {
 63        const int id = abs(p.pid());
 64	if(id == 211 || id == 2212 || id == 310|| id==130 || id == 321) {
 65	  unstable.push_back(p);
 66	}
 67	if(!p.children().empty())
 68	  findDecayProducts(p, unstable);
 69      }
 70    }
 71
 72
 73    /// Perform the per-event analysis
 74    void analyze(const Event& event) {
 75      // Find the Upsilons among the unstables
 76      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 77      const FinalState & fs = apply<FinalState>(event, "FS");
 78      Particles upsilons = ufs.particles(Cuts::pid==553);
 79      // Continuum
 80      if (upsilons.empty()) {
 81        MSG_DEBUG("No Upsilons found => continuum event");
 82        _weightSum_cont->fill();
 83        // stable particles
 84        for (const Particle& p : fs.particles(Cuts::abspid==211 or Cuts::abspid==2212 or Cuts::abspid==321 )) {
 85          const int id = abs(p.pid());
 86          const double xE = 2.*p.E()/sqrtS();
 87          const double modp = p.p3().mod();
 88          const double beta = modp / p.E();
 89          int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
 90          if(id==211) {
 91            // not from K0S or Lambda decays
 92            if(idMom!=310 && idMom != 3122) {
 93              _h_pi_cont_p->fill(modp);
 94              _h_pi_cont_z->fill(xE  ,1./beta);
 95              _n_PiA->fill("9.98"s);
 96            }
 97            _n_PiB->fill("9.98"s);
 98          }
 99          else if(id==321) {
100            _h_Kp_cont_p->fill(modp);
101            _h_Kp_cont_z->fill(xE  ,1./beta);
102            _n_Kp->fill("9.98"s);
103          }
104          else if(id==2212) {
105            // not from K0S or Lambda decays
106            if(idMom!=310 && idMom != 3122) {
107              _h_pt_cont_p->fill(modp);
108              _h_pt_cont_z->fill(xE  ,1./beta);
109              _n_ptA->fill("9.98"s);
110            }
111            _n_ptB->fill("9.98"s);
112          }
113        }
114        // Unstable particles
115        for (const Particle& p : ufs.particles(Cuts::pid==310 || Cuts::pid==130)) {
116          const double xE = 2.*p.E()/sqrtS();
117          const double modp = p.p3().mod();
118          const double beta = modp / p.E();
119          _h_KS_cont_p->fill(modp);
120          _h_KS_cont_z->fill(xE  ,1./beta);
121          _n_KS->fill("9.98"s);
122        }
123      }
124      // Upsilon(s) found
125      else {
126        MSG_DEBUG("Upsilons found => resonance event");
127        for (const Particle& ups : upsilons) {
128          _weightSum_Ups1->fill();
129          Particles unstable;
130          // Find the decay products we want
131          findDecayProducts(ups, unstable);
132          LorentzTransform cms_boost;
133          if (ups.p3().mod() > 1*MeV)
134            cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
135          const double mass = ups.mass();
136          // loop over decay products
137          for(const Particle& p : unstable) {
138            const int id = abs(p.pid());
139            const FourMomentum p2 = cms_boost.transform(p.momentum());
140            const double xE = 2.*p2.E()/mass;
141            const double modp = p2.p3().mod();
142            const double beta = modp / p2.E();
143            int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
144            if(id==211) {
145              // not from K0S or Lambda decays
146              if(idMom!=310 && idMom != 3122) {
147        	_h_pi_ups1_p->fill(modp);
148        	_h_pi_ups1_z->fill(xE  ,1./beta);
149        	_n_PiA->fill("9.46"s);
150              }
151              _n_PiB->fill("9.46"s);
152            }
153            else if(id==321) {
154              _h_Kp_ups1_p->fill(modp);
155              _h_Kp_ups1_z->fill(xE  ,1./beta);
156              _n_Kp->fill("9.46"s);
157            }
158            else if(id==2212) {
159              // not from K0S or Lambda decays
160              if(idMom!=310 && idMom != 3122) {
161        	_h_pt_ups1_p->fill(modp);
162        	_h_pt_ups1_z->fill(xE  ,1./beta);
163        	_n_ptA->fill("9.46"s);
164              }
165              _n_ptB->fill("9.46"s);
166            }
167            else if(id==310 || id==130) {
168              _h_KS_ups1_p->fill(modp);
169              _h_KS_ups1_z->fill(xE  ,1./beta);
170              _n_KS->fill("9.46"s);
171            }
172          }
173        }
174      }
175    }
176
177
178    /// Normalise histograms etc., after the run
179    void finalize() {
180      // Scale histos
181      if (_weightSum_cont->val() > 0.) {
182	scale(_h_pi_cont_p, 1./ *_weightSum_cont);
183	scale(_h_Kp_cont_p, 1./ *_weightSum_cont);
184	scale(_h_KS_cont_p, 1./ *_weightSum_cont);
185	scale(_h_pt_cont_p, 1./ *_weightSum_cont);
186	scale(_h_pi_cont_z, 1./ *_weightSum_cont);
187	scale(_h_Kp_cont_z, 1./ *_weightSum_cont);
188	scale(_h_KS_cont_z, 1./ *_weightSum_cont);
189	scale(_h_pt_cont_z, 1./ *_weightSum_cont);
190
191      }
192      if (_weightSum_Ups1->val() > 0.) {
193	scale(_h_pi_ups1_p, 1./ *_weightSum_Ups1);
194	scale(_h_Kp_ups1_p, 1./ *_weightSum_Ups1);
195	scale(_h_KS_ups1_p, 1./ *_weightSum_Ups1);
196	scale(_h_pt_ups1_p, 1./ *_weightSum_Ups1);
197	scale(_h_pi_ups1_z, 1./ *_weightSum_Ups1);
198	scale(_h_Kp_ups1_z, 1./ *_weightSum_Ups1);
199	scale(_h_KS_ups1_z, 1./ *_weightSum_Ups1);
200	scale(_h_pt_ups1_z, 1./ *_weightSum_Ups1);
201      }
202      // Counters
203      vector<CounterPtr> scales = {_weightSum_Ups1,_weightSum_cont};
204      vector<string> labels={"9.46","9.98"};
205      for (unsigned int ix=0;ix<2;++ix) {
206        _n_PiA->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
207        _n_PiB->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
208        _n_Kp->binAt(labels[ix] ).scaleW(1./ scales[ix]->val());
209        _n_KS->binAt(labels[ix] ).scaleW(1./ scales[ix]->val());
210        _n_ptA->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
211        _n_ptB->binAt(labels[ix]).scaleW(1./ scales[ix]->val());
212      }
213    }
214
215    /// @}
216
217
218    /// @name Histograms
219    /// @{
220    Histo1DPtr _h_pi_ups1_p, _h_pi_cont_p, _h_pi_ups1_z, _h_pi_cont_z;
221    Histo1DPtr _h_Kp_ups1_p, _h_Kp_cont_p, _h_Kp_ups1_z, _h_Kp_cont_z;
222    Histo1DPtr _h_KS_ups1_p, _h_KS_cont_p, _h_KS_ups1_z, _h_KS_cont_z;
223    Histo1DPtr _h_pt_ups1_p, _h_pt_cont_p, _h_pt_ups1_z, _h_pt_cont_z;
224
225      // Counters
226    BinnedHistoPtr<string> _n_PiA, _n_PiB, _n_Kp, _n_KS, _n_ptA,_n_ptB;
227    CounterPtr _weightSum_cont,_weightSum_Ups1;
228    /// @}
229
230  };
231
232
233  RIVET_DECLARE_PLUGIN(ARGUS_1989_I276860);
234
235}