rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

GAMMAGAMMA_1979_I141722

Measurement of $R$ and the hadron multiplicity between 1.42 and 3.09 GeV
Experiment: GAMMAGAMMA (ADONE)
Inspire ID: 141722
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. B86 (1979) 234-238, 1979
Beams: e- e+
Beam energies: ANY
Run details:
  • e+ e- to hadrons and e+ e- to mu+ mu- (for normalization)

Measurement of $R$ in $e^+e^-$ collisions by Gamma-Gamma-2 for energies between 1.42 and 3.09 GeV. The average charged and neutral particle multiplicity is also measured. The individual hadronic and muonic cross sections are also outputted to the yoda file so that ratio $R$ can be recalcuated if runs are combined.

Source code: GAMMAGAMMA_1979_I141722.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Add a short analysis description here
  9  class GAMMAGAMMA_1979_I141722 : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(GAMMAGAMMA_1979_I141722);
 14
 15
 16    /// @name Analysis methods
 17    //@{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      // Initialise and register projections
 22      declare(FinalState(), "FS");
 23
 24      // Book histograms
 25      book(_c_hadrons, "/TMP/sigma_hadrons");
 26      book(_c_muons, "/TMP/sigma_muons");
 27      book(_c_charged, "/TMP/Ncharged");
 28      book(_c_neutral, "/TMP/Nneutral");
 29      book(_nHadrons, "/TMP/NHadrons");
 30    }
 31
 32
 33    /// Perform the per-event analysis
 34    void analyze(const Event& event) {
 35      const FinalState& fs = apply<FinalState>(event, "FS");
 36
 37      map<long,int> nCount;
 38      int ntotal(0),ncharged(0),nneutral(0);
 39      for (const Particle& p : fs.particles()) {
 40	nCount[p.pid()] += 1;
 41	++ntotal;
 42	if(PID::isCharged(p.pid()))
 43	  ncharged += 1;
 44	else
 45	  nneutral += 1;
 46      }
 47      // mu+mu- + photons
 48      if(nCount[-13]==1 and nCount[13]==1 &&
 49	 ntotal==2+nCount[22])
 50	_c_muons->fill();
 51      // everything else
 52      else {
 53	if(ntotal==2) vetoEvent;
 54	_c_hadrons->fill();
 55	_c_charged->fill(ncharged);
 56	_c_neutral->fill(nneutral);
 57	_nHadrons->fill();
 58      }
 59    }
 60
 61
 62    /// Normalise histograms etc., after the run
 63    void finalize() {
 64      Scatter1D R = *_c_hadrons/ *_c_muons;
 65      double              rval = R.point(0).x();
 66      pair<double,double> rerr = R.point(0).xErrs();
 67      double fact = crossSection()/ sumOfWeights() /picobarn;
 68      double sig_h = _c_hadrons->val()*fact;
 69      double err_h = _c_hadrons->err()*fact;
 70      double sig_m = _c_muons  ->val()*fact;
 71      double err_m = _c_muons  ->err()*fact;
 72      Scatter2D temphisto(refData(1, 1, 1));
 73      Scatter2DPtr hadrons;
 74      book(hadrons, "sigma_hadrons");
 75      Scatter2DPtr muons;
 76      book(muons, "sigma_muons"  );
 77      Scatter2DPtr mult;
 78      book(mult, 1, 1, 1);
 79      for (size_t b = 0; b < temphisto.numPoints(); b++) {
 80	const double x  = temphisto.point(b).x();
 81	pair<double,double> ex = temphisto.point(b).xErrs();
 82	pair<double,double> ex2 = ex;
 83	if(ex2.first ==0.) ex2. first=0.0001;
 84	if(ex2.second==0.) ex2.second=0.0001;
 85	if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
 86	  mult   ->addPoint(x, rval, ex, rerr);
 87	  hadrons->addPoint(x, sig_h, ex, make_pair(err_h,err_h));
 88	  muons  ->addPoint(x, sig_m, ex, make_pair(err_m,err_m));
 89	}
 90	else {
 91	  mult   ->addPoint(x, 0., ex, make_pair(0.,.0));
 92	  hadrons->addPoint(x, 0., ex, make_pair(0.,.0));
 93	  muons  ->addPoint(x, 0., ex, make_pair(0.,.0));
 94	}
 95      }
 96      scale(_c_charged, 1./_nHadrons->sumW());
 97      scale(_c_neutral, 1./_nHadrons->sumW());
 98      for(unsigned int iy=1; iy<3;++iy) {
 99	double aver(0.),error(0.);
100	if(iy==1) {
101	  aver  = _c_charged->val();
102	  error = _c_charged->err();
103	}
104	else {
105	  aver  = _c_neutral->val();
106	  error = _c_neutral->err();
107	}
108	Scatter2D temphisto(refData(2, 1, iy));
109	Scatter2DPtr mult;
110	book(mult, 2, 1, iy);
111	for (size_t b = 0; b < temphisto.numPoints(); b++) {
112	  const double x  = temphisto.point(b).x();
113	  pair<double,double> ex = temphisto.point(b).xErrs();
114	  pair<double,double> ex2 = ex;
115	  if(ex2.first ==0.) ex2. first=0.0001;
116	  if(ex2.second==0.) ex2.second=0.0001;
117	  if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
118	    mult   ->addPoint(x, aver, ex, make_pair(error,error));
119	  }
120	  else {
121	    mult   ->addPoint(x, 0., ex, make_pair(0.,.0));
122	  }
123	}
124      }
125    }
126
127    //@}
128
129
130    /// @name Histograms
131    //@{
132    CounterPtr _c_hadrons, _c_muons,_c_neutral,_c_charged;
133    CounterPtr _nHadrons;
134    //@}
135
136
137  };
138
139
140  // The hook for the plugin system
141  RIVET_DECLARE_PLUGIN(GAMMAGAMMA_1979_I141722);
142
143
144}