Rivet analyses referenceSND_2020_I1809286Cross section for $e^+e^-\to\pi^+\pi^-\pi^0$ between 1.15 and 2 GeVExperiment: SND (VEPP-2000) Inspire ID: 1809286 Status: VALIDATED Authors:
Beam energies: ANY Run details:
Cross section for $e^+e^-\to\pi^+\pi^-\pi^0$ between 1.15 and 2 GeV measured by SND. The $\omega\pi^0$, $\rho\pi$ and $\rho(1450)\pi$ subprocesses are also extracted. Source code: SND_2020_I1809286.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 e+e- > pi+pi-pi0
10 class SND_2020_I1809286 : public Analysis {
11 public:
12
13 /// Constructor
14 RIVET_DEFAULT_ANALYSIS_CTOR(SND_2020_I1809286);
15
16
17 /// @name Analysis methods
18 /// @{
19
20 /// Book histograms and initialise projections before the run
21 void init() {
22 // Initialise and register projections
23 declare(FinalState(), "FS");
24 declare(UnstableParticles(), "UFS");
25 for(unsigned int ix=0;ix<2;++ix) {
26 book(_sigma_total[ix],1+ix,1,1);
27 for (const string& en : _sigma_total[ix].binning().edges<0>()) {
28 double end = std::stod(en)*GeV;
29 if(isCompatibleWithSqrtS(end)) {
30 _ecms[ix] = en;
31 break;
32 }
33 }
34 }
35 for(unsigned int ix=0;ix<3;++ix)
36 book(_sigma_res[ix], "/TMP/c_res_"+toString(ix),refData(3,1,1+ix));
37
38 if(inRange(sqrtS()/GeV,1.42,1.48)) {
39 book(_h_x,4,1,1);
40 book(_h_m,4,1,3);
41 }
42 else if(inRange(sqrtS()/GeV,1.65,1.68)) {
43 book(_h_x,4,1,2);
44 book(_h_m,4,1,4);
45 }
46 }
47
48 void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
49 for( const Particle &child : p.children()) {
50 if(child.children().empty()) {
51 --nRes[child.pid()];
52 --ncount;
53 }
54 else
55 findChildren(child,nRes,ncount);
56 }
57 }
58
59 /// Perform the per-event analysis
60 void analyze(const Event& event) {
61
62 const FinalState& fs = apply<FinalState>(event, "FS");
63
64 map<long,int> nCount;
65 int ntotal(0);
66 Particle pip,pim;
67 for (const Particle& p : fs.particles()) {
68 nCount[p.pid()] += 1;
69 ++ntotal;
70 if(p.pid() == 211) pip=p;
71 else if(p.pid()==-211) pim=p;
72 }
73 if(ntotal!=3) vetoEvent;
74 if(nCount[-211]==1&&nCount[211]==1&&nCount[111]==1) {
75 _sigma_total[0]->fill(_ecms[0]);
76 _sigma_total[1]->fill(_ecms[1]);
77 }
78 else
79 vetoEvent;
80 if(_h_x) {
81 _h_x->fill(pip.momentum().p()/sqrtS());
82 _h_x->fill(pim.momentum().p()/sqrtS());
83 _h_m->fill((pip.momentum()+pim.momentum()).mass()/MeV);
84 }
85 const FinalState& ufs = apply<FinalState>(event, "UFS");
86 for (const Particle& p : ufs.particles(Cuts::abspid==223 or
87 Cuts::abspid==113 or Cuts::abspid==213 or
88 Cuts::abspid==100113 or Cuts::abspid==100213)) {
89 if(p.children().empty()) continue;
90 map<long,int> nRes = nCount;
91 int ncount = ntotal;
92 findChildren(p,nRes,ncount);
93 if(ncount!=1) continue;
94 int idOther = 211;
95 if(p.pid()==223 || p.pid()==113 || p.pid()==100113)
96 idOther = 111;
97 else if(p.pid()==213 || p.pid()==100213)
98 idOther = -211;
99 bool matched=true;
100 for(auto const & val : nRes) {
101 if(val.first==idOther ) {
102 if(val.second !=1) {
103 matched = false;
104 break;
105 }
106 }
107 else if(val.second!=0) {
108 matched = false;
109 break;
110 }
111 }
112 if(!matched) continue;
113 if(matched) {
114 if(p.pid()==223)
115 _sigma_res[2]->fill(sqrtS());
116 else if(p.pid()==213 || p.pid()==113)
117 _sigma_res[0]->fill(sqrtS());
118 else
119 _sigma_res[1]->fill(sqrtS());
120 break;
121 }
122 }
123 }
124
125
126 /// Normalise histograms etc., after the run
127 void finalize() {
128 if (_h_x) {
129 normalize(_h_x,1.,false);
130 normalize(_h_m,1.,false);
131 }
132 double fact = crossSection()/nanobarn/sumOfWeights();
133 for(unsigned int ix=0;ix<2;++ix)
134 scale(_sigma_total[ix],fact);
135 for(unsigned int ix=0;ix<3;++ix) {
136 scale(_sigma_res[ix],fact);
137 Estimate1DPtr tmp;
138 book(tmp,3,1,1+ix);
139 barchart(_sigma_res[ix],tmp);
140 }
141 }
142
143 /// @}
144
145
146 /// @name Histograms
147 /// @{
148 BinnedHistoPtr<string> _sigma_total[2];
149 string _ecms[2];
150 Histo1DPtr _sigma_res[3];
151 Histo1DPtr _h_x,_h_m;
152 /// @}
153
154
155 };
156
157
158 RIVET_DECLARE_PLUGIN(SND_2020_I1809286);
159
160}
|