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: (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:
  • 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      // 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}