rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

PLUTO_1980_I154270

Hadronic charged multiplicity measurement between 12 and 31.3 GeV
Experiment: PLUTO (PETRA)
Inspire ID: 154270
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett. 95B (1980) 313-317
Beams: e+ e-
Beam energies: (4.7, 4.7); (6.0, 6.0); (6.5, 6.5); (8.5, 8.5); (11.0, 11.0); (13.8, 13.8); (15.1, 15.1); (15.3, 15.3); (15.7, 15.7) GeV
Run details:
  • Hadronic e+ e- events generated below the Z pole. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

The charged particle multiplicity distribution of hadronic $e^+e^-$ events as measured between 12 and 31.3 GeV using the PLUTO detector at PETRA. The decay products of weakly decaying strange hadrons, e.g. $K^0_s$ and $\Lambda^0$, are not included in the measurement. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: PLUTO_1980_I154270.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/ChargedFinalState.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief Add a short analysis description here
 10  class PLUTO_1980_I154270 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(PLUTO_1980_I154270);
 15
 16
 17    /// @name Analysis methods
 18    //@{
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22      const ChargedFinalState cfs;
 23      declare(cfs, "CFS");
 24      if (isCompatibleWithSqrtS(9.4 ) ||
 25          isCompatibleWithSqrtS(12.0) ||
 26          isCompatibleWithSqrtS(13.0) ||
 27          isCompatibleWithSqrtS(17.0) ||
 28          isCompatibleWithSqrtS(22.0) ||
 29          isCompatibleWithSqrtS(27.6) ||
 30          isCompatibleWithSqrtS(30.2) ||
 31          isCompatibleWithSqrtS(30.7) ||
 32          isCompatibleWithSqrtS(31.3)) {
 33        book(_c_mult, "/TMP/cmult");
 34        book(_mult, 1, 1, 1);
 35      }
 36      else {
 37        MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV
 38                    << " doesn't match any available analysis energy .");
 39      }
 40    }
 41
 42
 43    /// Perform the per-event analysis
 44    void analyze(const Event& event) {
 45      const FinalState& cfs = apply<FinalState>(event, "CFS");
 46      MSG_DEBUG("Total charged multiplicity = " << cfs.size());
 47      unsigned int nPart(0);
 48      for (const Particle& p : cfs.particles()) {
 49        // check if prompt or not
 50        ConstGenParticlePtr pmother = p.genParticle();
 51        ConstGenVertexPtr ivertex = pmother->production_vertex();
 52        bool prompt = true;
 53        while (ivertex) {
 54          vector<ConstGenParticlePtr> inparts = HepMCUtils::particles(ivertex, Relatives::PARENTS);
 55          int n_inparts = inparts.size();
 56          if (n_inparts < 1) break;
 57          pmother = inparts[0]; // first mother particle
 58          int mother_pid = abs(pmother->pdg_id());
 59          if (mother_pid==PID::K0S || mother_pid==PID::LAMBDA) {
 60            prompt = false;
 61            break;
 62          }
 63          else if (mother_pid<6) {
 64            break;
 65          }
 66          ivertex = pmother->production_vertex();
 67        }
 68        if(prompt) ++nPart;
 69      }
 70      _c_mult->fill(sqrtS(), nPart);
 71    }
 72
 73
 74    /// Normalise histograms etc., after the run
 75    void finalize() {
 76      double fact = 1./sumOfWeights();
 77      double val = _c_mult->val()*fact;
 78      double err = _c_mult->err()*fact;
 79      Scatter2D temphisto(refData(1, 1, 1));
 80      for (size_t b = 0; b < temphisto.numPoints(); b++) {
 81        const double x  = temphisto.point(b).x();
 82        pair<double,double> ex = temphisto.point(b).xErrs();
 83        pair<double,double> ex2 = ex;
 84        if(ex2.first ==0.) ex2. first=0.0001;
 85        if(ex2.second==0.) ex2.second=0.0001;
 86        if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
 87          _mult->addPoint(x, val, ex, make_pair(err,err));
 88        }
 89        else {
 90          _mult->addPoint(x, 0., ex, make_pair(0.,.0));
 91        }
 92      }
 93    }
 94
 95    //@}
 96
 97
 98  private:
 99
100    Profile1DPtr _hist;
101    CounterPtr _c_mult;
102    Scatter2DPtr _mult;
103
104  };
105
106
107  // The hook for the plugin system
108  RIVET_DECLARE_PLUGIN(PLUTO_1980_I154270);
109
110
111}