rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESII_2009_I835937

Cross sections for $e^+e^-\to K^0_SK^-K^-K^+\pi^+$, $K^0_SK^-\pi^+\eta$, $K^0_S K^- \rho^+$, $K^0_SK^-\pi^+\rho^0$ at 3.65 and 3.773 GeV
Experiment: BESII (BEPC)
Inspire ID: 835937
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Eur.Phys.J.C 64 (2009) 243-250
Beams: e+ e-
Beam energies: (1.8, 1.8); (1.9, 1.9) GeV
Run details:
  • e+ e- > hadrons, pi0 qand KS0 set stable

Measurement of the cross sections for $e^+e^-\to K^0_SK^-K^-K^+\pi^+$, $K^0_SK^-\pi^+\eta$, $K^0_S K^- \rho^+$, $K^0_SK^-\pi^+\rho^0$ at 3.65 and 3.773 GeV.

Source code: BESII_2009_I835937.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- > light hadrons including KS0
 10  class BESII_2009_I835937 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BESII_2009_I835937);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // Initialise and register projections
 23      declare(FinalState(), "FS");
 24      declare(UnstableParticles(), "UFS");
 25      if (isCompatibleWithSqrtS(3.773)) {
 26        book(_sigma[1],1,1,2);
 27        _ecms="3.773";
 28      }
 29      else if (isCompatibleWithSqrtS(3.65)) {
 30        _ecms = "3.65";
 31      }
 32      // histograms
 33      for (unsigned int ix=0; ix<7; ++ix) {
 34        if(ix>0 && ix<5) continue;
 35        book(_sigma[ix], 1, 1, 1+ix);
 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()]-=1;
 43          --ncount;
 44        }
 45        else {
 46          findChildren(child,nRes,ncount);
 47        }
 48      }
 49    }
 50
 51    /// Perform the per-event analysis
 52    void analyze(const Event& event) {
 53      const FinalState& fs = apply<FinalState>(event, "FS");
 54
 55      map<long,int> nCount;
 56      int ntotal(0);
 57      for (const Particle& p : fs.particles()) {
 58        nCount[p.pid()] += 1;
 59        ++ntotal;
 60      }
 61      const FinalState& ufs = apply<FinalState>(event, "UFS");
 62      // first the purely FS particles
 63      if (ntotal==5 && nCount[310]==1 &&
 64        ((nCount[-321]==2 && nCount[ 321]==1 && nCount[ 211]==1) ||
 65				 (nCount[ 321]==2 && nCount[-321]==1 && nCount[-211]==1))) {
 66        _sigma[0]->fill(_ecms);
 67      }
 68
 69      // loop over unstable particles
 70      for (const Particle& p : ufs.particles(Cuts::pid==221 || Cuts::pid==113 || Cuts::abspid==213)) {
 71        if (p.children().empty()) continue;
 72      	map<long,int> nRes = nCount;
 73      	int ncount = ntotal;
 74      	findChildren(p,nRes,ncount);
 75        // eta /rho0
 76        bool matched = false;
 77        if (p.pid()==221 || p.pid()==113) {
 78       	  if (ncount==3) {
 79      	    matched = true;
 80      	    for (const auto& val : nRes) {
 81      	      if (abs(val.first)==310) {
 82                if (val.second!=1) {
 83                  matched = false;
 84                  break;
 85                }
 86      	      }
 87              else if(abs(val.first)==211) {
 88                if (val.second!=1) {
 89                  matched = false;
 90                  break;
 91                }
 92      	      }
 93              else if (abs(val.first)==321) {
 94                if (val.second!=1) {
 95                  matched = false;
 96                  break;
 97                }
 98      	      }
 99      	      else if (val.second!=0) {
100                matched = false;
101                break;
102      	      }
103            }
104            if (matched) {
105              if (p.pid()==113) _sigma[6]->fill(_ecms);
106              else if (p.pid()==221 &&_sigma[1]) _sigma[1]->fill(_ecms);
107            }
108          }
109        }
110        // rho+/-
111        else if(p.abspid()==213) {
112          if (ncount==2) {
113            int sign = p.pid()>0 ? -1 : 1;
114            matched=true;
115            for (const auto& val : nRes) {
116              if (abs(val.first)==310) {
117                if (val.second!=1) {
118                  matched = false;
119                  break;
120                }
121      	      }
122              else if (val.first==321*sign) {
123                if (val.second!=1) {
124                  matched = false;
125                  break;
126                }
127      	      }
128      	      else if(val.second!=0) {
129                matched = false;
130                break;
131      	      }
132      	    }
133            if (matched) _sigma[5]->fill(_ecms);
134          }
135        }
136        if (matched) break;
137      }
138    }
139
140
141    /// Normalise histograms etc., after the run
142    void finalize() {
143      const double fact = crossSection()/ sumOfWeights() /picobarn;
144      for (unsigned int ix=0; ix<7; ++ix) {
145        if (_sigma[ix]) scale(_sigma[ix],fact);
146      }
147    }
148
149    /// @}
150
151
152    /// @name Histograms
153    /// @{
154    BinnedHistoPtr<string> _sigma[7];
155    string _ecms;
156    /// @}
157
158
159  };
160
161
162  RIVET_DECLARE_PLUGIN(BESII_2009_I835937);
163
164}