rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESII_2007_I750713

Cross sections for light hadrons at 3.773, 3.650 GeV
Experiment: BESII (BEPC II)
Inspire ID: 750713
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B650 (2007) 111-118, 2007
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+e- to hadrons

Cross section for $e^+e^-\to 2\pi^+2\pi^-$, $K^+K^-\pi^+\pi^-$, $2K^+2K^-$, $\phi K^+K^-$, $p\bar{p}\pi^+\pi^-$, $p\bar{p}K^+K^-$, $3\pi^+3\pi^-$, $2\pi^+2\pi^-\eta$, $2\pi^+2\pi^-\pi^0$, $K^+K^-\pi^+\pi^-\pi^0$, $2K^+2K^-\pi^0$, $p\bar{p}\pi^0$, $p\bar{p}\pi^+\pi^-\pi^0$, $3\pi^+3\pi^-\pi^0$ at 3.773 and 3.650 GeV.

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