rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2011_I926145

Measurement of electron and muon differential cross-section from heavy-flavour decays
Experiment: ATLAS (LHC)
Inspire ID: 926145
Status: VALIDATED
Authors:
  • Paul Bell
  • Holger Schulz
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • $pp$ to electron $+ X$ or muon $+ X$ at 7 TeV, heavy-flavour ($bb$ and $cc$) production with $B/D \to e/\mu$

Measurement of inclusive electron and muon cross sections for $7 < p_\perp <26$ GeV in $|\eta| <2.0$, excluding $1.37<|\eta|<1.52$, and muon cross section for $4 < p_\perp < 100$ GeV in $|\eta| <2.50$. The $W/Z/\gamma^*$ component must be subtracted to leave the heavy flavour contribution.

Source code: ATLAS_2011_I926145.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/IdentifiedFinalState.hh"
  5#include "Rivet/Projections/WFinder.hh"
  6#include "Rivet/Projections/ZFinder.hh"
  7
  8namespace Rivet {
  9
 10
 11  /// @brief Measurement of electron and muon differential cross section from heavy flavour production
 12  ///
 13  /// Lepton cross sections differential in pT
 14  ///
 15  /// @author Paul Bell, Holger Schulz
 16  class ATLAS_2011_I926145 : public Analysis {
 17  public:
 18
 19    /// Constructor
 20    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2011_I926145);
 21
 22
 23    /// Book histograms and initialise projections before the run
 24    void init() {
 25
 26      // Electrons and muons
 27      Cut cuts = (Cuts::abseta < 1.37 || Cuts::absetaIn(1.52,  2.00)) && Cuts::pT > 7*GeV;
 28      IdentifiedFinalState elecs(cuts, {PID::ELECTRON, PID::POSITRON});
 29      declare(elecs, "elecs");
 30      IdentifiedFinalState muons(Cuts::abseta < 2 && Cuts::pT > 7*GeV, {PID::MUON, PID::ANTIMUON});
 31      declare(muons, "muons");
 32      IdentifiedFinalState muons_full(Cuts::abseta < 2.5 && Cuts::pT > 4*GeV, {PID::MUON, PID::ANTIMUON});
 33      declare(muons_full, "muons_full");
 34
 35	  Cut cut20 = Cuts::abseta < 2.0;
 36	  Cut cut25 = Cuts::abseta < 2.5;
 37      const FinalState fs20(cut20);
 38      const FinalState fs25(cut25);
 39
 40      /// @todo Bare Zs ...
 41      ZFinder zfinder_e(fs20, cut20, PID::ELECTRON, 66.0*GeV, 116.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE);
 42      declare(zfinder_e, "ZFinder_e");
 43      ZFinder zfinder_mu(fs20, cut20, PID::MUON, 66.0*GeV, 116.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE);
 44      declare(zfinder_mu, "ZFinder_mu");
 45      ZFinder zfinder_mufull(fs25, cut25, PID::MUON, 66.0*GeV, 116.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE);
 46      declare(zfinder_mufull, "ZFinder_mufull");
 47
 48      /// @todo ... but dressed Ws?
 49      WFinder wfinder_e(fs20, cut20, PID::ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
 50      declare(wfinder_e, "WFinder_e");
 51      WFinder wfinder_mu(fs20, cut20, PID::MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
 52      declare(wfinder_mu, "WFinder_mu");
 53      WFinder wfinder_mufull(fs25, cut25, PID::MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
 54      declare(wfinder_mufull, "WFinder_mufull");
 55
 56      // Book histograms
 57      book(_histPt_elecs      ,1 ,1 ,1);
 58      book(_histPt_muons      ,2 ,1 ,1);
 59      book(_histPt_muons_full ,3 ,1 ,1);
 60    }
 61
 62
 63    /// Perform the per-event analysis
 64    void analyze(const Event& event) {
 65      // Veto event if no lepton is present
 66      const FinalState& elecs      = apply<FinalState>(event, "elecs");
 67      const FinalState& muons      = apply<FinalState>(event, "muons");
 68      const FinalState& muons_full = apply<FinalState>(event, "muons_full");
 69      if (elecs.empty() && muons.empty() && muons_full.empty()) vetoEvent;
 70
 71      // Z veto
 72      const ZFinder& zfinder_e      = apply<ZFinder>(event, "ZFinder_e");
 73      const ZFinder& zfinder_mu     = apply<ZFinder>(event, "ZFinder_mu");
 74      const ZFinder& zfinder_mufull = apply<ZFinder>(event, "ZFinder_mufull");
 75      if (zfinder_e.bosons().size() > 0 || zfinder_mu.bosons().size() > 0 || zfinder_mufull.bosons().size() > 0) {
 76        MSG_DEBUG("Num elec Z-bosons found: " << zfinder_e.bosons().size());
 77        MSG_DEBUG("Num muon Z-bosons found: " << zfinder_mu.bosons().size());
 78        MSG_DEBUG("Num muon Z-bosons found (|eta|<2.5): " << zfinder_mufull.bosons().size());
 79        vetoEvent;
 80      }
 81
 82      // W veto
 83      const WFinder& wfinder_e      = apply<WFinder>(event, "WFinder_e");
 84      const WFinder& wfinder_mu     = apply<WFinder>(event, "WFinder_mu");
 85      const WFinder& wfinder_mufull = apply<WFinder>(event, "WFinder_mufull");
 86      if (wfinder_e.bosons().size() > 0 || wfinder_mu.bosons().size() > 0 || wfinder_mufull.bosons().size() > 0) {
 87        MSG_DEBUG("Num elec W-bosons found: " << wfinder_e.bosons().size());
 88        MSG_DEBUG("Num muon W-bosons found: " << wfinder_mu.bosons().size());
 89        MSG_DEBUG("Num muon W-bosons found (|eta|<2.5): " << wfinder_mufull.bosons().size());
 90        vetoEvent;
 91      }
 92
 93      // Electron histogram
 94      if (elecs.size() > 0) {
 95        for (const Particle& ele : elecs.particles()) {
 96          if (ele.pT() < 26.0*GeV) _histPt_elecs->fill(ele.pT()*GeV);
 97        }
 98      }
 99
100      // Muon histogram
101      if (muons.size() > 0) {
102        for (const Particle& muo : muons.particles()) {
103          if (muo.pT() < 26.0*GeV) _histPt_muons->fill(muo.pT()*GeV);
104        }
105      }
106
107      // Muon full histogram
108      if (muons_full.size() > 0) {
109        for (const Particle& muo : muons_full.particles()) {
110          if (muo.pT() < 100.0*GeV) _histPt_muons_full->fill(muo.pT()*GeV);
111        }
112      }
113    }
114
115
116    /// Normalise histograms etc., after the run
117    void finalize() {
118      scale(_histPt_elecs,      crossSection()/nanobarn/sumOfWeights());
119      scale(_histPt_muons,      crossSection()/nanobarn/sumOfWeights());
120      scale(_histPt_muons_full, crossSection()/nanobarn/sumOfWeights());
121    }
122
123
124  private:
125
126    /// @name Histograms
127    //@{
128    Histo1DPtr _histPt_elecs, _histPt_muons, _histPt_muons_full;
129    //@}
130
131  };
132
133
134  // The hook for the plugin system
135  RIVET_DECLARE_PLUGIN(ATLAS_2011_I926145);
136
137}