Rivet Analyses Reference

ATLAS_2011_I925932

Measurement of the W pT with electrons and muons at 7 TeV
Experiment: ATLAS (LHC)
Inspire ID: 925932
Status: VALIDATED
Authors:
  • Elena Yatsenko
  • Judith Katzy
References:Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • Run with $W$ decays to $e\,\nu_e$ and/or $\mu\,\nu_\mu$.

The W pT at $\sqrt{s} = 7$ TeV is measured using $W\to e \, \nu_e$ and $W\to \mu \, \nu_\mu$ decay channels. The dressed leptons kinematics calculated from the sum of the post-FSR lepton momentum and the momenta of all photons radiated in a cone around the lepton, while the bare uses the lepton kinematics after all QED radiation.

Source code: ATLAS_2011_I925932.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
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/WFinder.hh"

namespace Rivet {


  /// ATLAS W pT analysis
  class ATLAS_2011_I925932 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2011_I925932);


    /// @name Analysis methods
    //@{

    void init() {
      // Set up projections
      FinalState fs;
      Cut cuts = Cuts::abseta < 2.4 && Cuts::pT > 20*GeV;
      WFinder wfinder_dressed_el(fs, cuts, PID::ELECTRON, 0*GeV, 1000*GeV, 25*GeV, 0.2);
      declare(wfinder_dressed_el, "WFinder_dressed_el");
      WFinder wfinder_bare_el(fs, cuts, PID::ELECTRON, 0*GeV, 1000*GeV, 25*GeV, 0.0);
      declare(wfinder_bare_el, "WFinder_bare_el");
      WFinder wfinder_dressed_mu(fs, cuts, PID::MUON, 0*GeV, 1000*GeV, 25*GeV, 0.2);
      declare(wfinder_dressed_mu, "WFinder_dressed_mu");
      WFinder wfinder_bare_mu(fs, cuts, PID::MUON, 0*GeV, 1000*GeV, 25*GeV, 0.0);
      declare(wfinder_bare_mu, "WFinder_bare_mu");

      // Book histograms
      book(_hist_wpt_dressed_el  ,1, 1, 1);
      book(_hist_wpt_bare_el     ,1, 1, 2);
      book(_hist_wpt_dressed_mu  ,2, 1, 1);
      book(_hist_wpt_bare_mu     ,2, 1, 2);
    }


    /// Do the analysis
    void analyze(const Event& event) {
      const WFinder& wfinder_dressed_el = apply<WFinder>(event, "WFinder_dressed_el");
      const WFinder& wfinder_bare_el    = apply<WFinder>(event, "WFinder_bare_el");
      const WFinder& wfinder_dressed_mu = apply<WFinder>(event, "WFinder_dressed_mu");
      const WFinder& wfinder_bare_mu    = apply<WFinder>(event, "WFinder_bare_mu");
      MSG_DEBUG("Found " << wfinder_dressed_el.size() + wfinder_dressed_mu.size() << " dressed W -> e/mu nu");
      MSG_DEBUG("Found " << wfinder_bare_el.size() + wfinder_bare_mu.size() << " bare W -> e/mu nu");

      if (wfinder_dressed_el.empty() && wfinder_bare_el.empty() &&
          wfinder_dressed_mu.empty() && wfinder_bare_mu.empty()) {
        MSG_DEBUG("No W bosons found");
        vetoEvent;
      }

      // "Dressed" electron
      if (!wfinder_dressed_el.empty()) {
        /// @todo Is this safe? Using MET would be better
	    const FourMomentum nu = wfinder_dressed_el.constituentNeutrinos()[0];
	    if (wfinder_dressed_el.mT() > 40*GeV && nu.pT() > 25*GeV) {
          _hist_wpt_dressed_el->fill(wfinder_dressed_el.bosons()[0].pT()/GeV);
	    }
      }

      // "Bare" electron
      if (!wfinder_bare_el.empty()) {
        /// @todo Is this safe? Using MET would be better
	    const FourMomentum nu = wfinder_bare_el.constituentNeutrinos()[0];
	    if (wfinder_bare_el.mT() > 40*GeV && nu.pT() > 25*GeV) {
          _hist_wpt_bare_el->fill(wfinder_bare_el.bosons()[0].pT()/GeV);
	    }
      }

      // "Dressed" muon
      if (!wfinder_dressed_mu.empty()) {
        /// @todo Is this safe? Using MET would be better
	    const FourMomentum nu = wfinder_dressed_mu.constituentNeutrinos()[0];
	    if (wfinder_dressed_mu.mT() > 40*GeV && nu.pT() > 25*GeV) {
          _hist_wpt_dressed_mu->fill(wfinder_dressed_mu.bosons()[0].pT()/GeV);
	    }
      }

      // "Bare" muon
      if (!wfinder_bare_mu.empty()) {
        /// @todo Is this safe? Using MET would be better
	    const FourMomentum nu = wfinder_bare_mu.constituentNeutrinos()[0];
	    if (wfinder_bare_mu.mT() > 40*GeV && nu.pT() > 25*GeV) {
          _hist_wpt_bare_mu->fill(wfinder_bare_mu.bosons()[0].pT()/GeV);
	    }
      }

    }


    // Normalize histos
    void finalize() {
      normalize(_hist_wpt_dressed_el);
      normalize(_hist_wpt_bare_el);
      normalize(_hist_wpt_dressed_mu);
      normalize(_hist_wpt_bare_mu);
    }

    //@}


  private:

	Histo1DPtr _hist_wpt_dressed_el, _hist_wpt_bare_el, _hist_wpt_dressed_mu, _hist_wpt_bare_mu;

  };


  // Hook for the plugin system
  RIVET_DECLARE_PLUGIN(ATLAS_2011_I925932);

}