Rivet analyses
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++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/PromptFinalState.hh"
#include "Rivet/Projections/VetoedFinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/MissingMomentum.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