rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2016_I1426515

WW production at 8 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1426515
Status: VALIDATED
Authors:
  • Kristin Lohwasser
  • Christian Gutschow
References: Beams: p+ p+
Beam energies: (4000.0, 4000.0) GeV
Run details:
  • pp -> WW production at 8 TeV

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}