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(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); }