Rivet analyses


title: ATLAS_2013_I1216670

W + DPI at 7 TeV

Experiment: ATLAS (LHC)

Inspire ID: 1216670

Status: VALIDATED

Authors: - Tim Martin

References: - Expt page: ATLAS-STDM-2011-29 - New J.Phys. 15 (2013) 033038 - DOI: 10.1088/1367-2630/15/3/033038 - arXiv: 1301.6872

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

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/MissingMomentum.hh"

include "Rivet/Projections/PromptFinalState.hh"

include "Rivet/Projections/VetoedFinalState.hh"

namespace Rivet {

/// @brief MPI sensitive di-jet balance variables for W->ejj or W->mujj events. class ATLAS_2013_I1216670 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2013_I1216670);


/// @name Analysis methods
/// @{

/// Book histograms, set up projections for W and jets
void init() {

  Cut cuts = Cuts::abseta < 2.5 && Cuts::pT > 20 * GeV;
  declare("MET", MissingMomentum());
  PromptFinalState ef(cuts && Cuts::abspid == PID::ELECTRON);
  declare(ef, "Elecs");
  PromptFinalState mf(cuts && Cuts::abspid == PID::MUON);
  declare(mf, "Muons");

  VetoedFinalState jet_fs;
  jet_fs.addVetoOnThisFinalState(ef);
  jet_fs.addVetoOnThisFinalState(mf);
  FastJets jets(jet_fs, JetAlg::ANTIKT, 0.4);
  declare(jets, "Jets");

  book(_h_delta_jets_n, 1, 1, 1);
  book(_h_delta_jets, 2, 1, 1);
}


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

  // W reco, starting with MET
  const P4& pmiss = apply<MissingMom>(event, "MET").missingMom();
  if (pmiss.pT() < 25 * GeV) vetoEvent;

  // Identify the closest-matching l+MET to m == mW
  const Particles& es = apply<PromptFinalState>(event, "Elecs").particles();
  const Particles es_mtfilt = select(es, [&](const Particle& e) { return mT(e, pmiss) > 40 * GeV; });
  const int iefound = closestMatchIndex(es_mtfilt, pmiss, Kin::mass, 80.4 * GeV);
  const Particles& mus = apply<PromptFinalState>(event, "Muons").particles();
  const Particles mus_mtfilt = select(mus, [&](const Particle& m) { return mT(m, pmiss) > 40 * GeV; });
  const int imfound = closestMatchIndex(mus_mtfilt, pmiss, Kin::mass, 80.4 * GeV);

  // Event selection and ID
  if (iefound < 0 && imfound < 0) {
    MSG_DEBUG("No W's passed cuts: vetoing");
    vetoEvent;
  }
  if (iefound >= 0 && imfound >= 0) {
    MSG_DEBUG("Multiple W's passed cuts: vetoing");
    vetoEvent;
  }
  const Particle& lepton = (iefound >= 0) ? es_mtfilt[iefound] : mus_mtfilt[imfound];
  MSG_DEBUG("Event identified as W -> " << lepton.pid() << " + nu");

  // Remove jets with deltaR < 0.5 from W lepton
  const Jets all_jets = apply<FastJets>(event, "Jets")
                            .jetsByPt(Cuts::pT > 20.0 * GeV && Cuts::absrap < 2.8);
  const Jets jets = select(all_jets, deltaRGtr(lepton, 0.5));
  MSG_DEBUG("Overlap removal #jets = " << all_jets.size() << " -> " << jets.size());

  // Exactly two jets required
  if (jets.size() != 2) vetoEvent;

  // Calculate analysis quantities from the two jets
  double delta_jets = (jets[0].momentum() + jets[1].momentum()).pT();
  double total_pt = jets[0].pT() + jets[1].pT();
  double delta_jets_n = delta_jets / total_pt;

  _h_delta_jets->fill(delta_jets);     // Jet pT balance
  _h_delta_jets_n->fill(delta_jets_n); // Jet pT balance, normalised by scalar dijet pT
}


/// Finalize
void finalize() {
  normalize(_h_delta_jets_n, 0.03);
  normalize(_h_delta_jets, 3.0);
}

/// @}

private:

/// @name Histograms
/// @{
Histo1DPtr _h_delta_jets_n;
Histo1DPtr _h_delta_jets;
/// @}

};

RIVET_DECLARE_PLUGIN(ATLAS_2013_I1216670);

} ```