rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

JADE_OPAL_2000_S4300807

Jet rates in $e^+e^-$ at JADE [35--44 GeV] and OPAL [91--189 GeV].
Experiment: JADE_OPAL (PETRA and LEP)
Inspire ID: 513337
Status: VALIDATED
Authors:
  • Frank Siegert
  • Andy Buckley
References: Beams: e+ e-
Beam energies: (17.5, 17.5); (22.0, 22.0); (45.6, 45.6); (66.5, 66.5); (80.5, 80.5); (86.0, 86.0); (91.5, 91.5); (94.5, 94.5) GeV
Run details:
  • $e^+ e^- \to$ jet jet (+ jets)

Differential and integrated jet rates for Durham and JADE jet algorithms. The integration cut value used for the integrated rate observables is not well-defined in the paper: the midpoint of the differential bin has been used thanks to information from Stefan Kluth and Christoph Pahl. We anyway recommend that the differential plots be preferred over the integrated ones for MC generator validation and tuning, to minimise correlations.

Source code: JADE_OPAL_2000_S4300807.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FastJets.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// @brief Jet rates in \f$ e^+ e^- \f$ at OPAL and JADE
 10  ///
 11  /// @author Frank Siegert
 12  class JADE_OPAL_2000_S4300807 : public Analysis {
 13  public:
 14
 15    /// Constructor
 16    RIVET_DEFAULT_ANALYSIS_CTOR(JADE_OPAL_2000_S4300807)
 17
 18
 19    /// @name Analysis methods
 20    //@{
 21
 22    void init() {
 23      // Projections
 24      const FinalState fs;
 25      declare(fs, "FS");
 26      FastJets jadeJets = FastJets(fs, FastJets::JADE, 0.7, JetAlg::Muons::ALL, JetAlg::Invisibles::DECAY);
 27      FastJets durhamJets = FastJets(fs, FastJets::DURHAM, 0.7, JetAlg::Muons::ALL, JetAlg::Invisibles::DECAY);
 28      declare(jadeJets, "JadeJets");
 29      declare(durhamJets, "DurhamJets");
 30
 31      // Histos
 32      int offset = 0;
 33      switch (int(sqrtS()/GeV + 0.5)) {
 34      case 35: offset = 7; break;
 35      case 44: offset = 8; break;
 36      case 91: offset = 9; break;
 37      case 133: offset = 10; break;
 38      case 161: offset = 11; break;
 39      case 172: offset = 12; break;
 40      case 183: offset = 13; break;
 41      case 189: offset = 14; break;
 42      default: break;
 43      }
 44      for (size_t i = 0; i < 5; ++i) {
 45        book(_h_R_Jade[i] ,offset, 1, i+1);
 46        book(_h_R_Durham[i] ,offset+9, 1, i+1);
 47        if (i < 4) book(_h_y_Durham[i] ,offset+17, 1, i+1);
 48      }
 49    }
 50
 51
 52
 53    void analyze(const Event& e) {
 54      MSG_DEBUG("Num particles = " << apply<FinalState>(e, "FS").particles().size());
 55
 56      const FastJets& jadejet = apply<FastJets>(e, "JadeJets");
 57      if (jadejet.clusterSeq()) {
 58        const double y_23 = jadejet.clusterSeq()->exclusive_ymerge_max(2);
 59        const double y_34 = jadejet.clusterSeq()->exclusive_ymerge_max(3);
 60        const double y_45 = jadejet.clusterSeq()->exclusive_ymerge_max(4);
 61        const double y_56 = jadejet.clusterSeq()->exclusive_ymerge_max(5);
 62
 63        for (size_t i = 0; i < _h_R_Jade[0]->numBins(); ++i) {
 64          double ycut = _h_R_Jade[0]->bin(i).xMid();
 65          double width = _h_R_Jade[0]->bin(i).xWidth();
 66          if (y_23 < ycut) {
 67            _h_R_Jade[0]->fillBin(i, width);
 68          }
 69        }
 70        for (size_t i = 0; i < _h_R_Jade[1]->numBins(); ++i) {
 71          double ycut = _h_R_Jade[1]->bin(i).xMid();
 72          double width = _h_R_Jade[1]->bin(i).xWidth();
 73          if (y_34 < ycut && y_23 > ycut) {
 74            _h_R_Jade[1]->fillBin(i, width);
 75          }
 76        }
 77        for (size_t i = 0; i < _h_R_Jade[2]->numBins(); ++i) {
 78          double ycut = _h_R_Jade[2]->bin(i).xMid();
 79          double width = _h_R_Jade[2]->bin(i).xWidth();
 80          if (y_45 < ycut && y_34 > ycut) {
 81            _h_R_Jade[2]->fillBin(i, width);
 82          }
 83        }
 84        for (size_t i = 0; i < _h_R_Jade[3]->numBins(); ++i) {
 85          double ycut = _h_R_Jade[3]->bin(i).xMid();
 86          double width = _h_R_Jade[3]->bin(i).xWidth();
 87          if (y_56 < ycut && y_45 > ycut) {
 88            _h_R_Jade[3]->fillBin(i, width);
 89          }
 90        }
 91        for (size_t i = 0; i < _h_R_Jade[4]->numBins(); ++i) {
 92          double ycut = _h_R_Jade[4]->bin(i).xMid();
 93          double width = _h_R_Jade[4]->bin(i).xWidth();
 94          if (y_56 > ycut) {
 95            _h_R_Jade[4]->fillBin(i, width);
 96          }
 97        }
 98      }
 99
100      const FastJets& durjet = apply<FastJets>(e, "DurhamJets");
101      if (durjet.clusterSeq()) {
102        const double y_23 = durjet.clusterSeq()->exclusive_ymerge_max(2);
103        const double y_34 = durjet.clusterSeq()->exclusive_ymerge_max(3);
104        const double y_45 = durjet.clusterSeq()->exclusive_ymerge_max(4);
105        const double y_56 = durjet.clusterSeq()->exclusive_ymerge_max(5);
106
107        _h_y_Durham[0]->fill(y_23);
108        _h_y_Durham[1]->fill(y_34);
109        _h_y_Durham[2]->fill(y_45);
110        _h_y_Durham[3]->fill(y_56);
111
112        for (size_t i = 0; i < _h_R_Durham[0]->numBins(); ++i) {
113          double ycut = _h_R_Durham[0]->bin(i).xMid();
114          double width = _h_R_Durham[0]->bin(i).xWidth();
115          if (y_23 < ycut) {
116            _h_R_Durham[0]->fillBin(i, width);
117          }
118        }
119        for (size_t i = 0; i < _h_R_Durham[1]->numBins(); ++i) {
120          double ycut = _h_R_Durham[1]->bin(i).xMid();
121          double width = _h_R_Durham[1]->bin(i).xWidth();
122          if (y_34 < ycut && y_23 > ycut) {
123            _h_R_Durham[1]->fillBin(i, width);
124          }
125        }
126        for (size_t i = 0; i < _h_R_Durham[2]->numBins(); ++i) {
127          double ycut = _h_R_Durham[2]->bin(i).xMid();
128          double width = _h_R_Durham[2]->bin(i).xWidth();
129          if (y_45 < ycut && y_34 > ycut) {
130            _h_R_Durham[2]->fillBin(i, width);
131          }
132        }
133        for (size_t i = 0; i < _h_R_Durham[3]->numBins(); ++i) {
134          double ycut = _h_R_Durham[3]->bin(i).xMid();
135          double width = _h_R_Durham[3]->bin(i).xWidth();
136          if (y_56 < ycut && y_45 > ycut) {
137            _h_R_Durham[3]->fillBin(i, width);
138          }
139        }
140        for (size_t i = 0; i < _h_R_Durham[4]->numBins(); ++i) {
141          double ycut = _h_R_Durham[4]->bin(i).xMid();
142          double width = _h_R_Durham[4]->bin(i).xWidth();
143          if (y_56 > ycut) {
144            _h_R_Durham[4]->fillBin(i, width);
145          }
146        }
147      }
148    }
149
150
151
152    /// Finalize
153    void finalize() {
154      for (size_t n = 0; n < 4; ++n) normalize(_h_y_Durham[n]);
155      for (size_t n = 0; n < 5; ++n) scale(_h_R_Jade[n], 100/sumOfWeights());
156      for (size_t n = 0; n < 5; ++n) scale(_h_R_Durham[n], 100/sumOfWeights());
157    }
158
159    //@}
160
161
162  private:
163
164    /// @name Histograms
165    //@{
166    Histo1DPtr _h_R_Jade[5];
167    Histo1DPtr _h_R_Durham[5];
168    Histo1DPtr _h_y_Durham[4];
169    //@}
170
171  };
172
173
174
175  RIVET_DECLARE_ALIASED_PLUGIN(JADE_OPAL_2000_S4300807, JADE_OPAL_2000_I513337);
176
177}