Rivet analyses referenceATLAS_2016_I1426515WW production at 8 TeVExperiment: ATLAS (LHC) Inspire ID: 1426515 Status: VALIDATED Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
The production of $W$ boson pairs in proton--proton collisions at $\sqrt{s} = 8$ TeV is studied using data corresponding to 20.3 fb${}^{-1}$ of integrated luminosity collected by the ATLAS detector during 2012 at the CERN Large Hadron Collider. The $W$ bosons are reconstructed using their leptonic decays into electrons or muons and neutrinos. Events with reconstructed jets are not included in the candidate event sample. A total of 6636 $WW$ candidate events are observed. Measurements are performed in fiducial regions closely approximating the detector acceptance. The integrated measurement is corrected for all acceptance effects and for the $W$ branching fractions to leptons in order to obtain the total $WW$ production cross section, which is found to be $71.1 \pm 1.1$ (stat) ${}^{+5.7}_{-5.0}$ (syst) $\pm 1.4$ (lumi) pb. This agrees with the next-to-next-to-leading-order Standard Model prediction of $63.2 {}^{+1.6}_{-1.4}$ (scale) $\pm 1.2$ (PDF) pb. Fiducial differential cross sections are measured as a function of each of six kinematic variables. The distribution of the transverse momentum of the leading lepton is used to set limits on anomalous triple-gauge-boson couplings. Source code: ATLAS_2016_I1426515.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FastJets.hh"
4#include "Rivet/Projections/FinalState.hh"
5#include "Rivet/Projections/IdentifiedFinalState.hh"
6#include "Rivet/Projections/PromptFinalState.hh"
7#include "Rivet/Projections/LeptonFinder.hh"
8#include "Rivet/Projections/VetoedFinalState.hh"
9#include "Rivet/Projections/VisibleFinalState.hh"
10
11namespace Rivet {
12
13
14 /// WW production at 8 TeV
15 class ATLAS_2016_I1426515 : public Analysis {
16 public:
17
18 /// Constructor
19 RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2016_I1426515);
20
21
22 /// Book histograms and initialise projections before the run
23 void init() {
24
25 const FinalState fs(Cuts::abseta < 4.5);
26
27 // Project photons for dressing
28 IdentifiedFinalState photon_id(fs);
29 photon_id.acceptIdPair(PID::PHOTON);
30
31 // Project dressed electrons with pT > 15 GeV and |eta| < 2.47
32 PromptFinalState el_bare(FinalState(Cuts::abspid == PID::ELECTRON));
33 Cut cuts = (Cuts::abseta < 2.47) && ( (Cuts::abseta <= 1.37) || (Cuts::abseta >= 1.52) ) && (Cuts::pT > 10*GeV);
34 LeptonFinder el_dressed_FS(el_bare, photon_id, 0.1, cuts);
35 declare(el_dressed_FS, "EL_DRESSED_FS");
36
37 // Project dressed muons with pT > 15 GeV and |eta| < 2.5
38 PromptFinalState mu_bare(FinalState(Cuts::abspid == PID::MUON));
39 LeptonFinder mu_dressed_FS(mu_bare, photon_id, 0.1, Cuts::abseta < 2.4 && Cuts::pT > 15*GeV);
40 declare(mu_dressed_FS, "MU_DRESSED_FS");
41
42 Cut cuts_WW = (Cuts::abseta < 2.5) && (Cuts::pT > 20*GeV);
43 IdentifiedFinalState lep_id(fs);
44 lep_id.acceptIdPair(PID::MUON);
45 lep_id.acceptIdPair(PID::ELECTRON);
46 PromptFinalState lep_bare(lep_id);
47 LeptonFinder leptons(lep_bare, photon_id, 0.1, cuts_WW);
48 declare(leptons,"leptons");
49
50 declare(FinalState(Cuts::abspid == PID::TAU || Cuts::abspid == PID::NU_TAU), "tau_id");
51
52 // Get MET from generic invisibles
53 VetoedFinalState ivfs(fs);
54 ivfs.addVetoOnThisFinalState(VisibleFinalState(fs));
55 declare(ivfs, "InvisibleFS");
56
57 // Project jets
58 FastJets jets(fs, JetAlg::ANTIKT, 0.4, JetMuons::NONE, JetInvisibles::NONE);
59 declare(jets, "jets");
60
61
62 // Integrated cross sections
63 // d01 ee/mm fiducial integrated cross sections
64 book(_hist_mm_fid_intxsec, 1, 1, 1);
65 book(_hist_ee_fid_intxsec, 1, 1, 2);
66
67 // d02 emme fiducial integrated cross sections
68 book(_hist_emme_fid_intxsec, 2, 1, 1);
69
70 // d10 emme fiducial differential cross section (leading lepton ptlead + ptlead normalized)
71 book(_hist_emme_fid_ptlead, 10, 1, 1);
72 book(_hist_emme_fid_ptleadnorm, 10, 1, 2);
73
74 // d11 emme fiducial differential cross section (dilepton-system ptll + ptll normalized)
75 book(_hist_emme_fid_ptll, 11, 1, 1);
76 book(_hist_emme_fid_ptllnorm, 11, 1, 2);
77
78 // d12 emme fiducial differential cross section (dilepton-system mll + mll normalized)
79 book(_hist_emme_fid_mll, 12, 1, 1);
80 book(_hist_emme_fid_mllnorm, 12, 1, 2);
81
82 // d13 emme fiducial differential cross section (dilepton-system delta_phi_ll + dphill normalized)
83 book(_hist_emme_fid_dphill, 13, 1, 1);
84 book(_hist_emme_fid_dphillnorm, 13, 1, 2);
85
86 // d14 emme fiducial differential cross section (absolute rapidity of dilepton-system y_ll + y_ll normalized)
87 book(_hist_emme_fid_yll, 14, 1, 1);
88 book(_hist_emme_fid_yllnorm, 14, 1, 2);
89
90 // d15 emme fiducial differential cross section (absolute costheta* of dilepton-system costhetastar_ll + costhetastar_ll normalized)
91 book(_hist_emme_fid_costhetastarll, 15, 1, 1);
92 book(_hist_emme_fid_costhetastarllnorm, 15, 1, 2);
93
94 }
95
96
97 /// Perform the per-event analysis
98 void analyze(const Event& event) {
99
100 // Find leptons
101 const FinalState& ifs = apply<VetoedFinalState>(event, "InvisibleFS");
102 const DressedLeptons& leptons = apply<LeptonFinder>(event, "leptons").dressedLeptons();
103 const DressedLeptons& good_mu = apply<LeptonFinder>(event, "MU_DRESSED_FS").dressedLeptons();
104 const DressedLeptons& good_el = apply<LeptonFinder>(event, "EL_DRESSED_FS").dressedLeptons();
105 const Jets& jets = apply<FastJets>(event, "jets").jetsByPt(Cuts::pT > 25*GeV && Cuts::abseta < 4.5);
106
107 // Taus are excluded from the fiducial cross section
108 const Particles taus = apply<FinalState>(event, "tau_id").particlesByPt(Cuts::pT>12.*GeV && Cuts::abseta < 3.0);
109 if (!taus.empty()) vetoEvent;
110
111 // Remove events that do not contain 2 good leptons (either muons or electrons)
112 if (leptons.size() != 2 && (good_el.size() != 1 || good_mu.size() != 1)) vetoEvent;
113
114 // Split into channels
115 int channel = -1; // 1=mm, 2=ee; 3=emu; 4=mue
116 if (good_mu.size() == 2) channel = 1; //mm
117 else if (good_el.size() == 2) channel = 2; //ee
118 else if (good_mu.size() == 1 && good_el.size() == 1 && good_el[0].pT() > good_mu[0].pT()) channel = 3; //emu
119 else if (good_mu.size() == 1 && good_el.size() == 1 && good_el[0].pT() < good_mu[0].pT()) channel = 4; //mue
120 if (channel == -1) vetoEvent;
121
122 // Assign leptons
123 const DressedLepton *lep1, *lep2;
124 if (channel == 1) { //mm
125 if (good_mu[0].pT() > good_mu[1].pT()) {
126 lep1 = &good_mu[0];
127 lep2 = &good_mu[1];
128 } else {
129 lep1 = &good_mu[1];
130 lep2 = &good_mu[0];
131 }
132 }
133 else if (channel == 2) { //ee
134 if (good_el[0].pT() > good_el[1].pT()) {
135 lep1 = &good_el[0];
136 lep2 = &good_el[1];
137 } else {
138 lep1 = &good_el[1];
139 lep2 = &good_el[0];
140 }
141 }
142 else if (channel == 3) { //emu
143 lep1 = &good_el[0];
144 lep2 = &good_mu[0];
145 }
146 else { // if (channel == 4) { //mue
147 lep1 = &good_mu[0];
148 lep2 = &good_el[0];
149 }
150
151 // Cut on leptons
152 if (lep1->pT() < 25*GeV || lep2->pT() < 20*GeV) vetoEvent;
153
154 // Select jets isolated from electrons
155 const Jets jets_selected = select(jets, [&](const Jet& j){ return all(good_el, deltaRGtr(j, 0.3)); });
156
157 // Define variables
158 const FourMomentum met = sum(ifs.particles(), FourMomentum());
159 const FourMomentum dilep = lep1->momentum() + lep2->momentum();
160 const double ptll = dilep.pT()/GeV;
161 const double Mll = dilep.mass()/GeV;
162 const double Yll = dilep.absrap();
163 const double DPhill = fabs(deltaPhi(*lep1, *lep2));
164 const double costhetastar = fabs(tanh((lep1->eta() - lep2->eta()) / 2));
165
166 // Calculate dphi to MET
167 double DPhi_met = fabs(deltaPhi((*lep1), met));
168 if (fabs(deltaPhi( (*lep2), met)) < DPhi_met) DPhi_met = fabs(deltaPhi((*lep2), met));
169 if (DPhi_met > M_PI/2) DPhi_met = 1.; else DPhi_met = fabs(sin(DPhi_met));
170
171 // Apply selections
172 // mll lower cut (reject quarkonia)
173 if ((channel == 1 || channel == 2) && Mll < 15.) vetoEvent;
174 else if (Mll < 10.) vetoEvent;
175
176 // Z veto (reject Z -- only dilepton channels)
177 if ((channel == 1 || channel == 2) && abs(Mll - 91.1876) < 15.) vetoEvent;
178
179 // Met rel cut
180 if ((channel == 1 || channel == 2) && met.pT()*DPhi_met < 45*GeV) vetoEvent;
181 else if (met.pT()*DPhi_met < 15*GeV) vetoEvent;
182
183 // MET (pt-MET) cut
184 if ((channel == 1 || channel == 2) && met.pT() <= 45*GeV) vetoEvent; // begin MET cut
185 else if (met.pT() <= 20*GeV) vetoEvent;
186
187 // Require 0 jets
188 if (!jets_selected.empty()) vetoEvent;
189
190 // Fill histograms
191 if (channel == 1) {
192 _hist_mm_fid_intxsec->fill(1.0);
193
194 } else if (channel == 2) {
195 _hist_ee_fid_intxsec->fill(1.0);
196
197 } else if (channel == 3 || channel == 4) {
198 _hist_emme_fid_intxsec->fill(1.0);
199
200 _hist_emme_fid_ptlead->fill(lep1->pT()/GeV);
201 _hist_emme_fid_ptleadnorm->fill(lep1->pT()/GeV);
202
203 _hist_emme_fid_ptll->fill(ptll);
204 _hist_emme_fid_ptllnorm->fill(ptll);
205
206 _hist_emme_fid_mll->fill(Mll);
207 _hist_emme_fid_mllnorm->fill(Mll);
208
209 _hist_emme_fid_dphill->fill(DPhill);
210 _hist_emme_fid_dphillnorm->fill(DPhill);
211
212 _hist_emme_fid_yll->fill(Yll);
213 _hist_emme_fid_yllnorm->fill(Yll);
214
215 _hist_emme_fid_costhetastarll->fill(costhetastar);
216 _hist_emme_fid_costhetastarllnorm->fill(costhetastar);
217 }
218 }
219
220
221 /// Normalise histograms etc., after the run
222 void finalize() {
223 const double sf(crossSection()/femtobarn/sumOfWeights());
224 scale(_hist_mm_fid_intxsec, sf); scale(_hist_ee_fid_intxsec, sf);
225 scale(_hist_emme_fid_intxsec, sf); scale(_hist_emme_fid_ptlead, sf);
226 scale(_hist_emme_fid_ptll, sf); scale(_hist_emme_fid_mll, sf);
227 scale(_hist_emme_fid_dphill, sf); scale(_hist_emme_fid_yll, sf);
228 scale(_hist_emme_fid_costhetastarll, sf);
229 normalize(_hist_emme_fid_ptleadnorm); normalize(_hist_emme_fid_ptllnorm);
230 normalize(_hist_emme_fid_mllnorm); normalize(_hist_emme_fid_dphillnorm);
231 normalize(_hist_emme_fid_yllnorm); normalize(_hist_emme_fid_costhetastarllnorm);
232 }
233
234
235 private:
236
237 /// @name Histograms
238 /// @{
239
240 // d01 ee/mm fiducial integrated cross sections
241 Histo1DPtr _hist_mm_fid_intxsec, _hist_ee_fid_intxsec;
242
243 // d02 emme fiducial integrated cross sections
244 Histo1DPtr _hist_emme_fid_intxsec;
245
246 // d10 emme fiducial differential cross section (leading lepton ptlead + ptlead normalized)
247 Histo1DPtr _hist_emme_fid_ptlead, _hist_emme_fid_ptleadnorm;
248
249 // d11 emme fiducial differential cross section (dilepton-system ptll + ptll normalized)
250 Histo1DPtr _hist_emme_fid_ptll, _hist_emme_fid_ptllnorm;
251
252 // d12 emme fiducial differential cross section (dilepton-system mll + mll normalized)
253 Histo1DPtr _hist_emme_fid_mll, _hist_emme_fid_mllnorm;
254
255 // d13 emme fiducial differential cross section (dilepton-system delta_phi_ll + dphill normalized)
256 Histo1DPtr _hist_emme_fid_dphill, _hist_emme_fid_dphillnorm;
257
258 // d14 emme fiducial differential cross section (absolute rapidity of dilepton-system y_ll + y_ll normalized)
259 Histo1DPtr _hist_emme_fid_yll, _hist_emme_fid_yllnorm;
260
261 // d15 emme fiducial differential cross section (absolute costheta* of dilepton-system costhetastar_ll + costhetastar_ll normalized)
262 Histo1DPtr _hist_emme_fid_costhetastarll, _hist_emme_fid_costhetastarllnorm;
263 /// @}
264
265 };
266
267
268 RIVET_DECLARE_PLUGIN(ATLAS_2016_I1426515);
269
270}
|