Rivet analyses referenceCLEOIII_2006_I694869Cross section for $B_s^{(*)0}\bar{B}_s^{(*)0}$ at $\sqrt{s}=10.859$ GeVExperiment: CLEOIII (CESR) Inspire ID: 694869 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (5.4, 5.4) GeV Run details:
Measurement of the cross section for $B_s^{(*)0}\bar{B}_s^{(*)0}$ at $\sqrt{s}=10.859$ GeV. Source code: CLEOIII_2006_I694869.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- > B*s B*s
10 class CLEOIII_2006_I694869 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEOIII_2006_I694869);
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(Cuts::abspid==533), "UFS");
25 // histograms
26 book(_h,1,1,1);
27 }
28
29 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
30 for (const Particle &child : p.children()) {
31 if (child.children().empty()) {
32 nRes[child.pid()]-=1;
33 --ncount;
34 }
35 else {
36 findChildren(child,nRes,ncount);
37 }
38 }
39 }
40
41 /// Perform the per-event analysis
42 void analyze(const Event& event) {
43 const FinalState& fs = apply<FinalState>(event, "FS");
44
45 map<long,int> nCount;
46 int ntotal(0);
47 for (const Particle& p : fs.particles()) {
48 nCount[p.pid()] += 1;
49 ++ntotal;
50 }
51 // extract botton hadrons
52 Particles bHadrons=apply<FinalState>(event, "UFS").particles();
53 for (const Particle& p1 : bHadrons) {
54 if (p1.pid()<0 || p1.parents()[0].abspid()==533 ) continue;
55 map<long,int> nRes = nCount;
56 int ncount = ntotal;
57 findChildren(p1,nRes,ncount);
58 bool matched=false;
59 for (const Particle& p2 : bHadrons) {
60 if (p1.pid()!=-p2.pid() || p2.parents()[0].abspid()==533 ) continue;
61 map<long,int> nRes2 = nRes;
62 int ncount2 = ncount;
63 findChildren(p2,nRes2,ncount2);
64 if (ncount2!=0) continue;
65 matched=true;
66 for (const auto& val : nRes2) {
67 if (val.second!=0) {
68 matched = false;
69 break;
70 }
71 }
72 if (matched) {
73 _h->fill("10.859"s);
74 break;
75 }
76 }
77 if(matched) break;
78 }
79 }
80
81
82 /// Normalise histograms etc., after the run
83 void finalize() {
84 scale(_h,crossSection()/ sumOfWeights() /nanobarn);
85 }
86
87 /// @}
88
89
90 /// @name Histograms
91 /// @{
92 BinnedHistoPtr<string> _h;
93 /// @}
94
95
96 };
97
98
99 RIVET_DECLARE_PLUGIN(CLEOIII_2006_I694869);
100
101}
|