rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BABAR_2017_I1621593

$e^+e^-\to \pi^+\pi^-\pi^0\pi^0$ cross section from 0.85 to 4.5 GeV
Experiment: BABAR (PEP-II)
Inspire ID: 1621593
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D96 (2017) no.9, 092009
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+ e- to hadrons

Measurement of the cross section for $e^+e^-\to \pi^+\pi^-\pi^0\pi^0$ between 0.85 to 4.5 GeV using radiative return.

Source code: BABAR_2017_I1621593.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5
  6
  7namespace Rivet {
  8
  9
 10  /// @brief e+e- > pi+ pi- 2pi0 (including omega)
 11  class BABAR_2017_I1621593 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(BABAR_2017_I1621593);
 16
 17
 18    /// @name Analysis methods
 19    //@{
 20
 21    /// Book histograms and initialise projections before the run
 22    void init() {
 23
 24      // Initialise and register projections
 25      declare(FinalState(), "FS");
 26      declare(UnstableParticles(), "UFS");
 27
 28      book(_num4pi,   "TMP/num4");
 29      book(_numOmega, "TMP/numOmega");
 30      _mult.resize(2);
 31      book(_mult[0], 1, 1, 1);
 32      book(_mult[1], 2, 1, 1);
 33
 34    }
 35
 36
 37    /// Perform the per-event analysis
 38    void analyze(const Event& event) {
 39      const FinalState& fs = apply<FinalState>(event, "FS");
 40
 41      map<long,int> nCount;
 42      int ntotal(0);
 43      for (const Particle& p : fs.particles()) {
 44        nCount[p.pid()] += 1;
 45        ++ntotal;
 46      }
 47      if(ntotal!=4) vetoEvent;
 48      if(nCount[-211]==1&&nCount[211]==1&&nCount[111]==2) {
 49        _num4pi->fill();
 50        const FinalState& ufs = apply<FinalState>(event, "UFS");
 51        if (!ufs.particles(Cuts::pid==223).empty()) {
 52          _numOmega->fill();
 53        }
 54      }
 55
 56    }
 57
 58
 59    /// Normalise histograms etc., after the run
 60    void finalize() {
 61
 62      for(size_t ix=1;ix<3;++ix) {
 63        double sigma,error;
 64        if(ix==1) {
 65          sigma = _num4pi->val();
 66          error = _num4pi->err();
 67        }
 68        else {
 69          sigma = _numOmega->val();
 70          error = _numOmega->err();
 71        }
 72        sigma *= crossSection()/ sumOfWeights() /nanobarn;
 73        error *= crossSection()/ sumOfWeights() /nanobarn; 
 74        Scatter2D temphisto(refData(ix, 1, 1));
 75        for (size_t b = 0; b < temphisto.numPoints(); b++) {
 76          const double x  = temphisto.point(b).x();
 77          pair<double,double> ex = temphisto.point(b).xErrs();
 78          pair<double,double> ex2 = ex;
 79          if(ex2.first ==0.) ex2. first=0.0001;
 80          if(ex2.second==0.) ex2.second=0.0001;
 81          if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
 82            _mult[ix-1]->addPoint(x, sigma, ex, make_pair(error,error));
 83          }
 84          else {
 85            _mult[ix-1]->addPoint(x, 0., ex, make_pair(0.,.0));
 86          }
 87        }
 88      }
 89    }
 90
 91    //@}
 92
 93    /// @name Histograms
 94    //@{
 95    CounterPtr _num4pi, _numOmega;
 96    vector<Scatter2DPtr> _mult;
 97    //@}
 98
 99
100  };
101
102
103  // The hook for the plugin system
104  RIVET_DECLARE_PLUGIN(BABAR_2017_I1621593);
105
106
107}