rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2015_I1397635

$Wt$ at 8 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1397635
Status: VALIDATED
Authors:
  • Reinhard Schwienhorst
References: Beams: p+ p+
Beam energies: (4000.0, 4000.0) GeV
Run details:
  • Single top $Wt$ + top--antitop production

Fiducial cross-section for $Wt+t\bar{t}$ production in events with two leptons and exactly one jet, using an integrated luminosity of 20.3 fb${}^{-1}$ of proton-proton collisions at a centre-of-mass energy of 8 TeV at the Large Hadron Collider, collected with the ATLAS detector. The cross-section for the production of a top quark and a $W$ boson is measured in a fiducial acceptance requiring two leptons with $p_\perp > 25$ GeV and $|\eta| < 2.5$, one jet with $p_\perp > 20$ GeV and $|\eta| < 2.5$, and $E^\text{miss}_\text{T} > 20$ GeV, including both $Wt$ and top-quark pair events as signal. The measured value of the fiducial cross-section is $0.85 \pm 0.01$ (stat.) $\pm 0.07$ (syst.) $\pm 0.03$ (lumi.) pb.

Source code: ATLAS_2015_I1397635.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/VetoedFinalState.hh"
  4#include "Rivet/Projections/IdentifiedFinalState.hh"
  5#include "Rivet/Projections/PromptFinalState.hh"
  6#include "Rivet/Projections/LeptonFinder.hh"
  7#include "Rivet/Projections/FastJets.hh"
  8
  9namespace Rivet {
 10
 11
 12  /// $Wt$ at 8 TeV
 13  class ATLAS_2015_I1397635 : public Analysis {
 14  public:
 15
 16    /// Constructor
 17    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2015_I1397635);
 18
 19
 20    void init() {
 21
 22      // Eta ranges
 23      Cut eta_full = Cuts::abseta < 5.0 && Cuts::pT >= 1.0*MeV;
 24      Cut eta_lep  = Cuts::abseta < 2.5;
 25
 26      // All final state particles
 27      FinalState fs(eta_full);
 28
 29      // Get photons to dress leptons
 30      IdentifiedFinalState photons(fs);
 31      photons.acceptIdPair(PID::PHOTON);
 32
 33      // Projection to find the electrons
 34      IdentifiedFinalState el_id(fs);
 35      el_id.acceptIdPair(PID::ELECTRON);
 36      PromptFinalState electrons(el_id);
 37      electrons.acceptTauDecays(true);
 38      declare(electrons, "electrons");
 39      LeptonFinder dressedelectrons(electrons, photons, 0.1, eta_lep && Cuts::pT > 25*GeV);
 40      declare(dressedelectrons, "dressedelectrons");
 41      LeptonFinder ewdressedelectrons(electrons, photons, 0.1, eta_full);
 42
 43      // Projection to find the muons
 44      IdentifiedFinalState mu_id(fs);
 45      mu_id.acceptIdPair(PID::MUON);
 46      PromptFinalState muons(mu_id);
 47      muons.acceptTauDecays(true);
 48      declare(muons, "muons");
 49      LeptonFinder dressedmuons(muons, photons, 0.1, eta_lep && Cuts::pT > 25*GeV);
 50      declare(dressedmuons, "dressedmuons");
 51      LeptonFinder ewdressedmuons(muons, photons, 0.1, eta_full);
 52
 53      // Projection to find neutrinos and produce MET
 54      IdentifiedFinalState nu_id;
 55      nu_id.acceptNeutrinos();
 56      PromptFinalState neutrinos(nu_id);
 57      neutrinos.acceptTauDecays(true);
 58      declare(neutrinos, "neutrinos");
 59
 60      // Jet clustering.
 61      VetoedFinalState vfs;
 62      vfs.addVetoOnThisFinalState(ewdressedelectrons);
 63      vfs.addVetoOnThisFinalState(ewdressedmuons);
 64      vfs.addVetoOnThisFinalState(neutrinos);
 65      FastJets jets(vfs,JetAlg::ANTIKT, 0.4);
 66      jets.useInvisibles();
 67      declare(jets, "jets");
 68
 69      book(_histo ,1,1,1);
 70    }
 71
 72
 73    void analyze(const Event& event) {
 74
 75      // Get the selected objects, using the projections.
 76      DressedLeptons electrons = apply<LeptonFinder>(event, "dressedelectrons").dressedLeptons();
 77      DressedLeptons muons = apply<LeptonFinder>(event, "dressedmuons").dressedLeptons();
 78      // also make basic event selection cuts for leptons
 79      if (electrons.empty() && muons.empty())  vetoEvent;
 80      if (electrons.size() + muons.size() != 2) vetoEvent;
 81
 82      // next selection cuts for jets
 83      const Jets jets = apply<FastJets>(event, "jets").jets(Cuts::pT>20*GeV && Cuts::abseta < 2.5, cmpMomByPt);
 84      if (jets.size() != 1) vetoEvent;
 85
 86      // and selection cuts for b-tagging
 87      Jets bjets;
 88      // Check overlap of jets/leptons.
 89      for (Jet jet : jets) {
 90        // if dR(el,jet) < 0.4 skip the event
 91        for (DressedLepton el : electrons) {
 92          if (deltaR(jet, el) < 0.4)  vetoEvent;
 93        }
 94        // if dR(mu,jet) < 0.4 skip the event
 95        for (DressedLepton mu : muons) {
 96          if (deltaR(jet, mu) < 0.4)  vetoEvent;
 97        }
 98        // Count the number of b-tags
 99        // We have to check that the ghost-matched B hadrons have pT > 5 GeV
100        // By default jet.bTags() returns all B hadrons without cuts
101        bool btagged = jet.bTags(Cuts::pT >= 5*GeV).size();
102        if (btagged)  bjets += jet;
103      }
104      if (bjets.size() != 1) vetoEvent;
105
106      // Now evaluate MET selection
107      // Get the neutrinos from the event record (they have pT > 0.0 and |eta| < 4.5 at this stage
108      const Particles& neutrinos = apply<PromptFinalState>(event, "neutrinos").particlesByPt();
109      FourMomentum met;
110      for (const Particle& nu : neutrinos)  met += nu.momentum();
111      if (met.pT() <= 20*GeV)  vetoEvent;
112
113      // Make the plot
114      _histo->fill(1);
115    }
116
117
118    // Normalise histograms etc., after the run
119    void finalize() {
120      scale(_histo, crossSection() / femtobarn / sumOfWeights());
121    }
122
123
124  private:
125
126    Histo1DPtr _histo;
127
128  };
129
130
131  RIVET_DECLARE_PLUGIN(ATLAS_2015_I1397635);
132
133}