rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

ATLAS_2013_I1216670

W + DPI at 7 TeV
Experiment: ATLAS (LHC)
Inspire ID: 1216670
Status: VALIDATED
Authors:
  • Tim Martin
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • W + 2 jets (W -> l nu)

The production of $W$ bosons in association with two jets in proton-proton collisions at a centre-of-mass energy of $\sqrt{s} = 7$ TeV has been analysed for the presence of double-parton interactions using data corresponding to an integrated luminosity of 36/pb, collected with the ATLAS detector at the LHC.

Source code: ATLAS_2013_I1216670.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/WFinder.hh"
  5#include "Rivet/Projections/FastJets.hh"
  6#include "Rivet/Projections/VetoedFinalState.hh"
  7
  8namespace Rivet {
  9
 10  /// @brief MPI sensitive di-jet balance variables for W->ejj or W->mujj events.
 11  class ATLAS_2013_I1216670 : public Analysis {
 12  public:
 13
 14    /// @name Constructor
 15    ATLAS_2013_I1216670()
 16      : Analysis("ATLAS_2013_I1216670")
 17    {    }
 18
 19
 20    /// @name Analysis methods
 21    //@{
 22
 23    /// Book histograms, set up projections for W and jets
 24    void init() {
 25
 26      book(_h_delta_jets_n ,1, 1, 1);
 27      book(_h_delta_jets   ,2, 1, 1);
 28
 29      FinalState fs;
 30
 31      Cut cuts = Cuts::abseta < 2.5 && Cuts::pT >= 20*GeV;
 32
 33      WFinder w_e_finder(fs, cuts, PID::ELECTRON, 40*GeV, DBL_MAX, 0.0*GeV, 0.0, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY,
 34                         WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
 35      declare(w_e_finder, "W_E_FINDER");
 36
 37      WFinder w_mu_finder(fs, cuts, PID::MUON, 40*GeV, DBL_MAX, 0.0*GeV, 0.0, WFinder::ChargedLeptons::PROMPT, WFinder::ClusterPhotons::NODECAY,
 38                          WFinder::AddPhotons::NO, WFinder::MassWindow::MT);
 39      declare(w_mu_finder, "W_MU_FINDER");
 40
 41      VetoedFinalState jet_fs(fs);
 42      jet_fs.addVetoOnThisFinalState(getProjection<WFinder>("W_E_FINDER"));
 43      jet_fs.addVetoOnThisFinalState(getProjection<WFinder>("W_MU_FINDER"));
 44      FastJets jets(jet_fs, FastJets::ANTIKT, 0.4);
 45      declare(jets, "JETS");
 46
 47    }
 48
 49    /// Do the analysis
 50    void analyze(const Event &e) {
 51
 52      const WFinder& w_e_finder  = apply<WFinder>(e, "W_E_FINDER" );
 53      const WFinder& w_mu_finder = apply<WFinder>(e, "W_MU_FINDER");
 54      Particle lepton, neutrino;
 55      Jets all_jets, jets;
 56
 57      // Find exactly 1 W->e or W->mu boson
 58      if(w_e_finder.bosons().size() == 1 && w_mu_finder.bosons().size() == 0) {
 59        MSG_DEBUG(" Event identified as W->e nu.");
 60        if( !(w_e_finder.mT() > 40*GeV && w_e_finder.constituentNeutrino().Et() > 25.0*GeV) )  vetoEvent;
 61        lepton = w_e_finder.constituentLepton();
 62      } else if(w_mu_finder.bosons().size() == 1 && w_e_finder.bosons().size() == 0) {
 63        MSG_DEBUG(" Event identified as W->mu nu.");
 64        if( !(w_mu_finder.mT() > 40*GeV && w_mu_finder.constituentNeutrino().Et() > 25.0*GeV) )  vetoEvent;
 65        lepton = w_mu_finder.constituentLepton();
 66      } else {
 67        MSG_DEBUG(" No W found passing cuts.");
 68        vetoEvent;
 69      }
 70
 71      all_jets = apply<FastJets>(e, "JETS").jetsByPt(Cuts::pt>20.0*GeV && Cuts::absrap<2.8);
 72
 73      // Remove jets DeltaR < 0.5 from W lepton
 74      for(Jets::iterator it = all_jets.begin(); it != all_jets.end(); ++it) {
 75        double distance = deltaR( lepton, (*it) );
 76        if(distance < 0.5) {
 77          MSG_DEBUG("   Veto jet DeltaR " << distance << " from W lepton");
 78        } else {
 79          jets.push_back(*it);
 80        }
 81      }
 82
 83      // Exactly two jets required
 84      if( jets.size() != 2 )  vetoEvent;
 85
 86      // Calculate analysis quantities from the two jets
 87      double delta_jets = (jets.front().momentum() + jets.back().momentum()).pT();
 88      double total_pt = jets.front().momentum().pT() + jets.back().momentum().pT();
 89      double delta_jets_n = delta_jets / total_pt;
 90
 91      _h_delta_jets->fill(   delta_jets); // Jet pT balance
 92      _h_delta_jets_n->fill( delta_jets_n); // Jet pT balance, normalised by scalar dijet pT
 93
 94    }
 95
 96    /// Finalize
 97    void finalize() {
 98
 99      // Data is normalised to 0.03 and 3
100      normalize(_h_delta_jets_n, 0.03);
101      normalize(_h_delta_jets  , 3.0 );
102
103    }
104
105    //@}
106
107  private:
108
109    /// @name Histograms
110    //@{
111    Histo1DPtr _h_delta_jets_n;
112    Histo1DPtr _h_delta_jets;
113    //@}
114
115  };
116
117  // The hook for the plugin system
118  RIVET_DECLARE_PLUGIN(ATLAS_2013_I1216670);
119
120}