rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2010_S8919674

$W$ + jets jet multiplicities and $p_\perp$
Experiment: ATLAS (LHC)
Inspire ID: 882534
Status: VALIDATED
Authors:
  • Frank Siegert
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • W+jets events ideally with matrix element corrections to describe the higher jet multiplicities correctly. Both channels, electron and muon, are part of this analysis and should be run simultaneously.

Cross sections, in both the electron and muon decay modes of the W boson, are presented as a function of jet multiplicity and of the transverse momentum of the leading and next-to-leading jets in the event. Measurements are also presented of the ratio of cross sections for inclusive jet multiplicities. The results, based on an integrated luminosity of 1.3 pb-1, have been corrected for all known detector effects and are quoted in a limited and well-defined range of jet and lepton kinematics.

Source code: ATLAS_2010_S8919674.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/VetoedFinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/WFinder.hh"
  6
  7namespace Rivet {
  8
  9
 10  /// W + jets jet multiplicities and pT
 11  class ATLAS_2010_S8919674 : public Analysis {
 12  public:
 13
 14    /// Constructor
 15    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2010_S8919674);
 16
 17
 18    /// @name Analysis methods
 19    /// @{
 20
 21    /// Book histograms and initialise projections before the run
 22    void init() {
 23
 24      // Set up projections to find the electron and muon Ws
 25      FinalState fs;
 26      Cut cuts = (Cuts::abseta < 1.37 || Cuts::absetaIn(1.52, 2.47)) && Cuts::pT > 20*GeV;
 27      WFinder wfinder_e(fs, cuts, PID::ELECTRON, 0*GeV, 1000*GeV, 25*GeV);
 28      declare(wfinder_e, "W_e");
 29      WFinder wfinder_mu(fs, Cuts::abseta < 2.4 && Cuts::pT > 20*GeV, PID::MUON, 0*GeV, 1000*GeV, 25*GeV);
 30      declare(wfinder_mu, "W_mu");
 31
 32      // Input for the jets: no neutrinos, no muons, and no electron which passed the electron cuts
 33      VetoedFinalState veto;
 34      veto.addVetoOnThisFinalState(wfinder_e);
 35      veto.addVetoOnThisFinalState(wfinder_mu);
 36      veto.addVetoPairId(PID::MUON);
 37      veto.vetoNeutrinos();
 38      FastJets jets(veto, FastJets::ANTIKT, 0.4);
 39      declare(jets, "jets");
 40
 41      /// Book histograms
 42      book(_h_el_njet_inclusive ,1,1,1);
 43      book(_h_mu_njet_inclusive ,2,1,1);
 44      book(_h_el_pT_jet1 ,5,1,1);
 45      book(_h_mu_pT_jet1 ,6,1,1);
 46      book(_h_el_pT_jet2 ,7,1,1);
 47      book(_h_mu_pT_jet2 ,8,1,1);
 48    }
 49
 50
 51    /// Perform the per-event analysis
 52    void analyze(const Event& event) {
 53      const Jets& jets = apply<FastJets>(event, "jets").jetsByPt(20.0*GeV);
 54
 55      const WFinder& We = apply<WFinder>(event, "W_e");
 56      if (We.bosons().size() == 1) {
 57        const FourMomentum p_miss = We.constituentNeutrinos()[0];
 58        const FourMomentum p_lept = We.constituentLeptons()[0];
 59        if (p_miss.Et() > 25*GeV && We.mT() > 40*GeV) {
 60          Jets js;
 61          for (const Jet& j : jets) {
 62            if (j.abseta() < 2.8 && deltaR(p_lept, j.momentum()) > 0.5)
 63              js.push_back(j);
 64          }
 65          _h_el_njet_inclusive->fill(0);
 66          if (js.size() >= 1) {
 67            _h_el_njet_inclusive->fill(1);
 68            _h_el_pT_jet1->fill(js[0].pT());
 69          }
 70          if (js.size() >= 2) {
 71            _h_el_njet_inclusive->fill(2);
 72            _h_el_pT_jet2->fill(js[1].pT());
 73          }
 74          if (js.size() >= 3) {
 75            _h_el_njet_inclusive->fill(3);
 76          }
 77        }
 78      }
 79
 80      const WFinder& Wm = apply<WFinder>(event, "W_mu");
 81      if (Wm.bosons().size() == 1) {
 82        const FourMomentum p_miss = Wm.constituentNeutrinos()[0];
 83        const FourMomentum p_lept = Wm.constituentLeptons()[0];
 84        if (p_miss.Et() > 25*GeV && Wm.mT() > 40*GeV) {
 85          Jets js;
 86          for (const Jet& j : jets) {
 87            if (j.abseta() < 2.8 && deltaR(p_lept, j.momentum()) > 0.5)
 88              js.push_back(j);
 89          }
 90          _h_mu_njet_inclusive->fill(0);
 91          if (js.size() >= 1) {
 92            _h_mu_njet_inclusive->fill(1);
 93            _h_mu_pT_jet1->fill(js[0].pT());
 94          }
 95          if (js.size() >= 2) {
 96            _h_mu_njet_inclusive->fill(2);
 97            _h_mu_pT_jet2->fill(js[1].pT());
 98          }
 99          if (js.size() >= 3) {
100            _h_mu_njet_inclusive->fill(3);
101          }
102          if (js.size() >= 4) {
103            _h_mu_njet_inclusive->fill(4);
104          }
105        }
106      }
107
108    }
109
110
111    /// Normalise histograms etc., after the run
112    void finalize() {
113      double normfac = crossSection()/sumOfWeights();
114      scale(_h_el_njet_inclusive, normfac);
115      scale(_h_mu_njet_inclusive, normfac);
116      scale(_h_el_pT_jet1, normfac);
117      scale(_h_mu_pT_jet1, normfac);
118      scale(_h_el_pT_jet2, normfac);
119      scale(_h_mu_pT_jet2, normfac);
120    }
121
122    ///@}
123
124
125  private:
126
127    /// @name Histograms
128    /// @{
129    Histo1DPtr _h_el_njet_inclusive;
130    Histo1DPtr _h_mu_njet_inclusive;
131    Histo1DPtr _h_el_pT_jet1;
132    Histo1DPtr _h_mu_pT_jet1;
133    Histo1DPtr _h_el_pT_jet2;
134    Histo1DPtr _h_mu_pT_jet2;
135    /// @}
136
137  };
138
139
140
141  RIVET_DECLARE_ALIASED_PLUGIN(ATLAS_2010_S8919674, ATLAS_2010_I882534);
142
143}