rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMD2_2000_I532970

Cross section for $e^+e^-\to\pi^+\pi^+\pi^-\pi^+\pi^0$ between 1.28 and 1.38 GeV
Experiment: CMD2 (VEPP-2M)
Inspire ID: 532970
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B489 (2000) 125-130, 2000
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+e- to hadrons

Measurement of the cross section for $e^+e^-\to\pi^+\pi^+\pi^-\pi^+\pi^0$ between 1.28 and 1.38 GeV.

Source code: CMD2_2000_I532970.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 CMD2_2000_I532970 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CMD2_2000_I532970);
 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      book(_numOmegaPiPi, "TMP/OmegaPiPi");
 27      book(_numEtaPiPi, "TMP/EtaPiPi");
 28      book(_num5Pi, "TMP/5Pi");
 29
 30    }
 31
 32    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 33      for (const Particle &child : p.children()) {
 34	if(child.children().empty()) {
 35	  --nRes[child.pid()];
 36	  --ncount;
 37	}
 38	else
 39	  findChildren(child,nRes,ncount);
 40      }
 41    }
 42
 43    /// Perform the per-event analysis
 44    void analyze(const Event& event) {
 45
 46      const FinalState& fs = apply<FinalState>(event, "FS");
 47
 48      map<long,int> nCount;
 49      int ntotal(0);
 50      for (const Particle& p : fs.particles()) {
 51	nCount[p.pid()] += 1;
 52	++ntotal;
 53      }
 54      const FinalState& ufs = apply<FinalState>(event, "UFS");
 55      bool foundRes = false;
 56      for (const Particle& p : ufs.particles()) {
 57	if(p.children().empty()) continue;
 58	// find the eta
 59	if(p.pid()==221) {
 60	  map<long,int> nRes = nCount;
 61	  int ncount = ntotal;
 62	  findChildren(p,nRes,ncount);
 63	  // eta pi+pi-
 64	  if(ncount!=2) continue;
 65	  bool matched = true;
 66	  for(auto const & val : nRes) {
 67	    if(abs(val.first)==211) {
 68	      if(val.second !=1) {
 69		matched = false;
 70		break;
 71	      }
 72	    }
 73	    else if(val.second!=0) {
 74	      matched = false;
 75	      break;
 76	    }
 77	  }
 78	  if(matched) {
 79	    _numEtaPiPi->fill();
 80	    foundRes = true;
 81	  }
 82	}
 83	// find the omega
 84	else if(p.pid()==223) {
 85	  map<long,int> nRes = nCount;
 86	  int ncount = ntotal;
 87	  findChildren(p,nRes,ncount);
 88	  // eta pi+pi-
 89	  if(ncount!=2) continue;
 90	  bool matched = true;
 91	  for(auto const & val : nRes) {
 92	    if(abs(val.first)==211) {
 93	      if(val.second !=1) {
 94		matched = false;
 95		break;
 96	      }
 97	    }
 98	    else if(val.second!=0) {
 99	      matched = false;
100	      break;
101	    }
102	  }
103	  if(matched) {
104	    _numOmegaPiPi->fill();
105	    foundRes = true;
106	  }
107	}
108      }
109
110      if(foundRes) vetoEvent;
111      if(nCount[-211]==2&&nCount[211]==2&&nCount[111]==1)
112	_num5Pi->fill();
113    }
114
115    /// Normalise histograms etc., after the run
116    void finalize() {
117      for (unsigned int ix=1;ix<4;++ix) {
118        double sigma,error;
119        if(ix==1) {
120          sigma = _numOmegaPiPi->val();
121          error = _numOmegaPiPi->err();
122        }
123        else if(ix==2) {
124          sigma = _numEtaPiPi->val();
125          error = _numEtaPiPi->err();
126        }
127        else {
128          sigma = _num5Pi->val();
129          error = _num5Pi->err();
130        }
131        sigma *= crossSection()/ sumOfWeights() /nanobarn;
132        error *= crossSection()/ sumOfWeights() /nanobarn;
133        Estimate1DPtr mult;
134        book(mult, ix, 1, 1);
135        for (auto& b : mult->bins()) {
136          if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
137            b.set(sigma, error);
138          }
139        }
140      }
141    }
142
143    /// @}
144
145    /// @name Histograms
146    /// @{
147    CounterPtr _numEtaPiPi,_numOmegaPiPi,_num5Pi;
148    /// @}
149
150  };
151
152
153  RIVET_DECLARE_PLUGIN(CMD2_2000_I532970);
154
155
156}