Rivet analyses referenceATLAS_2012_I1204784Measurement of angular correlations in Drell-Yan lepton pairs to probe $Z/\gamma^*$ boson transverse momentumExperiment: ATLAS (LHC) Inspire ID: 1204784 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
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}
|