rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2011_I928289_W

W inclusive cross sections at 7 TeV
Experiment: ATLAS (LHC)
Inspire ID: 928289
Status: VALIDATED
Authors:
  • Roman Lysak
  • Christian Gutschow
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • p + p -> W + X ( W -> mu nu or e nu ) The histograms include the $W$ charge asymmetry. Note that the charge asymmetry histograms may need to be constructed manually from the individual $W^+$ and $W^-$ channels if the analysis is run on individual files. $A_l = (W^+ - W^-) / (W^+ + W^-)$

The production cross sections of the inclusive Drell-Yan process $W^\pm \rightarrow \ell\nu$ ($\ell = e, \mu$) are measured in proton-proton collisions at $\sqrt{s} = 7$ TeV with the ATLAS detector. The cross sections are evaluated differentially as a function of the $W$ boson rapidity based on an integrated luminosity of about 35 $\text{pb}^{-1}$ collected in 2010. The cross sections are measured separately for $W^+$ and $W^-$ production, and then used to construct the $W$ charge asymmetry as well.

Source code: ATLAS_2011_I928289_W.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/WFinder.hh"
  5
  6namespace Rivet {
  7
  8
  9  class ATLAS_2011_I928289_W : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    ATLAS_2011_I928289_W()
 14      : Analysis("ATLAS_2011_I928289_W")
 15    {
 16
 17    }
 18
 19
 20    /// @name Analysis methods
 21    //@{
 22
 23    /// Book histograms and initialise projections before the run
 24    void init() {
 25
 26      ///Initialise and register projections here
 27      FinalState fs;
 28
 29      Cut cut = (Cuts::pT >= 20*GeV);
 30
 31      WFinder wfinder_el_bare(   fs, cut, PID::ELECTRON, 40.0*GeV, 7000.0*GeV, 25.0*GeV, 0.0, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY, WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
 32      WFinder wfinder_el_dressed(fs, cut, PID::ELECTRON, 40.0*GeV, 7000.0*GeV, 25.0*GeV, 0.1, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY, WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
 33      WFinder wfinder_mu_bare   (fs, cut, PID::MUON    , 40.0*GeV, 7000.0*GeV, 25.0*GeV, 0.0, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY, WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
 34      WFinder wfinder_mu_dressed(fs, cut, PID::MUON    , 40.0*GeV, 7000.0*GeV, 25.0*GeV, 0.1, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY, WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
 35
 36      declare(wfinder_el_bare   , "WFinder_el_bare");
 37      declare(wfinder_el_dressed, "WFinder_el_dressed");
 38      declare(wfinder_mu_bare   , "WFinder_mu_bare");
 39      declare(wfinder_mu_dressed, "WFinder_mu_dressed");
 40
 41      /// Book histograms here
 42      book(_h_Wminus_lepton_eta_el_bare       ,3, 1, 1);
 43      book(_h_Wminus_lepton_eta_el_dressed    ,3, 1, 2);
 44      book(_h_Wminus_lepton_eta_mu_bare       ,3, 1, 3);
 45      book(_h_Wminus_lepton_eta_mu_dressed    ,3, 1, 4);
 46      book(_h_Wplus_lepton_eta_el_bare        ,5, 1, 1);
 47      book(_h_Wplus_lepton_eta_el_dressed     ,5, 1, 2);
 48      book(_h_Wplus_lepton_eta_mu_bare        ,5, 1, 3);
 49      book(_h_Wplus_lepton_eta_mu_dressed     ,5, 1, 4);
 50      book(_h_W_asym_eta_el_bare              ,7, 1, 1);
 51      book(_h_W_asym_eta_el_dressed           ,7, 1, 2);
 52      book(_h_W_asym_eta_mu_bare              ,7, 1, 3);
 53      book(_h_W_asym_eta_mu_dressed           ,7, 1, 4);
 54
 55    }
 56
 57
 58    /// Perform the per-event analysis
 59    void analyze(const Event& event) {
 60
 61      const WFinder& wfinder_el_bare     = apply<WFinder>(event, "WFinder_el_bare");
 62      const WFinder& wfinder_el_dressed  = apply<WFinder>(event, "WFinder_el_dressed");
 63      const WFinder& wfinder_mu_bare     = apply<WFinder>(event, "WFinder_mu_bare");
 64      const WFinder& wfinder_mu_dressed  = apply<WFinder>(event, "WFinder_mu_dressed");
 65
 66      fillPlots1D(wfinder_el_bare   , _h_Wplus_lepton_eta_el_bare   , _h_Wminus_lepton_eta_el_bare);
 67      fillPlots1D(wfinder_el_dressed, _h_Wplus_lepton_eta_el_dressed, _h_Wminus_lepton_eta_el_dressed);
 68      fillPlots1D(wfinder_mu_bare   , _h_Wplus_lepton_eta_mu_bare   , _h_Wminus_lepton_eta_mu_bare);
 69      fillPlots1D(wfinder_mu_dressed, _h_Wplus_lepton_eta_mu_dressed, _h_Wminus_lepton_eta_mu_dressed);
 70    }
 71
 72
 73    void fillPlots1D(const WFinder& wfinder, Histo1DPtr hist_plus, Histo1DPtr hist_minus) {
 74      if (wfinder.bosons().size() != 1) return;
 75      const Particle l = wfinder.constituentLeptons()[0];
 76      const FourMomentum miss = wfinder.constituentNeutrinos()[0];
 77      if (l.pT() > 20*GeV && miss.Et() > 25*GeV && wfinder.mT() > 40*GeV)
 78        (l.charge3() > 0 ? hist_plus : hist_minus)->fill(l.abseta());
 79    }
 80
 81
 82    /// Normalise histograms etc., after the run
 83    void finalize() {
 84
 85      // Construct asymmetry: (dsig+/deta - dsig-/deta) / (dsig+/deta + dsig-/deta)
 86      divide(*_h_Wplus_lepton_eta_el_bare - *_h_Wminus_lepton_eta_el_bare,
 87             *_h_Wplus_lepton_eta_el_bare + *_h_Wminus_lepton_eta_el_bare,
 88             _h_W_asym_eta_el_bare);
 89      divide(*_h_Wplus_lepton_eta_el_dressed - *_h_Wminus_lepton_eta_el_dressed,
 90             *_h_Wplus_lepton_eta_el_dressed + *_h_Wminus_lepton_eta_el_dressed,
 91             _h_W_asym_eta_el_dressed);
 92      divide(*_h_Wplus_lepton_eta_mu_bare - *_h_Wminus_lepton_eta_mu_bare,
 93             *_h_Wplus_lepton_eta_mu_bare + *_h_Wminus_lepton_eta_mu_bare,
 94             _h_W_asym_eta_mu_bare);
 95      divide(*_h_Wplus_lepton_eta_mu_dressed - *_h_Wminus_lepton_eta_mu_dressed,
 96             *_h_Wplus_lepton_eta_mu_dressed + *_h_Wminus_lepton_eta_mu_dressed,
 97             _h_W_asym_eta_mu_dressed);
 98
 99      // Print summary info
100      const double xs_pb(crossSection() / picobarn);
101      const double sumw(sumOfWeights());
102
103      ///  Normalise, scale and otherwise manipulate histograms here
104      const double sf = 0.5 * xs_pb / sumw; // 0.5 accounts for rapidity bin width
105      scale(_h_Wminus_lepton_eta_el_bare   , sf);
106      scale(_h_Wminus_lepton_eta_el_dressed, sf);
107      scale(_h_Wminus_lepton_eta_mu_bare   , sf);
108      scale(_h_Wminus_lepton_eta_mu_dressed, sf);
109      scale(_h_Wplus_lepton_eta_el_bare    , sf);
110      scale(_h_Wplus_lepton_eta_el_dressed , sf);
111      scale(_h_Wplus_lepton_eta_mu_bare    , sf);
112      scale(_h_Wplus_lepton_eta_mu_dressed , sf);
113
114    }
115
116    //@}
117
118
119  private:
120
121    /// @name Histograms
122    //@{
123    Histo1DPtr _h_Wminus_lepton_eta_el_bare;
124    Histo1DPtr _h_Wminus_lepton_eta_el_dressed;
125    Histo1DPtr _h_Wminus_lepton_eta_mu_bare;
126    Histo1DPtr _h_Wminus_lepton_eta_mu_dressed;
127    Histo1DPtr _h_Wplus_lepton_eta_el_bare;
128    Histo1DPtr _h_Wplus_lepton_eta_el_dressed;
129    Histo1DPtr _h_Wplus_lepton_eta_mu_bare;
130    Histo1DPtr _h_Wplus_lepton_eta_mu_dressed;
131    Scatter2DPtr _h_W_asym_eta_el_bare;
132    Scatter2DPtr _h_W_asym_eta_el_dressed;
133    Scatter2DPtr _h_W_asym_eta_mu_bare;
134    Scatter2DPtr _h_W_asym_eta_mu_dressed;
135
136    //@}
137
138  };
139
140
141  // The hook for the plugin system
142  RIVET_DECLARE_PLUGIN(ATLAS_2011_I928289_W);
143
144}