rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

SND_2019_I1726419

Cross section for $e^+e^-\to\pi^+\pi^-\pi^0\eta$ for energies below 2 GeV
Experiment: SND (VEPP-2M)
Inspire ID: 1726419
Status: VALIDATED
Authors:
  • Peter Richardson
References: Beams: e+ e-
Beam energies: (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) GeV
Run details:
  • e+ e- to hadrons

Measurement of the cross section for $e^+e^-\to\pi^+\pi^-\pi^0\eta$, and the resonant sub-processes $\omega\eta$, $\phi\eta$ and $a_0(980)\rho$, for energies below 2 GeV by the SND experiment. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: SND_2019_I1726419.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 SND pi+pi-pi0eta cross section
 10  class SND_2019_I1726419 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(SND_2019_I1726419);
 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      for(unsigned int ix=0;ix<4;++ix)
 27        book(_sigma[ix], 1, 1, 1+ix);
 28      for (const string& en : _sigma[0].binning().edges<0>()) {
 29        double end = std::stod(en)*GeV;
 30        if(isCompatibleWithSqrtS(end)) {
 31          _ecms[0] = en;
 32          if(end>1.6*GeV) _ecms[1]=en;
 33          break;
 34        }
 35      }
 36      if(_ecms[0].empty()) MSG_ERROR("Beam energy incompatible with analysis.");
 37    }
 38
 39
 40    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 41      for( const Particle &child : p.children()) {
 42	if(child.children().empty()) {
 43	  --nRes[child.pid()];
 44	  --ncount;
 45	}
 46	else
 47	  findChildren(child,nRes,ncount);
 48      }
 49    }
 50
 51    /// Perform the per-event analysis
 52    void analyze(const Event& event) {
 53
 54      const FinalState& fs = apply<FinalState>(event, "FS");
 55
 56      map<long,int> nCount;
 57      int ntotal(0);
 58      for (const Particle& p : fs.particles()) {
 59	nCount[p.pid()] += 1;
 60	++ntotal;
 61      }
 62      const FinalState& ufs = apply<FinalState>(event, "UFS");
 63      bool found = false, foundOmegaPhi = false;
 64      for (const Particle& p : ufs.particles(Cuts::pid==221)) {
 65	map<long,int> nRes = nCount;
 66	int ncount = ntotal;
 67	findChildren(p,nRes,ncount);
 68	// eta pi+pi-
 69	if(ncount==3) {
 70	  bool matched = true;
 71	  for(auto const & val : nRes) {
 72	    if(abs(val.first)==211 || val.first==111 ) {
 73	      if(val.second !=1) {
 74		matched = false;
 75		break;
 76	      }
 77	    }
 78	    else if(val.second!=0) {
 79	      matched = false;
 80	      break;
 81	    }
 82	  }
 83	  if(matched) {
 84	    _sigma[0]->fill(_ecms[0]);
 85	    found = true;
 86	  }
 87	}
 88	for (const Particle& p2 : ufs.particles()) {
 89	  if(p2.pid()!=223 && p2.pid()!=333) continue;
 90	  map<long,int> nResB = nRes;
 91	  int ncountB = ncount;
 92	  findChildren(p2,nResB,ncountB);
 93	  if(ncountB!=0) continue;
 94	  bool matched2 = true;
 95	  for(auto const & val : nResB) {
 96	    if(val.second!=0) {
 97	      matched2 = false;
 98	      break;
 99	    }
100	  }
101	  if(matched2) {
102	    if(p2.pid()==223)
103	      _sigma[1]->fill(_ecms[0]);
104	    else if(p2.pid()==333 && !_ecms[1].empty())
105	      _sigma[2]->fill(_ecms[1]);
106	    foundOmegaPhi=true;
107	  }
108	}
109      }
110      if(found && !foundOmegaPhi)
111	_sigma[3]->fill(_ecms[0]);
112    }
113
114
115    /// Normalise histograms etc., after the run
116    void finalize() {
117      double fact = crossSection()/nanobarn/sumOfWeights();
118      for (unsigned int ix=0;ix<4;++ix) {
119        scale(_sigma[ix],fact);
120      }
121    }
122
123    /// @}
124
125
126    /// @name Histograms
127    /// @{
128    BinnedHistoPtr<string> _sigma[4];
129    string _ecms[2];
130    /// @}
131
132
133  };
134
135
136  RIVET_DECLARE_PLUGIN(SND_2019_I1726419);
137
138
139}