rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ND_1991_I321108

Cross 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:
  • Peter Richardson
References:
  • PRep 202,99
Beams: e+ e-
Beam energies: ANY
Run details:
  • e+ e- to hadrons

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
 27      book(_nOmegaPi, "TMP/OmegaPi");
 28      book(_n2Pi, "TMP/2Pi");
 29      book(_n3Pi, "TMP/3Pi");
 30      book(_n4PiC, "TMP/4PiC");
 31      book(_n4PiN, "TMP/4PiN");
 32      book(_nEtaPiPi, "TMP/EtaPiPi");
 33      book(_nKC, "TMP/KC");
 34      book(_nKN, "TMP/KN");
 35      book(_n5Pi, "TMP/5Pi");
 36    }
 37
 38
 39    void findChildren(const Particle & p,map<long,int> & nRes, int &ncount) {
 40      for (const Particle &child : p.children()) {
 41	if(child.children().empty()) {
 42	  --nRes[child.pid()];
 43	  --ncount;
 44	}
 45	else
 46	  findChildren(child,nRes,ncount);
 47      }
 48    }
 49
 50    /// Perform the per-event analysis
 51    void analyze(const Event& event) {
 52
 53      const FinalState& fs = apply<FinalState>(event, "FS");
 54
 55      map<long,int> nCount;
 56      int ntotal(0);
 57      for (const Particle& p : fs.particles()) {
 58	nCount[p.pid()] += 1;
 59	++ntotal;
 60      }
 61      if(ntotal==2) {
 62	if(nCount[211]==1&&nCount[-211]==1)
 63	  _n2Pi->fill();
 64	if(nCount[321]==1&&nCount[-321]==1)
 65	  _nKC->fill();
 66	if(nCount[310]==1&&nCount[130]==1)
 67	  _nKN->fill();
 68      }
 69      else if(ntotal==3) {
 70	if(nCount[211]==1&&nCount[-211]==1&&nCount[111]==1)
 71	  _n3Pi->fill();
 72      }
 73      else if(ntotal==4) {
 74	if(nCount[211]==2&&nCount[-211]==2)
 75	  _n4PiC->fill();
 76	else if(nCount[211]==1&&nCount[-211]==1&&nCount[111]==2)
 77	  _n4PiN->fill();
 78      }
 79      else if(ntotal==5) {
 80	if(nCount[211]==2&&nCount[-211]==2&&nCount[111]==1)
 81	  _n5Pi->fill();
 82      }
 83
 84      const FinalState& ufs = apply<FinalState>(event, "UFS");
 85      for (const Particle& p : ufs.particles()) {
 86	if(p.children().empty()) continue;
 87	// find the eta
 88	if(p.pid()==221) {
 89	  map<long,int> nRes = nCount;
 90	  int ncount = ntotal;
 91	  findChildren(p,nRes,ncount);
 92	  // eta pi+pi-
 93	  if(ncount!=2) continue;
 94	  bool matched = true;
 95	  for(auto const & val : nRes) {
 96	    if(abs(val.first)==211) {
 97	      if(val.second !=1) {
 98		matched = false;
 99		break;
100	      }
101	    }
102	    else if(val.second!=0) {
103	      matched = false;
104	      break;
105	    }
106	  }
107	  if(matched)
108	    _nEtaPiPi->fill();
109	}
110	else if(p.pid()==223) {
111	  map<long,int> nRes = nCount;
112	  int ncount = ntotal;
113	  findChildren(p,nRes,ncount);
114	  // eta pi+pi-
115	  if(ncount!=1) continue;
116	  bool matched = true;
117	  for(auto const & val : nRes) {
118	    if(abs(val.first)==111) {
119	      if(val.second !=1) {
120		matched = false;
121		break;
122	      }
123	    }
124	    else if(val.second!=0) {
125	      matched = false;
126	      break;
127	    }
128	  }
129	  if(matched)
130	    _nOmegaPi->fill();
131	}
132      }
133    }
134
135
136    /// Normalise histograms etc., after the run
137    void finalize() {
138      for (unsigned int ix=1;ix<15;++ix) {
139        unsigned int ymax=2;
140       	double sigma(0.),error(0.);
141       	if(ix<=4) {
142       	  sigma = _nOmegaPi->val();
143       	  error = _nOmegaPi->err();
144       	}
145        else if(ix==5) {
146          sigma = _n3Pi->val();
147          error = _n3Pi->err();
148        }
149        else if(ix==6) {
150          sigma = _nEtaPiPi->val();
151          error = _nEtaPiPi->err();
152        }
153        else if(ix==7) {
154          sigma = _n4PiC->val();
155          error = _n4PiC->err();
156        }
157        else if(ix==8) {
158          sigma = _n4PiN->val();
159          error = _n4PiN->err();
160        }
161        else if(ix==9) {
162          continue;
163        }
164        else if(ix==10) {
165          ymax=5;
166        }
167        else if(ix==11) {
168          sigma = _n2Pi->val();
169          error = _n2Pi->err();
170        }
171        else if(ix==12) {
172          sigma = _nKC->val();
173          error = _nKC->err();
174        }
175        else if(ix==13) {
176          sigma = _nKN->val();
177          error = _nKN->err();
178        }
179        else if(ix==14) {
180          sigma = _n5Pi->val();
181          error = _n5Pi->err();
182        }
183        sigma *= crossSection()/ sumOfWeights() /nanobarn;
184        error *= crossSection()/ sumOfWeights() /nanobarn;
185        for(unsigned int iy=1;iy<ymax;++iy) {
186          if(ix==10) {
187            if(iy==1) {
188              sigma = _n4PiC->val();
189              error = _n4PiC->err();
190            }
191            else if(iy==2) {
192              sigma = _n4PiN->val();
193              error = _n4PiN->err();
194            }
195            else if(iy==3) {
196              sigma = _nOmegaPi->val();
197              error = _nOmegaPi->err();
198            }
199            else {
200              sigma = _n3Pi->val();
201              error = _n3Pi->err();
202            }
203            sigma *= crossSection()/ sumOfWeights() /nanobarn;
204            error *= crossSection()/ sumOfWeights() /nanobarn;
205          }
206          Estimate1DPtr mult;
207          book(mult, ix, 1, iy);
208          for (auto& b : mult->bins()) {
209            if (inRange(sqrtS()/GeV, b.xMin(), b.xMax())) {
210              b.set(sigma, error);
211            }
212          }
213        }
214      }
215    }
216
217    /// @}
218
219
220    /// @name Histograms
221    /// @{
222    CounterPtr _nOmegaPi,_n2Pi,_n3Pi,_n4PiC,_n4PiN,_nEtaPiPi,_nKC,_nKN,_n5Pi;
223    /// @}
224
225
226  };
227
228
229  RIVET_DECLARE_PLUGIN(ND_1991_I321108);
230
231
232}