Rivet Analyses Reference

ATLAS_2019_I1768911

Z pT and Z phi* at 13 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1768911
Status: VALIDATED
Authors:
  • Jan Kretzschmar
References:Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • p + p -> Z + X with Z -> e e or Z -> mu mu

This paper describes precision measurements of the transverse momentum $p_\mathrm{T}^{\ell\ell}$ ($\ell=e,\mu$) and of the angular variable $\phi^{*}_{\eta}$ distributions of Drell-Yan lepton pairs in a mass range of 66-116 GeV. The analysis uses data from 36.1 fb$^{-1}$ of proton-proton collisions at a centre-of-mass energy of $\sqrt{s}=13$ TeV collected by the ATLAS experiment at the LHC in 2015 and 2016. Measurements in electron-pair and muon-pair final states are performed in the same fiducial volumes, corrected for detector effects, and combined. Compared to previous measurements in proton-proton collisions at $\sqrt{s}=$7 and 8 TeV, this new measurement probes perturbative QCD at a higher centre-of-mass energy with a different composition of initial states. It reaches a precision of 0.2% for the normalized spectra at low values of $p_\mathrm{T}^{\ell\ell}$. The data are compared with different QCD predictions, where it is found that predictions based on resummation approaches can describe the full spectrum within uncertainties. Decay channel (e or mu) is selected by LMODE=EL,MU. The comparison is always to the combined measurement.

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

namespace Rivet {


  /// @brief Z pT and Z phi* at 13 TeV
  class ATLAS_2019_I1768911 : public Analysis {
  public:

    /// Constructor
    DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2019_I1768911);

    /// @name Analysis methods
    //@{

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

      // Get options 
      _mode = 0;
      if ( getOption("LMODE") == "EL" ) _mode = 1;
      if ( getOption("LMODE") == "MU" ) _mode = 2;

      // Configure projections
      const FinalState fs;
      Cut cuts = Cuts::abseta < 2.5 && Cuts::pT > 27*GeV;
      ZFinder zmmFinder(fs, cuts, PID::MUON, 66*GeV, 116*GeV, 0.1,
		      ZFinder::ChargedLeptons::PROMPT, ZFinder::ClusterPhotons::NODECAY, ZFinder::AddPhotons::NO);
      declare(zmmFinder, "ZFinder_mu");
      ZFinder zeeFinder(fs, cuts, PID::ELECTRON, 66*GeV, 116*GeV, 0.1,
		      ZFinder::ChargedLeptons::PROMPT, ZFinder::ClusterPhotons::NODECAY, ZFinder::AddPhotons::NO);
      declare(zeeFinder, "ZFinder_el");

      // Book histograms
      book(_h["zpt_combined_dressed_normalised"], 27, 1, 1);
      book(_h["zphistar_combined_dressed_normalised"], 28, 1, 1);
    }


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

      // Get leptonic Z boson
      const ZFinder& zmmFinder = apply<ZFinder>(event, "ZFinder_mu");
      const ZFinder& zeeFinder = apply<ZFinder>(event, "ZFinder_el");
      if (_mode == 2 && zmmFinder.bosons().size() != 1 && zeeFinder.bosons().size())   vetoEvent;
      if (_mode == 1 && zeeFinder.bosons().size() != 1 && zmmFinder.bosons().size())   vetoEvent;
      if (_mode == 0 && (zeeFinder.bosons().size() + zmmFinder.bosons().size()) != 1)  vetoEvent;
      const Particle& Zboson = zeeFinder.bosons().size()? zeeFinder.boson() : zmmFinder.boson();

      // cut on Z boson leptons and calculate pTll and phistar
      const Particles& leptons = zeeFinder.bosons().size()? zeeFinder.constituents() : zmmFinder.constituents();
      if (leptons.size() != 2 || leptons[0].charge3() * leptons[1].charge3() > 0) vetoEvent;

      const double zpt = Zboson.pT()/GeV;
      const Particle& lminus = leptons[0].charge() < 0 ? leptons[0] : leptons[1];
      const Particle& lplus  = leptons[0].charge() < 0 ? leptons[1] : leptons[0];
      const double phi_acop = M_PI - deltaPhi(lminus, lplus);
      const double costhetastar = tanh( 0.5 * (lminus.eta() - lplus.eta()) );
      const double sin2thetastar = (costhetastar > 1) ? 0.0 : (1.0 - sqr(costhetastar));
      const double phistar = tan(0.5 * phi_acop) * sqrt(sin2thetastar);

      _h["zpt_combined_dressed_normalised"]->fill(zpt);
      _h["zphistar_combined_dressed_normalised"]->fill(phistar);
    }


    /// Normalise histograms etc., after the run
    void finalize() {  normalize(_h);  }
    //@}


  protected:

    size_t _mode;


  private:

    /// @name Histograms
    //@{
    map<string, Histo1DPtr> _h;
    //@}

  };


  DECLARE_RIVET_PLUGIN(ATLAS_2019_I1768911);
}