rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

DELPHI_2000_S4328825

Hadronization properties of $b$ quarks compared to light quarks in $e^+ e^-\to q \bar{q}$ from 183 GeV to 200 GeV
Experiment: OPAL (LEP 2)
Inspire ID: 524693
Status: VALIDATED
Authors:
  • Peter Richardson
References:
  • Phys.Lett.B479:118-128,2000
  • hep-ex/0103022
  • DELPHI 2002-052 CONF 586
Beams: e+ e-
Beam energies: (91.5, 91.5); (94.5, 94.5); (96.0, 96.0); (98.0, 98.0); (100.0, 100.0); (103.0, 103.0) GeV
Run details:
  • Hadronic Z decay events generated on the Z pole ($\sqrt{s} = 91.2$ GeV)

Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar{c}$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at energies above the $Z^0$ mass. In addition to the energy points in the original paper one additional point at 206;GeV is included from a later preliminary result.

Source code: DELPHI_2000_S4328825.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/Beam.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5#include "Rivet/Projections/ChargedFinalState.hh"
  6#include "Rivet/Projections/Sphericity.hh"
  7#include "Rivet/Projections/Thrust.hh"
  8#include "Rivet/Projections/FastJets.hh"
  9#include "Rivet/Projections/ParisiTensor.hh"
 10#include "Rivet/Projections/Hemispheres.hh"
 11#include <cmath>
 12
 13#define I_KNOW_THE_INITIAL_QUARKS_PROJECTION_IS_DODGY_BUT_NEED_TO_USE_IT
 14#include "Rivet/Projections/InitialQuarks.hh"
 15
 16namespace Rivet {
 17
 18
 19  /// @brief DELPHI multiplicities at various energies
 20  ///
 21  /// @author Peter Richardson
 22  class DELPHI_2000_S4328825 : public Analysis {
 23  public:
 24
 25    RIVET_DEFAULT_ANALYSIS_CTOR(DELPHI_2000_S4328825);
 26
 27
 28    /// @name Analysis methods
 29    /// @{
 30
 31    void init() {
 32      // Projections
 33      declare(Beam(), "Beams");
 34      declare(ChargedFinalState(), "CFS");
 35      declare(InitialQuarks(), "IQF");
 36      book(_cLight,  "/TMP/CLIGHT" );
 37      book(_cCharm,  "/TMP/CCHARM" );
 38      book(_cBottom, "/TMP/CBOTTOM");
 39
 40      book(_wLight, "_weight_light");
 41      book(_wCharm, "_weight_charm");
 42      book(_wBottom,"_weight_bottom");
 43
 44      _mult.resize(4);
 45      book(_mult[0], 1, 1, 1);
 46      book(_mult[1], 1, 1, 2);
 47      book(_mult[2], 1, 1, 3);
 48      book(_mult[3], 1, 1, 4);  // bottom minus light
 49
 50    }
 51
 52
 53    void analyze(const Event& event) {
 54      // Even if we only generate hadronic events, we still need a cut on numCharged >= 2.
 55      const FinalState& cfs = apply<FinalState>(event, "CFS");
 56      if (cfs.size() < 2) vetoEvent;
 57
 58
 59      int flavour = 0;
 60      const InitialQuarks& iqf = apply<InitialQuarks>(event, "IQF");
 61
 62      // If we only have two quarks (qqbar), just take the flavour.
 63      // If we have more than two quarks, look for the highest energetic q-qbar pair.
 64      if (iqf.particles().size() == 2) {
 65        flavour = iqf.particles().front().abspid();
 66      }
 67      else {
 68        map<int, double> quarkmap;
 69        for (const Particle& p : iqf.particles()) {
 70          if (quarkmap[p.pid()] < p.E()) {
 71            quarkmap[p.pid()] = p.E();
 72          }
 73        }
 74        double maxenergy = 0.;
 75        for (int i = 1; i <= 5; ++i) {
 76          if (quarkmap[i]+quarkmap[-i] > maxenergy) {
 77            flavour = i;
 78          }
 79        }
 80      }
 81      const size_t numParticles = cfs.particles().size();
 82      switch (flavour) {
 83      case 1: case 2: case 3:
 84        _wLight->fill();
 85        _cLight->fill(numParticles);
 86        break;
 87      case 4:
 88        _wCharm->fill();
 89        _cCharm->fill(numParticles);
 90        break;
 91      case 5:
 92        _wBottom->fill();
 93        _cBottom->fill(numParticles);
 94        break;
 95      }
 96    }
 97
 98
 99    void finalize() {
100
101      // calculate the averages and diffs
102      if(_wLight->val()  != 0.)  scale(_cLight,  1./(*_wLight));
103      if(_wCharm->val()  != 0.)  scale(_cCharm,  1./(*_wCharm));
104      if(_wBottom->val() != 0.)  scale(_cBottom, 1./(*_wBottom));
105      Counter _cDiff = *_cBottom - *_cLight;
106
107      // fill the histograms
108      for (unsigned int ix=1; ix < 5; ++ix) {
109        double val(0.), err(0.0);
110        if(ix==1) {
111          val = _cBottom->val();
112          err = _cBottom->err();
113        }
114        else if(ix==2) {
115          val = _cCharm->val();
116          err = _cCharm->err();
117        }
118        else if(ix==3) {
119          val = _cLight->val();
120          err = _cLight->err();
121        }
122        else if(ix==4) {
123          val = _cDiff.val();
124          err = _cDiff.err();
125        }
126        Scatter2D temphisto(refData(1, 1, ix));
127        for (size_t b = 0; b < temphisto.numPoints(); b++) {
128          const double x  = temphisto.point(b).x();
129          pair<double,double> ex = temphisto.point(b).xErrs();
130          pair<double,double> ex2 = ex;
131          if(ex2.first ==0.) ex2. first=0.0001;
132          if(ex2.second==0.) ex2.second=0.0001;
133          if (inRange(sqrtS()/GeV, x-ex2.first, x+ex2.second)) {
134            _mult[ix-1]->addPoint(x, val, ex, make_pair(err,err));
135          }
136          else {
137            _mult[ix-1]->addPoint(x, 0., ex, make_pair(0.,.0));
138          }
139        }
140      }
141
142    }
143
144    /// @}
145
146
147  private:
148
149    vector<Scatter2DPtr> _mult;
150
151    /// @name Multiplicities
152    /// @{
153    CounterPtr _cLight;
154    CounterPtr _cCharm;
155    CounterPtr _cBottom;
156    /// @}
157
158    /// @name Weights
159    /// @{
160    CounterPtr _wLight;
161    CounterPtr _wCharm;
162    CounterPtr _wBottom;
163    /// @}
164
165  };
166
167
168
169  RIVET_DECLARE_ALIASED_PLUGIN(DELPHI_2000_S4328825, DELPHI_2000_I524693);
170
171}