rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2021_I1844422

Cross sections for $e^+e^-\to 2\pi^+2\pi^-3\pi^0$ and $2\pi^+2\pi^-2\pi^0\eta$ from threshold to 4.5 GeV
Experiment: BABAR (PEP-II)
Inspire ID: 1844422
Status: VALIDATED
Authors:
  • Peter Richardson
References: Beams: e+ e-
Beam energies: ANY
Run details:
  • e+e- to hadrons

Measurement of the cross sections for $e^+e^-\to 2\pi^+2\pi^-3\pi^0$ and $2\pi^+2\pi^-2\pi^0\eta$ from threshold to 4.5 GeV by BaBar. The $2\pi^+2\pi^-\eta$, $\omega\pi^0\eta$, $\pi^+\pi^-2\pi^0\omega$, $\pi^+\pi^-2\pi^0\eta$ resonant subprocesses are also measured.

Source code: BABAR_2021_I1844422.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- > 2pi+ 2pi- 3pi0 and  2pi+ 2pi- 2pi0 eta
 10  class BABAR_2021_I1844422 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2021_I1844422);
 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(_c_2pip2pim3pi0   ,"TMP/2pip2pim3pi0"   );
 27      book(_c_2pip2pimeta    ,"TMP/2pip2pimeta"    );
 28      book(_c_omegapi0eta    ,"TMP/omegapi0eta"    );
 29      book(_c_pippim2pi0omega,"TMP/pippim2pi0omega");
 30      book(_c_pippim2pi0eta  ,"TMP/pippim2pi0eta"  );
 31      book(_c_2pip2pim2pi0eta,"TMP/2pip2pim2pi0eta");
 32    }
 33
 34    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 35      for(const Particle &child : p.children()) {
 36	if(child.children().empty()) {
 37	  --nRes[child.pid()];
 38	  --ncount;
 39	}
 40	else
 41	  findChildren(child,nRes,ncount);
 42      }
 43    }
 44
 45    /// Perform the per-event analysis
 46    void analyze(const Event& event) {
 47      const FinalState& fs = apply<FinalState>(event, "FS");
 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      if(ntotal==7 && nCount[211]==2 && nCount[-211]==2 && nCount[111]==3)
 55	_c_2pip2pim3pi0->fill();
 56      // intermediate omega and eta mesons
 57      Particles unstable = apply<FinalState>(event, "UFS").particles(Cuts::pid==223 or Cuts::pid==221);
 58      for (const Particle& p : unstable) {
 59     	if(p.children().empty()) continue;
 60	map<long,int> nRes = nCount;
 61	int ncount = ntotal;
 62	findChildren(p,nRes,ncount);
 63	// eta
 64	if(p.pid()==221) {
 65	  if(ncount==4) {
 66	    // 2pi+2pi- eta
 67	    if(nRes[211]==2 && nRes[-211]==2 ) {
 68	      _c_2pip2pimeta->fill();
 69	    }
 70	    // pi+pi- 2pi0 eta
 71	    else if(nRes[211]==1 && nRes[-211]==1 && nRes[111]==2 ) {
 72	      _c_pippim2pi0eta->fill();
 73	    }
 74	  }
 75	  else if(ncount==6) {
 76	    // 2pi+ 2pi- 2pi0 eta
 77	    if(nRes[211]==2 && nRes[-211]==2 && nRes[111]==2 ) {
 78	      _c_2pip2pim2pi0eta->fill();
 79	    }
 80	  }
 81	}
 82	// omega
 83	else if(p.pid()==223) {
 84	  // pi+pi- 2pi0 omega
 85	  if(ncount==4 && nRes[211]==1 && nRes[-211]==1 && nRes[111]==2 ) {
 86	    _c_pippim2pi0omega->fill();
 87	  }
 88	}
 89	// mode with both eta and omega
 90	// pi0 omega eta
 91	for (const Particle& p2 : unstable ) {
 92	  if(p2.pid()==p.pid()) continue;
 93	  map<long,int> nResB = nRes;
 94	  int ncountB = ncount;
 95	  findChildren(p2,nResB,ncountB);
 96	  if(ncountB!=1) continue;
 97	  bool matched = true;
 98	  for(auto const & val : nResB) {
 99	    if(abs(val.first)==111) {
100	      if(val.second !=1) {
101		matched = false;
102		break;
103	      }
104	    }
105	    else if(val.second!=0) {
106	      matched = false;
107	      break;
108	    }
109	  }
110	  if(matched) {
111	    _c_omegapi0eta->fill();
112	    break;
113	  }
114	}
115      }
116    }
117
118
119    /// Normalise histograms etc., after the run
120    void finalize() {
121      for(unsigned int ix=1;ix<7;++ix) {
122        double sigma = 0., error = 0.;
123        if(ix==1) {
124          sigma = _c_2pip2pim3pi0->val();
125          error = _c_2pip2pim3pi0->err();
126        }
127        else if(ix==2) {
128          sigma = _c_2pip2pimeta->val();
129          error = _c_2pip2pimeta->err();
130        }
131        else if(ix==3) {
132          sigma = _c_omegapi0eta->val();
133          error = _c_omegapi0eta->err();
134        }
135        else if(ix==4) {
136          sigma = _c_pippim2pi0omega->val();
137          error = _c_pippim2pi0omega->err();
138        }
139        else if(ix==5) {
140          sigma = _c_pippim2pi0eta->val();
141          error = _c_pippim2pi0eta->err();
142        }
143        else if(ix==6) {
144          sigma = _c_2pip2pim2pi0eta->val();
145          error = _c_2pip2pim2pi0eta->err();
146        }
147        sigma *= crossSection()/ sumOfWeights() /nanobarn;
148        error *= crossSection()/ sumOfWeights() /nanobarn;
149        Estimate1DPtr  mult;
150        book(mult, ix, 1, 1);
151        for (auto& b : mult->bins()) {
152          if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
153            b.set(sigma, error);
154          }
155        }
156      }
157    }
158
159    ///@}
160
161
162    /// @name Histograms
163    ///@{
164    CounterPtr _c_2pip2pim3pi0,  _c_2pip2pimeta, _c_omegapi0eta,
165      _c_pippim2pi0omega, _c_pippim2pi0eta, _c_2pip2pim2pi0eta;
166    ///@}
167
168
169  };
170
171
172  RIVET_DECLARE_PLUGIN(BABAR_2021_I1844422);
173
174}