rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2016_I1502620_Z

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 -> Z + X ( Z -> e e )

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_Z_EL and ATLAS_2016_I1502620_Z_MU to specify the decay channel directly.

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

namespace Rivet {

  /// @brief inclusive Z cross sections at 7 TeV
  class ATLAS_2016_I1502620_Z : public Analysis {
  public:

    /// Constructor
    ATLAS_2016_I1502620_Z(string name="ATLAS_2016_I1502620_Z", 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() {

      const FinalState fs;

      Cut cuts = Cuts::pT >= 20.0*GeV;
      ZFinder zfinder(fs, cuts, (_mode ? PID::MUON : PID::ELECTRON), 46.0*GeV, 150*GeV, 0.1, ZFinder::CLUSTERNODECAY, ZFinder::NOTRACK);
      declare(zfinder, "ZFinder");

      // Book histograms
      _h_Zcenlow_y_dressed   = bookHisto1D(11, 1, 1);
      _h_Zcenpeak_y_dressed  = bookHisto1D(12, 1, 1);
      _h_Zcenhigh_y_dressed  = bookHisto1D(13, 1, 1);
      _h_Zfwdpeak_y_dressed  = bookHisto1D(14, 1, 1);
      _h_Zfwdhigh_y_dressed  = bookHisto1D(15, 1, 1);

    }


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

      const ZFinder& zfinder  = apply<ZFinder>(event, "ZFinder");
      if (zfinder.bosons().size() != 1 ) vetoEvent;

      const Particle& Zboson = zfinder.boson();
      const double zrap  = Zboson.absrap();
      const double zmass = Zboson.mass();

      // Get/cut on Z boson leptons
      const ParticleVector& leptons = zfinder.constituents();
      const double eta1 = leptons[0].abseta();
      const double eta2 = leptons[1].abseta();

      const double weight = event.weight();

      // separation into central/forward and three mass bins
      if (eta1 < 2.5 && eta2 < 2.5) {
        if (zmass < 66.0*GeV)        _h_Zcenlow_y_dressed->fill(zrap, weight);
        else if (zmass < 116.0*GeV)  _h_Zcenpeak_y_dressed->fill(zrap, weight);
        else                         _h_Zcenhigh_y_dressed->fill(zrap, weight);
      } 
      else if ((eta1 < 2.5 && 2.5 < eta2 && eta2 < 4.9) || (eta2 < 2.5 && 2.5 < eta1 && eta1 < 4.9)) {
        if (zmass < 66.0*GeV)   vetoEvent;
        if (zmass < 116.0*GeV)  _h_Zfwdpeak_y_dressed->fill(zrap, weight);
        else                    _h_Zfwdhigh_y_dressed->fill(zrap, weight);
      }
    }


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

      // 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_Zcenlow_y_dressed, sf);
      scale(_h_Zcenpeak_y_dressed, sf);
      scale(_h_Zcenhigh_y_dressed, sf);
      scale(_h_Zfwdpeak_y_dressed, sf);
      scale(_h_Zfwdhigh_y_dressed, sf);

    }

    //@}

  protected:
    size_t _mode;

  private:

    /// @name Histograms
    //@{
    Histo1DPtr _h_Zcenlow_y_dressed;
    Histo1DPtr _h_Zcenpeak_y_dressed;
    Histo1DPtr _h_Zcenhigh_y_dressed;
    Histo1DPtr _h_Zfwdpeak_y_dressed;
    Histo1DPtr _h_Zfwdhigh_y_dressed;
    //@}

  };


  class ATLAS_2016_I1502620_Z_EL : public ATLAS_2016_I1502620_Z {
  public:
    ATLAS_2016_I1502620_Z_EL() : ATLAS_2016_I1502620_Z("ATLAS_2016_I1502620_Z_EL", 0) { }
  };


  class ATLAS_2016_I1502620_Z_MU : public ATLAS_2016_I1502620_Z {
  public:
    ATLAS_2016_I1502620_Z_MU() : ATLAS_2016_I1502620_Z("ATLAS_2016_I1502620_Z_MU", 1) { }
  };


  // The hook for the plugin system
  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1502620_Z);
  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1502620_Z_EL);
  DECLARE_RIVET_PLUGIN(ATLAS_2016_I1502620_Z_MU);

}