Rivet analyses referenceBESII_2007_I762901Cross-sections for light hadrons at 3.650 and 3.773 GeVExperiment: BESII (BEPC) Inspire ID: 762901 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Cross section for $e^+e^-\to 2\pi^+2\pi^-K^+K^-$, $\pi^+\pi^-2K^+2K^-$, $2\pi^+2\pi^-p\bar{p}$, $3\pi^+3\pi^-$, $2\pi^+2\pi^-K^+K^-\pi^0$, $\rho^0\pi^+\pi^-$, $\rho^0K^+K^-$, $\rho^0p\bar{p}$, $K^{*0}K^-\pi^++\text{c.c.}$ at 3.650 and 3.773 GeV. Source code: BESII_2007_I762901.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.650 and 3.773 GeV
10 class BESII_2007_I762901 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(BESII_2007_I762901);
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<11;++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 /// Perform the per-event analysis
48 void analyze(const Event& event) {
49 const FinalState& fs = apply<FinalState>(event, "FS");
50
51 map<long,int> nCount;
52 int ntotal(0);
53 for (const Particle& p : fs.particles()) {
54 nCount[p.pid()] += 1;
55 ++ntotal;
56 }
57 if(ntotal==6) {
58 if(nCount[211]==2 && nCount[-211]==2 && nCount[321]==1 && nCount[-321]==1)
59 _nMeson[1]->fill();
60 else if(nCount[211]==1 && nCount[-211]==1 && nCount[321]==2 && nCount[-321]==2)
61 _nMeson[2]->fill();
62 else if(nCount[211]==2 && nCount[-211]==2 && nCount[2212]==1 && nCount[-2212]==1)
63 _nMeson[3]->fill();
64 else if(nCount[211]==3 && nCount[-211]==3)
65 _nMeson[4]->fill();
66 }
67 else if(ntotal==7) {
68 if(nCount[211]==2 && nCount[-211]==2 && nCount[321]==1 && nCount[-321]==1 && nCount[111]==1)
69 _nMeson[5]->fill();
70 }
71 const FinalState& ufs = apply<FinalState>(event, "UFS");
72 for (const Particle& p : ufs.particles()) {
73 if(p.children().empty()) continue;
74 if(p.pid()!=113 && abs(p.pid())!=313) continue;
75 map<long,int> nRes = nCount;
76 int ncount = ntotal;
77 findChildren(p,nRes,ncount);
78 if(p.pid()==113) {
79 if(ncount!=2) continue;
80 unsigned int nPi(0),nK(0),nProt(0);
81 bool matched = true;
82 for(auto const & val : nRes) {
83 if(abs(val.first)==211 && val.second==1) {
84 nPi+=1;
85 }
86 else if(abs(val.first)==321 && val.second==1) {
87 nK+=1;
88 }
89 else if(abs(val.first)==2212 && val.second==1) {
90 nProt+=1;
91 }
92 else if(val.second!=0) {
93 matched = false;
94 break;
95 }
96 }
97 if(matched) {
98 if(nProt==2 && nPi==0 && nK==0)
99 _nMeson[9]->fill();
100 else if(nProt==0 && nPi==2 && nK==0)
101 _nMeson[7]->fill();
102 else if(nProt==0 && nPi==0 && nK==2)
103 _nMeson[8]->fill();
104 }
105 }
106 else if(abs(p.pid())==313) {
107 if(ncount!=2) continue;
108 unsigned int npi(0),nK(0);
109 bool matched = true;
110 int ipi = p.pid()==313 ? 211 : -211;
111 int iK = p.pid()==313 ? -321 : 321;
112 for(auto const & val : nRes) {
113 if(abs(val.first)== ipi && val.second==1) {
114 npi+=1;
115 }
116 else if(abs(val.first)==iK && val.second==1) {
117 nK+=1;
118 }
119 else if(val.second!=0) {
120 matched = false;
121 break;
122 }
123 }
124 if(matched) {
125 if(npi==1&&nK==1)
126 _nMeson[10]->fill();
127 }
128 }
129 }
130 }
131
132
133 /// Normalise histograms etc., after the run
134 void finalize() {
135 for(unsigned int ix=1;ix<11;++ix) {
136 if(ix==6) continue;
137 double sigma = _nMeson[ix]->val();
138 double error = _nMeson[ix]->err();
139 sigma *= crossSection()/ sumOfWeights() /picobarn;
140 error *= crossSection()/ sumOfWeights() /picobarn;
141 Estimate1DPtr mult;
142 book(mult, 1, 1, ix);
143 for (auto& b : mult->bins()) {
144 if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
145 b.set(sigma, error);
146 }
147 }
148 }
149 }
150
151 /// @}
152
153
154 /// @name Histograms
155 /// @{
156 CounterPtr _nMeson[11];
157 /// @}
158
159
160 };
161
162
163 RIVET_DECLARE_PLUGIN(BESII_2007_I762901);
164
165}
|