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],"/TMP/PiACont");
 49      book(_n_PiA[0],"/TMP/PiAUps1");
 50      book(_n_PiB[1],"/TMP/PiBCont");
 51      book(_n_PiB[0],"/TMP/PiBUps1");
 52      book(_n_Kp[1] ,"/TMP/KpCont");
 53      book(_n_Kp[0] ,"/TMP/KpUps1");
 54      book(_n_KS[1] ,"/TMP/KSCont");
 55      book(_n_KS[0] ,"/TMP/KSUps1");
 56      book(_n_ptA[1],"/TMP/ptACont");
 57      book(_n_ptA[0],"/TMP/ptAUps1");
 58      book(_n_ptB[1],"/TMP/ptBCont");
 59      book(_n_ptB[0],"/TMP/ptBUps1");
 60      // weights
 61      book(_weightSum_cont,"/TMP/weightSum_cont");
 62      book(_weightSum_Ups1,"/TMP/weightSum_Ups1");
 63    }
 64
 65   /// Recursively walk the decay tree to find decay products of @a p
 66    void findDecayProducts(Particle mother, Particles& unstable) {
 67      for(const Particle & p: mother.children()) {
 68        const int id = abs(p.pid());
 69	if(id == 211 || id == 2212 || id == 310|| id==130 || id == 321) {
 70	  unstable.push_back(p);
 71	}
 72	if(!p.children().empty())
 73	  findDecayProducts(p, unstable);
 74      }
 75    }
 76
 77
 78    /// Perform the per-event analysis
 79    void analyze(const Event& event) {
 80      // Find the Upsilons among the unstables
 81      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 82      const FinalState & fs = apply<FinalState>(event, "FS");
 83      Particles upsilons = ufs.particles(Cuts::pid==553);
 84      // Continuum
 85      if (upsilons.empty()) {
 86        MSG_DEBUG("No Upsilons found => continuum event");
 87        _weightSum_cont->fill();
 88	// stable particles
 89        for (const Particle& p : fs.particles(Cuts::abspid==211 or Cuts::abspid==2212 or Cuts::abspid==321 )) {
 90          const int id = abs(p.pid());
 91          const double xE = 2.*p.E()/sqrtS();
 92	  const double modp = p.p3().mod();
 93          const double beta = modp / p.E();
 94	  int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
 95	  if(id==211) {
 96	    // not from K0S or Lambda decays
 97	    if(idMom!=310 && idMom != 3122) {
 98	      _h_pi_cont_p->fill(modp);
 99	      _h_pi_cont_z->fill(xE  ,1./beta);
100	      _n_PiA[1]->fill();
101	    }
102	    _n_PiB[1]->fill();
103	  }
104	  else if(id==321) {
105	    _h_Kp_cont_p->fill(modp);
106	    _h_Kp_cont_z->fill(xE  ,1./beta);
107	    _n_Kp[1]->fill();
108	  }
109	  else if(id==2212) {
110	    // not from K0S or Lambda decays
111	    if(idMom!=310 && idMom != 3122) {
112	      _h_pt_cont_p->fill(modp);
113	      _h_pt_cont_z->fill(xE  ,1./beta);
114	      _n_ptA[1]->fill();
115	    }
116	    _n_ptB[1]->fill();
117	  }
118	}
119	// Unstable particles
120        for (const Particle& p : ufs.particles(Cuts::pid==310 || Cuts::pid==130)) {
121          const double xE = 2.*p.E()/sqrtS();
122	  const double modp = p.p3().mod();
123          const double beta = modp / p.E();
124	  _h_KS_cont_p->fill(modp);
125	  _h_KS_cont_z->fill(xE  ,1./beta);
126	  _n_KS[1]->fill();
127	}
128      }
129      // Upsilon(s) found
130      else {
131        MSG_DEBUG("Upsilons found => resonance event");
132        for (const Particle& ups : upsilons) {
133	  _weightSum_Ups1->fill();
134          Particles unstable;
135          // Find the decay products we want
136          findDecayProducts(ups, unstable);
137          LorentzTransform cms_boost;
138          if (ups.p3().mod() > 1*MeV)
139            cms_boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
140          const double mass = ups.mass();
141	  // loop over decay products
142          for(const Particle& p : unstable) {
143	    const int id = abs(p.pid());
144            const FourMomentum p2 = cms_boost.transform(p.momentum());
145	    const double xE = 2.*p2.E()/mass;
146	    const double modp = p2.p3().mod();
147	    const double beta = modp / p2.E();
148	    int idMom = !p.parents().empty() ? abs(p.parents()[0].pid()) : 0;
149	    if(id==211) {
150	      // not from K0S or Lambda decays
151	      if(idMom!=310 && idMom != 3122) {
152		_h_pi_ups1_p->fill(modp);
153		_h_pi_ups1_z->fill(xE  ,1./beta);
154		_n_PiA[0]->fill();
155	      }
156	      _n_PiB[0]->fill();
157	    }
158	    else if(id==321) {
159	      _h_Kp_ups1_p->fill(modp);
160	      _h_Kp_ups1_z->fill(xE  ,1./beta);
161	      _n_Kp[0]->fill();
162	    }
163	    else if(id==2212) {
164	      // not from K0S or Lambda decays
165	      if(idMom!=310 && idMom != 3122) {
166		_h_pt_ups1_p->fill(modp);
167		_h_pt_ups1_z->fill(xE  ,1./beta);
168		_n_ptA[0]->fill();
169	      }
170	      _n_ptB[0]->fill();
171	    }
172	    else if(id==310 || id==130) {
173	      _h_KS_ups1_p->fill(modp);
174	      _h_KS_ups1_z->fill(xE  ,1./beta);
175	      _n_KS[0]->fill();
176	    }
177	  }
178	}
179      }
180    }
181
182
183    /// Normalise histograms etc., after the run
184    void finalize() {
185      // Scale histos
186      if (_weightSum_cont->val() > 0.) {
187	scale(_h_pi_cont_p, 1./ *_weightSum_cont);
188	scale(_h_Kp_cont_p, 1./ *_weightSum_cont);
189	scale(_h_KS_cont_p, 1./ *_weightSum_cont);
190	scale(_h_pt_cont_p, 1./ *_weightSum_cont);
191	scale(_h_pi_cont_z, 1./ *_weightSum_cont);
192	scale(_h_Kp_cont_z, 1./ *_weightSum_cont);
193	scale(_h_KS_cont_z, 1./ *_weightSum_cont);
194	scale(_h_pt_cont_z, 1./ *_weightSum_cont);
195
196      }
197      if (_weightSum_Ups1->val() > 0.) {
198	scale(_h_pi_ups1_p, 1./ *_weightSum_Ups1);
199	scale(_h_Kp_ups1_p, 1./ *_weightSum_Ups1);
200	scale(_h_KS_ups1_p, 1./ *_weightSum_Ups1);
201	scale(_h_pt_ups1_p, 1./ *_weightSum_Ups1);
202	scale(_h_pi_ups1_z, 1./ *_weightSum_Ups1);
203	scale(_h_Kp_ups1_z, 1./ *_weightSum_Ups1);
204	scale(_h_KS_ups1_z, 1./ *_weightSum_Ups1);
205	scale(_h_pt_ups1_z, 1./ *_weightSum_Ups1);
206      }
207      // Counters
208      Estimate1DPtr nPiA;
209      book(nPiA, 1, 1, 1);
210      Estimate1DPtr nPiB;
211      book(nPiB, 1, 1, 2);
212      Estimate1DPtr nKS ;
213      book(nKS, 2, 1, 1);
214      Estimate1DPtr nKp ;
215      book(nKp,3, 1, 1);
216      Estimate1DPtr nptA;
217      book(nptA,4, 1, 1);
218      Estimate1DPtr nptB;
219      book(nptB,4, 1, 2);
220      vector<CounterPtr> scales = {_weightSum_Ups1,_weightSum_cont};
221      for (unsigned int ix=0;ix<2;++ix) {
222        scale(_n_PiA[ix],1./ *scales[ix]);
223        nPiA->bin(ix+1).set(_n_PiA[ix]->val(),_n_PiA[ix]->err());
224        scale(_n_PiB[ix],1./ *scales[ix]);
225        nPiB->bin(ix+1).set(_n_PiB[ix]->val(),_n_PiB[ix]->err());
226        scale(_n_Kp[ix] ,1./ *scales[ix]);
227        nKp->bin(ix+1).set(_n_Kp[ix]->val(),_n_Kp[ix]->err());
228        scale(_n_KS[ix] ,1./ *scales[ix]);
229        nKS->bin(ix+1).set(_n_KS[ix]->val(),_n_KS[ix]->err());
230        scale(_n_ptA[ix],1./ *scales[ix]);
231        nptA->bin(ix+1).set(_n_ptA[ix]->val(),_n_ptA[ix]->err());
232        scale(_n_ptB[ix],1./ *scales[ix]);
233        nptB->bin(ix+1).set(_n_ptB[ix]->val(),_n_ptB[ix]->err());
234      }
235    }
236
237    /// @}
238
239
240    /// @name Histograms
241    /// @{
242    Histo1DPtr _h_pi_ups1_p, _h_pi_cont_p, _h_pi_ups1_z, _h_pi_cont_z;
243    Histo1DPtr _h_Kp_ups1_p, _h_Kp_cont_p, _h_Kp_ups1_z, _h_Kp_cont_z;
244    Histo1DPtr _h_KS_ups1_p, _h_KS_cont_p, _h_KS_ups1_z, _h_KS_cont_z;
245    Histo1DPtr _h_pt_ups1_p, _h_pt_cont_p, _h_pt_ups1_z, _h_pt_cont_z;
246
247      // Counters
248    CounterPtr _n_PiA[2], _n_PiB[2], _n_Kp[2], _n_KS[2], _n_ptA[2],_n_ptB[2];
249    CounterPtr _weightSum_cont,_weightSum_Ups1;
250    /// @}
251
252  };
253
254
255  RIVET_DECLARE_PLUGIN(ARGUS_1989_I276860);
256
257}