Processing math: 100%
rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2008_I759262

Cross section for e+eJ/ψX(3940),X(4160) at s=10.6GeV
Experiment: BELLE (KEKB)
Inspire ID: 759262
Status: VALIDATED NOHEPDATA
Authors:
  • Peter Richardson
References:
  • Phys.Rev.Lett. 100 (2008) 202001
Beams: e+ e-
Beam energies: (5.3, 5.3) GeV
Run details:
  • e+e- -> J/psi X(3940) X(4160)

Cross section for e+eJ/ψX(3940)/X(4160) at s=10.6GeV. The X(3940) is measured using DˉD modes while the X(4160) mode is measured using DˉD modes. The status of the X(3940) is not clear, we take the PDG code to be 9010441, which can be changed using the PID3940 option. For the X(4160) spin, partiy, 2 is favoured and therefore we use 9010445, which can be changed using the PID4160 option.

Source code: BELLE_2008_I759262.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- > J/psi X(3940) or X(4160)
 10  class BELLE_2008_I759262 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2008_I759262);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      // set the PDG code
 23      _pid[0] = getOption<int>("PID3940", 9010441);
 24      _pid[1] = getOption<int>("PID4160", 9010445);
 25      // projections
 26      declare("FS",FinalState());
 27      declare("UFS",UnstableParticles(Cuts::pid==443 ||
 28                                      Cuts::pid==_pid[0] ||
 29                                      Cuts::pid==_pid[1]));
 30      // histograms
 31      for (unsigned int ix=0; ix<2; ++ix) {
 32        book(_h[ix], 1, 1, 1+ix);
 33      }
 34    }
 35
 36    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount,
 37		      unsigned int & nCharged) {
 38      for (const Particle &child : p.children()) {
 39        if (child.children().empty()) {
 40          --nRes[child.pid()];
 41          --ncount;
 42          if (PID::isCharged(p.pid())) ++nCharged;
 43        }
 44        else {
 45          findChildren(child,nRes,ncount,nCharged);
 46        }
 47      }
 48    }
 49
 50    /// Perform the per-event analysis
 51    void analyze(const Event& event) {
 52      // final state particles
 53      const FinalState& fs = apply<FinalState>(event, "FS");
 54      map<long,int> nCount;
 55      int ntotal(0);
 56      for (const Particle& p : fs.particles()) {
 57      	nCount[p.pid()] += 1;
 58      	++ntotal;
 59      }
 60      // loop over J/psi
 61      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 62      bool matched=false;
 63      for (const Particle& p : ufs.particles(Cuts::pid==443)) {
 64      	if (p.children().empty()) continue;
 65      	map<long,int> nRes = nCount;
 66      	int ncount = ntotal;
 67      	unsigned int nCharged=0;
 68      	findChildren(p,nRes,ncount,nCharged);
 69      	// X(3940)/X(4160)
 70       	for (const Particle& p2 : ufs.particles(Cuts::pid!=443)) {
 71          map<long,int> nResB = nRes;
 72          int ncountB = ncount;
 73          unsigned int nChargedB=0;
 74          findChildren(p2,nResB,ncountB,nChargedB);
 75          if (ncountB!=0) continue;
 76          matched = true;
 77          for (const auto& val : nResB) {
 78            if (val.second!=0) {
 79              matched = false;
 80              break;
 81            }
 82          }
 83          if (matched) {
 84            if (p2.children().size()!=2) break;
 85            if (p2.children()[0].pid()*p2.children()[1].pid()>0) break;
 86            if (p2.pid()==_pid[0]) {
 87              if ((p2.children()[0].abspid()==413 && p2.children()[1].abspid()==411) ||
 88                  (p2.children()[1].abspid()==413 && p2.children()[0].abspid()==411) ||
 89                  (p2.children()[0].abspid()==423 && p2.children()[1].abspid()==421) ||
 90                  (p2.children()[1].abspid()==423 && p2.children()[0].abspid()==421))
 91                _h[0]->fill("10.6"s);
 92              }
 93              else {
 94              if (p2.children()[0].pid()==-p2.children()[1].pid() &&
 95                 (p2.children()[0].abspid()==413 || p2.children()[0].abspid()==423))
 96                _h[1]->fill("10.6"s);
 97              }
 98            break;
 99          }
100        }
101        if (matched) break;
102      }
103    }
104
105
106    /// Normalise histograms etc., after the run
107    void finalize() {
108      scale(_h, crossSection()/ sumOfWeights() /femtobarn);
109    }
110
111    /// @}
112
113
114    /// @name Histograms
115    /// @{
116    int _pid[2];
117    BinnedHistoPtr<string> _h[2];
118    /// @}
119
120
121  };
122
123
124  RIVET_DECLARE_PLUGIN(BELLE_2008_I759262);
125
126}