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
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include "Rivet/Projections/WFinder.hh"
#include "Rivet/Projections/ZFinder.hh"

namespace Rivet {


  /// @brief Measurement of electron and muon differential cross section from heavy flavour production
  ///
  /// Lepton cross sections differential in pT
  ///
  /// @author Paul Bell, Holger Schulz
  class ATLAS_2011_I926145 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2011_I926145);


    /// Book histograms and initialise projections before the run
    void init() {

      // Electrons and muons
      Cut cuts = (Cuts::abseta < 1.37 || Cuts::absetaIn(1.52,  2.00)) && Cuts::pT > 7*GeV;
      IdentifiedFinalState elecs(cuts, {PID::ELECTRON, PID::POSITRON});
      declare(elecs, "elecs");
      IdentifiedFinalState muons(Cuts::abseta < 2 && Cuts::pT > 7*GeV, {PID::MUON, PID::ANTIMUON});
      declare(muons, "muons");
      IdentifiedFinalState muons_full(Cuts::abseta < 2.5 && Cuts::pT > 4*GeV, {PID::MUON, PID::ANTIMUON});
      declare(muons_full, "muons_full");

	  Cut cut20 = Cuts::abseta < 2.0;
	  Cut cut25 = Cuts::abseta < 2.5;
      const FinalState fs20(cut20);
      const FinalState fs25(cut25);

      /// @todo Bare Zs ...
      ZFinder zfinder_e(fs20, cut20, PID::ELECTRON, 66.0*GeV, 116.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE);
      declare(zfinder_e, "ZFinder_e");
      ZFinder zfinder_mu(fs20, cut20, PID::MUON, 66.0*GeV, 116.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE);
      declare(zfinder_mu, "ZFinder_mu");
      ZFinder zfinder_mufull(fs25, cut25, PID::MUON, 66.0*GeV, 116.0*GeV, 0.1, ZFinder::ClusterPhotons::NONE);
      declare(zfinder_mufull, "ZFinder_mufull");

      /// @todo ... but dressed Ws?
      WFinder wfinder_e(fs20, cut20, PID::ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
      declare(wfinder_e, "WFinder_e");
      WFinder wfinder_mu(fs20, cut20, PID::MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
      declare(wfinder_mu, "WFinder_mu");
      WFinder wfinder_mufull(fs25, cut25, PID::MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
      declare(wfinder_mufull, "WFinder_mufull");

      // Book histograms
      book(_histPt_elecs      ,1 ,1 ,1);
      book(_histPt_muons      ,2 ,1 ,1);
      book(_histPt_muons_full ,3 ,1 ,1);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {
      // Veto event if no lepton is present
      const FinalState& elecs      = apply<FinalState>(event, "elecs");
      const FinalState& muons      = apply<FinalState>(event, "muons");
      const FinalState& muons_full = apply<FinalState>(event, "muons_full");
      if (elecs.empty() && muons.empty() && muons_full.empty()) vetoEvent;

      // Z veto
      const ZFinder& zfinder_e      = apply<ZFinder>(event, "ZFinder_e");
      const ZFinder& zfinder_mu     = apply<ZFinder>(event, "ZFinder_mu");
      const ZFinder& zfinder_mufull = apply<ZFinder>(event, "ZFinder_mufull");
      if (zfinder_e.bosons().size() > 0 || zfinder_mu.bosons().size() > 0 || zfinder_mufull.bosons().size() > 0) {
        MSG_DEBUG("Num elec Z-bosons found: " << zfinder_e.bosons().size());
        MSG_DEBUG("Num muon Z-bosons found: " << zfinder_mu.bosons().size());
        MSG_DEBUG("Num muon Z-bosons found (|eta|<2.5): " << zfinder_mufull.bosons().size());
        vetoEvent;
      }

      // W veto
      const WFinder& wfinder_e      = apply<WFinder>(event, "WFinder_e");
      const WFinder& wfinder_mu     = apply<WFinder>(event, "WFinder_mu");
      const WFinder& wfinder_mufull = apply<WFinder>(event, "WFinder_mufull");
      if (wfinder_e.bosons().size() > 0 || wfinder_mu.bosons().size() > 0 || wfinder_mufull.bosons().size() > 0) {
        MSG_DEBUG("Num elec W-bosons found: " << wfinder_e.bosons().size());
        MSG_DEBUG("Num muon W-bosons found: " << wfinder_mu.bosons().size());
        MSG_DEBUG("Num muon W-bosons found (|eta|<2.5): " << wfinder_mufull.bosons().size());
        vetoEvent;
      }

      // Electron histogram
      if (elecs.size() > 0) {
        for (const Particle& ele : elecs.particles()) {
          if (ele.pT() < 26.0*GeV) _histPt_elecs->fill(ele.pT()*GeV);
        }
      }

      // Muon histogram
      if (muons.size() > 0) {
        for (const Particle& muo : muons.particles()) {
          if (muo.pT() < 26.0*GeV) _histPt_muons->fill(muo.pT()*GeV);
        }
      }

      // Muon full histogram
      if (muons_full.size() > 0) {
        for (const Particle& muo : muons_full.particles()) {
          if (muo.pT() < 100.0*GeV) _histPt_muons_full->fill(muo.pT()*GeV);
        }
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      scale(_histPt_elecs,      crossSection()/nanobarn/sumOfWeights());
      scale(_histPt_muons,      crossSection()/nanobarn/sumOfWeights());
      scale(_histPt_muons_full, crossSection()/nanobarn/sumOfWeights());
    }


  private:

    /// @name Histograms
    //@{
    Histo1DPtr _histPt_elecs, _histPt_muons, _histPt_muons_full;
    //@}

  };


  // The hook for the plugin system
  RIVET_DECLARE_PLUGIN(ATLAS_2011_I926145);

}