rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2018_I1700745

Cross section for $e^+e^-\to\pi^+\pi^-3\pi^0$ and $\pi^+\pi^-2\pi^0\eta$ between threshold and 4.35 GeV
Experiment: BABAR (PEP-II)
Inspire ID: 1700745
Status: VALIDATED
Authors:
  • Peter Richardson
References: Beams: e+ e-
Beam energies: (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.8, 0.8); (0.8, 0.8); (0.8, 0.8); (0.8, 0.8); (0.9, 0.9); (0.9, 0.9); (0.9, 0.9); (0.9, 0.9); (1.0, 1.0); (1.0, 1.0); (1.0, 1.0); (1.0, 1.0); (1.1, 1.1); (1.1, 1.1); (1.1, 1.1); (1.1, 1.1); (1.2, 1.2); (1.2, 1.2); (1.2, 1.2); (1.2, 1.2); (1.3, 1.3); (1.3, 1.3); (1.3, 1.3); (1.3, 1.3); (1.4, 1.4); (1.4, 1.4); (1.4, 1.4); (1.4, 1.4); (1.5, 1.5); (1.5, 1.5); (1.5, 1.5); (1.5, 1.5); (1.6, 1.6); (1.6, 1.6); (1.6, 1.6); (1.6, 1.6); (1.7, 1.7); (1.7, 1.7); (1.7, 1.7); (1.7, 1.7); (1.8, 1.8); (1.8, 1.8); (1.8, 1.8); (1.8, 1.8); (1.9, 1.9); (1.9, 1.9); (1.9, 1.9); (1.9, 1.9); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.2, 2.2) GeV
Run details:
  • e+e- to hadrons

Measurement of the cross section for $e^+e^-\to\pi^+\pi^-3\pi^0$ and $\pi^+\pi^-2\pi^0\eta$ between threshold and 4.35 GeV. The cross sections for the $\pi^+\pi^-\eta$, $\omega\pi^0\pi^0$ and $\omega\pi^0\eta$ resonant contributions are also measured. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: BABAR_2018_I1700745.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- -> pi+pi- and 3pi0 or 2pi0eta
 10  class BABAR_2018_I1700745 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2018_I1700745);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22
 23
 24      // Initialise and register projections
 25      declare(FinalState(), "FS");
 26      declare(UnstableParticles(), "UFS");
 27
 28      for(unsigned int ix=0;ix<5;++ix)
 29        book(_sigma[ix], 1+ix, 1, 1);
 30      for (const string& en : _sigma[0].binning().edges<0>()) {
 31        const double end = std::stod(en)*GeV;
 32        if (isCompatibleWithSqrtS(end)) {
 33          _ecms = en;
 34          break;
 35        }
 36      }
 37      if (_ecms.empty()) {
 38        if(isCompatibleWithSqrtS(1.075))
 39          _ecms = "1.075";
 40        else
 41          MSG_ERROR("Beam energy incompatible with analysis.");
 42      }
 43    }
 44
 45    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 46      for(const Particle &child : p.children()) {
 47	if(child.children().empty()) {
 48	  --nRes[child.pid()];
 49	  --ncount;
 50	}
 51	else
 52	  findChildren(child,nRes,ncount);
 53      }
 54    }
 55
 56    /// Perform the per-event analysis
 57    void analyze(const Event& event) {
 58      const FinalState& fs = apply<FinalState>(event, "FS");
 59      map<long,int> nCount;
 60      int ntotal(0);
 61      for (const Particle& p : fs.particles()) {
 62	nCount[p.pid()] += 1;
 63	++ntotal;
 64      }
 65      if(ntotal==5 && nCount[211]==1 && nCount[-211]==1 && nCount[111]==3)
 66	_sigma[0]->fill(_ecms);
 67      const FinalState& ufs = apply<FinalState>(event, "UFS");
 68      for (const Particle& p : ufs.particles()) {
 69     	if(p.children().empty()) continue;
 70	// find eta/omegas
 71      	if(p.pid()==221 || p.pid()==223 ) {
 72       	  map<long,int> nRes = nCount;
 73       	  int ncount = ntotal;
 74       	  findChildren(p,nRes,ncount);
 75	  // eta
 76	  if(p.pid()==221) {
 77	    // 2 pi eta
 78	    if(ncount==2) {
 79	      bool matched = true;
 80	      for(auto const & val : nRes) {
 81		if(abs(val.first)==211) {
 82		  if(val.second !=1) {
 83		    matched = false;
 84		    break;
 85		  }
 86		}
 87		else if(val.second!=0) {
 88		  matched = false;
 89		  break;
 90		}
 91	      }
 92	      if(matched)
 93		_sigma[1]->fill(_ecms);
 94	    }
 95	    // 4 pi eta
 96	    else if(ncount==4) {
 97	      bool matched = true;
 98	      for(auto const & val : nRes) {
 99		if(abs(val.first)==211) {
100		  if(val.second !=1) {
101		    matched = false;
102		    break;
103		  }
104		}
105		else if(abs(val.first)==111) {
106		  if(val.second !=2) {
107		    matched = false;
108		    break;
109		  }
110		}
111		else if(val.second!=0) {
112		  matched = false;
113		  break;
114		}
115	      }
116	      if(matched)
117		_sigma[3]->fill(_ecms);
118	    }
119	    // pi0 omega eta
120	    for (const Particle& p2 : ufs.particles()) {
121	      if(p2.pid()!=223) continue;
122	      map<long,int> nResB = nRes;
123	      int ncountB = ncount;
124	      findChildren(p2,nResB,ncountB);
125	      if(ncountB!=1) continue;
126	      bool matched = true;
127	      for(auto const & val : nResB) {
128		if(abs(val.first)==111) {
129		  if(val.second !=1) {
130		    matched = false;
131		    break;
132		  }
133		}
134		else if(val.second!=0) {
135		  matched = false;
136		  break;
137		}
138	      }
139	      if(matched) {
140		_sigma[4]->fill(_ecms);
141		break;
142	      }
143	    }
144	  }
145	  else {
146	    if(ncount!=2) continue;
147	    bool matched = true;
148	    for(auto const & val : nRes) {
149	      if(abs(val.first)==111) {
150		if(val.second !=2) {
151		  matched = false;
152		  break;
153		}
154	      }
155	      else if(val.second!=0) {
156		matched = false;
157		break;
158	      }
159	    }
160	    if(matched)
161	      _sigma[2]->fill(_ecms);
162	  }
163	}
164      }
165    }
166
167    /// Normalise histograms etc., after the run
168    void finalize() {
169      double fact = crossSection()/ sumOfWeights() /nanobarn;
170      for (unsigned int ix=0;ix<5;++ix)
171        scale(_sigma[ix],fact);
172    }
173    /// @}
174
175
176    /// @name Histograms
177    /// @{
178    BinnedHistoPtr<string> _sigma[5];
179    string _ecms;
180    /// @}
181
182  };
183
184
185  RIVET_DECLARE_PLUGIN(BABAR_2018_I1700745);
186
187
188}