rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEOC_2005_I654529

Cross sections for exclusive hadronic processes in $e^+e^-$ collisions at $\sqrt{s}=3.67$
Experiment: CLEOC (CESR)
Inspire ID: 654529
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 94 (2005) 012005
Beams: e+ e-
Beam energies: (1.8, 1.8) GeV
Run details:
  • e+ e- > hadrons, pi0 and KS) set stable

Cross sections for $e^+e^-\to\pi^+\pi^-\pi^0$, $\rho\pi$, $\omega\pi$, $\phi\pi$, $\rho\eta$, $\omega\eta$, $K^{*0}\bar{K}^0$ and $K^{*+}K^-$ at $\sqrt{s}=3.67$

Source code: CLEOC_2005_I654529.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 e+e- > hadrons at 3.67
 10  class CLEOC_2005_I654529 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CLEOC_2005_I654529);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projection
 23      declare(FinalState(), "FS");
 24      declare(UnstableParticles(), "UFS");
 25      // histos
 26      for (unsigned int ix=0; ix<14; ++ix) {
 27        book(_h[ix], 1, 1, 1+ix);
 28      }
 29    }
 30
 31    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 32      for (const Particle &child : p.children()) {
 33        if (child.children().empty()) {
 34          --nRes[child.pid()];
 35          --ncount;
 36        }
 37        else {
 38          findChildren(child,nRes,ncount);
 39        }
 40      }
 41    }
 42
 43    /// Perform the per-event analysis
 44    void analyze(const Event& event) {
 45      // final state particles
 46      const FinalState& fs = apply<FinalState>(event, "FS");
 47      map<long,int> nCount;
 48      int ntotal(0);
 49      for (const Particle& p : fs.particles()) {
 50      	nCount[p.pid()] += 1;
 51      	++ntotal;
 52      }
 53      if (ntotal==3 && nCount[111]==1 && nCount[211]==1 && nCount[-211]==1) {
 54        _h[0]->fill("3.67"s);
 55      }
 56      // unstable particles
 57      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 58      // first the omega, rho, phi  and b_10 pi0 final state
 59      bool matched=false;
 60      for (const Particle& p : ufs.particles(Cuts::pid==113 ||
 61					     Cuts::pid==223 ||
 62					     Cuts::pid==333 ||
 63					     Cuts::pid==10113)) {
 64       	if (p.children().empty()) continue;
 65        map<long,int> nRes = nCount;
 66        int ncount = ntotal;
 67        findChildren(p,nRes,ncount);
 68        if (ncount==1) {
 69          matched=true;
 70          for (const auto& val : nRes) {
 71            if (val.first==111) {
 72              if (val.second !=1) {
 73                matched = false;
 74                break;
 75              }
 76            }
 77            else if(val.second!=0) {
 78              matched = false;
 79              break;
 80            }
 81          }
 82          if (matched) {
 83            if (p.pid()==113) {
 84              _h[1]->fill("3.67"s);
 85              _h[2]->fill("3.67"s);
 86            }
 87            else if (p.pid()==223) _h[4]->fill("3.67"s);
 88            else if (p.pid()==333) _h[5]->fill("3.67"s);
 89            else if (p.pid()==10113) {
 90              _h[11]->fill("3.67"s);
 91              _h[12]->fill("3.67"s);
 92            }
 93            break;
 94          }
 95        }
 96        else if (p.pid()!=10113) {
 97          // check for eta
 98          for (const Particle& p2 : ufs.particles(Cuts::pid==221)) {
 99            map<long,int> nResB = nRes;
100            int ncountB = ncount;
101            findChildren(p2,nResB,ncountB);
102            if (ncountB!=0) continue;
103            matched = true;
104            for (const auto& val : nResB) {
105              if (val.second!=0) {
106                matched = false;
107                break;
108              }
109            }
110            if (matched) {
111              if     (p.pid()==113) _h[6]->fill("3.67"s);
112              else if(p.pid()==223) _h[7]->fill("3.67"s);
113              else if(p.pid()==333) _h[8]->fill("3.67"s);
114              break;
115            }
116          }
117        }
118      }
119      if (matched) return;
120      // rho+- b1+- pi-+
121      for (const Particle& p : ufs.particles(Cuts::abspid==213 ||
122					     Cuts::abspid==10213)) {
123       	if (p.children().empty()) continue;
124        map<long,int> nRes = nCount;
125        int ncount = ntotal;
126        findChildren(p,nRes,ncount);
127        if(ncount!=1) continue;
128        int sign = - p.pid()/p.abspid();
129        matched=true;
130        for (const auto& val : nRes) {
131          if (val.first==sign*211 ) {
132            if (val.second !=1) {
133              matched = false;
134              break;
135            }
136          }
137          else if(val.second!=0) {
138            matched = false;
139            break;
140          }
141        }
142        if (matched) {
143          if (p.abspid()==213) {
144            _h[1]->fill("3.67"s);
145            _h[3]->fill("3.67"s);
146          }
147          else  {
148            _h[11]->fill("3.67"s);
149            _h[13]->fill("3.67"s);
150          }
151          break;
152        }
153      }
154      if (matched) return;
155      // K* K
156      for (const Particle& p : ufs.particles(Cuts::abspid==313 || Cuts::abspid==323)) {
157       	if (p.children().empty()) continue;
158       	map<long,int> nRes = nCount;
159      	int ncount = ntotal;
160       	findChildren(p,nRes,ncount);
161       	if (ncount!=1) continue;
162        int iMeson=0;
163        int iStable=0;
164       	for (const auto& val : nRes) {
165       	  if (val.second==1) {
166            iStable+=1;
167            iMeson=val.first;
168       	  }
169          else if (val.second!=0) {
170       	    matched = false;
171       	    break;
172      	  }
173      	}
174        if (iStable==1) {
175          if (p.abspid()==313 || (iMeson==310 || iMeson==130)) {
176            _h[9]->fill("3.67"s);
177            break;
178          }
179          else if (p.abspid()==323 and abs(iMeson)==321 && p.pid()*iMeson<0) {
180            _h[10]->fill("3.67"s);
181            break;
182          }
183          matched=false;
184        }
185        else {
186          matched=false;
187        }
188      }
189    }
190
191
192    /// Normalise histograms etc., after the run
193    void finalize() {
194      scale(_h, crossSection()/picobarn/sumOfWeights());
195    }
196
197    /// @}
198
199
200    /// @name Histograms
201    /// @{
202    BinnedHistoPtr<string> _h[14];
203    /// @}
204
205
206  };
207
208
209  RIVET_DECLARE_PLUGIN(CLEOC_2005_I654529);
210}