Rivet analyses


title: ATLAS_2013_I1190187

Measurement of the $W^+ W^-$ production cross-section at 7 TeV

Experiment: ATLAS (LHC)

Inspire ID: 1190187

Status: VALIDATED

Authors: - Oldrich Kepka - Katerina Moudra

References: - arXiv: 1210.2979

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - Run with inclusive $W^+ W^-$ events, with $W$ decays to electron + MET, muon + MET, or tau + MET.

Measurement of the fiducial cross section for $W^+ W^-$ production in proton proton collisions at a centre-of mass energy of 7 TeV, is presented, using data corresponding to an integrated luminosity of 4.6/fb collected by the ATLAS experiment at the Large Hadron Collider. The cross section is measured in the leptonic decay channels, using electron+MET and muon+MET $W$ decays. $W \to \tau$ processes with the tau decaying into electron + MET or muon + MET are also included in the measurement. The fiducial region contains dressed leptons in restricted $p_T$ and $\eta$ ranges. The selection has specific requirements for each production channel. A measurement of the normalized fiducial cross section as a function of the leading lepton transverse momentum is also presented.

Source code:ATLAS_2013_I1190187.cc

```c++ // -- 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/MissingMomentum.hh"

include "Rivet/Projections/VetoedFinalState.hh"

namespace Rivet {

/// ATLAS Wee Wemu Wmumu analysis at Z TeV class ATLAS_2013_I1190187 : public Analysis { public:

/// Default constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2013_I1190187);

void init() {
  Cut etaRanges_EL = (Cuts::abseta < 1.37 || Cuts::absetaIn(1.52, 2.47)) && Cuts::pT > 20 * GeV;
  Cut etaRanges_MU = Cuts::abseta < 2.4 && Cuts::pT > 20 * GeV;

  declare(MissingMomentum(), "MET");

  IdentifiedFinalState neutrinoFS;
  neutrinoFS.acceptNeutrinos();
  declare(neutrinoFS, "Neutrinos");

  ////////////////////////////////////////////////////////
  // DRESSED LEPTONS
  //    3.arg: 0.1      = dR(lep,phot)
  //    4.arg: true     = do clustering
  //    7.arg: false    = ignore photons from hadron or tau
  //
  //////////////////////////////////////////////////////////
  LeptonFinder electronFS(0.1, Cuts::abspid == PID::ELECTRON && etaRanges_EL);
  declare(electronFS, "ELECTRON_FS");

  LeptonFinder muonFS(0.1, Cuts::abspid == PID::MUON && etaRanges_MU);
  declare(muonFS, "MUON_FS");

  VetoedFinalState jetinput;
  jetinput.addVetoOnThisFinalState(neutrinoFS);

  FastJets jetpro(jetinput, JetAlg::ANTIKT, 0.4, JetMuons::NONE);
  declare(jetpro, "jet");

  // Book histograms
  book(_h_Wl1_pT_mumu, 1, 1, 2);
  book(_h_Wl1_pT_ee, 1, 1, 1);
  book(_h_Wl1_pT_emu, 1, 1, 3);
  book(_h_Wl1_pT_inclusive, 4, 1, 1);
}


/// Do the analysis
void analyze(const Event& e) {

  const DressedLeptons& muonFS = apply<LeptonFinder>(e, "MUON_FS").dressedLeptons();
  const DressedLeptons& electronFS = apply<LeptonFinder>(e, "ELECTRON_FS").dressedLeptons();
  const MissingMomentum& met = apply<MissingMomentum>(e, "MET");

  DressedLeptons dressed_lepton, isolated_lepton, fiducial_lepton;
  dressed_lepton.insert(dressed_lepton.end(), muonFS.begin(), muonFS.end());
  dressed_lepton.insert(dressed_lepton.end(), electronFS.begin(), electronFS.end());

  ////////////////////////////////////////////////////////////////////////////
  // OVERLAP REMOVAL
  //    -electrons with dR(e,mu)<0.1 are removed
  //    -lower pT electrons with dR(e,e)<0.1 are removed
  //
  ////////////////////////////////////////////////////////////////////////////
  for (DressedLepton& l1 : dressed_lepton) {
    bool l_isolated = true;
    for (DressedLepton& l2 : dressed_lepton) {
      if (!isSame(l1, l2) && l2.bareLepton().abspid() == PID::ELECTRON) {
        double overlapControl_ll = deltaR(l1.bareLepton(), l2.bareLepton());
        if (overlapControl_ll < 0.1) {
          l_isolated = false;
          // e/e overlap removal
          if (l1.bareLepton().abspid() == PID::ELECTRON) {
            if (l1.bareLepton().pT() > l2.bareLepton().pT()) {
              isolated_lepton.push_back(l1); //keep e with highest pT
            }
            else {
              isolated_lepton.push_back(l2); //keep e with highest pT
            }
          }
          // e/mu overlap removal
          if (l1.bareLepton().abspid() == PID::MUON) isolated_lepton.push_back(l1); //keep mu
        }
      }
    }
    if (l_isolated) isolated_lepton.push_back(l1);
  }


  ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  // PRESELECTION:
  // "isolated_lepton:"
  //    * electron: pt>20 GeV, |eta|<1.37, 1.52<|eta|<2.47, dR(electron,muon)>0.1
  //    * muon:     pt>20 GeV, |eta|<2.4
  //        *   dR(l,l)>0.1
  //
  // "fiducial_lepton"= isolated_lepton with
  //                * 2 leptons (e or mu)
  //              * leading lepton pt (pT_l1) >25 GeV
  //            * opposite charged leptons
  //
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  if (isolated_lepton.size() != 2) vetoEvent;
  sort(isolated_lepton.begin(), isolated_lepton.end(), cmpMomByPt);
  if (isolated_lepton[0].pT() > 25 * GeV && charge3(isolated_lepton[0]) != charge3(isolated_lepton[1])) {
    fiducial_lepton.insert(fiducial_lepton.end(), isolated_lepton.begin(), isolated_lepton.end());
  }
  if (fiducial_lepton.size() == 0) vetoEvent;
  double pT_l1 = fiducial_lepton[0].pT();
  double M_l1l2 = (fiducial_lepton[0].momentum() + fiducial_lepton[1].momentum()).mass();
  double pT_l1l2 = (fiducial_lepton[0].momentum() + fiducial_lepton[1].momentum()).pT();


  /////////////////////////////////////////////////////////////////////////
  // JETS
  //    -"alljets": found by "jetpro" projection && pT()>25 GeV && |y|<4.5
  //    -"vetojets": "alljets"  && dR(electron,jet)>0.3
  //
  /////////////////////////////////////////////////////////////////////////
  Jets alljets, vetojets;
  for (const Jet& j : apply<FastJets>(e, "jet").jetsByPt(Cuts::pT > 25 && Cuts::absrap < 4.5)) {
    alljets.push_back(j);
    bool deltaRcontrol = true;
    for (DressedLepton& fl : fiducial_lepton) {
      if (fl.bareLepton().abspid() == PID::ELECTRON) { //electrons
        double deltaRjets = deltaR(fl.bareLepton().momentum(), j.momentum(), RAPIDITY);
        if (deltaRjets <= 0.3)
          deltaRcontrol = false; //false if at least one electron is in the overlap region
      }
    }
    if (deltaRcontrol) vetojets.push_back(j);
  }


  /////////////////////////////////////////////////////////////////////////////////////////////////
  // MISSING ETrel
  //    -"mismom": fourvector of invisible momentum found by "met" projection
  //    -"delta_phi": delta phi between mismom and the nearest "fiducial_lepton" or "vetojet"
  //    -"MET_rel": missing transverse energy defined as:
  //            *"mismom"   for "delta_phi" >= (0.5*pi)
  //            *"mismom.pT()*sin(delta_phi)"   for "delta_phi" < (0.5*pi)
  //
  /////////////////////////////////////////////////////////////////////////////////////////////////
  FourMomentum mismom;
  double MET_rel = 0, delta_phi = 0;
  mismom = -met.visibleMomentum();
  vector<double> vL_MET_angle, vJet_MET_angle;
  vL_MET_angle.push_back(fabs(deltaPhi(fiducial_lepton[0].momentum(), mismom)));
  vL_MET_angle.push_back(fabs(deltaPhi(fiducial_lepton[1].momentum(), mismom)));
  for (double& lM : vL_MET_angle)
    if (lM > M_PI) lM = 2 * M_PI - lM;

  std::sort(vL_MET_angle.begin(), vL_MET_angle.end());
  if (vetojets.size() == 0) delta_phi = vL_MET_angle[0];
  if (vetojets.size() > 0) {
    for (Jet& vj : vetojets) {
      double jet_MET_angle = fabs(deltaPhi(vj.momentum(), mismom));
      if (jet_MET_angle > M_PI) jet_MET_angle = 2 * M_PI - jet_MET_angle;
      vJet_MET_angle.push_back(jet_MET_angle);
    }
    std::sort(vJet_MET_angle.begin(), vJet_MET_angle.end());
    if (vL_MET_angle[0] <= vJet_MET_angle[0]) delta_phi = vL_MET_angle[0];
    if (vL_MET_angle[0] > vJet_MET_angle[0]) delta_phi = vJet_MET_angle[0];
  }

  if (delta_phi >= (0.5 * M_PI)) delta_phi = 0.5 * M_PI;
  MET_rel = mismom.pT() * sin(delta_phi);


  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // CUTS
  //        -jetveto: event with at least one vetojet is vetoed
  //        -M_Z: Z mass M_Z=91.1876*GeV
  //
  //    * ee   channel: MET_rel > 45 GeV, M_l1l2 > 15 GeV, |M_l1l2-M_Z| > 15 GeV, jetveto, pT_l1l2 > 30 GeV
  //    * mumu channel: MET_rel > 45 GeV, M_l1l2 > 15 GeV, |M_l1l2-M_Z| > 15 GeV, jetveto, pT_l1l2 > 30 GeV
  //        * emu  channel: MET_rel > 25 GeV, M_l1l2 > 10 GeV, |M_l1l2-M_Z| > 0  GeV, jetveto, pT_l1l2 > 30 GeV
  //
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  // ee channel
  if (fiducial_lepton[0].abspid() == PID::ELECTRON && fiducial_lepton[1].abspid() == PID::ELECTRON) {
    if (MET_rel <= 45 * GeV) vetoEvent;
    if (M_l1l2 <= 15 * GeV) vetoEvent;
    if (fabs(M_l1l2 - 91.1876 * GeV) <= 15 * GeV) vetoEvent;
    if (vetojets.size() != 0) vetoEvent;
    if (pT_l1l2 <= 30 * GeV) vetoEvent;
    _h_Wl1_pT_ee->fill(7000);
    _h_Wl1_pT_inclusive->fill(pT_l1);
  }

  // mumu channel
  else if (fiducial_lepton[0].abspid() == PID::MUON && fiducial_lepton[1].abspid() == PID::MUON) {
    if (MET_rel <= 45 * GeV) vetoEvent;
    if (M_l1l2 <= 15 * GeV) vetoEvent;
    if (fabs(M_l1l2 - 91.1876 * GeV) <= 15 * GeV) vetoEvent;
    if (vetojets.size() != 0) vetoEvent;
    if (pT_l1l2 <= 30 * GeV) vetoEvent;
    _h_Wl1_pT_mumu->fill(7000);
    _h_Wl1_pT_inclusive->fill(pT_l1);
  }

  // emu channel
  else if (fiducial_lepton[0].abspid() != fiducial_lepton[1].abspid()) {
    if (MET_rel <= 25 * GeV) vetoEvent;
    if (M_l1l2 <= 10 * GeV) vetoEvent;
    if (vetojets.size() != 0) vetoEvent;
    if (pT_l1l2 <= 30 * GeV) vetoEvent;
    _h_Wl1_pT_emu->fill(7000);
    _h_Wl1_pT_inclusive->fill(pT_l1);
  }
}


/// Finalize
void finalize() {
  const double norm = crossSection() / sumOfWeights() / femtobarn;
  scale(_h_Wl1_pT_ee, norm);
  scale(_h_Wl1_pT_mumu, norm);
  scale(_h_Wl1_pT_emu, norm);
  normalize(_h_Wl1_pT_inclusive, 1);
}

private:

BinnedHistoPtr<int> _h_Wl1_pT_ee, _h_Wl1_pT_mumu, _h_Wl1_pT_emu;
Histo1DPtr _h_Wl1_pT_inclusive;

};

RIVET_DECLARE_PLUGIN(ATLAS_2013_I1190187);

} ```