rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESIII_2016_I1495838

Cross section for $e^+e^-\to J/\psi\pi^+\pi^-$ at energies between 3.77 and 4.6 GeV
Experiment: BESIII (BEPC)
Inspire ID: 1495838
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 118 (2017) no.9, 092001
Beams: e+ e-
Beam energies: (1.9, 1.9); (1.9, 1.9); (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.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (2.0, 2.0); (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.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.1, 2.1); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.2, 2.2); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3); (2.3, 2.3) GeV
Run details:
  • e+e- to hadrons

Measurement of the cross section for $e^+e^-\to J/\psi\pi^+\pi^-$ at energies between 3.77 and 4.6 GeV. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: BESIII_2016_I1495838.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 Cross section for $e^+e^-\to J/\psi\pi^+\pi^-$ at energies between 3.77 and 4.6 GeV
 10  class BESIII_2016_I1495838 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BESIII_2016_I1495838);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      declare(FinalState(), "FS");
 23      declare(UnstableParticles(), "UFS");
 24      for(unsigned int ix=0;ix<2;++ix) {
 25        book(_sigmaPsi[ix], 1+ix, 1, 1);
 26        for (const string& en : _sigmaPsi[ix].binning().edges<0>()) {
 27          const double end = std::stod(en)*GeV;
 28          if (isCompatibleWithSqrtS(end)) {
 29            _ecms[ix] = en;
 30            break;
 31          }
 32        }
 33      }
 34      if (_ecms[0].empty() && _ecms[1].empty()) {
 35        MSG_ERROR("Beam energy incompatible with analysis.");
 36      }
 37    }
 38
 39    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 40      for (const Particle &child : p.children()) {
 41        if(child.children().empty()) {
 42          --nRes[child.pid()];
 43          --ncount;
 44        }
 45        else
 46          findChildren(child,nRes,ncount);
 47      }
 48    }
 49
 50    /// Perform the per-event analysis
 51    void analyze(const Event& event) {
 52      const FinalState& fs = apply<FinalState>(event, "FS");
 53      map<long,int> nCount;
 54      int ntotal(0);
 55      for (const Particle& p: fs.particles()) {
 56        nCount[p.pid()] += 1;
 57        ++ntotal;
 58      }
 59      const FinalState& ufs = apply<FinalState>(event, "UFS");
 60      // find the psis
 61      for (const Particle& p :  ufs.particles(Cuts::pid==443)) {
 62        if(p.children().empty()) continue;
 63        map<long,int> nRes = nCount;
 64        int ncount = ntotal;
 65        findChildren(p,nRes,ncount);
 66        // psi pi+pi-
 67        if(ncount!=2) continue;
 68        bool matched = true;
 69        for(auto const & val : nRes) {
 70          if(abs(val.first)==211) {
 71            if(val.second !=1) {
 72              matched = false;
 73              break;
 74            }
 75          }
 76          else if(val.second!=0) {
 77            matched = false;
 78            break;
 79          }
 80        }
 81        if(matched) {
 82          _sigmaPsi[0]->fill(_ecms[0]);
 83          _sigmaPsi[1]->fill(_ecms[1]);
 84          break;
 85        }
 86      }
 87    }
 88
 89    /// Normalise histograms etc., after the run
 90    void finalize() {
 91      double fact =  crossSection()/ sumOfWeights() /picobarn;
 92      for(unsigned int ix=0;ix<2;++ix)
 93        scale(_sigmaPsi[ix],fact);
 94    }
 95
 96    /// @}
 97
 98
 99    /// @name Histograms
100    /// @{
101    BinnedHistoPtr<string> _sigmaPsi[2];
102    string _ecms[2];
103    /// @}
104
105
106  };
107
108
109
110  RIVET_DECLARE_PLUGIN(BESIII_2016_I1495838);
111
112}