Rivet analyses referenceCLEO_2006_I691720Cross section for light hadron production at 3.671 and 3.773 GeVExperiment: CLEO (CESR) Inspire ID: 691720 Status: VALIDATED Authors:
Beam energies: (1.8, 1.8); (1.9, 1.9) GeV Run details:
Cross section for $e^+e^-\to \pi^+\pi^-\pi^0$, $\rho^0\pi^0$, $\rho^\pm\pi^\mp$, $\omega\pi^0$, $\rho^0\eta$, $\omega\eta$, $\phi\eta$, $\rho^0\eta^\prime$, $\omega\eta^\prime$, $\phi\eta^\prime$, $K^{*0}\bar{K}^{*0}$, $K^{*\pm} K^\mp$, $b_1^0\pi^0$, $b_1^\pm\pi^\mp$ at 3.671 and 3.773 GeV Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples Source code: CLEO_2006_I691720.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FastJets.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5
6namespace Rivet {
7
8
9 /// @brief e+ e- -> hadrons
10 class CLEO_2006_I691720 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CLEO_2006_I691720);
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<18;++ix) {
29 if(ix==6||ix==16) continue;
30 book(_nMeson[ix], 1,1,ix);
31 }
32 for (const string& en : _nMeson[1].binning().edges<0>()) {
33 double end = std::stod(en)*GeV;
34 if(isCompatibleWithSqrtS(end)) {
35 _ecms = en;
36 break;
37 }
38 }
39 if(_ecms.empty()) MSG_ERROR("Beam energy incompatible with analysis.");
40 }
41
42 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
43 for (const Particle &child : p.children()) {
44 if(child.children().empty()) {
45 nRes[child.pid()]-=1;
46 --ncount;
47 }
48 else
49 findChildren(child,nRes,ncount);
50 }
51 }
52
53 /// Perform the per-event analysis
54 void analyze(const Event& event) {
55 const FinalState& fs = apply<FinalState>(event, "FS");
56
57 map<long,int> nCount;
58 int ntotal(0);
59 for (const Particle& p : fs.particles()) {
60 nCount[p.pid()] += 1;
61 ++ntotal;
62 }
63 if(ntotal==3) {
64 if(nCount[211]==1 && nCount[-211]==1 && nCount[111]==1)
65 _nMeson[1]->fill(_ecms);
66 }
67 const FinalState& ufs = apply<FinalState>(event, "UFS");
68 for(unsigned int ix=0;ix<ufs.particles().size();++ix) {
69 const Particle& p1 = ufs.particles()[ix];
70 if(p1.children().empty()) continue;
71 if(p1.pid()!=113 && abs(p1.pid())!=313) continue;
72 map<long,int> nRes = nCount;
73 int ncount = ntotal;
74 findChildren(p1,nRes,ncount);
75 if(p1.pid()==113 || p1.pid()==223 || p1.pid()==10113) {
76 if(ncount!=1) continue;
77 bool matched = true;
78 for(auto const & val : nRes) {
79 if(abs(val.first)==111 && val.second!=1) {
80 matched = false;
81 break;
82 }
83 else if(val.second!=0) {
84 matched = false;
85 break;
86 }
87 }
88 if(matched) {
89 if(p1.pid()==113) {
90 _nMeson[2]->fill(_ecms);
91 _nMeson[3]->fill(_ecms);
92 }
93 else if(p1.pid()==223) {
94 _nMeson[5]->fill(_ecms);
95 }
96 else if(p1.pid()==10113) {
97 _nMeson[15]->fill(_ecms);
98 }
99 }
100 }
101 else if(p1.pid()==abs(113) || abs(p1.pid())==10113) {
102 if(ncount!=1) continue;
103 bool matched = true;
104 int ipi = p1.pid()>0 ? -211 : 211;
105 for(auto const & val : nRes) {
106 if(abs(val.first)==ipi && val.second!=1) {
107 matched = false;
108 break;
109 }
110 else if(val.second!=0) {
111 matched = false;
112 break;
113 }
114 }
115 if(matched) {
116 if(p1.pid()==abs(113)) {
117 _nMeson[2]->fill(_ecms);
118 _nMeson[4]->fill(_ecms);
119 }
120 else {
121 _nMeson[15]->fill(_ecms);
122 _nMeson[17]->fill(_ecms);
123 }
124 }
125 }
126 else if(p1.pid()==abs(323)) {
127 if(ncount!=1) continue;
128 bool matched = true;
129 int iK = p1.pid()==323 ? -321 : 321;
130 for(auto const & val : nRes) {
131 if(abs(val.first)==iK && val.second!=1) {
132 matched = false;
133 break;
134 }
135 else if(val.second!=0) {
136 matched = false;
137 break;
138 }
139 }
140 if(matched) {
141 if(_ecms=="3.671"s) _nMeson[14]->fill(_ecms);
142 }
143 }
144 // second unstable particle
145 if(abs(p1.pid())!=313 && p1.pid()!=113 && p1.pid()!=223 &&
146 p1.pid()!=333 && p1.pid()!=221 && p1.pid()!=331)
147 continue;
148 for(unsigned int iy=ix+1;iy<ufs.particles().size();++iy) {
149 const Particle& p2 = ufs.particles()[iy];
150 map<long,int> nRes2 = nRes;
151 int ncount2 = ncount;
152 findChildren(p2,nRes2,ncount2);
153 if(ncount!=0) continue;
154 bool matched=true;
155 for(auto const & val : nRes2) {
156 if(val.second!=0) {
157 matched = false;
158 break;
159 }
160 }
161 if(!matched) continue;
162 if( (p1.pid()==113 && p2.pid()==221) ||
163 (p2.pid()==113 && p1.pid()==221) )
164 _nMeson[7]->fill(_ecms);
165 else if( (p1.pid()==223 && p2.pid()==221) ||
166 (p2.pid()==223 && p1.pid()==221) )
167 _nMeson[8]->fill(_ecms);
168 else if( (p1.pid()==333 && p2.pid()==221) ||
169 (p2.pid()==333 && p1.pid()==221) )
170 _nMeson[9]->fill(_ecms);
171 else if( (p1.pid()==113 && p2.pid()==331) ||
172 (p2.pid()==113 && p1.pid()==331) )
173 _nMeson[10]->fill(_ecms);
174 else if( (p1.pid()==223 && p2.pid()==331) ||
175 (p2.pid()==223 && p1.pid()==331) ) {
176 if(_ecms=="3.773"s)_nMeson[11]->fill(_ecms);
177 }
178 else if( (p1.pid()==333 && p2.pid()==331) ||
179 (p2.pid()==333 && p1.pid()==331) ) {
180 if(_ecms=="3.773"s)_nMeson[12]->fill(_ecms);
181 }
182 else if( (p1.pid()==313 && p2.pid()==-313) ||
183 (p2.pid()==313 && p1.pid()==-313) )
184 _nMeson[13]->fill(_ecms);
185 }
186 }
187 }
188
189
190 /// Normalise histograms etc., after the run
191 void finalize() {
192 for(unsigned int ix=1;ix<18;++ix) {
193 if(ix==6||ix==16) continue;
194 scale(_nMeson[ix],crossSection()/ sumOfWeights() /picobarn);
195 }
196 }
197
198 /// @}
199
200
201 /// @name Histograms
202 /// @{
203 BinnedHistoPtr<string> _nMeson[18];
204 string _ecms;
205 /// @}
206
207
208 };
209
210
211 RIVET_DECLARE_PLUGIN(CLEO_2006_I691720);
212
213
214}
|