rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEO_1985_I205668

Identified Particle Spectra and rates in $\Upsilon(1S)$ decays and continumm at 10.49 GeV
Experiment: CLEO (CESR)
Inspire ID: 205668
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D31 (1985) 2161
Beams: e+ e-
Beam energies: (4.7, 4.7); (5.2, 5.2) GeV
Run details:
  • e+e- > hadrons at Upslion1s and 10.49 GeV

Spectra and rates for $\pi^\pm$, $K^\pm$, $\pi^0$, $K^0$, $\Lambda$, $\Xi^-$, $\rho^0$, $K^{*\pm}$, $K^{*0}$ and $\phi$ production in $\Upsilon(1S)$ decays and continumm at 10.49 GeV.

Source code: CLEO_1985_I205668.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 
 10  class CLEO_1985_I205668 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_1985_I205668);
 15
 16
 17    /// @name Analysis methods
 18    ///@{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projections
 23      declare(FinalState(), "FS");
 24      declare(UnstableParticles(), "UFS");
 25      // histos
 26      book(_weightSum_cont,"TMP/weightSumcont");
 27      book(_weightSum_Ups1,"TMP/weightSumUps1");
 28      // multiplcities
 29      for(unsigned int ix=0;ix<2;++ix) {
 30	for(unsigned int iy=0;iy<12;++iy) {
 31	  std::ostringstream title;
 32	  title << "/TMP/MULT_" << ix << "_" << iy;
 33	  book(_mult[ix][iy],title.str());
 34	}
 35      }
 36      // cont spectra
 37      book(_h_cont_pip   , 1,1,1);
 38      book(_h_cont_Kp    , 2,1,1);
 39      book(_h_cont_p     , 3,1,1);
 40      book(_h_cont_pi0   , 4,1,1);
 41      book(_h_cont_K0    , 5,1,1);
 42      book(_h_cont_lam   , 6,1,1);
 43      book(_h_cont_xi    , 7,1,1);
 44      book(_h_cont_rho   , 8,1,1);
 45      book(_h_cont_Kstarp, 9,1,1);
 46      book(_h_cont_Kstar0,10,1,1);
 47      book(_h_cont_phi   ,11,1,1);
 48      // ups spectra
 49      book(_h_ups1_pip   , 1,1,2);
 50      book(_h_ups1_Kp    , 2,1,2);
 51      book(_h_ups1_p     , 3,1,2);
 52      book(_h_ups1_pi0   , 4,1,2);
 53      book(_h_ups1_K0    , 5,1,2);
 54      book(_h_ups1_lam   , 6,1,2);
 55      book(_h_ups1_xi    , 7,1,2);
 56      book(_h_ups1_rho   , 8,1,2);
 57      book(_h_ups1_Kstarp, 9,1,2);
 58      book(_h_ups1_Kstar0,10,1,2);
 59      book(_h_ups1_phi   ,11,1,2);
 60    }
 61    
 62    /// Recursively walk the decay tree to find decay products of @a p
 63    void findDecayProducts(Particle mother, Particles& unstable) {
 64      for(const Particle & p: mother.children()) {
 65        const int id = p.abspid();
 66	if (id == PID::PIPLUS || id==PID::KPLUS   || id==PID::PROTON ||
 67	    id==PID::PI0      || id==PID::K0S     || id==PID::K0L    ||
 68	    id==PID::LAMBDA   || id==PID::XIMINUS || id==PID::RHO0   ||
 69	    id==323 || id==313 || id==225 || id==PID::PHI) {
 70	  unstable.push_back(p);
 71	}
 72	if(!p.children().empty())
 73	  findDecayProducts(p, unstable);
 74      }
 75    }
 76    
 77    /// Perform the per-event analysis
 78    void analyze(const Event& event) {
 79      // Find the upsilons
 80      // First in unstable final state
 81      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 82      Particles upsilons = ufs.particles(Cuts::pid==553);
 83      // continuum
 84      if (upsilons.empty()) { 
 85        _weightSum_cont->fill();
 86	const FinalState & fs = apply<FinalState>(event, "FS");
 87	// FS particles
 88        for (const Particle& p : fs.particles()) {
 89          int id = p.abspid();
 90          double xp = 2.*p.p3().mod()/sqrtS();
 91	  if(id==PID::PIPLUS) {
 92	    _h_cont_pip->fill(xp);
 93	    _mult[1][0]->fill();
 94	  }
 95	  else if(id==PID::KPLUS) {
 96	    _h_cont_Kp->fill(xp);
 97	    _mult[1][1]->fill();
 98	  }
 99	  else if(id==PID::PROTON) {
100	    _h_cont_p->fill(xp);
101	    _mult[1][2]->fill();
102	  }
103	}
104	// Unstable particles
105        for (const Particle& p : ufs.particles()) {
106          int id = p.abspid();
107          double xp = 2.*p.p3().mod()/sqrtS();
108	  if(id==PID::PI0) {
109	    _h_cont_pi0->fill(xp);
110	    _mult[1][3]->fill();
111	  }
112	  else if(id==PID::K0S || id==PID::K0L) {
113	    _h_cont_K0->fill(xp);
114	    _mult[1][4]->fill();
115	  }
116	  else if(id==PID::LAMBDA) {
117	    _h_cont_lam->fill(xp);
118	    _mult[1][5]->fill();
119	  }
120	  else if(id==PID::XIMINUS) {
121	    _h_cont_xi->fill(xp);
122	    _mult[1][6]->fill();
123	  }
124	  else if(id==PID::RHO0) {
125	    _h_cont_rho->fill(xp);
126	    _mult[1][7]->fill();
127	  }
128	  else if(id==323) {
129	    _h_cont_Kstarp->fill(xp);
130	    _mult[1][8]->fill();
131	  }
132	  else if(id==313) {
133	    _h_cont_Kstar0->fill(xp);
134	    _mult[1][9]->fill();
135	  }
136	  else if(id==PID::PHI) {
137	    _h_cont_phi->fill(xp);
138	    _mult[1][10]->fill();
139	  }
140	  else if(id==225) {
141	    _mult[1][11]->fill();
142	  }
143	}
144      }
145      else {
146        for (const Particle& ups : upsilons) {
147	  _weightSum_Ups1->fill();
148          Particles unstable;
149	  LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(ups.momentum().betaVec());
150          // Find the decay products we want
151          findDecayProducts(ups,unstable);
152	  for(const Particle & p : unstable)  {
153	    int id = p.abspid();
154	    double xp = 2.*boost.transform(p.momentum()).p3().mod()/ups.mass();
155	    if(id==PID::PIPLUS) {
156	      _h_ups1_pip->fill(xp);
157	      _mult[0][0]->fill();
158	    }
159	    else if(id==PID::KPLUS) {
160	      _h_ups1_Kp->fill(xp);
161	      _mult[0][1]->fill();
162	    }
163	    else if(id==PID::PROTON) {
164	      _h_ups1_p->fill(xp);
165	      _mult[0][2]->fill();
166	    }
167	    else if(id==PID::PI0) {
168	      _h_ups1_pi0->fill(xp);
169	      _mult[0][3]->fill();
170	    }
171	    else if(id==PID::K0S || id==PID::K0L) {
172	      _h_ups1_K0->fill(xp);
173	      _mult[0][4]->fill();
174	    }
175	    else if(id==PID::LAMBDA) {
176	      _h_ups1_lam->fill(xp);
177	      _mult[0][5]->fill();
178	    }
179	    else if(id==PID::XIMINUS) {
180	      _h_ups1_xi->fill(xp);
181	      _mult[0][6]->fill();
182	    }
183	    else if(id==PID::RHO0) {
184	      _h_ups1_rho->fill(xp);
185	      _mult[0][7]->fill();
186	    }
187	    else if(id==323) {
188	      _h_ups1_Kstarp->fill(xp);
189	      _mult[0][8]->fill();
190	    }
191	    else if(id==313) {
192	      _h_ups1_Kstar0->fill(xp);
193	      _mult[0][9]->fill();
194	    }
195	    else if(id==PID::PHI) {
196	      _h_ups1_phi->fill(xp);
197	      _mult[0][10]->fill();
198	    }
199	    else if(id==225) {
200	      _mult[0][11]->fill();
201	    }
202	  }
203	}
204      }
205    }
206
207
208    /// Normalise histograms etc., after the run
209    void finalize() {
210      // multiplicities
211      vector<CounterPtr> scales = {_weightSum_Ups1,_weightSum_cont};
212      for(unsigned int ix=0;ix<12;++ix) {
213	Scatter2DPtr scatter;
214	book(scatter,ix+12, 1, 1, true);
215	for(unsigned int iy=0;iy<2;++iy) {
216	  if(scales[iy]->val() <= 0.) {
217	    scatter->point(iy).setY(0.,0.);
218	  }
219	  else {
220	    scale(_mult[iy][ix],1./ *scales[iy]);
221	    scatter->point(iy).setY(_mult[iy][ix]->val(),_mult[iy][ix]->err());
222	  }
223	}
224      }
225      // spectra
226      if (_weightSum_cont->val() > 0.) {
227        scale(_h_cont_pip   , 1. / *_weightSum_cont);
228        scale(_h_cont_Kp    , 1. / *_weightSum_cont);
229        scale(_h_cont_p     , 1. / *_weightSum_cont);
230        scale(_h_cont_pi0   , 1. / *_weightSum_cont);
231        scale(_h_cont_K0    , 1. / *_weightSum_cont);
232        scale(_h_cont_lam   , 1. / *_weightSum_cont);
233        scale(_h_cont_xi    , 1. / *_weightSum_cont);
234        scale(_h_cont_rho   , 1. / *_weightSum_cont);
235        scale(_h_cont_Kstarp, 1. / *_weightSum_cont);
236        scale(_h_cont_Kstar0, 1. / *_weightSum_cont);
237        scale(_h_cont_phi   , 1. / *_weightSum_cont);
238      }
239      if (_weightSum_Ups1->val() > 0.) {
240        scale(_h_ups1_pip   , 1. / *_weightSum_Ups1);
241        scale(_h_ups1_Kp    , 1. / *_weightSum_Ups1);
242        scale(_h_ups1_p     , 1. / *_weightSum_Ups1);
243        scale(_h_ups1_pi0   , 1. / *_weightSum_Ups1);
244        scale(_h_ups1_K0    , 1. / *_weightSum_Ups1);
245        scale(_h_ups1_lam   , 1. / *_weightSum_Ups1);
246        scale(_h_ups1_xi    , 1. / *_weightSum_Ups1);
247        scale(_h_ups1_rho   , 1. / *_weightSum_Ups1);
248        scale(_h_ups1_Kstarp, 1. / *_weightSum_Ups1);
249        scale(_h_ups1_Kstar0, 1. / *_weightSum_Ups1);
250        scale(_h_ups1_phi   , 1. / *_weightSum_Ups1);
251      }
252    }
253
254    ///@}
255
256
257    /// @name Histograms
258    ///@{
259    Histo1DPtr _h_cont_pip,_h_cont_Kp,_h_cont_p,_h_cont_pi0,_h_cont_K0,_h_cont_lam,
260      _h_cont_xi,_h_cont_rho,_h_cont_Kstarp,_h_cont_Kstar0,_h_cont_phi;
261    Histo1DPtr _h_ups1_pip,_h_ups1_Kp,_h_ups1_p,_h_ups1_pi0,_h_ups1_K0,_h_ups1_lam,
262      _h_ups1_xi,_h_ups1_rho,_h_ups1_Kstarp,_h_ups1_Kstar0,_h_ups1_phi;
263    CounterPtr _weightSum_cont,_weightSum_Ups1;
264    CounterPtr _mult[2][12];
265    ///@}
266
267
268  };
269
270
271  RIVET_DECLARE_PLUGIN(CLEO_1985_I205668);
272
273}