Rivet analyses referenceBELLE_2017_I1607562Invariant-mass and fractional-energy dependence of inclusive production of di-hadrons at $\sqrt{s}=10.58$ GeVExperiment: BELLE (KEKB) Inspire ID: 1607562 Status: VALIDATED Authors:
Beam energies: (5.3, 5.3) GeV Run details:
Measurement of the double differential cross secrion for the production of hadron pairs by BELLE Source code: BELLE_2017_I1607562.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/Thrust.hh"
5
6namespace Rivet {
7
8
9 /// @brief BELLE double differential cross section
10 class BELLE_2017_I1607562 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BELLE_2017_I1607562);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // projections
23 FinalState fs;
24 declare(fs,"FS");
25 declare(Thrust(fs),"Thrust");
26 // histograms
27 const vector<double> bins{0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,
28 0.65,0.70,0.75,0.80,0.85,0.90,0.95,1.00};
29 for (size_t ip=0; ip<6; ++ip) {
30 book(_h_all[ip], bins);
31 book(_h_strong[ip], bins);
32 for (size_t iy=1; iy < _h_all[ip]->numBins()+1; ++iy) {
33 book(_h_all[ip]->bin(iy), 1, ip+1, iy);
34 book(_h_strong[ip]->bin(iy), 2, ip+1, iy);
35 }
36 }
37 }
38
39 bool isWeak(const Particle & p) {
40 bool weak = false;
41 if(p.parents().empty()) return weak;
42 Particle parent = p.parents()[0];
43 while (!parent.parents().empty()) {
44 if(parent.abspid()==411 || parent.abspid()==421 || parent.abspid()==431 ||
45 parent.abspid()==4122 || parent.abspid()==4232 || parent.abspid()==4132 ||
46 parent.abspid()==4332) {
47 weak=true;
48 break;
49 }
50 parent = parent.parents()[0];
51 }
52 return weak;
53 }
54
55 /// Perform the per-event analysis
56 void analyze(const Event& event) {
57 // get thrust and apply cut
58 const Thrust thrust = apply<Thrust>(event,"Thrust");
59 if(thrust.thrust()<0.8) vetoEvent;
60 // get thrust axis
61 Vector3 axis = thrust.thrustAxis();
62 Particles charged = apply<FinalState>(event,"FS").particles(Cuts::abspid==PID::KPLUS or
63 Cuts::abspid==PID::PIPLUS);
64 for (unsigned int ix=0;ix<charged.size();++ix) {
65 double dot1 = axis.dot(charged[ix].momentum().p3());
66 bool weak1 = isWeak(charged[ix]);
67 if (2.*charged[ix].momentum().t()/sqrtS()<0.1) continue;
68 for(unsigned int iy=ix+1;iy<charged.size();++iy) {
69 if (2.*charged[iy].momentum().t()/sqrtS()<0.1) continue;
70 double dot2 = axis.dot(charged[iy].momentum().p3());
71 bool weak2 = isWeak(charged[iy]);
72 if (dot1*dot2<0.) continue;
73 FourMomentum p = charged[ix].momentum()+charged[iy].momentum();
74 double z12 = 2.*p.t()/sqrtS();
75 double m12 = p.mass();
76 bool strong = !weak1 && !weak2;
77 if (charged[ix].pid()==PID::PIPLUS) {
78 if (charged[iy].pid()==PID::PIPLUS) {
79 _h_all[1]->fill(z12,m12);
80 if (strong) _h_strong[1]->fill(z12,m12);
81 }
82 else if (charged[iy].pid()==PID::PIMINUS) {
83 _h_all[0]->fill(z12,m12);
84 if (strong) _h_strong[0]->fill(z12,m12);
85 }
86 else if (charged[iy].pid()==PID::KPLUS) {
87 _h_all[3]->fill(z12,m12);
88 if (strong) _h_strong[3]->fill(z12,m12);
89 }
90 else if (charged[iy].pid()==PID::KMINUS) {
91 _h_all[2]->fill(z12,m12);
92 if (strong) _h_strong[2]->fill(z12,m12);
93 }
94 }
95 else if (charged[ix].pid()==PID::PIMINUS) {
96 if (charged[iy].pid()==PID::PIPLUS) {
97 _h_all[0]->fill(z12,m12);
98 if (strong) _h_strong[0]->fill(z12,m12);
99 }
100 else if (charged[iy].pid()==PID::PIMINUS) {
101 _h_all[1]->fill(z12,m12);
102 if (strong) _h_strong[1]->fill(z12,m12);
103 }
104 else if (charged[iy].pid()==PID::KPLUS) {
105 _h_all[2]->fill(z12,m12);
106 if (strong) _h_strong[2]->fill(z12,m12);
107 }
108 else if (charged[iy].pid()==PID::KMINUS) {
109 _h_all[3]->fill(z12,m12);
110 if (strong) _h_strong[3]->fill(z12,m12);
111 }
112 }
113 else if (charged[ix].pid()==PID::KPLUS) {
114 if (charged[iy].pid()==PID::PIPLUS) {
115 _h_all[3]->fill(z12,m12);
116 if (strong) _h_strong[3]->fill(z12,m12);
117 }
118 else if (charged[iy].pid()==PID::PIMINUS) {
119 _h_all[2]->fill(z12,m12);
120 if (strong) _h_strong[2]->fill(z12,m12);
121 }
122 else if (charged[iy].pid()==PID::KPLUS) {
123 _h_all[5]->fill(z12,m12);
124 if (strong) _h_strong[5]->fill(z12,m12);
125 }
126 else if (charged[iy].pid()==PID::KMINUS) {
127 _h_all[4]->fill(z12,m12);
128 if (strong) _h_strong[4]->fill(z12,m12);
129 }
130 }
131 else if (charged[ix].pid()==PID::KMINUS) {
132 if (charged[iy].pid()==PID::PIPLUS) {
133 _h_all[2]->fill(z12,m12);
134 if (strong) _h_strong[2]->fill(z12,m12);
135 }
136 else if (charged[iy].pid()==PID::PIMINUS) {
137 _h_all[3]->fill(z12,m12);
138 if (strong) _h_strong[3]->fill(z12,m12);
139 }
140 else if (charged[iy].pid()==PID::KPLUS) {
141 _h_all[4]->fill(z12,m12);
142 if (strong) _h_strong[4]->fill(z12,m12);
143 }
144 else if (charged[iy].pid()==PID::KMINUS) {
145 _h_all[5]->fill(z12,m12);
146 if (strong) _h_strong[5]->fill(z12,m12);
147 }
148 }
149 }
150 }
151 }
152
153
154 /// Normalise histograms etc., after the run
155 void finalize() {
156 // now need width as well
157 double fact = crossSection()/nanobarn/sumOfWeights()/0.05;
158 scale(_h_all, fact);
159 scale(_h_strong, fact);
160 }
161
162 /// @}
163
164
165 /// @name Histograms
166 /// @{
167 Histo1DGroupPtr _h_all[6], _h_strong[6];
168 /// @}
169
170
171 };
172
173
174 RIVET_DECLARE_PLUGIN(BELLE_2017_I1607562);
175
176}
|