Rivet analyses


title: ATLAS_2010_I882534

$W$ + jets jet multiplicities and $\pT$

Experiment: ATLAS (LHC)

Inspire ID: 882534

Status: VALIDATED

Authors: - Frank Siegert

References: - Expt page: ATLAS-STDM-2010-07 - arXiv: 1012.5382

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - W+jets events ideally with matrix element corrections to describe the higher jet multiplicities correctly. Both channels, electron and muon, are part of this analysis and should be run simultaneously.

Cross sections, in both the electron and muon decay modes of the W boson, are presented as a function of jet multiplicity and of the transverse momentum of the leading and next-to-leading jets in the event. Measurements are also presented of the ratio of cross sections for inclusive jet multiplicities. The results, based on an integrated luminosity of 1.3 pb-1, have been corrected for all known detector effects and are quoted in a limited and well-defined range of jet and lepton kinematics.

Source code:ATLAS_2010_I882534.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/LeptonFinder.hh"

include "Rivet/Projections/MissingMomentum.hh"

include "Rivet/Projections/PromptFinalState.hh"

include "Rivet/Projections/VetoedFinalState.hh"

namespace Rivet {

/// W + jets jet multiplicities and pT class ATLAS_2010_I882534 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2010_I882534);


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

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

  declare("MET", MissingMomentum());

  // Find electrons and muons
  const Cut cut_e = (Cuts::abseta < 1.37 || Cuts::absetaIn(1.52, 2.47)) && Cuts::pT > 20 * GeV;
  LeptonFinder ef(0.1, cut_e && Cuts::abspid == PID::ELECTRON);
  declare(ef, "Elecs");
  const Cut cut_m = Cuts::abseta < 2.4 && Cuts::pT > 20 * GeV;
  LeptonFinder mf(0.1, cut_m && Cuts::abspid == PID::MUON);
  declare(mf, "Muons");

  // Input for the jets: no neutrinos, no muons, and no electron which passed the electron cuts
  VetoedFinalState veto;
  veto.addVetoOnThisFinalState(ef);
  veto.addVetoOnThisFinalState(mf);
  FastJets jets(veto, JetAlg::ANTIKT, 0.4, JetMuons::NONE);
  declare(jets, "Jets");

  /// Book histograms
  book(_h_el_njet_inclusive, 1, 1, 1);
  book(_h_mu_njet_inclusive, 2, 1, 1);
  book(_h_el_pT_jet1, 5, 1, 1);
  book(_h_mu_pT_jet1, 6, 1, 1);
  book(_h_el_pT_jet2, 7, 1, 1);
  book(_h_mu_pT_jet2, 8, 1, 1);
}


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

  if (_edges.empty()) _edges = _h_mu_njet_inclusive->xEdges();

  const Jets& jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 20 * GeV);

  // MET cut
  const P4& pmiss = apply<MissingMom>(event, "MET").missingMom();
  if (pmiss.Et() < 25 * GeV) vetoEvent;

  // Identify the closest-matching l+MET to m == mW
  const Particles& es = apply<LeptonFinder>(event, "Elecs").particles();
  const int iefound = closestMatchIndex(es, pmiss, Kin::mass, 80.4 * GeV, 0 * GeV, 1000 * GeV);
  const Particles& mus = apply<LeptonFinder>(event, "Muons").particles();
  const int imfound = closestMatchIndex(mus, pmiss, Kin::mass, 80.4 * GeV, 0 * GeV, 1000 * GeV);

  // Require two valid W candidates
  if (iefound < 0 && imfound < 0) vetoEvent;   //< no W's
  if (iefound >= 0 && imfound >= 0) vetoEvent; //< multi-W

  // Histogramming
  if (iefound >= 0) {
    const Particle& e = es[iefound].constituents()[0];
    if (mT(pmiss, e) > 40 * GeV) {
      const Jets js = select(jets, [&](const Jet& j) { return j.abseta() < 2.8 && deltaR(e, j) > 0.5; });
      _h_el_njet_inclusive->fill(_edges[0]);
      if (js.size() >= 1) {
        _h_el_njet_inclusive->fill(_edges[1]);
        _h_el_pT_jet1->fill(js[0].pT());
      }
      if (js.size() >= 2) {
        _h_el_njet_inclusive->fill(_edges[2]);
        _h_el_pT_jet2->fill(js[1].pT());
      }
      if (js.size() >= 3) {
        _h_el_njet_inclusive->fill(_edges[3]);
      }
    }
  }

  if (imfound >= 0) {
    const Particle& mu = mus[imfound];
    if (mT(pmiss, mu) > 40 * GeV) {
      const Jets js = select(jets, [&](const Jet& j) { return j.abseta() < 2.8 && deltaR(mu, j) > 0.5; });
      _h_mu_njet_inclusive->fill(_edges[0]);
      if (js.size() >= 1) {
        _h_mu_njet_inclusive->fill(_edges[1]);
        _h_mu_pT_jet1->fill(js[0].pT());
      }
      if (js.size() >= 2) {
        _h_mu_njet_inclusive->fill(_edges[2]);
        _h_mu_pT_jet2->fill(js[1].pT());
      }
      if (js.size() >= 3) {
        _h_mu_njet_inclusive->fill(_edges[3]);
      }
      if (js.size() >= 4) {
        _h_mu_njet_inclusive->fill(_edges[4]);
      }
    }
  }
}


/// Normalise histograms etc., after the run
void finalize() {
  double normfac = crossSection() / picobarn / sumOfWeights();
  scale(_h_el_njet_inclusive, normfac / nanobarn);
  scale(_h_mu_njet_inclusive, normfac / nanobarn);
  scale(_h_el_pT_jet1, normfac);
  scale(_h_mu_pT_jet1, normfac);
  scale(_h_el_pT_jet2, normfac);
  scale(_h_mu_pT_jet2, normfac);
}

///@}

private:

/// @name Histograms
/// @{
BinnedHistoPtr<string> _h_el_njet_inclusive;
BinnedHistoPtr<string> _h_mu_njet_inclusive;
Histo1DPtr _h_el_pT_jet1;
Histo1DPtr _h_mu_pT_jet1;
Histo1DPtr _h_el_pT_jet2;
Histo1DPtr _h_mu_pT_jet2;
vector<string> _edges;
/// @}

};

RIVET_DECLARE_ALIASED_PLUGIN(ATLAS_2010_I882534, ATLAS_2010_S8919674);

} ```

Aliases: - ATLAS_2010_S8919674