rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2022_I2173361

$e^+e^-\to\Sigma^0\bar{\Sigma}^0$ and $\Sigma^+\bar{\Sigma}^-$ for $\sqrt{s}=2.379-3$ GeV
Experiment: BELLE (KEKB)
Inspire ID: 2173361
Status: VALIDATED NOHEPDATA SINGLEWEIGHT
Authors:
  • Peter Richardson
References: Beams: e- e+
Beam energies: ANY
Run details:
  • e+ e- to hadrons. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Measurement of the cross section for $e^+e^-\to\Sigma^0\bar{\Sigma}^0$ and $\Sigma^+\bar{\Sigma}^-$ for $\sqrt{s}=2.379-3$ GeV by BELLE using raditive events. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: BELLE_2022_I2173361.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- > Sigma Sigmabar
 10  class BELLE_2022_I2173361 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2022_I2173361);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // projections
 23      declare(FinalState(), "FS");
 24      declare(UnstableParticles(Cuts::abspid==3222 || Cuts::abspid==3212), "UFS");
 25      // histos
 26      for (unsigned int ix=0; ix<2; ++ix) {
 27        book(_sigma[ix],"TMP/c_"+toString(ix+1),refData(ix+1, 1, 1));
 28      }
 29    }
 30
 31    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 32      for (const Particle &child : p.children()) {
 33        if (child.children().empty()) {
 34          nRes[child.pid()]-=1;
 35          --ncount;
 36        }
 37        else {
 38          findChildren(child,nRes,ncount);
 39        }
 40      }
 41    }
 42
 43    /// Perform the per-event analysis
 44    void analyze(const Event& event) {
 45      const FinalState& fs = apply<FinalState>(event, "FS");
 46      // total hadronic and muonic cross sections
 47      map<long,int> nCount;
 48      int ntotal(0);
 49      for (const Particle& p : fs.particles()) {
 50      	nCount[p.pid()] += 1;
 51      	++ntotal;
 52      }
 53      // find the Sigmas
 54      const FinalState& ufs = apply<UnstableParticles>(event, "UFS");
 55      for (unsigned int ix=0; ix<ufs.particles().size(); ++ix) {
 56        const Particle& p1 = ufs.particles()[ix];
 57        bool matched = false;
 58        // check fs
 59        bool fs = true;
 60        for (const Particle& child : p1.children()) {
 61          if (child.pid()==p1.pid()) {
 62            fs = false;
 63            break;
 64          }
 65        }
 66        if (!fs) continue;
 67        // find the children
 68        map<long,int> nRes = nCount;
 69        int ncount = ntotal;
 70        findChildren(p1,nRes,ncount);
 71        for (unsigned int iy=ix+1;iy<ufs.particles().size();++iy) {
 72          const Particle& p2 = ufs.particles()[iy];
 73          if (p2.pid() != -p1.pid()) continue;
 74          // check fs
 75          bool fs = true;
 76          for (const Particle & child : p2.children()) {
 77            if (child.pid()==p2.pid()) {
 78              fs = false;
 79              break;
 80            }
 81          }
 82          if (!fs) continue;
 83          map<long,int> nRes2 = nRes;
 84          int ncount2 = ncount;
 85          findChildren(p2,nRes2,ncount2);
 86          if (ncount2!=0) continue;
 87          matched=true;
 88          for (const auto& val : nRes2) {
 89            if (val.second!=0) {
 90              matched = false;
 91              break;
 92            }
 93          }
 94      	  if (matched) {
 95      	    if(abs(p1.pid())==3212) _sigma[0]->fill(sqrtS());
 96            else if (abs(p1.pid())==3222) _sigma[1]->fill(sqrtS());
 97            break;
 98          }
 99      	}
100      	if (matched) break;
101      }
102    }
103
104
105    /// Normalise histograms etc., after the run
106    void finalize() {
107      const double fact = crossSection()/ sumOfWeights() /picobarn;
108      for(unsigned int iy=0;iy<2;++iy) {
109        scale(_sigma[iy], fact);
110        Estimate1DPtr tmp;
111        book(tmp, iy+1, 1, 1);
112        barchart(_sigma[iy], tmp);
113      }
114    }
115
116    /// @}
117
118
119    /// @name Histograms
120    /// @{
121    Histo1DPtr _sigma[2];
122    /// @}
123
124
125  };
126
127
128  RIVET_DECLARE_PLUGIN(BELLE_2022_I2173361);
129
130}