Rivet analyses referenceATLAS_2019_I1768911Z pT and Z phi* at 13 TeVExperiment: ATLAS (LHC) Inspire ID: 1768911 Status: VALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
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#include "Rivet/Analysis.hh"
2#include "Rivet/Projections/FinalState.hh"
3#include "Rivet/Projections/ZFinder.hh"
4
5namespace Rivet {
6
7
8 /// @brief Z pT and Z phi* at 13 TeV
9 class ATLAS_2019_I1768911 : public Analysis {
10 public:
11
12 /// Constructor
13 DEFAULT_RIVET_ANALYSIS_CTOR(ATLAS_2019_I1768911);
14
15 /// @name Analysis methods
16 //@{
17
18 /// Book histograms and initialise projections before the run
19 void init() {
20
21 // Get options
22 _mode = 0;
23 if ( getOption("LMODE") == "EL" ) _mode = 1;
24 if ( getOption("LMODE") == "MU" ) _mode = 2;
25
26 // Configure projections
27 const FinalState fs;
28 Cut cuts = Cuts::abseta < 2.5 && Cuts::pT > 27*GeV;
29 ZFinder zmmFinder(fs, cuts, PID::MUON, 66*GeV, 116*GeV, 0.1,
30 ZFinder::ChargedLeptons::PROMPT, ZFinder::ClusterPhotons::NODECAY, ZFinder::AddPhotons::NO);
31 declare(zmmFinder, "ZFinder_mu");
32 ZFinder zeeFinder(fs, cuts, PID::ELECTRON, 66*GeV, 116*GeV, 0.1,
33 ZFinder::ChargedLeptons::PROMPT, ZFinder::ClusterPhotons::NODECAY, ZFinder::AddPhotons::NO);
34 declare(zeeFinder, "ZFinder_el");
35
36 // Book histograms
37 book(_h["zpt_combined_dressed_normalised"], 27, 1, 1);
38 book(_h["zphistar_combined_dressed_normalised"], 28, 1, 1);
39 }
40
41
42 /// Perform the per-event analysis
43 void analyze(const Event& event) {
44
45 // Get leptonic Z boson
46 const ZFinder& zmmFinder = apply<ZFinder>(event, "ZFinder_mu");
47 const ZFinder& zeeFinder = apply<ZFinder>(event, "ZFinder_el");
48 if (_mode == 2 && zmmFinder.bosons().size() != 1 && zeeFinder.bosons().size()) vetoEvent;
49 if (_mode == 1 && zeeFinder.bosons().size() != 1 && zmmFinder.bosons().size()) vetoEvent;
50 if (_mode == 0 && (zeeFinder.bosons().size() + zmmFinder.bosons().size()) != 1) vetoEvent;
51 const Particle& Zboson = zeeFinder.bosons().size()? zeeFinder.boson() : zmmFinder.boson();
52
53 // cut on Z boson leptons and calculate pTll and phistar
54 const Particles& leptons = zeeFinder.bosons().size()? zeeFinder.constituents() : zmmFinder.constituents();
55 if (leptons.size() != 2 || leptons[0].charge3() * leptons[1].charge3() > 0) vetoEvent;
56
57 const double zpt = Zboson.pT()/GeV;
58 const Particle& lminus = leptons[0].charge() < 0 ? leptons[0] : leptons[1];
59 const Particle& lplus = leptons[0].charge() < 0 ? leptons[1] : leptons[0];
60 const double phi_acop = M_PI - deltaPhi(lminus, lplus);
61 const double costhetastar = tanh( 0.5 * (lminus.eta() - lplus.eta()) );
62 const double sin2thetastar = (costhetastar > 1) ? 0.0 : (1.0 - sqr(costhetastar));
63 const double phistar = tan(0.5 * phi_acop) * sqrt(sin2thetastar);
64
65 _h["zpt_combined_dressed_normalised"]->fill(zpt);
66 _h["zphistar_combined_dressed_normalised"]->fill(phistar);
67 }
68
69
70 /// Normalise histograms etc., after the run
71 void finalize() { normalize(_h); }
72 //@}
73
74
75 protected:
76
77 size_t _mode;
78
79
80 private:
81
82 /// @name Histograms
83 //@{
84 map<string, Histo1DPtr> _h;
85 //@}
86
87 };
88
89
90 DECLARE_RIVET_PLUGIN(ATLAS_2019_I1768911);
91}
|