Rivet analyses referenceND_1991_I321108Cross sections for $e^+e^-\to$ exclusive hadronic states between 0.5 and 1.4 GeV.Experiment: ND (VEPP-2M) Inspire ID: 321108 Status: VALIDATED Authors:
Beam energies: (0.3, 0.3); (0.3, 0.3); (0.3, 0.3); (0.3, 0.3); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.4, 0.4); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.5, 0.5); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.6, 0.6); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.7, 0.7); (0.8, 0.8); (0.8, 0.8) GeV Run details:
Measurement of the cross section for $e^+e^-\to \pi^+\pi^-$, $K^+K^-$, $K^0_SK^0_L$, $\pi^+\pi^-\pi^0$, $2\pi^+2\pi^-$, $\pi^+\pi^-2\pi^0$, $\omega\pi^0$, $\eta\pi^+\pi^-$ and $2\pi^+2\pi^-\pi^0$ by ND for energies between 0.5 and 1.4 GeV. Source code: ND_1991_I321108.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 ND measurement of exclusive hadronic final states
10 class ND_1991_I321108 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(ND_1991_I321108);
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 // book hists
27 for(unsigned int ix=0;ix<4;++ix)
28 book(_nOmegaPi[ix], 1+ix,1,1);
29 book(_nOmegaPi[4], 10,1,3);
30 book(_n2Pi ,11,1,1);
31 book(_n3Pi[0] , 5,1,1);
32 book(_n3Pi[1] ,10,1,4);
33 book(_n4PiC[0], 7,1,1);
34 book(_n4PiC[1],10,1,1);
35 book(_n4PiN[0], 8,1,1);
36 book(_n4PiN[1],10,1,2);
37 book(_nEtaPiPi, 6,1,1);
38 book(_nKC ,12,1,1);
39 book(_nKN ,13,1,1);
40 book(_n5Pi ,14,1,1);
41 vector<string> energies({"0.661", "0.671", "0.681", "0.691", "0.701", "0.711", "0.725", "0.735", "0.745", "0.755",
42 "0.765", "0.805", "0.81", "0.815", "0.825", "0.83", "0.831", "0.841", "0.85", "0.851", "0.861", "0.87", "0.871",
43 "0.881", "0.89", "0.891", "0.901", "0.91", "0.911", "0.921", "0.93", "0.943", "0.95", "0.955", "0.956", "0.963",
44 "0.97", "0.973", "0.98", "0.983", "0.99", "0.993", "1.0", "1.003", "1.005", "1.02", "1.036", "1.04", "1.05",
45 "1.059", "1.06", "1.07", "1.075", "1.08", "1.09", "1.099", "1.1", "1.11", "1.12", "1.13", "1.139", "1.14", "1.15",
46 "1.16", "1.17", "1.179", "1.18", "1.19", "1.2", "1.21", "1.219", "1.22", "1.23", "1.24", "1.25", "1.259", "1.26",
47 "1.27", "1.28", "1.29", "1.299", "1.3", "1.31", "1.32", "1.325", "1.33", "1.339", "1.34", "1.35", "1.36", "1.37",
48 "1.375", "1.379", "1.38", "1.39", "1.395", "1.4", "1.5", "1.6"});
49 for(const string& en : energies) {
50 double end = std::stod(en)*GeV;
51 if(isCompatibleWithSqrtS(end)) {
52 _ecms = en;
53 break;
54 }
55 }
56 if(_ecms.empty()) MSG_ERROR("Beam energy incompatible with analysis.");
57 }
58
59
60 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
61 for (const Particle &child : p.children()) {
62 if(child.children().empty()) {
63 --nRes[child.pid()];
64 --ncount;
65 }
66 else
67 findChildren(child,nRes,ncount);
68 }
69 }
70
71 /// Perform the per-event analysis
72 void analyze(const Event& event) {
73
74 const FinalState& fs = apply<FinalState>(event, "FS");
75
76 map<long,int> nCount;
77 int ntotal(0);
78 for (const Particle& p : fs.particles()) {
79 nCount[p.pid()] += 1;
80 ++ntotal;
81 }
82 if(ntotal==2) {
83 if(nCount[211]==1&&nCount[-211]==1)
84 _n2Pi->fill(_ecms);
85 if(nCount[321]==1&&nCount[-321]==1)
86 _nKC->fill(_ecms);
87 if(nCount[310]==1&&nCount[130]==1)
88 _nKN->fill(_ecms);
89 }
90 else if(ntotal==3) {
91 if(nCount[211]==1&&nCount[-211]==1&&nCount[111]==1) {
92 _n3Pi[0]->fill(_ecms);
93 _n3Pi[1]->fill(_ecms);
94 }
95 }
96 else if(ntotal==4) {
97 if(nCount[211]==2&&nCount[-211]==2) {
98 _n4PiC[0]->fill(_ecms);
99 _n4PiC[1]->fill(_ecms);
100 }
101 else if(nCount[211]==1&&nCount[-211]==1&&nCount[111]==2) {
102 _n4PiN[0]->fill(_ecms);
103 _n4PiN[1]->fill(_ecms);
104 }
105 }
106 else if(ntotal==5) {
107 if(nCount[211]==2&&nCount[-211]==2&&nCount[111]==1)
108 _n5Pi->fill(_ecms);
109 }
110
111 const FinalState& ufs = apply<FinalState>(event, "UFS");
112 for (const Particle& p : ufs.particles()) {
113 if(p.children().empty()) continue;
114 // find the eta
115 if(p.pid()==221) {
116 map<long,int> nRes = nCount;
117 int ncount = ntotal;
118 findChildren(p,nRes,ncount);
119 // eta pi+pi-
120 if(ncount!=2) continue;
121 bool matched = true;
122 for(auto const & val : nRes) {
123 if(abs(val.first)==211) {
124 if(val.second !=1) {
125 matched = false;
126 break;
127 }
128 }
129 else if(val.second!=0) {
130 matched = false;
131 break;
132 }
133 }
134 if(matched)
135 _nEtaPiPi->fill(_ecms);
136 }
137 else if(p.pid()==223) {
138 map<long,int> nRes = nCount;
139 int ncount = ntotal;
140 findChildren(p,nRes,ncount);
141 // eta pi+pi-
142 if(ncount!=1) continue;
143 bool matched = true;
144 for(auto const & val : nRes) {
145 if(abs(val.first)==111) {
146 if(val.second !=1) {
147 matched = false;
148 break;
149 }
150 }
151 else if(val.second!=0) {
152 matched = false;
153 break;
154 }
155 }
156 if(matched) {
157 for(unsigned int ix=0;ix<5;++ix)
158 _nOmegaPi[ix]->fill(_ecms);
159 }
160 }
161 }
162 }
163
164
165 /// Normalise histograms etc., after the run
166 void finalize() {
167 for(unsigned int ix=0;ix<5;++ix)
168 scale(_nOmegaPi[ix], crossSection()/ sumOfWeights() /nanobarn);
169 scale(_n2Pi , crossSection()/ sumOfWeights() /nanobarn);
170 scale(_nEtaPiPi, crossSection()/ sumOfWeights() /nanobarn);
171 scale(_nKC , crossSection()/ sumOfWeights() /nanobarn);
172 scale(_nKN , crossSection()/ sumOfWeights() /nanobarn);
173 scale(_n5Pi , crossSection()/ sumOfWeights() /nanobarn);
174 for(unsigned int ix=0;ix<2;++ix) {
175 scale(_n3Pi[ix] , crossSection()/ sumOfWeights() /nanobarn);
176 scale(_n4PiC[ix], crossSection()/ sumOfWeights() /nanobarn);
177 scale(_n4PiN[ix], crossSection()/ sumOfWeights() /nanobarn);
178 }
179 }
180
181 /// @}
182
183
184 /// @name Histograms
185 /// @{
186 BinnedHistoPtr<string> _nOmegaPi[5],_n2Pi,_n3Pi[2],_n4PiC[2],_n4PiN[2],_nEtaPiPi,_nKC,_nKN,_n5Pi;
187 string _ecms;
188 /// @}
189
190
191 };
192
193
194 RIVET_DECLARE_PLUGIN(ND_1991_I321108);
195
196
197}
|