Rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

D0_2008_S7863608

Measurement of differential $Z/\gamma^*$ + jet + $X$ cross sections
Experiment: D0 (Tevatron Run 2)
Inspire ID: 792812
Status: VALIDATED
Authors:
  • Andy Buckley
  • Gavin Hesketh
  • Frank Siegert
References: Beams: p- p+
Beam energies: (980.0, 980.0) GeV
Run details:
  • $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{\mu\mu} < 115$ GeV.

Cross sections as a function of pT and rapidity of the boson and pT and rapidity of the leading jet in the di-muon channel in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 1.0 fb$^{-1}$.

Source code: D0_2008_S7863608.cc
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/ZFinder.hh"
#include "Rivet/Projections/FastJets.hh"

namespace Rivet {

  


  /// @brief D0 differential Z/\f$ \gamma^* \f$ + jet + \f$ X \f$ cross sections
  /// @author Gavin Hesketh, Andy Buckley, Frank Siegert
  class D0_2008_S7863608 : public Analysis {
  public:

    /// Constructor
    D0_2008_S7863608()
      : Analysis("D0_2008_S7863608")
    {    }


    /// @name Analysis methods
    //@{

    /// Book histograms
    void init() {
      /// @todo These clustering arguments look odd: are they ok?
      Cut cut = Cuts::abseta < 1.7 && Cuts::pT > 15*GeV;
      ZFinder zfinder(FinalState(), cut, PID::MUON, 65*GeV, 115*GeV, 0.2, ZFinder::NOCLUSTER, ZFinder::TRACK);
      declare(zfinder, "ZFinder");

      FastJets conefinder(zfinder.remainingFinalState(), FastJets::D0ILCONE, 0.5);
      declare(conefinder, "ConeFinder");

      _sum_of_weights_inclusive = 0;

      _h_jet_pT_cross_section = bookHisto1D(1, 1, 1);
      _h_jet_pT_normalised = bookHisto1D(1, 1, 2);
      _h_jet_y_cross_section = bookHisto1D(2, 1, 1);
      _h_jet_y_normalised = bookHisto1D(2, 1, 2);
      _h_Z_pT_cross_section = bookHisto1D(3, 1, 1);
      _h_Z_pT_normalised = bookHisto1D(3, 1, 2);
      _h_Z_y_cross_section = bookHisto1D(4, 1, 1);
      _h_Z_y_normalised = bookHisto1D(4, 1, 2);
      _h_total_cross_section = bookHisto1D(5, 1, 1);
    }


    // Do the analysis
    void analyze(const Event& e) {
      const double weight = e.weight();

      const ZFinder& zfinder = apply<ZFinder>(e, "ZFinder");
      if (zfinder.bosons().size()==1) {
        _sum_of_weights_inclusive += weight;
        const JetAlg& jetpro = apply<JetAlg>(e, "ConeFinder");
        const Jets& jets = jetpro.jetsByPt(20*GeV);
        Jets jets_cut;
        foreach (const Jet& j, jets) {
          if (j.abseta() < 2.8) {
            jets_cut.push_back(j);
          }
        }

        // Return if there are no jets:
        if(jets_cut.size()<1) {
          MSG_DEBUG("Skipping event " << numEvents() << " because no jets pass cuts ");
          vetoEvent;
        }

        const FourMomentum Zmom = zfinder.bosons()[0].momentum();

        // In jet pT
        _h_jet_pT_cross_section->fill( jets_cut[0].pT(), weight);
        _h_jet_pT_normalised->fill( jets_cut[0].pT(), weight);
        _h_jet_y_cross_section->fill( fabs(jets_cut[0].rapidity()), weight);
        _h_jet_y_normalised->fill( fabs(jets_cut[0].rapidity()), weight);

        // In Z pT
        _h_Z_pT_cross_section->fill(Zmom.pT(), weight);
        _h_Z_pT_normalised->fill(Zmom.pT(), weight);
        _h_Z_y_cross_section->fill(Zmom.absrap(), weight);
        _h_Z_y_normalised->fill(Zmom.absrap(), weight);

        _h_total_cross_section->fill(1960, weight);
      }
    }


    /// Finalize
    void finalize() {
      const double invlumi = crossSection()/sumOfWeights();
      scale(_h_total_cross_section, invlumi);
      scale(_h_jet_pT_cross_section, invlumi);
      scale(_h_jet_y_cross_section, invlumi);
      scale(_h_Z_pT_cross_section, invlumi);
      scale(_h_Z_y_cross_section, invlumi);

      double factor=1/_sum_of_weights_inclusive;
      if (_sum_of_weights_inclusive == 0) factor = 0;
      scale(_h_jet_pT_normalised, factor);
      scale(_h_jet_y_normalised, factor);
      scale(_h_Z_pT_normalised, factor);
      scale(_h_Z_y_normalised, factor);
    }

    //@}


  private:

    /// @name Histograms
    //@{
    Histo1DPtr _h_jet_pT_cross_section;
    Histo1DPtr _h_jet_y_cross_section;
    Histo1DPtr _h_Z_pT_cross_section;
    Histo1DPtr _h_Z_y_cross_section;
    Histo1DPtr _h_total_cross_section;
    Histo1DPtr _h_jet_pT_normalised;
    Histo1DPtr _h_jet_y_normalised;
    Histo1DPtr _h_Z_pT_normalised;
    Histo1DPtr _h_Z_y_normalised;
    //@}

    double _sum_of_weights_inclusive;

  };



  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(D0_2008_S7863608);

}