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