rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2012_I1204784

Measurement of angular correlations in Drell-Yan lepton pairs to probe $Z/\gamma^*$ boson transverse momentum
Experiment: ATLAS (LHC)
Inspire ID: 1204784
Status: VALIDATED
Authors:
  • Elena Yatsenko
  • Kiran Joshi
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • $Z/\gamma^*$ production with decays to electrons and/or muons.

A measurement of angular correlations in Drell-Yan lepton pairs via the $\phi^*$ observable is presented. This variable probes the same physics as the $Z/\gamma^*$ boson transverse momentum with a better experimental resolution. The $Z/\gamma^* \to ee$ and $Z/\gamma^* \to \mu \mu$ decays produced in proton--proton collisions at a centre-of-mass energy of $\sqrt{s} = 7 \text{TeV}$ are used. Normalised differential cross sections as a function of $\phi^*$ are measured separately for electron and muon decay channels. The cross-section is also measured double differentially as a function of $\phi^*$ for three independent bins of the $Z$ boson rapidity.

Source code: ATLAS_2012_I1204784.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/DileptonFinder.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// ATLAS Z phi* measurement
  9  class ATLAS_2012_I1204784 : public Analysis {
 10    public:
 11
 12      /// Constructor
 13      RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2012_I1204784);
 14
 15
 16      /// Book histograms and initialise projections before the run
 17      void init() {
 18        Cut cuts = Cuts::abseta < 2.4 && Cuts::pT > 20*GeV;
 19        DileptonFinder zfinder_dressed_el(91.2*GeV, 0.1, cuts && Cuts::abspid == PID::ELECTRON, Cuts::massIn(66*GeV, 116*GeV));
 20        declare(zfinder_dressed_el, "DileptonFinder_dressed_el");
 21        DileptonFinder zfinder_bare_el(91.2*GeV, 0.0, cuts && Cuts::abspid == PID::ELECTRON, Cuts::massIn(66*GeV, 116*GeV));
 22        declare(zfinder_bare_el, "DileptonFinder_bare_el");
 23        DileptonFinder zfinder_dressed_mu(91.2*GeV, 0.1, cuts && Cuts::abspid == PID::MUON, Cuts::massIn(66*GeV, 116*GeV));
 24        declare(zfinder_dressed_mu, "DileptonFinder_dressed_mu");
 25        DileptonFinder zfinder_bare_mu(91.2*GeV, 0.0, cuts && Cuts::abspid == PID::MUON, Cuts::massIn(66*GeV, 116*GeV));
 26        declare(zfinder_bare_mu, "DileptonFinder_bare_mu");
 27
 28        // Book histograms
 29        // Single-differential plots
 30        book(_hist_zphistar_el_bare ,1, 1, 1);
 31        book(_hist_zphistar_mu_bare ,1, 1, 2);
 32        book(_hist_zphistar_el_dressed ,2, 1, 1);
 33        book(_hist_zphistar_mu_dressed ,2, 1, 2);
 34
 35        // Double-differential plots
 36        book(_h_phistar_el_bare,    {0., 0.8, 1.6, 10.}, {"d03-x01-y01", "d03-x01-y02", "d03-x01-y03"});
 37        book(_h_phistar_el_dressed, {0., 0.8, 1.6, 10.}, {"d03-x02-y01", "d03-x02-y02", "d03-x02-y03"});
 38        book(_h_phistar_mu_bare,    {0., 0.8, 1.6, 10.}, {"d04-x01-y01", "d04-x01-y02", "d04-x01-y03"});
 39        book(_h_phistar_mu_dressed, {0., 0.8, 1.6, 10.}, {"d04-x02-y01", "d04-x02-y02", "d04-x02-y03"});
 40
 41      }
 42
 43
 44      /// Perform the per-event analysis
 45      void analyze(const Event& event) {
 46
 47        const DileptonFinder& zfinder_dressed_el = apply<DileptonFinder>(event, "DileptonFinder_dressed_el");
 48        fillPlots(zfinder_dressed_el, _hist_zphistar_el_dressed, _h_phistar_el_dressed);
 49
 50        const DileptonFinder& zfinder_bare_el = apply<DileptonFinder>(event, "DileptonFinder_bare_el");
 51        fillPlots(zfinder_bare_el, _hist_zphistar_el_bare, _h_phistar_el_bare);
 52
 53        const DileptonFinder& zfinder_dressed_mu = apply<DileptonFinder>(event, "DileptonFinder_dressed_mu");
 54        fillPlots(zfinder_dressed_mu, _hist_zphistar_mu_dressed, _h_phistar_mu_dressed);
 55
 56        const DileptonFinder& zfinder_bare_mu = apply<DileptonFinder>(event, "DileptonFinder_bare_mu");
 57        fillPlots(zfinder_bare_mu, _hist_zphistar_mu_bare, _h_phistar_mu_bare);
 58      }
 59
 60
 61      void fillPlots(const DileptonFinder& zfind, Histo1DPtr hist, Histo1DGroupPtr& binnedHist) {
 62        if (zfind.bosons().size() != 1) return;
 63        Particles leptons = sortBy(zfind.constituents(), cmpMomByPt);
 64
 65        const FourMomentum lminus = leptons[0].charge() < 0 ? leptons[0].momentum() : leptons[1].momentum();
 66        const FourMomentum lplus = leptons[0].charge() < 0 ? leptons[1].momentum() : leptons[0].momentum();
 67
 68        const double phi_acop = M_PI - deltaPhi(lminus, lplus);
 69        const double costhetastar = tanh((lminus.eta()-lplus.eta())/2.0);
 70        const double sin2thetastar = (costhetastar <= 1) ? 1.0 - sqr(costhetastar) : 0;
 71        const double phistar = tan(phi_acop/2.0) * sqrt(sin2thetastar);
 72        hist->fill(phistar);
 73
 74        binnedHist->fill(zfind.bosons()[0].absrap(), phistar);
 75      }
 76
 77
 78      /// Normalise histograms etc., after the run
 79      void finalize() {
 80        normalize(_hist_zphistar_el_dressed);
 81        normalize(_hist_zphistar_el_bare);
 82        normalize(_hist_zphistar_mu_dressed);
 83        normalize(_hist_zphistar_mu_bare);
 84
 85        normalize(_h_phistar_mu_dressed);
 86        normalize(_h_phistar_mu_bare);
 87        normalize(_h_phistar_el_bare);
 88        normalize(_h_phistar_el_dressed);
 89      }
 90
 91
 92    private:
 93
 94      Histo1DGroupPtr _h_phistar_mu_dressed;
 95      Histo1DGroupPtr _h_phistar_mu_bare;
 96      Histo1DGroupPtr _h_phistar_el_dressed;
 97      Histo1DGroupPtr _h_phistar_el_bare;
 98
 99      Histo1DPtr _hist_zphistar_el_dressed;
100      Histo1DPtr _hist_zphistar_el_bare;
101
102      Histo1DPtr _hist_zphistar_mu_dressed;
103      Histo1DPtr _hist_zphistar_mu_bare;
104
105      Histo1DPtr _hist_zphistar_el_bare_1;
106      Histo1DPtr _hist_zphistar_el_bare_2;
107      Histo1DPtr _hist_zphistar_el_bare_3;
108
109      Histo1DPtr _hist_zphistar_el_dressed_1;
110      Histo1DPtr _hist_zphistar_el_dressed_2;
111      Histo1DPtr _hist_zphistar_el_dressed_3;
112
113      Histo1DPtr _hist_zphistar_mu_bare_1;
114      Histo1DPtr _hist_zphistar_mu_bare_2;
115      Histo1DPtr _hist_zphistar_mu_bare_3;
116
117      Histo1DPtr _hist_zphistar_mu_dressed_1;
118      Histo1DPtr _hist_zphistar_mu_dressed_2;
119      Histo1DPtr _hist_zphistar_mu_dressed_3;
120
121  };
122
123
124  RIVET_DECLARE_PLUGIN(ATLAS_2012_I1204784);
125
126}