rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BESII_2007_I762901

Cross-sections for light hadrons at 3.650 and 3.773 GeV
Experiment: BESII (BEPC)
Inspire ID: 762901
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B656 (2007) 30-37, 2007
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+e- to hadrons

Cross section for $e^+e^-\to 2\pi^+2\pi^-K^+K^-$, $\pi^+\pi^-2K^+2K^-$, $2\pi^+2\pi^-p\bar{p}$, $3\pi^+3\pi^-$, $2\pi^+2\pi^-K^+K^-\pi^0$, $\rho^0\pi^+\pi^-$, $\rho^0K^+K^-$, $\rho^0p\bar{p}$, $K^{*0}K^-\pi^++\text{c.c.}$ at 3.650 and 3.773 GeV.

Source code: BESII_2007_I762901.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-sections for light hadrons at 3.650 and 3.773 GeV
 10  class BESII_2007_I762901 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BESII_2007_I762901);
 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
 27      // Book histograms
 28      for(unsigned int ix=1;ix<11;++ix) {
 29        stringstream ss;
 30        ss << "TMP/n" << ix;
 31        book(_nMeson[ix], ss.str());
 32      }
 33
 34    }
 35
 36    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 37      for(const Particle &child : p.children()) {
 38        if(child.children().empty()) {
 39          nRes[child.pid()]-=1;
 40          --ncount;
 41        }
 42        else
 43          findChildren(child,nRes,ncount);
 44      }
 45    }
 46
 47    /// Perform the per-event analysis
 48    void analyze(const Event& event) {
 49      const FinalState& fs = apply<FinalState>(event, "FS");
 50
 51      map<long,int> nCount;
 52      int ntotal(0);
 53      for (const Particle& p : fs.particles()) {
 54        nCount[p.pid()] += 1;
 55        ++ntotal;
 56      }
 57      if(ntotal==6) {
 58        if(nCount[211]==2 && nCount[-211]==2 && nCount[321]==1 && nCount[-321]==1)
 59          _nMeson[1]->fill();
 60        else if(nCount[211]==1 && nCount[-211]==1 && nCount[321]==2 && nCount[-321]==2)
 61          _nMeson[2]->fill();
 62        else if(nCount[211]==2 && nCount[-211]==2 && nCount[2212]==1 && nCount[-2212]==1)
 63          _nMeson[3]->fill();
 64        else if(nCount[211]==3 && nCount[-211]==3)
 65          _nMeson[4]->fill();
 66      }
 67      else if(ntotal==7) {
 68        if(nCount[211]==2 && nCount[-211]==2 && nCount[321]==1 && nCount[-321]==1 && nCount[111]==1)
 69          _nMeson[5]->fill();
 70      }
 71      const FinalState& ufs = apply<FinalState>(event, "UFS");
 72      for (const Particle& p : ufs.particles()) {
 73        if(p.children().empty()) continue;
 74        if(p.pid()!=113 && abs(p.pid())!=313) continue;
 75        map<long,int> nRes = nCount;
 76        int ncount = ntotal;
 77        findChildren(p,nRes,ncount);
 78        if(p.pid()==113) {
 79          if(ncount!=2) continue;
 80          unsigned int nPi(0),nK(0),nProt(0);
 81          bool matched = true;
 82          for(auto const & val : nRes) {
 83            if(abs(val.first)==211 && val.second==1) {
 84              nPi+=1;
 85            }
 86            else if(abs(val.first)==321 && val.second==1) {
 87              nK+=1;
 88            }
 89            else if(abs(val.first)==2212 && val.second==1) {
 90              nProt+=1;
 91            }
 92            else if(val.second!=0) {
 93              matched = false;
 94              break;
 95            }
 96          }
 97          if(matched) {
 98            if(nProt==2 && nPi==0 && nK==0)
 99              _nMeson[9]->fill();
100            else if(nProt==0 && nPi==2 && nK==0)
101              _nMeson[7]->fill();
102            else if(nProt==0 && nPi==0 && nK==2)
103              _nMeson[8]->fill();
104          }
105        }
106        else if(abs(p.pid())==313) {
107          if(ncount!=2) continue;
108          unsigned int npi(0),nK(0);
109          bool matched = true;
110          int ipi = p.pid()==313 ?  211 : -211;
111          int iK  = p.pid()==313 ? -321 :  321;
112          for(auto const & val : nRes) {
113            if(abs(val.first)== ipi && val.second==1) {
114              npi+=1;
115            }
116            else if(abs(val.first)==iK && val.second==1) {
117              nK+=1;
118            }
119            else if(val.second!=0) {
120              matched = false;
121              break;
122            }
123          }
124          if(matched) {
125            if(npi==1&&nK==1)
126              _nMeson[10]->fill();
127          }
128        }
129      }
130    }
131
132
133    /// Normalise histograms etc., after the run
134    void finalize() {
135      for(unsigned int ix=1;ix<11;++ix) {
136        if(ix==6) continue;
137        double sigma = _nMeson[ix]->val();
138        double error = _nMeson[ix]->err();
139        sigma *= crossSection()/ sumOfWeights() /picobarn;
140        error *= crossSection()/ sumOfWeights() /picobarn;
141        Estimate1DPtr  mult;
142        book(mult, 1, 1, ix);
143        for (auto& b : mult->bins()) {
144          if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
145            b.set(sigma, error);
146          }
147        }
148      }
149    }
150
151    /// @}
152
153
154    /// @name Histograms
155    /// @{
156    CounterPtr _nMeson[11];
157    /// @}
158
159
160  };
161
162
163  RIVET_DECLARE_PLUGIN(BESII_2007_I762901);
164
165}