Rivet analyses referenceCMD3_2017_I1606078Cross section for $e^+e^-\to\pi^+\pi^-\pi^0\eta$ for energies below 2 GeVExperiment: CMD3 (VEPP-2M) Inspire ID: 1606078 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Measurement of the cross section for $e^+e^-\to\pi^+\pi^-\pi^0\eta$, and the resonant sub-processes $\omega\eta$and $a_0(980)\rho$, for energies below 2 GeV by the CMD3 experiment Source code: CMD3_2017_I1606078.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 CMD3 pi+pi-pi0eta cross section
10 class CMD3_2017_I1606078 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(CMD3_2017_I1606078);
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
28 book(_c_all , 1, 1, 1);
29 book(_c_omega, 1, 1, 2);
30 book(_c_rho , 1, 1, 3);
31 book(_c_other, 1, 1, 4);
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 // find the final-state particles
48 const FinalState& fs = apply<FinalState>(event, "FS");
49 map<long,int> nCount;
50 int ntotal(0);
51 for (const Particle& p : fs.particles()) {
52 nCount[p.pid()] += 1;
53 ++ntotal;
54 }
55 // find omega/phi + eta
56 const FinalState& ufs = apply<FinalState>(event, "UFS");
57 bool found = false, foundOmegaPhi = false;
58 for (const Particle& p : ufs.particles()) {
59 if(p.children().empty()) continue;
60 // find the eta
61 if(p.pid()!=221) continue;
62 map<long,int> nRes = nCount;
63 int ncount = ntotal;
64 findChildren(p,nRes,ncount);
65 // eta pi+pi-pi0
66 if(ncount==3) {
67 bool matched = true;
68 for(auto const & val : nRes) {
69 if(abs(val.first)==211 || val.first==111 ) {
70 if(val.second !=1) {
71 matched = false;
72 break;
73 }
74 }
75 else if(val.second!=0) {
76 matched = false;
77 break;
78 }
79 }
80 if(matched) {
81 _c_all->fill(round(sqrtS()/MeV));
82 found = true;
83 }
84 }
85 for (const Particle& p2 : ufs.particles()) {
86 if(p2.pid()!=223 && p2.pid()!=333) continue;
87 map<long,int> nResB = nRes;
88 int ncountB = ncount;
89 findChildren(p2,nResB,ncountB);
90 if(ncountB!=0) continue;
91 bool matched2 = true;
92 for(auto const & val : nResB) {
93 if(val.second!=0) {
94 matched2 = false;
95 break;
96 }
97 }
98 if(matched2) {
99 if(p2.pid()==223)
100 _c_omega->fill(round(sqrtS()/MeV));
101 foundOmegaPhi=true;
102 }
103 }
104 }
105 // find a_0 rho
106 bool founda0Rho=false;
107 for (const Particle& p : ufs.particles()) {
108 if(p.children().empty()) continue;
109 // find the rho
110 if(p.pid()!=113 && abs(p.pid())!=213)
111 continue;
112 map<long,int> nRes = nCount;
113 int ncount = ntotal;
114 findChildren(p,nRes,ncount);
115 int a1id(0);
116 if(p.pid()==213)
117 a1id = 9000211;
118 else if(p.pid()==-213)
119 a1id =-9000211;
120 else
121 a1id = 9000111;
122 for (const Particle& p2 : ufs.particles()) {
123 if(p2.pid()!=a1id) continue;
124 map<long,int> nResB = nRes;
125 int ncountB = ncount;
126 findChildren(p2,nResB,ncountB);
127 if(ncountB!=0) continue;
128 bool matched = true;
129 for(auto const & val : nResB) {
130 if(val.second!=0) {
131 matched = false;
132 break;
133 }
134 }
135 if(matched) {
136 _c_rho->fill(round(sqrtS()/MeV));
137 founda0Rho=true;
138 break;
139 }
140 }
141 if(founda0Rho) break;
142 }
143 if(found && !foundOmegaPhi && ! founda0Rho)
144 _c_other->fill(round(sqrtS()/MeV));
145 }
146
147
148 /// Normalise histograms etc., after the run
149 void finalize() {
150 double fact = crossSection()/nanobarn/sumOfWeights();
151 scale(_c_all, fact);
152 scale(_c_omega, fact);
153 scale(_c_rho, fact);
154 scale(_c_other, fact);
155 }
156
157 /// @}
158
159
160 /// @name Histograms
161 /// @{
162 BinnedHistoPtr<int> _c_all, _c_omega, _c_rho, _c_other;
163 /// @}
164
165
166 };
167
168
169 RIVET_DECLARE_PLUGIN(CMD3_2017_I1606078);
170
171
172}
|