rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CDF_2008_S7541902

Jet pT and multiplicity distributions in W + jets events
Experiment: CDF (Tevatron Run 2)
Inspire ID: 768579
Status: VALIDATED
Authors:
  • Ben Cooper
  • Emily Nurse
References: Beams: p- p+
Beam energies: (980.0, 980.0) GeV
Run details:
  • Requires the process $p\bar{p} \rightarrow {W} \rightarrow {e}\nu$. Additional hard jets will also have to be included to get a good description. The LO process in Herwig is set with IPROC=1451.

Measurement of the cross section for W boson production in association with jets in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV. The analysis uses 320 pb$^{-1}$ of data collected with the CDF II detector. W bosons are identified in their $e\nu$ decay channel and jets are reconstructed using an $R < 0.4$ cone algorithm. For each $W + \geq$ n-jet sample (where n = 1--4) a measurement of d$\sigma({p}\bar{p} \rightarrow W + \geq$ n jet)/d$E_T(n^{th}$-jet) $\times$ BR($W \rightarrow{e}\nu$) is made, where d$E_T(n^{th}$-jet) is the Et of the n$^{th}$-highest Et jet above 20 GeV. A measurement of the total cross section, $\sigma(p\bar{p} \rightarrow W + \geq$ $n$-jet) $\times$ BR($W \rightarrow{e}\nu)$ with $E_T(n^{th}-jet) > 25$ GeV is also made. Both measurements are made for jets with $|\eta| < 2$ and for a limited region of the $W \rightarrow{e}\nu$ decay phase space; $|\eta^{e}| < 1.1$, $p_{T}^{e} > 20$ GeV, $p_{T}^{\nu} > 30$ GeV and $M_{T} > 20$ GeV. The cross sections are corrected for all detector effects and can be directly compared to particle level $W$ + jet(s) predictions. These measurements can be used to test and tune QCD predictions for the number of jets in and kinematics of $W$ + jets events.

Source code: CDF_2008_S7541902.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/VetoedFinalState.hh"
  5#include "Rivet/Projections/InvMassFinalState.hh"
  6#include "Rivet/Projections/FastJets.hh"
  7#include <algorithm>
  8
  9namespace Rivet {
 10
 11
 12  /// @brief CDF jet pT and multiplicity distributions in W + jets events
 13  ///
 14  /// This CDF analysis provides jet pT distributions for 4 jet multiplicity bins
 15  /// as well as the jet multiplicity distribution in W + jets events.
 16  class CDF_2008_S7541902 : public Analysis {
 17  public:
 18
 19    RIVET_DEFAULT_ANALYSIS_CTOR(CDF_2008_S7541902);
 20
 21
 22    /// @name Analysis methods
 23    //@{
 24
 25    void init() {
 26      // Set up projections
 27      // Basic FS
 28      FinalState fs((Cuts::etaIn(-3.6, 3.6)));
 29      declare(fs, "FS");
 30
 31      // Create a final state with any e-nu pair with invariant mass 65 -> 95 GeV and ET > 20 (W decay products)
 32      vector<pair<PdgId,PdgId> > vids;
 33      vids += make_pair(PID::ELECTRON, PID::NU_EBAR);
 34      vids += make_pair(PID::POSITRON, PID::NU_E);
 35      FinalState fs2((Cuts::etaIn(-3.6, 3.6) && Cuts::pT >=  20*GeV));
 36      InvMassFinalState invfs(fs2, vids, 65*GeV, 95*GeV);
 37      declare(invfs, "INVFS");
 38
 39      // Make a final state without the W decay products for jet clustering
 40      VetoedFinalState vfs(fs);
 41      vfs.addVetoOnThisFinalState(invfs);
 42      declare(vfs, "VFS");
 43      declare(FastJets(vfs, FastJets::CDFJETCLU, 0.4), "Jets");
 44
 45      // Book histograms
 46      for (int i = 0 ; i < 4 ; ++i) {
 47        book(_histJetEt[i] ,1+i, 1, 1);
 48        book(_histJetMultRatio[i], 5, 1, i+1, true);
 49        /// @todo These would be better off as YODA::Counter until finalize()
 50        book(_histJetMult[i] ,6+i, 1, 1); // _sumW is essentially the 0th "histo" counter
 51      }
 52
 53      book(_sumW,"sumW");
 54    }
 55
 56
 57    /// Do the analysis
 58    void analyze(const Event& event) {
 59      // Get the W decay products (electron and neutrino)
 60      const InvMassFinalState& invMassFinalState = apply<InvMassFinalState>(event, "INVFS");
 61      const Particles&  wDecayProducts = invMassFinalState.particles();
 62
 63      FourMomentum electronP, neutrinoP;
 64      bool gotElectron(false), gotNeutrino(false);
 65      for (const Particle& p : wDecayProducts) {
 66        FourMomentum p4 = p.momentum();
 67        if (p4.Et() > _electronETCut && fabs(p4.eta()) < _electronETACut && p.abspid() == PID::ELECTRON) {
 68          electronP = p4;
 69          gotElectron = true;
 70        }
 71        else if (p4.Et() > _eTmissCut && p.abspid() == PID::NU_E) {
 72          neutrinoP = p4;
 73          gotNeutrino = true;
 74        }
 75      }
 76
 77      // Veto event if the electron or MET cuts fail
 78      if (!gotElectron || !gotNeutrino) vetoEvent;
 79
 80      // Veto event if the MTR cut fails
 81      double mT2 = 2.0 * ( electronP.pT()*neutrinoP.pT() - electronP.px()*neutrinoP.px() - electronP.py()*neutrinoP.py() );
 82      if (sqrt(mT2) < _mTCut ) vetoEvent;
 83
 84      // Get the jets
 85      const JetAlg& jetProj = apply<FastJets>(event, "Jets");
 86      Jets theJets = jetProj.jets(cmpMomByEt, Cuts::Et > _jetEtCutA);
 87      size_t njetsA(0), njetsB(0);
 88      for (const Jet& j : theJets) {
 89        const FourMomentum pj = j.momentum();
 90        if (fabs(pj.rapidity()) < _jetETA) {
 91          // Fill differential histograms for top 4 jets with Et > 20
 92          if (njetsA < 4 && pj.Et() > _jetEtCutA) {
 93            ++njetsA;
 94            _histJetEt[njetsA-1]->fill(pj.Et());
 95          }
 96          // Count number of jets with Et > 25 (for multiplicity histograms)
 97          if (pj.Et() > _jetEtCutB) ++njetsB;
 98        }
 99      }
100
101      // Increment event counter
102      _sumW->fill();
103
104      // Jet multiplicity
105      for (size_t i = 1; i <= njetsB; ++i) {
106        /// @todo This isn't really a histogram: replace with a YODA::Counter when we have one!
107        _histJetMult[i-1]->fill(1960.);
108        if (i == 4) break;
109      }
110    }
111
112
113    /// Finalize
114    void finalize() {
115
116      // Fill the 0th ratio histogram specially
117      /// @todo This special case for 1-to-0 will disappear if we use Counters for all mults including 0.
118      if (_sumW->val() > 0) {
119        const YODA::Histo1D::Bin& b0 = _histJetMult[0]->bin(0);
120        double ratio = b0.area()/dbl(*_sumW);
121        double frac_err = 1/dbl(*_sumW); ///< This 1/sqrt{N} error treatment isn't right for weighted events: use YODA::Counter
122        if (b0.area() > 0) frac_err = sqrt( sqr(frac_err) + sqr(b0.areaErr()/b0.area()) );
123        _histJetMultRatio[0]->point(0).setY(ratio, ratio*frac_err);
124      }
125
126      // Loop over the non-zero multiplicities
127      for (size_t i = 0; i < 3; ++i) {
128        const YODA::Histo1D::Bin& b1 = _histJetMult[i]->bin(0);
129        const YODA::Histo1D::Bin& b2 = _histJetMult[i+1]->bin(0);
130        if (b1.area() == 0.0) continue;
131        double ratio = b2.area()/b1.area();
132        double frac_err = b1.areaErr()/b1.area();
133        if (b2.area() > 0) frac_err = sqrt( sqr(frac_err) + sqr(b2.areaErr()/b2.area()) );
134        _histJetMultRatio[i+1]->point(0).setY(ratio, ratio*frac_err);
135      }
136
137      // Normalize the non-ratio histograms
138      for (size_t i = 0; i < 4; ++i) {
139        scale(_histJetEt[i], crossSection()/picobarn/sumOfWeights());
140        scale(_histJetMult[i], crossSection()/picobarn/sumOfWeights());
141      }
142
143    }
144
145    //@}
146
147
148  private:
149
150    /// @name Cuts
151    //@{
152    /// Cut on the electron ET:
153    double _electronETCut = 20*GeV;
154    /// Cut on the electron ETA:
155    double _electronETACut = 1.1;
156    /// Cut on the missing ET
157    double _eTmissCut = 30*GeV;
158    /// Cut on the transverse mass squared
159    double _mTCut = 20*GeV;
160    /// Cut on the jet ET for differential cross sections
161    double _jetEtCutA = 20*GeV;
162    /// Cut on the jet ET for jet multiplicity
163    double _jetEtCutB = 25*GeV;
164    /// Cut on the jet ETA
165    double _jetETA = 2.0;
166    //@}
167
168    /// @name Histograms
169    //@{
170    Histo1DPtr _histJetEt[4];
171    Histo1DPtr _histJetMultNorm;
172    Scatter2DPtr _histJetMultRatio[4];
173    Histo1DPtr _histJetMult[4];
174    CounterPtr _sumW;
175    //@}
176
177  };
178
179
180
181  RIVET_DECLARE_ALIASED_PLUGIN(CDF_2008_S7541902, CDF_2008_I768579);
182
183}