rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

D0_2008_I724239

Measurement of the ratio $\sigma(Z/\gamma^* + n \text{ jets})/\sigma(Z/\gamma^*)$
Experiment: D0 (Tevatron Run 2)
Inspire ID: 724239
Status: VALIDATED
Authors:
  • Giulio Lenzi
  • Frank Siegert
References:
  • hep-ex/0608052
Beams: p- p+
Beam energies: (980.0, 980.0) GeV
Run details:
  • $p \bar{p} \to e^+ e^-$ + jets at 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $75 < m_{ee} < 105$ GeV.

Cross sections as a function of $p_\perp$ of the three leading jets and $n$-jet cross section ratios in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of $0.4 \text{fb}^{-1}$.

Source code: D0_2008_I724239.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/DileptonFinder.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// D0 measurement of the ratio \f$ \sigma(Z/\gamma^* + n \text{ jets})/\sigma(Z/\gamma^*) \f$
 10  class D0_2008_I724239 : public Analysis {
 11  public:
 12
 13    RIVET_DEFAULT_ANALYSIS_CTOR(D0_2008_I724239);
 14
 15
 16    /// @name Analysis methods
 17    /// @{
 18
 19    // Book histograms
 20    void init() {
 21      DileptonFinder zfinder(91.2*GeV, 0.2, Cuts::abspid == PID::ELECTRON, Cuts::massIn(40*GeV, 200*GeV));
 22      declare(zfinder, "DileptonFinder");
 23
 24      FastJets conefinder(zfinder.remainingFinalState(), JetAlg::D0ILCONE, 0.5);
 25      declare(conefinder, "ConeFinder");
 26
 27      book(_crossSectionRatio, 1, 1, 1);
 28      book(_pTjet1, 2, 1, 1);
 29      book(_pTjet2, 3, 1, 1);
 30      book(_pTjet3, 4, 1, 1);
 31    }
 32
 33
 34    /// Do the analysis
 35    void analyze(const Event& event) {
 36
 37      if (_edges.empty())  _edges = _crossSectionRatio->xEdges();
 38
 39      const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
 40      if (zfinder.bosons().size() != 1)  vetoEvent;
 41
 42      FourMomentum e0 = zfinder.constituents()[0].mom();
 43      FourMomentum e1 = zfinder.constituents()[1].mom();
 44
 45      Jets jets = apply<JetFinder>(event, "ConeFinder").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.5);
 46      idiscard(jets, deltaRLess(e0, 0.4));
 47      idiscard(jets, deltaRLess(e1, 0.4));
 48
 49      // For normalisation of crossSection data (includes events with no jets passing cuts)
 50      _crossSectionRatio->fill(string("INC"));
 51
 52      // Fill jet pT and multiplicities
 53      if (jets.size() >= 1) {
 54        _crossSectionRatio->fill(_edges[0]);
 55        _pTjet1->fill(jets[0].pT());
 56      }
 57      if (jets.size() >= 2) {
 58        _crossSectionRatio->fill(_edges[1]);
 59        _pTjet2->fill(jets[1].pT());
 60      }
 61      if (jets.size() >= 3) {
 62        _crossSectionRatio->fill(_edges[2]);
 63        _pTjet3->fill(jets[2].pT());
 64      }
 65      if (jets.size() >= 4) {
 66        _crossSectionRatio->fill(_edges[3]);
 67      }
 68    }
 69
 70
 71    /// Finalize
 72    void finalize() {
 73      // Now divide by the inclusive result (in the otherflow)
 74      scale(_crossSectionRatio, 1.0/_crossSectionRatio->bin(0).sumW());
 75
 76      // Normalise jet pTs to integrals of data
 77      // @note There is no other way to do this, because these quantities are not detector-corrected
 78      normalize(_pTjet1, refData(2, 1, 1).auc());
 79      normalize(_pTjet2, refData(3, 1, 1).auc());
 80      normalize(_pTjet3, refData(4, 1, 1).auc());
 81    }
 82
 83    /// @}
 84
 85
 86  private:
 87
 88    /// @name Histograms
 89    /// @{
 90    BinnedHistoPtr<string> _crossSectionRatio;
 91    Histo1DPtr _pTjet1, _pTjet2, _pTjet3;
 92    vector<string> _edges;
 93    /// @}
 94
 95  };
 96
 97
 98  RIVET_DECLARE_ALIASED_PLUGIN(D0_2008_I724239, D0_2008_S6879055);
 99
100}