Rivet analyses

WW production at 8 TeV

Experiment: ATLAS (LHC)

Inspire ID: 1426515

Status: VALIDATED

Authors: - Kristin Lohwasser - Christian Gutschow

References: - Expt page: ATLAS-STDM-2013-07 - JHEP 1609 (2016) 029 - DOI: 10.1007/JHEP09(2016)029 - arXiv: 1603.01702

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

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/PromptFinalState.hh"
#include "Rivet/Projections/VetoedFinalState.hh"
#include "Rivet/Projections/VisibleFinalState.hh"

namespace Rivet {


  /// WW production at 8 TeV
  class ATLAS_2016_I1426515 : public Analysis {
  public:

    /// Constructor
    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2016_I1426515);


    /// Book histograms and initialise projections before the run
    void init() {

      const FinalState fs(Cuts::abseta < 4.5);

      // Project photons for dressing
      IdentifiedFinalState photon_id(fs);
      photon_id.acceptIdPair(PID::PHOTON);

      // Project dressed electrons with pT > 15 GeV and |eta| < 2.47
      PromptFinalState el_bare(FinalState(Cuts::abspid == PID::ELECTRON));
      Cut cuts = (Cuts::abseta < 2.47) && ((Cuts::abseta <= 1.37) || (Cuts::abseta >= 1.52))
          && (Cuts::pT > 10 * GeV);
      LeptonFinder el_dressed_FS(el_bare, photon_id, 0.1, cuts);
      declare(el_dressed_FS, "EL_DRESSED_FS");

      // Project dressed muons with pT > 15 GeV and |eta| < 2.5
      PromptFinalState mu_bare(FinalState(Cuts::abspid == PID::MUON));
      LeptonFinder mu_dressed_FS(mu_bare, photon_id, 0.1, Cuts::abseta < 2.4 && Cuts::pT > 15 * GeV);
      declare(mu_dressed_FS, "MU_DRESSED_FS");

      Cut cuts_WW = (Cuts::abseta < 2.5) && (Cuts::pT > 20 * GeV);
      IdentifiedFinalState lep_id(fs);
      lep_id.acceptIdPair(PID::MUON);
      lep_id.acceptIdPair(PID::ELECTRON);
      PromptFinalState lep_bare(lep_id);
      LeptonFinder leptons(lep_bare, photon_id, 0.1, cuts_WW);
      declare(leptons, "leptons");

      declare(FinalState(Cuts::abspid == PID::TAU || Cuts::abspid == PID::NU_TAU), "tau_id");

      // Get MET from generic invisibles
      VetoedFinalState ivfs(fs);
      ivfs.addVetoOnThisFinalState(VisibleFinalState(fs));
      declare(ivfs, "InvisibleFS");

      // Project jets
      FastJets jets(fs, JetAlg::ANTIKT, 0.4, JetMuons::NONE, JetInvisibles::NONE);
      declare(jets, "jets");


      // Integrated cross sections
      // d01 ee/mm fiducial integrated cross sections
      book(_hist_mm_fid_intxsec, 1, 1, 1);
      book(_hist_ee_fid_intxsec, 1, 1, 2);

      // d02 emme fiducial integrated cross sections
      book(_hist_emme_fid_intxsec, 2, 1, 1);

      // d10  emme fiducial differential cross section (leading lepton ptlead + ptlead normalized)
      book(_hist_emme_fid_ptlead, 10, 1, 1);
      book(_hist_emme_fid_ptleadnorm, 10, 1, 2);

      // d11  emme fiducial differential cross section (dilepton-system ptll + ptll normalized)
      book(_hist_emme_fid_ptll, 11, 1, 1);
      book(_hist_emme_fid_ptllnorm, 11, 1, 2);

      // d12  emme fiducial differential cross section (dilepton-system mll + mll normalized)
      book(_hist_emme_fid_mll, 12, 1, 1);
      book(_hist_emme_fid_mllnorm, 12, 1, 2);

      // d13  emme fiducial differential cross section (dilepton-system delta_phi_ll + dphill normalized)
      book(_hist_emme_fid_dphill, 13, 1, 1);
      book(_hist_emme_fid_dphillnorm, 13, 1, 2);

      // d14  emme fiducial differential cross section (absolute rapidity of dilepton-system y_ll + y_ll normalized)
      book(_hist_emme_fid_yll, 14, 1, 1);
      book(_hist_emme_fid_yllnorm, 14, 1, 2);

      // d15  emme fiducial differential cross section (absolute costheta* of dilepton-system costhetastar_ll + costhetastar_ll normalized)
      book(_hist_emme_fid_costhetastarll, 15, 1, 1);
      book(_hist_emme_fid_costhetastarllnorm, 15, 1, 2);
    }


    /// Perform the per-event analysis
    void analyze(const Event& event) {

      // Find leptons
      const FinalState& ifs = apply<VetoedFinalState>(event, "InvisibleFS");
      const DressedLeptons& leptons = apply<LeptonFinder>(event, "leptons").dressedLeptons();
      const DressedLeptons& good_mu = apply<LeptonFinder>(event, "MU_DRESSED_FS").dressedLeptons();
      const DressedLeptons& good_el = apply<LeptonFinder>(event, "EL_DRESSED_FS").dressedLeptons();
      const Jets& jets = apply<FastJets>(event, "jets").jetsByPt(Cuts::pT > 25 * GeV && Cuts::abseta < 4.5);

      // Taus are excluded from the fiducial cross section
      const Particles taus = apply<FinalState>(event, "tau_id")
                                 .particlesByPt(Cuts::pT > 12. * GeV && Cuts::abseta < 3.0);
      if (!taus.empty()) vetoEvent;

      // Remove events that do not contain 2 good leptons (either muons or electrons)
      if (leptons.size() != 2 && (good_el.size() != 1 || good_mu.size() != 1)) vetoEvent;

      // Split into channels
      int channel = -1; // 1=mm, 2=ee;  3=emu; 4=mue
      if (good_mu.size() == 2)
        channel = 1; //mm
      else if (good_el.size() == 2)
        channel = 2; //ee
      else if (good_mu.size() == 1 && good_el.size() == 1 && good_el[0].pT() > good_mu[0].pT())
        channel = 3; //emu
      else if (good_mu.size() == 1 && good_el.size() == 1 && good_el[0].pT() < good_mu[0].pT())
        channel = 4; //mue
      if (channel == -1) vetoEvent;

      // Assign leptons
      const DressedLepton *lep1, *lep2;
      if (channel == 1) { //mm
        if (good_mu[0].pT() > good_mu[1].pT()) {
          lep1 = &good_mu[0];
          lep2 = &good_mu[1];
        }
        else {
          lep1 = &good_mu[1];
          lep2 = &good_mu[0];
        }
      }
      else if (channel == 2) { //ee
        if (good_el[0].pT() > good_el[1].pT()) {
          lep1 = &good_el[0];
          lep2 = &good_el[1];
        }
        else {
          lep1 = &good_el[1];
          lep2 = &good_el[0];
        }
      }
      else if (channel == 3) { //emu
        lep1 = &good_el[0];
        lep2 = &good_mu[0];
      }
      else { // if (channel == 4) { //mue
        lep1 = &good_mu[0];
        lep2 = &good_el[0];
      }

      // Cut on leptons
      if (lep1->pT() < 25 * GeV || lep2->pT() < 20 * GeV) vetoEvent;

      // Select jets isolated from electrons
      const Jets jets_selected = select(jets, [&](const Jet& j) { return all(good_el, deltaRGtr(j, 0.3)); });

      // Define variables
      const FourMomentum met = sum(ifs.particles(), FourMomentum());
      const FourMomentum dilep = lep1->momentum() + lep2->momentum();
      const double ptll = dilep.pT() / GeV;
      const double Mll = dilep.mass() / GeV;
      const double Yll = dilep.absrap();
      const double DPhill = fabs(deltaPhi(*lep1, *lep2));
      const double costhetastar = fabs(tanh((lep1->eta() - lep2->eta()) / 2));

      // Calculate dphi to MET
      double DPhi_met = fabs(deltaPhi((*lep1), met));
      if (fabs(deltaPhi((*lep2), met)) < DPhi_met) DPhi_met = fabs(deltaPhi((*lep2), met));
      if (DPhi_met > M_PI / 2)
        DPhi_met = 1.;
      else
        DPhi_met = fabs(sin(DPhi_met));

      // Apply selections
      // mll lower cut (reject quarkonia)
      if ((channel == 1 || channel == 2) && Mll < 15.)
        vetoEvent;
      else if (Mll < 10.)
        vetoEvent;

      // Z veto (reject Z -- only dilepton channels)
      if ((channel == 1 || channel == 2) && abs(Mll - 91.1876) < 15.) vetoEvent;

      // Met rel cut
      if ((channel == 1 || channel == 2) && met.pT() * DPhi_met < 45 * GeV)
        vetoEvent;
      else if (met.pT() * DPhi_met < 15 * GeV)
        vetoEvent;

      // MET (pt-MET) cut
      if ((channel == 1 || channel == 2) && met.pT() <= 45 * GeV)
        vetoEvent; // begin MET cut
      else if (met.pT() <= 20 * GeV)
        vetoEvent;

      // Require 0 jets
      if (!jets_selected.empty()) vetoEvent;

      // Fill histograms
      if (channel == 1) {
        _hist_mm_fid_intxsec->fill(1.0);
      }
      else if (channel == 2) {
        _hist_ee_fid_intxsec->fill(1.0);
      }
      else if (channel == 3 || channel == 4) {
        _hist_emme_fid_intxsec->fill(1.0);

        _hist_emme_fid_ptlead->fill(lep1->pT() / GeV);
        _hist_emme_fid_ptleadnorm->fill(lep1->pT() / GeV);

        _hist_emme_fid_ptll->fill(ptll);
        _hist_emme_fid_ptllnorm->fill(ptll);

        _hist_emme_fid_mll->fill(Mll);
        _hist_emme_fid_mllnorm->fill(Mll);

        _hist_emme_fid_dphill->fill(DPhill);
        _hist_emme_fid_dphillnorm->fill(DPhill);

        _hist_emme_fid_yll->fill(Yll);
        _hist_emme_fid_yllnorm->fill(Yll);

        _hist_emme_fid_costhetastarll->fill(costhetastar);
        _hist_emme_fid_costhetastarllnorm->fill(costhetastar);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      const double sf(crossSection() / femtobarn / sumOfWeights());
      scale(_hist_mm_fid_intxsec, sf);
      scale(_hist_ee_fid_intxsec, sf);
      scale(_hist_emme_fid_intxsec, sf);
      scale(_hist_emme_fid_ptlead, sf);
      scale(_hist_emme_fid_ptll, sf);
      scale(_hist_emme_fid_mll, sf);
      scale(_hist_emme_fid_dphill, sf);
      scale(_hist_emme_fid_yll, sf);
      scale(_hist_emme_fid_costhetastarll, sf);
      normalize(_hist_emme_fid_ptleadnorm);
      normalize(_hist_emme_fid_ptllnorm);
      normalize(_hist_emme_fid_mllnorm);
      normalize(_hist_emme_fid_dphillnorm);
      normalize(_hist_emme_fid_yllnorm);
      normalize(_hist_emme_fid_costhetastarllnorm);
    }


  private:

    /// @name Histograms
    /// @{

    // d01 ee/mm fiducial integrated cross sections
    Histo1DPtr _hist_mm_fid_intxsec, _hist_ee_fid_intxsec;

    // d02 emme fiducial integrated cross sections
    Histo1DPtr _hist_emme_fid_intxsec;

    // d10  emme fiducial differential cross section (leading lepton ptlead + ptlead normalized)
    Histo1DPtr _hist_emme_fid_ptlead, _hist_emme_fid_ptleadnorm;

    // d11  emme fiducial differential cross section (dilepton-system ptll + ptll normalized)
    Histo1DPtr _hist_emme_fid_ptll, _hist_emme_fid_ptllnorm;

    // d12  emme fiducial differential cross section (dilepton-system mll + mll normalized)
    Histo1DPtr _hist_emme_fid_mll, _hist_emme_fid_mllnorm;

    // d13  emme fiducial differential cross section (dilepton-system delta_phi_ll + dphill normalized)
    Histo1DPtr _hist_emme_fid_dphill, _hist_emme_fid_dphillnorm;

    // d14  emme fiducial differential cross section (absolute rapidity of dilepton-system y_ll + y_ll normalized)
    Histo1DPtr _hist_emme_fid_yll, _hist_emme_fid_yllnorm;

    // d15  emme fiducial differential cross section (absolute costheta* of dilepton-system costhetastar_ll + costhetastar_ll normalized)
    Histo1DPtr _hist_emme_fid_costhetastarll, _hist_emme_fid_costhetastarllnorm;
    /// @}
  };


  RIVET_DECLARE_PLUGIN(ATLAS_2016_I1426515);

}