rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CLEO_2006_I691720

Cross section for light hadron production at 3.671 and 3.773 GeV
Experiment: CLEO (CESR)
Inspire ID: 691720
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D73 (2006) 012002, 2006
Beams: e+ e-
Beam energies: (1.8, 1.8); (1.9, 1.9) GeV
Run details:
  • e+e- to hadrons

Cross section for $e^+e^-\to \pi^+\pi^-\pi^0$, $\rho^0\pi^0$, $\rho^\pm\pi^\mp$, $\omega\pi^0$, $\rho^0\eta$, $\omega\eta$, $\phi\eta$, $\rho^0\eta^\prime$, $\omega\eta^\prime$, $\phi\eta^\prime$, $K^{*0}\bar{K}^{*0}$, $K^{*\pm} K^\mp$, $b_1^0\pi^0$, $b_1^\pm\pi^\mp$ at 3.671 and 3.773 GeV Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples

Source code: CLEO_2006_I691720.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FastJets.hh"
  4#include "Rivet/Projections/UnstableParticles.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief e+ e- -> hadrons
 10  class CLEO_2006_I691720 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_2006_I691720);
 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
 27      // Book histograms
 28      for(unsigned int ix=1;ix<18;++ix) {
 29        if(ix==6||ix==16) continue;
 30	book(_nMeson[ix], 1,1,ix);
 31      }
 32      for (const string& en : _nMeson[1].binning().edges<0>()) {
 33        double end = std::stod(en)*GeV;
 34        if(isCompatibleWithSqrtS(end)) {
 35          _ecms = en;
 36          break;
 37        }
 38      }
 39      if(_ecms.empty()) MSG_ERROR("Beam energy incompatible with analysis.");
 40    }
 41
 42    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 43      for (const Particle &child : p.children()) {
 44	if(child.children().empty()) {
 45	  nRes[child.pid()]-=1;
 46	  --ncount;
 47	}
 48	else
 49	  findChildren(child,nRes,ncount);
 50      }
 51    }
 52
 53    /// Perform the per-event analysis
 54    void analyze(const Event& event) {
 55      const FinalState& fs = apply<FinalState>(event, "FS");
 56
 57      map<long,int> nCount;
 58      int ntotal(0);
 59      for (const Particle& p : fs.particles()) {
 60	nCount[p.pid()] += 1;
 61	++ntotal;
 62      }
 63      if(ntotal==3) {
 64	if(nCount[211]==1 && nCount[-211]==1 && nCount[111]==1)
 65	  _nMeson[1]->fill(_ecms);
 66      }
 67      const FinalState& ufs = apply<FinalState>(event, "UFS");
 68      for(unsigned int ix=0;ix<ufs.particles().size();++ix) {
 69	const Particle& p1 = ufs.particles()[ix];
 70       	if(p1.children().empty()) continue;
 71       	if(p1.pid()!=113 && abs(p1.pid())!=313) continue;
 72     	map<long,int> nRes = nCount;
 73     	int ncount = ntotal;
 74     	findChildren(p1,nRes,ncount);
 75      	if(p1.pid()==113 || p1.pid()==223 || p1.pid()==10113) {
 76	  if(ncount!=1) continue;
 77	  bool matched = true;
 78	  for(auto const & val : nRes) {
 79	    if(abs(val.first)==111 && val.second!=1) {
 80	      matched = false;
 81	      break;
 82	    }
 83       	    else if(val.second!=0) {
 84       	      matched = false;
 85       	      break;
 86       	    }
 87	  }
 88       	  if(matched) {
 89	    if(p1.pid()==113) {
 90	      _nMeson[2]->fill(_ecms);
 91	      _nMeson[3]->fill(_ecms);
 92	    }
 93	    else if(p1.pid()==223) {
 94	      _nMeson[5]->fill(_ecms);
 95	    }
 96	    else if(p1.pid()==10113) {
 97	      _nMeson[15]->fill(_ecms);
 98	    }
 99	  }
100	}
101      	else if(p1.pid()==abs(113) || abs(p1.pid())==10113) {
102	  if(ncount!=1) continue;
103	  bool matched = true;
104	  int ipi = p1.pid()>0 ? -211 : 211;
105	  for(auto const & val : nRes) {
106	    if(abs(val.first)==ipi && val.second!=1) {
107	      matched = false;
108	      break;
109	    }
110       	    else if(val.second!=0) {
111       	      matched = false;
112       	      break;
113       	    }
114	  }
115       	  if(matched) {
116	    if(p1.pid()==abs(113)) {
117	      _nMeson[2]->fill(_ecms);
118	      _nMeson[4]->fill(_ecms);
119	    }
120	    else {
121	      _nMeson[15]->fill(_ecms);
122	      _nMeson[17]->fill(_ecms);
123	    }
124	  }
125	}
126      	else if(p1.pid()==abs(323)) {
127	  if(ncount!=1) continue;
128	  bool matched = true;
129	  int iK = p1.pid()==323 ? -321 : 321;
130	  for(auto const & val : nRes) {
131	    if(abs(val.first)==iK && val.second!=1) {
132	      matched = false;
133	      break;
134	    }
135       	    else if(val.second!=0) {
136       	      matched = false;
137       	      break;
138       	    }
139	  }
140       	  if(matched) {
141	    if(_ecms=="3.671"s) _nMeson[14]->fill(_ecms);
142	  }
143	}
144	// second unstable particle
145	if(abs(p1.pid())!=313 && p1.pid()!=113 && p1.pid()!=223 &&
146	   p1.pid()!=333 && p1.pid()!=221 && p1.pid()!=331)
147	  continue;
148	for(unsigned int iy=ix+1;iy<ufs.particles().size();++iy) {
149	  const Particle& p2 = ufs.particles()[iy];
150	  map<long,int> nRes2 = nRes;
151	  int ncount2 = ncount;
152	  findChildren(p2,nRes2,ncount2);
153	  if(ncount!=0) continue;
154	  bool matched=true;
155	  for(auto const & val : nRes2) {
156	    if(val.second!=0) {
157	      matched = false;
158	      break;
159	    }
160	  }
161	  if(!matched) continue;
162	  if( (p1.pid()==113 && p2.pid()==221) ||
163	      (p2.pid()==113 && p1.pid()==221) )
164	    _nMeson[7]->fill(_ecms);
165	  else if( (p1.pid()==223 && p2.pid()==221) ||
166		   (p2.pid()==223 && p1.pid()==221) )
167	    _nMeson[8]->fill(_ecms);
168	  else if( (p1.pid()==333 && p2.pid()==221) ||
169		   (p2.pid()==333 && p1.pid()==221) )
170	    _nMeson[9]->fill(_ecms);
171	  else  if( (p1.pid()==113 && p2.pid()==331) ||
172		    (p2.pid()==113 && p1.pid()==331) )
173	    _nMeson[10]->fill(_ecms);
174	  else  if( (p1.pid()==223 && p2.pid()==331) ||
175		    (p2.pid()==223 && p1.pid()==331) ) {
176	    if(_ecms=="3.773"s)_nMeson[11]->fill(_ecms);
177          }
178	  else  if( (p1.pid()==333 && p2.pid()==331) ||
179		    (p2.pid()==333 && p1.pid()==331) ) {
180	    if(_ecms=="3.773"s)_nMeson[12]->fill(_ecms);
181          }
182	  else  if( (p1.pid()==313 && p2.pid()==-313) ||
183		    (p2.pid()==313 && p1.pid()==-313) )
184	    _nMeson[13]->fill(_ecms);
185	}
186      }
187    }
188
189
190    /// Normalise histograms etc., after the run
191    void finalize() {
192      for(unsigned int ix=1;ix<18;++ix) {
193        if(ix==6||ix==16) continue;
194        scale(_nMeson[ix],crossSection()/ sumOfWeights() /picobarn);
195      }
196    }
197
198    /// @}
199
200
201    /// @name Histograms
202    /// @{
203    BinnedHistoPtr<string> _nMeson[18];
204    string _ecms;
205    /// @}
206
207
208  };
209
210
211  RIVET_DECLARE_PLUGIN(CLEO_2006_I691720);
212
213
214}