rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2016_I1502620_W

W and Z inclusive cross sections at 7 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1502620
Status: VALIDATED
Authors:
  • Jan Kretzschmar
  • Christian Gutschow
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • p + p -> W + X ( W -> e nu )

High-precision measurements by the ATLAS Collaboration are presented of inclusive $W^+\to\ell^+$, $W^-\to\ell^-$, $Z/\gamma^\ast\to\ell\ell$ ($\ell=e,\mu$) Drell-Yan production cross sections at the LHC. The data were collected in proton-proton collisions at $\sqrt{s}=7$ TeV with an integrated luminosity of 4.6 fb${}^{-1}$. Differential $W^+$ and $W^-$ cross sections are measured in a lepton pseudorapidity range $|\eta_\ell| < 2.5$. Differential $Z/\gamma^\ast$ cross sections are measured as a function of the absolute dilepton rapidity, for $|y_{\ell\ell}| < 3.6$, for three intervals of dilepton mass, $m_{\ell\ell}$, extending from 46 to 150 GeV. The integrated and differential electron- and muon-channel cross sections are combined and compared to theoretical predictions using recent sets of parton distribution functions. The data, together with the final inclusive $e^\pm p$ scattering cross-section data from H1 and ZEUS, are interpreted in a next-to-next-to-leading-order QCD analysis, and a new set of parton distribution functions, ATLAS-epWZ16, is obtained. The ratio of strange-to-light sea-quark densities in the proton is determined more accurately than in previous determinations based on collider data only, and is established to be close to unity in the sensitivity range of the data. A new measurement of the CKM matrix element $|V_{cs}|$ is also provided. N.B.: Use ATLAS_2016_I1502620_W_EL and ATLAS_2016_I1502620_W_MU to specify the decay channel directly. Note that when merging multiple yoda files, the $W$ charge asymmetry $A_l = (W^+ - W^-) / (W^+ + W^-)$ may need to be recalculated from the individual histogram. A post-processing script is provided.

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

namespace Rivet {

  /// @brief inclusive W cross sections at 7 TeV
  class ATLAS_2016_I1502620_W : public Analysis {
  public:

    /// Constructor
    ATLAS_2016_I1502620_W(string name="ATLAS_2016_I1502620_W", size_t channel = 0, 
                          string ref_data = "ATLAS_2016_I1502620") : Analysis(name) {
      _mode = channel; // using electron channel by default
      setRefDataName(ref_data);
    }

    /// @name Analysis methods
    //@{

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

      ///Initialise and register projections here
      const FinalState fs;

      Cut cut = Cuts::pT >= 25*GeV; // minimum lepton pT

      WFinder wfinder_dressed(fs, cut, _mode? PID::MUON : PID::ELECTRON, 40*GeV, 13*TeV, 25*GeV, 0.1, 
                              WFinder::CLUSTERNODECAY, WFinder::NOTRACK, WFinder::TRANSMASS);

      declare(wfinder_dressed, "WFinder_dressed");

      /// Book histograms here
      _h_Wp_eta = bookHisto1D(   9, 1, 1);
      _h_Wm_eta = bookHisto1D(  10, 1, 1);
      _h_W_asym = bookScatter2D(35, 1, 1);

    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {

      const WFinder& wfinder = apply<WFinder>(event, "WFinder_dressed");
      if (wfinder.bosons().size() != 1)  vetoEvent;

      const double weight = event.weight();
      const Particle lep = wfinder.constituentLeptons()[0];
      if (lep.charge3() > 0)  _h_Wp_eta->fill(lep.abseta(), weight);
      else                    _h_Wm_eta->fill(lep.abseta(), weight);

    }


    /// Normalise histograms etc., after the run
    void finalize() {

      // Construct asymmetry: (dsig+/deta - dsig-/deta) / (dsig+/deta + dsig-/deta)
      //divide(*_h_Wp_eta - *_h_Wm_eta, *_h_Wp_eta + *_h_Wm_eta, _h_W_asym);
      for (size_t i = 0; i < _h_Wp_eta->numBins(); ++i) {
        YODA::HistoBin1D& bp = _h_Wp_eta->bin(i);
        YODA::HistoBin1D& bm = _h_Wm_eta->bin(i);
        const double sum  = bp.height() + bm.height();
        //const double xerr = 0.5 * bp.xWidth();
        double val = 0., yerr = 0.;

        if (sum) {
          const double pos2  = bp.height() * bp.height();
          const double min2  = bm.height() * bm.height();
          const double errp2 = bp.heightErr() * bp.heightErr();
          const double errm2 = bm.heightErr() * bm.heightErr();
          val = (bp.height() - bm.height()) / sum;
          yerr = 2. * sqrt(errm2 * pos2 + errp2 * min2) / (sum * sum);
        }

        _h_W_asym->addPoint(bp.midpoint(), val, 0.5*bp.xWidth(), yerr);
      }

      // Print summary info
      const double xs_pb(crossSection() / picobarn);
      const double sumw(sumOfWeights());
      MSG_DEBUG( "Cross-section/pb     : " << xs_pb       );
      MSG_DEBUG( "Sum of weights       : " << sumw        );
      MSG_DEBUG( "nEvents              : " << numEvents() );

      ///  Normalise, scale and otherwise manipulate histograms here
      const double sf = 0.5 * xs_pb / sumw; // 0.5 accounts for rapidity bin width
      scale(_h_Wp_eta, sf);
      scale(_h_Wm_eta, sf);

    }

    //@}


  protected:
    size_t _mode;

  private:

    /// @name Histograms
    //@{
    Histo1DPtr _h_Wp_eta, _h_Wm_eta;
    Scatter2DPtr _h_W_asym;

    //@}

  };


  class ATLAS_2016_I1502620_W_EL : public ATLAS_2016_I1502620_W {
  public:
    ATLAS_2016_I1502620_W_EL() : ATLAS_2016_I1502620_W("ATLAS_2016_I1502620_W_EL", 0) { }
  };


  class ATLAS_2016_I1502620_W_MU : public ATLAS_2016_I1502620_W {
  public:
    ATLAS_2016_I1502620_W_MU() : ATLAS_2016_I1502620_W("ATLAS_2016_I1502620_W_MU", 1) { }
  };


  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1502620_W);
  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1502620_W_EL);
  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1502620_W_MU);

}