rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2010_I882534

$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_I882534.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/PromptFinalState.hh"
  4#include "Rivet/Projections/VetoedFinalState.hh"
  5#include "Rivet/Projections/FastJets.hh"
  6#include "Rivet/Projections/LeptonFinder.hh"
  7#include "Rivet/Projections/MissingMomentum.hh"
  8
  9namespace Rivet {
 10
 11
 12  /// W + jets jet multiplicities and pT
 13  class ATLAS_2010_I882534 : public Analysis {
 14  public:
 15
 16    /// Constructor
 17    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2010_I882534);
 18
 19
 20    /// @name Analysis methods
 21    /// @{
 22
 23    /// Book histograms and initialise projections before the run
 24    void init() {
 25
 26      declare("MET", MissingMomentum());
 27
 28      // Find electrons and muons
 29      const Cut cut_e = (Cuts::abseta < 1.37 || Cuts::absetaIn(1.52, 2.47)) && Cuts::pT > 20*GeV;
 30      LeptonFinder ef(0.1, cut_e && Cuts::abspid == PID::ELECTRON);
 31      declare(ef, "Elecs");
 32      const Cut cut_m = Cuts::abseta < 2.4 && Cuts::pT > 20*GeV;
 33      LeptonFinder mf(0.1, cut_m && Cuts::abspid == PID::MUON);
 34      declare(mf, "Muons");
 35
 36      // Input for the jets: no neutrinos, no muons, and no electron which passed the electron cuts
 37      VetoedFinalState veto;
 38      veto.addVetoOnThisFinalState(ef);
 39      veto.addVetoOnThisFinalState(mf);
 40      FastJets jets(veto, JetAlg::ANTIKT, 0.4, JetMuons::NONE);
 41      declare(jets, "Jets");
 42
 43      /// Book histograms
 44      book(_h_el_njet_inclusive,1,1,1);
 45      book(_h_mu_njet_inclusive,2,1,1);
 46      book(_h_el_pT_jet1,5,1,1);
 47      book(_h_mu_pT_jet1,6,1,1);
 48      book(_h_el_pT_jet2,7,1,1);
 49      book(_h_mu_pT_jet2,8,1,1);
 50    }
 51
 52
 53    /// Perform the per-event analysis
 54    void analyze(const Event& event) {
 55
 56      if (_edges.empty())  _edges = _h_mu_njet_inclusive->xEdges();
 57
 58      const Jets& jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 20*GeV);
 59
 60      // MET cut
 61      const P4& pmiss = apply<MissingMom>(event, "MET").missingMom();
 62      if (pmiss.Et() < 25*GeV) vetoEvent;
 63
 64      // Identify the closest-matching l+MET to m == mW
 65      const Particles& es = apply<LeptonFinder>(event, "Elecs").particles();
 66      const int iefound = closestMatchIndex(es, pmiss, Kin::mass, 80.4*GeV, 0*GeV, 1000*GeV);
 67      const Particles& mus = apply<LeptonFinder>(event, "Muons").particles();
 68      const int imfound = closestMatchIndex(mus, pmiss, Kin::mass, 80.4*GeV, 0*GeV, 1000*GeV);
 69
 70      // Require two valid W candidates
 71      if (iefound < 0 && imfound < 0) vetoEvent; //< no W's
 72      if (iefound >= 0 && imfound >= 0) vetoEvent; //< multi-W
 73
 74      // Histogramming
 75      if (iefound >= 0) {
 76        const Particle& e = es[iefound].constituents()[0];
 77        if (mT(pmiss, e) > 40*GeV) {
 78          const Jets js = select(jets, [&](const Jet& j) { return j.abseta() < 2.8 && deltaR(e, j) > 0.5; });
 79          _h_el_njet_inclusive->fill(_edges[0]);
 80          if (js.size() >= 1) {
 81            _h_el_njet_inclusive->fill(_edges[1]);
 82            _h_el_pT_jet1->fill(js[0].pT());
 83          }
 84          if (js.size() >= 2) {
 85            _h_el_njet_inclusive->fill(_edges[2]);
 86            _h_el_pT_jet2->fill(js[1].pT());
 87          }
 88          if (js.size() >= 3) {
 89            _h_el_njet_inclusive->fill(_edges[3]);
 90          }
 91        }
 92      }
 93
 94      if (imfound >= 0) {
 95        const Particle& mu = mus[imfound];
 96        if (mT(pmiss, mu) > 40*GeV) {
 97          const Jets js = select(jets, [&](const Jet& j) { return j.abseta() < 2.8 && deltaR(mu, j) > 0.5; });
 98          _h_mu_njet_inclusive->fill(_edges[0]);
 99          if (js.size() >= 1) {
100            _h_mu_njet_inclusive->fill(_edges[1]);
101            _h_mu_pT_jet1->fill(js[0].pT());
102          }
103          if (js.size() >= 2) {
104            _h_mu_njet_inclusive->fill(_edges[2]);
105            _h_mu_pT_jet2->fill(js[1].pT());
106          }
107          if (js.size() >= 3) {
108            _h_mu_njet_inclusive->fill(_edges[3]);
109          }
110          if (js.size() >= 4) {
111            _h_mu_njet_inclusive->fill(_edges[4]);
112          }
113        }
114      }
115
116    }
117
118
119    /// Normalise histograms etc., after the run
120    void finalize() {
121      double normfac = crossSection()/picobarn/sumOfWeights();
122      scale(_h_el_njet_inclusive, normfac/nanobarn);
123      scale(_h_mu_njet_inclusive, normfac/nanobarn);
124      scale(_h_el_pT_jet1, normfac);
125      scale(_h_mu_pT_jet1, normfac);
126      scale(_h_el_pT_jet2, normfac);
127      scale(_h_mu_pT_jet2, normfac);
128    }
129
130    ///@}
131
132
133  private:
134
135    /// @name Histograms
136    /// @{
137    BinnedHistoPtr<string> _h_el_njet_inclusive;
138    BinnedHistoPtr<string> _h_mu_njet_inclusive;
139    Histo1DPtr _h_el_pT_jet1;
140    Histo1DPtr _h_mu_pT_jet1;
141    Histo1DPtr _h_el_pT_jet2;
142    Histo1DPtr _h_mu_pT_jet2;
143    vector<string> _edges;
144    /// @}
145
146  };
147
148
149  RIVET_DECLARE_ALIASED_PLUGIN(ATLAS_2010_I882534, ATLAS_2010_S8919674);
150
151}