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/ZFinder.hh"
  4#include "Rivet/Tools/BinnedHistogram.hh"
  5
  6namespace Rivet {
  7
  8  
  9
 10
 11  /// ATLAS Z phi* measurement
 12  class ATLAS_2012_I1204784 : public Analysis {
 13    public:
 14
 15      /// Constructor
 16      ATLAS_2012_I1204784()
 17        : Analysis("ATLAS_2012_I1204784")
 18      {      }
 19
 20
 21    public:
 22
 23      /// Book histograms and initialise projections before the run
 24      void init() {
 25        FinalState fs;
 26        Cut cuts = Cuts::abseta < 2.4 && Cuts::pT > 20*GeV;
 27        ZFinder zfinder_dressed_el(fs, cuts, PID::ELECTRON, 66*GeV, 116*GeV, 0.1, ZFinder::ClusterPhotons::NODECAY);
 28        declare(zfinder_dressed_el, "ZFinder_dressed_el");
 29        ZFinder zfinder_bare_el(fs, cuts, PID::ELECTRON, 66*GeV, 116*GeV, 0.0, ZFinder::ClusterPhotons::NONE);
 30        declare(zfinder_bare_el, "ZFinder_bare_el");
 31        ZFinder zfinder_dressed_mu(fs, cuts, PID::MUON, 66*GeV, 116*GeV, 0.1, ZFinder::ClusterPhotons::NODECAY);
 32        declare(zfinder_dressed_mu, "ZFinder_dressed_mu");
 33        ZFinder zfinder_bare_mu(fs, cuts, PID::MUON, 66*GeV, 116*GeV, 0.0, ZFinder::ClusterPhotons::NONE);
 34        declare(zfinder_bare_mu, "ZFinder_bare_mu");
 35
 36        // Book histograms
 37        // Single-differential plots
 38        book(_hist_zphistar_el_bare ,1, 1, 1);
 39        book(_hist_zphistar_mu_bare ,1, 1, 2);
 40        book(_hist_zphistar_el_dressed ,2, 1, 1);
 41        book(_hist_zphistar_mu_dressed ,2, 1, 2);
 42
 43        // Double-differential plots
 44        {Histo1DPtr tmp; _h_phistar_el_bare.add(0.0, 0.8, book(tmp, 3, 1, 1));}
 45        {Histo1DPtr tmp; _h_phistar_el_bare.add(0.8, 1.6, book(tmp, 3, 1, 2));}
 46        {Histo1DPtr tmp; _h_phistar_el_bare.add(1.6, 10.0, book(tmp, 3, 1, 3));}
 47
 48        {Histo1DPtr tmp; _h_phistar_el_dressed.add(0.0, 0.8, book(tmp, 3, 2, 1));}
 49        {Histo1DPtr tmp; _h_phistar_el_dressed.add(0.8, 1.6, book(tmp, 3, 2, 2));}
 50        {Histo1DPtr tmp; _h_phistar_el_dressed.add(1.6, 10.0, book(tmp, 3, 2, 3));}
 51
 52        {Histo1DPtr tmp; _h_phistar_mu_bare.add(0.0, 0.8, book(tmp, 4, 1, 1));}
 53        {Histo1DPtr tmp; _h_phistar_mu_bare.add(0.8, 1.6, book(tmp, 4, 1, 2));}
 54        {Histo1DPtr tmp; _h_phistar_mu_bare.add(1.6, 10.0, book(tmp, 4, 1, 3));}
 55
 56        {Histo1DPtr tmp; _h_phistar_mu_dressed.add(0.0, 0.8, book(tmp, 4, 2, 1));}
 57        {Histo1DPtr tmp; _h_phistar_mu_dressed.add(0.8, 1.6, book(tmp, 4, 2, 2));}
 58        {Histo1DPtr tmp; _h_phistar_mu_dressed.add(1.6, 10.0, book(tmp, 4, 2, 3));}
 59      }
 60
 61
 62      /// Perform the per-event analysis
 63      void analyze(const Event& event) {
 64        const double weight = 1.0;
 65
 66        const ZFinder& zfinder_dressed_el = apply<ZFinder>(event, "ZFinder_dressed_el");
 67        const ZFinder& zfinder_bare_el = apply<ZFinder>(event, "ZFinder_bare_el");
 68        const ZFinder& zfinder_dressed_mu = apply<ZFinder>(event, "ZFinder_dressed_mu");
 69        const ZFinder& zfinder_bare_mu = apply<ZFinder>(event, "ZFinder_bare_mu");
 70
 71        fillPlots(zfinder_dressed_el, _hist_zphistar_el_dressed, _h_phistar_el_dressed, weight);
 72        fillPlots(zfinder_bare_el, _hist_zphistar_el_bare, _h_phistar_el_bare, weight);
 73        fillPlots(zfinder_dressed_mu, _hist_zphistar_mu_dressed, _h_phistar_mu_dressed, weight);
 74        fillPlots(zfinder_bare_mu, _hist_zphistar_mu_bare, _h_phistar_mu_bare, weight);
 75      }
 76
 77
 78      void fillPlots(const ZFinder& zfind, Histo1DPtr hist, BinnedHistogram& binnedHist, double weight) {
 79        if (zfind.bosons().size() != 1) return;
 80        Particles leptons = sortBy(zfind.constituents(), cmpMomByPt);
 81
 82        const FourMomentum lminus = leptons[0].charge() < 0 ? leptons[0].momentum() : leptons[1].momentum();
 83        const FourMomentum lplus = leptons[0].charge() < 0 ? leptons[1].momentum() : leptons[0].momentum();
 84
 85        const double phi_acop = M_PI - deltaPhi(lminus, lplus);
 86        const double costhetastar = tanh((lminus.eta()-lplus.eta())/2.0);
 87        const double sin2thetastar = (costhetastar <= 1) ? 1.0 - sqr(costhetastar) : 0;
 88        const double phistar = tan(phi_acop/2.0) * sqrt(sin2thetastar);
 89        hist->fill(phistar, weight);
 90
 91        binnedHist.fill(zfind.bosons()[0].absrap(), phistar, weight);
 92      }
 93
 94
 95      /// Normalise histograms etc., after the run
 96      void finalize() {
 97        normalize(_hist_zphistar_el_dressed);
 98        normalize(_hist_zphistar_el_bare);
 99        normalize(_hist_zphistar_mu_dressed);
100        normalize(_hist_zphistar_mu_bare);
101
102        for (Histo1DPtr hist : _h_phistar_mu_dressed.histos()) { normalize(hist); }
103        for (Histo1DPtr hist : _h_phistar_mu_bare.histos()) { normalize(hist); }
104        for (Histo1DPtr hist : _h_phistar_el_bare.histos()) { normalize(hist); }
105        for (Histo1DPtr hist : _h_phistar_el_dressed.histos()) { normalize(hist); }
106      }
107
108      //@}
109
110
111    private:
112
113      BinnedHistogram _h_phistar_mu_dressed;
114      BinnedHistogram _h_phistar_mu_bare;
115      BinnedHistogram _h_phistar_el_dressed;
116      BinnedHistogram _h_phistar_el_bare;
117
118      Histo1DPtr _hist_zphistar_el_dressed;
119      Histo1DPtr _hist_zphistar_el_bare;
120
121      Histo1DPtr _hist_zphistar_mu_dressed;
122      Histo1DPtr _hist_zphistar_mu_bare;
123
124      Histo1DPtr _hist_zphistar_el_bare_1;
125      Histo1DPtr _hist_zphistar_el_bare_2;
126      Histo1DPtr _hist_zphistar_el_bare_3;
127
128      Histo1DPtr _hist_zphistar_el_dressed_1;
129      Histo1DPtr _hist_zphistar_el_dressed_2;
130      Histo1DPtr _hist_zphistar_el_dressed_3;
131
132      Histo1DPtr _hist_zphistar_mu_bare_1;
133      Histo1DPtr _hist_zphistar_mu_bare_2;
134      Histo1DPtr _hist_zphistar_mu_bare_3;
135
136      Histo1DPtr _hist_zphistar_mu_dressed_1;
137      Histo1DPtr _hist_zphistar_mu_dressed_2;
138      Histo1DPtr _hist_zphistar_mu_dressed_3;
139
140  };
141
142
143  // The hook for the plugin system
144  RIVET_DECLARE_PLUGIN(ATLAS_2012_I1204784);
145
146}