rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESII_2007_I763880

Cross sections for light hadrons at 3.773 and 3.650 GeV
Experiment: BESII (BEPC)
Inspire ID: 763880
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B670 (2008) 184-189, 2008
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+e- to hadrons

Cross section for $e^+e^-\to \omega \pi^+\pi^-$, $\omega K^+K^-$, $\omega p\bar{p}$, $K^+K^-\rho^0\pi^0$, $K^+K^-\rho^+\pi^-+\text{c.c.}$, $K^{*0}K^-\pi^+\pi^0+\text{c.c.}$ and $K^{*+}K^-\pi^+\pi^-+\text{c.c.}$ at 3.773 and 3.650 GeV.

Source code: BESII_2007_I763880.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 Add a short analysis description here
 10  class BESII_2007_I763880 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BESII_2007_I763880);
 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<8;++ix) {
 29	stringstream ss;
 30	ss << "TMP/n" << ix;
 31	book(_nMeson[ix], ss.str());
 32      }
 33    }
 34
 35    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 36      for (const Particle &child : p.children()) {
 37	if(child.children().empty()) {
 38	  nRes[child.pid()]-=1;
 39	  --ncount;
 40	}
 41	else
 42	  findChildren(child,nRes,ncount);
 43      }
 44    }
 45
 46    /// Perform the per-event analysis
 47    void analyze(const Event& event) {
 48      const FinalState& fs = apply<FinalState>(event, "FS");
 49
 50      map<long,int> nCount;
 51      int ntotal(0);
 52      for (const Particle& p : fs.particles()) {
 53	nCount[p.pid()] += 1;
 54	++ntotal;
 55      }
 56      const FinalState& ufs = apply<FinalState>(event, "UFS");
 57      for (const Particle& p : ufs.particles()) {
 58	if(p.children().empty()) continue;
 59	if(p.pid()!=223 && p.pid()!=113&&abs(p.pid())!=313&& abs(p.pid())!=323)
 60	  continue;
 61	map<long,int> nRes = nCount;
 62	int ncount = ntotal;
 63	findChildren(p,nRes,ncount);
 64	if(p.pid()==113) {
 65	  if(ncount!=3) continue;
 66	  unsigned int npi(0),nK(0);
 67	  bool matched = true;
 68	  for(auto const & val : nRes) {
 69	    if(abs(val.first)==111 && val.second==1) {
 70	      npi+=1;
 71	    }
 72	    else if(abs(val.first)==321 && val.second==1) {
 73	      nK+=1;
 74	    }
 75	    else if(val.second!=0) {
 76	      matched = false;
 77	      break;
 78	    }
 79	  }
 80	  if(matched) {
 81	    if(npi==1&&nK==2)
 82	      _nMeson[4]->fill();
 83	  }
 84	}
 85	else if(abs(p.pid())==213) {
 86	  if(ncount!=3) continue;
 87	  unsigned int npi(0),nK(0);
 88	  bool matched = true;
 89	  int ipi = p.pid()==213 ? -211 : 211;
 90	  for(auto const & val : nRes) {
 91	    if(abs(val.first)== ipi && val.second==1) {
 92	      npi+=1;
 93	    }
 94	    else if(abs(val.first)==321 && val.second==1) {
 95	      nK+=1;
 96	    }
 97	    else if(val.second!=0) {
 98	      matched = false;
 99	      break;
100	    }
101	  }
102	  if(matched) {
103	    if(npi==1&&nK==2)
104	      _nMeson[5]->fill();
105	  }
106	}
107	else if(abs(p.pid())==313) {
108	  if(ncount!=3) continue;
109	  unsigned int npi(0),nK(0),npi0(0);
110	  bool matched = true;
111	  int ipi = p.pid()==313 ?  211 : -211;
112	  int iK  = p.pid()==313 ? -321 :  321;
113	  for(auto const & val : nRes) {
114	    if(abs(val.first)== ipi && val.second==1) {
115	      npi+=1;
116	    }
117	    else if(abs(val.first)==iK && val.second==1) {
118	      nK+=1;
119	    }
120	    if(abs(val.first)== 111 && val.second==1) {
121	      npi0+=1;
122	    }
123	    else if(val.second!=0) {
124	      matched = false;
125	      break;
126	    }
127	  }
128	  if(matched) {
129	    if(npi==1&&nK==1&&npi0==1)
130	      _nMeson[6]->fill();
131	  }
132	}
133	else if(abs(p.pid())==323) {
134	  if(ncount!=3) continue;
135	  unsigned int npi(0),nK(0),npi0(0);
136	  bool matched = true;
137	  int ipi = p.pid()==323 ?  211 : -211;
138	  int iK  = p.pid()==323 ? -321 :  321;
139	  for(auto const & val : nRes) {
140	    if(abs(val.first)== ipi && val.second==1) {
141	      npi+=1;
142	    }
143	    else if(abs(val.first)==iK && val.second==1) {
144	      nK+=1;
145	    }
146	    if(abs(val.first)== 111 && val.second==1) {
147	      npi0+=1;
148	    }
149	    else if(val.second!=0) {
150	      matched = false;
151	      break;
152	    }
153	  }
154	  if(matched) {
155	    if(npi==1&&nK==1&&npi0==1)
156	      _nMeson[7]->fill();
157	  }
158	}
159      }
160    }
161
162
163    /// Normalise histograms etc., after the run
164    void finalize() {
165      for(unsigned int ix=4;ix<8;++ix) {
166	double sigma = _nMeson[ix]->val();
167	double error = _nMeson[ix]->err();
168    	sigma *= crossSection()/ sumOfWeights() /nanobarn;
169    	error *= crossSection()/ sumOfWeights() /nanobarn;
170	Scatter2D temphisto(refData(1, 1, ix));
171	Scatter2DPtr  mult;
172        book(mult, 1, 1, ix);
173	for (size_t b = 0; b < temphisto.numPoints(); b++) {
174	  const double x  = temphisto.point(b).x();
175	  pair<double,double> ex = temphisto.point(b).xErrs();
176	  pair<double,double> ex2 = ex;
177	  if(ex2.first ==0.) ex2. first=0.0001;
178	  if(ex2.second==0.) ex2.second=0.0001;
179	  if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
180	    mult->addPoint(x, sigma, ex, make_pair(error,error));
181	  }
182	  else {
183	    mult->addPoint(x, 0., ex, make_pair(0.,.0));
184	  }
185	}
186      }
187    }
188
189    //@}
190
191
192    /// @name Histograms
193    //@{
194    CounterPtr _nMeson[8];
195    //@}
196
197
198  };
199
200
201  // The hook for the plugin system
202  RIVET_DECLARE_PLUGIN(BESII_2007_I763880);
203
204
205}