rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

BELLE_2021_I1859137

Cross section for $B,\bar{B}$, $B\bar{B}^*$ and $B^*\bar{B}^*$ for energies between 10.63 and 11.02 GeV
Experiment: BELLE (KEKB)
Inspire ID: 1859137
Status: VALIDATED
Authors:
  • Peter Richardson
References: Beams: e+ e-
Beam energies: ANY
Run details:
  • e+ e- to hadrons

Measurement of the cross sections for $B,\bar{B}$, $B\bar{B}^*$ and $B^*\bar{B}^*$ by the BELLE experiment for energies between 10.63 and 11.02 GeV.

Source code: BELLE_2021_I1859137.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 B(*) bar{B}(*) exclusive cross section
 10  class BELLE_2021_I1859137 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2021_I1859137);
 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      // histograms
 26      book(_nBB  , "/TMP/nBB"  );
 27      book(_nBBS , "/TMP/nBBS" );
 28      book(_nBSBS, "/TMP/nBSBS");
 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    /// Perform the per-event analysis
 43    void analyze(const Event& event) {
 44      const FinalState& fs = apply<FinalState>(event, "FS");
 45
 46      map<long,int> nCount;
 47      int ntotal(0);
 48      for (const Particle& p : fs.particles()) {
 49	nCount[p.pid()] += 1;
 50	++ntotal;
 51      }
 52      // extract botton hadrons
 53      Particles bHadrons=apply<FinalState>(event, "UFS").particles(Cuts::abspid==511 or Cuts::abspid==513 or
 54								   Cuts::abspid==521 or Cuts::abspid==523);
 55      for(unsigned int ix=0;ix<bHadrons.size();++ix) {
 56	long pix = bHadrons[ix].parents()[0].abspid();
 57	if(pix==511 || pix==413 || pix==521 || pix==523) continue;
 58	map<long,int> nRes = nCount;
 59	int ncount = ntotal;
 60	findChildren(bHadrons[ix],nRes,ncount);
 61	bool matched=false;
 62	for(unsigned int iy=ix+1;iy<bHadrons.size();++iy) {
 63	  long piy = bHadrons[ix].parents()[0].abspid();
 64	  if(piy==511 || piy==413 || piy==521 || piy==523) continue;
 65	  map<long,int> nRes2 = nRes;
 66	  int ncount2 = ncount;
 67	  findChildren(bHadrons[iy],nRes2,ncount2);
 68	  if(ncount2!=0) continue;
 69	  matched=true;
 70	  for(auto const & val : nRes2) {
 71	    if(val.second!=0) {
 72	      matched = false;
 73	      break;
 74	    }
 75	  }
 76	  if(matched) {
 77	    if(bHadrons[ix].abspid()==511 ||
 78	       bHadrons[ix].abspid()==521) {
 79	      if(bHadrons[iy].pid()==-bHadrons[ix].pid())
 80		_nBB->fill();
 81	      else
 82		_nBBS->fill();
 83	    }
 84	    else if(bHadrons[ix].abspid()==513 ||
 85		    bHadrons[ix].abspid()==523) {
 86	      if(bHadrons[iy].pid()==-bHadrons[ix].pid())
 87		_nBSBS->fill();
 88	      else
 89		_nBBS->fill();
 90	    }
 91	    break;
 92	  }
 93	}
 94	if(matched) break;
 95      }
 96    }
 97
 98    /// Normalise histograms etc., after the run
 99    void finalize() {
100      for(unsigned int iy=1;iy<4;++iy) {
101        double sigma,error;
102        if(iy==1) {
103          sigma = _nBB->val();
104          error = _nBB->err();
105        }
106        else if(iy==2) {
107          sigma = _nBBS->val();
108          error = _nBBS->err();
109        }
110        else {
111          sigma = _nBSBS->val();
112          error = _nBSBS->err();
113        }
114        sigma *= crossSection()/ sumOfWeights() /picobarn;
115        error *= crossSection()/ sumOfWeights() /picobarn;
116        Estimate1DPtr  mult;
117        book(mult, 1, 1, iy);
118        for (auto& b : mult->bins()) {
119          if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
120            b.set(sigma, error);
121          }
122        }
123      }
124    }
125
126    ///@}
127
128
129    /// @name Histograms
130    ///@{
131    CounterPtr _nBB,_nBBS,_nBSBS;
132    ///@}
133
134
135  };
136
137
138  RIVET_DECLARE_PLUGIN(BELLE_2021_I1859137);
139
140}