rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2011_I954993

$WZ$ fiducial cross-section at 7 TeV in ATLAS
Experiment: ATLAS (LHC 7TeV)
Inspire ID: 954993
Status: VALIDATED
Authors:
  • Lynn Marx
  • Roman Lysak
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • pp WZ events at 7 TeV with direct e, mu W/Z boson decays (no taus from W/Z)

This is a measurement of $WZ$ production in 1.02 fb$^{-1}$ of $pp$ collision data at $\sqrt{s} = $7 TeV collected by the ATLAS experiment in 2011. Doubly leptonic decay events are selected with electrons, muons and missing transverse momentum in the final state. The measurement of the combined fiducial cross section for the $WZ$ bosons decaying directly into electrons and muons is performed.

Source code: ATLAS_2011_I954993.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/DileptonFinder.hh"
  4#include "Rivet/Projections/MissingMomentum.hh"
  5#include "Rivet/Projections/LeptonFinder.hh"
  6#include "Rivet/Projections/VetoedFinalState.hh"
  7#include "Rivet/Projections/PromptFinalState.hh"
  8
  9namespace Rivet {
 10
 11
 12  /// @brief WZ fiducial cross-section measurement
 13  class ATLAS_2011_I954993 : public Analysis {
 14  public:
 15
 16    /// Constructor
 17    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2011_I954993);
 18
 19
 20    /// @name Analysis methods
 21    /// @{
 22
 23    /// Projection and histogram setup
 24    void init() {
 25      Cut cuts = Cuts::abseta < 2.5 && Cuts::pT > 15*GeV;
 26      DileptonFinder zfinder_e(91.2*GeV, 0.1, cuts && Cuts::abspid == PID::ELECTRON,
 27                               Cuts::massIn(81.1876*GeV, 101.1876*GeV));
 28      declare(zfinder_e, "DileptonFinder_e");
 29      DileptonFinder zfinder_mu(91.2*GeV, 0.1, cuts && Cuts::abspid == PID::MUON,
 30                                Cuts::massIn(81.1876*GeV, 101.1876*GeV));
 31      declare(zfinder_mu, "DileptonFinder_mu");
 32
 33      declare("MET", MissingMomentum());
 34      VetoedFinalState weinput;
 35      weinput.addVetoOnThisFinalState(zfinder_e);
 36      LeptonFinder ef(weinput, 0.1, cuts && Cuts::abspid == PID::ELECTRON);
 37      declare(ef, "Elecs");
 38      VetoedFinalState wminput;
 39      wminput.addVetoOnThisFinalState(zfinder_mu);
 40      LeptonFinder mf(wminput, 0.1, cuts && Cuts::abspid == PID::MUON);
 41      declare(mf, "Muons");
 42
 43      // Histograms
 44      book(_h_fiducial ,1,1,1);
 45    }
 46
 47
 48    /// Do the analysis
 49    void analyze(const Event& event) {
 50
 51      // Looking for a Z, exit if not found
 52      const DileptonFinder& zfinder_e = apply<DileptonFinder>(event, "DileptonFinder_e");
 53      const DileptonFinder& zfinder_mu = apply<DileptonFinder>(event, "DileptonFinder_mu");
 54      if (zfinder_e.bosons().size() != 1 && zfinder_mu.bosons().size() != 1) {
 55        MSG_DEBUG("No Z boson found, vetoing event");
 56        vetoEvent;
 57      }
 58
 59      // Looking for a W, exit if not found
 60      const P4& pmiss = apply<MissingMom>(event, "MET").missingMom();
 61      if (pmiss.Et() < 25*GeV) vetoEvent;
 62      const Particles& es = apply<LeptonFinder>(event, "Elecs").particles();
 63      const int iefound = closestMatchIndex(es, pmiss, Kin::mass, 80.4*GeV, 0*GeV, 1000*GeV);
 64      const Particles& mus = apply<LeptonFinder>(event, "Muons").particles();
 65      const int imfound = closestMatchIndex(mus, pmiss, Kin::mass, 80.4*GeV, 0*GeV, 1000*GeV);
 66      if (iefound < 0 && imfound < 0) {
 67        MSG_DEBUG("No W boson found, vetoing event");
 68        vetoEvent;
 69      }
 70
 71      // If we find a W, make fiducial acceptance cuts and exit if not found
 72      if (iefound >= 0) {
 73        const Particle& e = es[iefound];
 74        const double mt = mT(pmiss, e);
 75        if (e.pT() < 20*GeV || mt < 20*GeV) vetoEvent;
 76      } else if (imfound >= 0) {
 77        const Particle& m = mus[imfound];
 78        const double mt = mT(pmiss, m);
 79        if (m.pT() < 20*GeV || mt < 20*GeV) vetoEvent;
 80      }
 81
 82      // Update the fiducial cross-section histogram
 83      /// @todo Would be better as a counter
 84      _h_fiducial->fill(7000);
 85    }
 86
 87
 88    /// Finalize
 89    void finalize() {
 90      scale(_h_fiducial, crossSection()/femtobarn/sumOfWeights());
 91    }
 92
 93    /// @}
 94
 95
 96  private:
 97
 98    /// Histogram
 99    Histo1DPtr _h_fiducial;
100
101  };
102
103
104  RIVET_DECLARE_PLUGIN(ATLAS_2011_I954993);
105
106}