Rivet analyses referenceBELLE_2021_I1859137Cross section for $B,\bar{B}$, $B\bar{B}^*$ and $B^*\bar{B}^*$ for energies between 10.63 and 11.02 GeVExperiment: BELLE (KEKB) Inspire ID: 1859137 Status: VALIDATED Authors:
Beam energies: ANY Run details:
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 Scatter2D temphisto(refData( 1, 1, iy));
117 Scatter2DPtr mult;
118 book(mult, 1, 1, iy);
119 for (size_t b = 0; b < temphisto.numPoints(); b++) {
120 const double x = temphisto.point(b).x();
121 pair<double,double> ex = temphisto.point(b).xErrs();
122 pair<double,double> ex2 = ex;
123 if(ex2.first ==0.) ex2. first=0.0001;
124 if(ex2.second==0.) ex2.second=0.0001;
125 if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
126 mult->addPoint(x, sigma, ex, make_pair(error,error));
127 }
128 else {
129 mult->addPoint(x, 0., ex, make_pair(0.,.0));
130 }
131 }
132 }
133 }
134
135 ///@}
136
137
138 /// @name Histograms
139 ///@{
140 CounterPtr _nBB,_nBBS,_nBSBS;
141 ///@}
142
143
144 };
145
146
147 RIVET_DECLARE_PLUGIN(BELLE_2021_I1859137);
148
149}
|