Rivet analyses referenceBESII_2007_I763880Cross-sections for light hadrons at 3.773 and 3.650 GeVExperiment: BESII (BEPC) Inspire ID: 763880 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Cross section for $e^+e^-\to \omega \pi^+\pi^-$, $\omega K^+K^-$, $\omega p\bar{p}$, $K^+K^-\rho^0\pi^0$, $K^+K^-\rho^+\pi^-+\text{c.c.}$, $K^{*0}K^-\pi^+\pi^0+\text{c.c.}$ and $K^{*+}K^-\pi^+\pi^-+\text{c.c.}$ at 3.773 and 3.650 GeV. Source code: BESII_2007_I763880.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 Cross-sections for light hadrons at 3.773 and 3.650 GeV
10 class BESII_2007_I763880 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESII_2007_I763880);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22
23 // Initialise and register projections
24 declare(FinalState(), "FS");
25 declare(UnstableParticles(), "UFS");
26
27 // Book histograms
28 for(unsigned int ix=1;ix<8;++ix) {
29 stringstream ss;
30 ss << "TMP/n" << ix;
31 book(_nMeson[ix], ss.str());
32 }
33 }
34
35
36 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
37 for (const Particle &child : p.children()) {
38 if(child.children().empty()) {
39 nRes[child.pid()]-=1;
40 --ncount;
41 }
42 else
43 findChildren(child,nRes,ncount);
44 }
45 }
46
47
48 /// Perform the per-event analysis
49 void analyze(const Event& event) {
50 const FinalState& fs = apply<FinalState>(event, "FS");
51
52 map<long,int> nCount;
53 int ntotal(0);
54 for (const Particle& p : fs.particles()) {
55 nCount[p.pid()] += 1;
56 ++ntotal;
57 }
58 const FinalState& ufs = apply<FinalState>(event, "UFS");
59 for (const Particle& p : ufs.particles()) {
60 if(p.children().empty()) continue;
61 if(p.pid()!=223 && p.pid()!=113&&abs(p.pid())!=313&& abs(p.pid())!=323)
62 continue;
63 map<long,int> nRes = nCount;
64 int ncount = ntotal;
65 findChildren(p,nRes,ncount);
66 if(p.pid()==113) {
67 if(ncount!=3) continue;
68 unsigned int npi(0),nK(0);
69 bool matched = true;
70 for(auto const & val : nRes) {
71 if(abs(val.first)==111 && val.second==1) {
72 npi+=1;
73 }
74 else if(abs(val.first)==321 && val.second==1) {
75 nK+=1;
76 }
77 else if(val.second!=0) {
78 matched = false;
79 break;
80 }
81 }
82 if(matched) {
83 if(npi==1&&nK==2)
84 _nMeson[4]->fill();
85 }
86 }
87 else if(abs(p.pid())==213) {
88 if(ncount!=3) continue;
89 unsigned int npi(0),nK(0);
90 bool matched = true;
91 int ipi = p.pid()==213 ? -211 : 211;
92 for(auto const & val : nRes) {
93 if(abs(val.first)== ipi && val.second==1) {
94 npi+=1;
95 }
96 else if(abs(val.first)==321 && val.second==1) {
97 nK+=1;
98 }
99 else if(val.second!=0) {
100 matched = false;
101 break;
102 }
103 }
104 if(matched) {
105 if(npi==1&&nK==2)
106 _nMeson[5]->fill();
107 }
108 }
109 else if(abs(p.pid())==313) {
110 if(ncount!=3) continue;
111 unsigned int npi(0),nK(0),npi0(0);
112 bool matched = true;
113 int ipi = p.pid()==313 ? 211 : -211;
114 int iK = p.pid()==313 ? -321 : 321;
115 for(auto const & val : nRes) {
116 if(abs(val.first)== ipi && val.second==1) {
117 npi+=1;
118 }
119 else if(abs(val.first)==iK && val.second==1) {
120 nK+=1;
121 }
122 if(abs(val.first)== 111 && val.second==1) {
123 npi0+=1;
124 }
125 else if(val.second!=0) {
126 matched = false;
127 break;
128 }
129 }
130 if(matched) {
131 if(npi==1&&nK==1&&npi0==1)
132 _nMeson[6]->fill();
133 }
134 }
135 else if(abs(p.pid())==323) {
136 if(ncount!=3) continue;
137 unsigned int npi(0),nK(0),npi0(0);
138 bool matched = true;
139 int ipi = p.pid()==323 ? 211 : -211;
140 int iK = p.pid()==323 ? -321 : 321;
141 for(auto const & val : nRes) {
142 if(abs(val.first)== ipi && val.second==1) {
143 npi+=1;
144 }
145 else if(abs(val.first)==iK && val.second==1) {
146 nK+=1;
147 }
148 if(abs(val.first)== 111 && val.second==1) {
149 npi0+=1;
150 }
151 else if(val.second!=0) {
152 matched = false;
153 break;
154 }
155 }
156 if(matched) {
157 if(npi==1&&nK==1&&npi0==1)
158 _nMeson[7]->fill();
159 }
160 }
161 }
162 }
163
164
165 /// Normalise histograms etc., after the run
166 void finalize() {
167 for(unsigned int ix=4;ix<8;++ix) {
168 double sigma = _nMeson[ix]->val();
169 double error = _nMeson[ix]->err();
170 sigma *= crossSection()/ sumOfWeights() /nanobarn;
171 error *= crossSection()/ sumOfWeights() /nanobarn;
172 Estimate1DPtr mult;
173 book(mult, 1, 1, ix);
174 for (auto& b : mult->bins()) {
175 if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
176 b.set(sigma, error);
177 }
178 }
179 }
180 }
181
182 /// @}
183
184
185 /// @name Histograms
186 /// @{
187 CounterPtr _nMeson[8];
188 /// @}
189
190
191 };
192
193
194 RIVET_DECLARE_PLUGIN(BESII_2007_I763880);
195
196}
|