Rivet analyses referenceBELLE_2015_I1411223Cross section for $(BB^*)^\pm\pi^\mp$ and $(B^*B^*)^\pm\pi^\mp$ for $\sqrt{s}=10.866$ GeVExperiment: BELLE (KEKB) Inspire ID: 1411223 Status: VALIDATED NOHEPDATA Authors:
Beam energies: (5.4, 5.4) GeV Run details:
Measurement of the cross section for $(BB^*)^\pm\pi^\mp$ and $(B^*B^*)^\pm\pi^\mp$ at $\sqrt{s}=10.866$ GeV. Source code: BELLE_2015_I1411223.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(*) B* pi
10 class BELLE_2015_I1411223 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2015_I1411223);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 declare(FinalState(), "FS");
24 // histograms
25 for (unsigned int ix=0;ix<2;++ix) {
26 book(_h[ix],1,1,1+ix);
27 }
28 }
29
30
31 /// Perform the per-event analysis
32 void analyze(const Event& event) {
33 Particles fs = apply<FinalState>(event, "FS").particles();
34 Particles BB,other;
35 for(const Particle & p : fs) {
36 Particle parent=p;
37 while (!parent.parents().empty()) {
38 parent=parent.parents()[0];
39 if (parent.abspid()==511 || parent.abspid()==521 ||
40 parent.abspid()==513 || parent.abspid()==523) break;
41 }
42 if ((parent.abspid()==511 || parent.abspid()==521) &&
43 !parent.parents().empty()) {
44 Particle Bstar = parent.parents()[0];
45 if (Bstar.abspid()==513 || Bstar.abspid()==523) {
46 parent=Bstar;
47 }
48 }
49 if (parent.abspid()==511 || parent.abspid()==521 ||
50 parent.abspid()==513 || parent.abspid()==523) {
51 bool found=false;
52 for (const auto& B : BB) {
53 // B already in list
54 if (fuzzyEquals(B.mom(),parent.mom())) {
55 found=true;
56 break;
57 }
58 }
59 if (!found) BB += parent;
60 }
61 else {
62 other += p;
63 }
64 }
65 // B Bbar + charged pion
66 if (BB.size()!=2 || other.size()!=1) vetoEvent;
67 if (BB[0].pid()*BB[1].pid()>0) vetoEvent;
68 if (other[0].abspid()!=211) vetoEvent;
69 if (BB[0].abspid()%10!=3) swap(BB[0],BB[1]);
70 // B0 B*- pi+ +cc
71 if ((BB[0].pid()==-513 && BB[1].pid()== 521 && other[0].pid()==-211) ||
72 (BB[0].pid()== 513 && BB[1].pid()==-521 && other[0].pid()== 211) ||
73 (BB[0].pid()== 523 && BB[1].pid()==-511 && other[0].pid()==-211) ||
74 (BB[0].pid()==-523 && BB[1].pid()== 511 && other[0].pid()== 211)) {
75 _h[0]->fill("10.866"s);
76 }
77 else if ((BB[0].pid()==-513 && BB[1].pid()== 523 && other[0].pid()==-211) ||
78 (BB[0].pid()== 513 && BB[1].pid()==-523 && other[0].pid()== 211) ||
79 (BB[0].pid()== 523 && BB[1].pid()==-513 && other[0].pid()==-211) ||
80 (BB[0].pid()==-523 && BB[1].pid()== 513 && other[0].pid()== 211)) {
81 _h[1]->fill("10.866"s);
82 }
83 }
84
85
86 /// Normalise histograms etc., after the run
87 void finalize() {
88 scale(_h, crossSection()/ sumOfWeights() /picobarn);
89 }
90
91 /// @}
92
93
94 /// @name Histograms
95 /// @{
96 BinnedHistoPtr<string> _h[2];
97 /// @}
98
99
100 };
101
102
103 RIVET_DECLARE_PLUGIN(BELLE_2015_I1411223);
104
105}
|