rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2015_I1336624

Measurements of $R$ for $b\bar{b}$ and $\Upsilon(1,2,3S)\pi^+\pi^-$ between 10.63 and 11.05 GeV
Experiment: BELLE (KEKB)
Inspire ID: 1336624
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Rev. D93 (2016) no.1, 011101
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+e- to hadrons and muons (for normalisation)

Measurement of the ratio of the cross sections for $e^+e^-\to\Upsilon(1,2,3S)\pi^+\pi^-$ and $e^+e^-\to b\bar{b}$ to the muon cross section for energies between 10.63 and 11.05 GeV by the BELLE collaboration.

Source code: BELLE_2015_I1336624.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/UnstableParticles.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief Add a short analysis description here
 10  class BELLE_2015_I1336624 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2015_I1336624);
 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      book(_c_hadrons, "/TMP/sigma_hadrons");
 29      book(_c_1S     , "/TMP/1S");
 30      book(_c_2S     , "/TMP/2S");
 31      book(_c_3S     , "/TMP/3S");
 32      book(_c_muons, "/TMP/sigma_muons");
 33    }
 34
 35    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 36      for (const Particle &child : p.children()) {
 37	if(child.children().empty()) {
 38	  --nRes[child.pid()];
 39	  --ncount;
 40	}
 41	else
 42	  findChildren(child,nRes,ncount);
 43      }
 44    }
 45
 46    /// Perform the per-event analysis
 47    void analyze(const Event& event) {
 48      // analyse the final state
 49      const FinalState& fs = apply<FinalState>(event, "FS");
 50      map<long,int> nCount;
 51      int ntotal(0);
 52      for (const Particle& p : fs.particles()) {
 53	nCount[p.pid()] += 1;
 54	++ntotal;
 55      }
 56      // intermediates
 57      bool isBottom(false);
 58      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 59      for (const Particle& p : ufs.particles()) {
 60	// check for bottom hadrons
 61        if (PID::isBottomHadron(p.pid())) {
 62	  isBottom = true;
 63	  break;
 64	}
 65	// upsilon + pi+pi-
 66	if(p.children().empty()) continue;
 67	if(p.pid() !=   553  &&
 68	   p.pid() != 100553 &&
 69	   p.pid() != 200553 ) continue;
 70	map<long,int> nRes = nCount;
 71	int ncount = ntotal;
 72	findChildren(p,nRes,ncount);
 73	if(ncount!=2) continue;
 74	bool matched = true;
 75	for(auto const & val : nRes) {
 76	  if(abs(val.first)==211) {
 77	    continue;
 78	  }
 79	  else if(val.second!=0) {
 80	    matched = false;
 81	    break;
 82	  }
 83	}
 84	if(matched) {
 85	  if(nRes[211]==1 && nRes[-211]==1 ) {
 86	    if(p.pid()==553)
 87	      _c_1S->fill();
 88	    if(p.pid()==100553)
 89	      _c_2S->fill();
 90	    if(p.pid()==200553)
 91	      _c_3S->fill();
 92	  }
 93	}
 94      }
 95      // mu+mu- + photons
 96      if(nCount[-13]==1 and nCount[13]==1 &&
 97	 ntotal==2+nCount[22])
 98	_c_muons->fill();
 99      // open bottom
100      else if(isBottom) {
101	_c_hadrons->fill();
102      }
103    }
104
105
106    /// Normalise histograms etc., after the run
107    void finalize() {
108      // loop over histos to be filled
109      for(unsigned int ix=1;ix<3;++ix) {
110	Scatter1D R;
111	for(unsigned int iy=1;iy<4;++iy) {
112	  if(ix==2 && iy!=1) continue;
113	  if(ix==1) {
114	    if(iy==1) {
115	      R = *_c_1S/ *_c_muons;
116	    }
117	    else if(iy==2) {
118	      R = *_c_2S/ *_c_muons;
119	    }
120	    else {
121	      R = *_c_3S/ *_c_muons;
122	    }
123	  }
124	  else if(ix==2) {
125	    R = *_c_hadrons/ *_c_muons;
126	  }
127	  double              rval = R.point(0).x();
128	  pair<double,double> rerr = R.point(0).xErrs();
129	  Scatter2D temphisto(refData(ix, 1, iy));
130	  Scatter2DPtr     mult;
131	  book(mult, ix, 1, iy);
132	  for (size_t b = 0; b < temphisto.numPoints(); b++) {
133	    const double x  = temphisto.point(b).x();
134	    pair<double,double> ex = temphisto.point(b).xErrs();
135	    pair<double,double> ex2 = ex;
136	    if(ex2.first ==0.) ex2. first=0.0001;
137	    if(ex2.second==0.) ex2.second=0.0001;
138	    if (inRange(sqrtS()/MeV, x-ex2.first, x+ex2.second)) {
139	      mult   ->addPoint(x, rval, ex, rerr);
140	    }
141	    else {
142	      mult   ->addPoint(x, 0., ex, make_pair(0.,.0));
143	    }
144	  }
145	}
146      }
147    }
148
149    //@}
150
151
152    /// @name Histograms
153    //@{
154    CounterPtr _c_hadrons, _c_muons, _c_1S, _c_2S, _c_3S;
155    //@}
156
157
158  };
159
160
161  RIVET_DECLARE_PLUGIN(BELLE_2015_I1336624);
162
163}