rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ARGUS_1992_I319102

Measurement of $R$ at 9.36 GeV and charged particle multiplicities in continuum and at the $\Upsilon(4S)$
Experiment: ARGUS (DORIS)
Inspire ID: 319102
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Z.Phys. C54 (1992) 13-20, 1992
Beams: e- e+
Beam energies: ANY
Run details:
  • e+ e- to hadrons and e+ e- to mu+ mu- (for normalization) Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Measurement of $R$ at 9.36 GeV and charged particle multiplicities in continuum and at the $\Upsilon(4S)$. The individual hadronic and muonic cross sections are also outputted to the yoda file so that ratio $R$ can be recalculated if runs are combined. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: ARGUS_1992_I319102.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 charged multiplicity at 4s and nearby continuum
 10  class ARGUS_1992_I319102 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(ARGUS_1992_I319102);
 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(UnstableParticles(), "UFS");
 25      declare(FinalState(), "FS");
 26
 27      // Book histograms
 28      if (isCompatibleWithSqrtS(10.47*GeV)) {
 29        book(_h_N, 2, 1, 1);
 30        book(_h_tot_N,4,1,1);
 31      }
 32      book(_h_N_Upsilon, 3, 1, 1);
 33      book(_h_N_tot_Upsilon,5,1,1);
 34      // counters for R
 35      book(_c_hadrons, "/TMP/sigma_hadrons");
 36      book(_c_muons, "/TMP/sigma_muons");
 37      book(_w_cont,"/TMP/w_cont");
 38      book(_w_ups ,"/TMP/w_ups" );
 39    }
 40
 41    /// Recursively walk the decay tree to find decay products of @a p
 42    void findDecayProducts(Particle mother, unsigned int& nCharged) {
 43      for (const Particle & p: mother.children()) {
 44        if (!p.children().empty()) {
 45          findDecayProducts(p, nCharged);
 46        }
 47        else if (PID::isCharged(p.pid())) {
 48          ++nCharged;
 49        }
 50      }
 51    }
 52
 53
 54    /// Perform the per-event analysis
 55    void analyze(const Event& event) {
 56      const FinalState& fs = apply<FinalState>(event, "FS");
 57      // Find the Upsilons among the unstables
 58      const UnstableParticles& ufs = apply<UnstableParticles>(event, "UFS");
 59      Particles upsilons = ufs.particles(Cuts::pid==300553);
 60      // Continuum
 61      if (upsilons.empty()) {
 62        map<long,int> nCount;
 63        int ntotal(0);
 64        unsigned int nCharged(0);
 65        for (const Particle& p : fs.particles()) {
 66          nCount[p.pid()] += 1;
 67          ++ntotal;
 68          if (PID::isCharged(p.pid())) ++nCharged;
 69        }
 70        // mu+mu- + photons
 71        if (nCount[-13]==1 and nCount[13]==1 &&
 72           ntotal==2+nCount[22])
 73          _c_muons->fill();
 74        // everything else
 75        else {
 76          _c_hadrons->fill();
 77          if (_h_N) {
 78            _h_N->fill(nCharged);
 79            _h_tot_N->fill(Ecm1, nCharged);
 80            _w_cont->fill();
 81          }
 82        }
 83      }
 84      // upsilon 4s
 85      else {
 86        for (const Particle& ups : upsilons) {
 87          unsigned int nCharged(0);
 88          findDecayProducts(ups,nCharged);
 89          _h_N_Upsilon->fill(nCharged);
 90          _h_N_tot_Upsilon->fill(Ecm2, nCharged);
 91          _w_ups->fill();
 92        }
 93      }
 94    }
 95
 96
 97    /// Normalise histograms etc., after the run
 98    void finalize() {
 99      Estimate0D R = *_c_hadrons/ *_c_muons;
100      double fact = crossSection()/ sumOfWeights() /picobarn;
101      double sig_h = _c_hadrons->val()*fact;
102      double err_h = _c_hadrons->err()*fact;
103      double sig_m = _c_muons  ->val()*fact;
104      double err_m = _c_muons  ->err()*fact;
105      Estimate1DPtr hadrons;
106      book(hadrons, "sigma_hadrons");
107      Estimate1DPtr muons;
108      book(muons, "sigma_muons"  );
109      BinnedEstimatePtr<string> mult;
110      book(mult, 1, 1, 1);
111      if (isCompatibleWithSqrtS(9.36*GeV)) {
112        mult->bin(1).set(R.val(), R.errPos());
113        hadrons->bin(1).set(sig_h, err_h);
114        muons  ->bin(1).set(sig_m, err_m);
115      }
116      if (_h_N) {
117      normalize(_h_N, 200.);
118      if (_w_cont->val()!=0)
119        scale(_h_tot_N,1./ *_w_cont);
120      }
121      normalize(_h_N_Upsilon, 200.);
122      if (_w_ups->val()!=0) {
123        scale(_h_N_tot_Upsilon,1./ *_w_ups);
124      }
125    }
126
127    /// @}
128
129
130    /// @name Histograms
131    /// @{
132    Histo1DPtr _h_N, _h_N_Upsilon;
133    BinnedHistoPtr<string> _h_tot_N, _h_N_tot_Upsilon;
134    CounterPtr _c_hadrons, _c_muons;
135    CounterPtr _w_cont,_w_ups;
136    const string Ecm1 = "10.47", Ecm2 = "10.575";
137    /// @}
138
139
140  };
141
142
143  RIVET_DECLARE_PLUGIN(ARGUS_1992_I319102);
144
145
146}