Rivet analyses
Differential tt̄ production cross-section as a function of the leading jet mass for boosted top quarks at 8 TeV
Experiment: CMS (LHC)
Inspire ID: 1518399
Status: VALIDATED
Authors: - Torben Dreyer - Roman Kogler - Johannes Haller
References: - TOP-15-015 - arXiv: 1703.06330 - Submitted to Eur. Phys. J. C.
Beams: p+ p+
Beam energies: (4000.0, 4000.0)GeV
Run details: - tt̄ events at $\sqrt{s}=8~\TeV$. Boosted topology requires high statistics in a single run or custom merging of the YODA files.
Measurement of the differential and normalised differential tt̄ production cross section as a function of the leading jet mass. The measurement was performed in the lepton+jets channel and the fiducial measurement phase space is enriched with events where the leading jet includes all decay products of a hadronically decaying top quark. This analysis is to be run on tt̄ simulation. The objects are defined as follows - Lepton: electron or muon originating from the decay of a W boson - Jets: jets are clustered from final state particles using the Cambridge-Aachen algorithm with a distance parameter of 1.2. If a lepton overlaps with a jet (distance in the eta-phi plane smaller 1.2) its four momentum is subtracted from the four momentum of the jet. Definition of the particle level phase space: - only tt̄ decays with one top quark decaying hadronically and one top quark decaying leptonically including an electron or muon from the W decay. - lepton $\pt > 45~\GeV$ and |η| < 2.1 - at least one jet with $\pt > 400~\GeV$ and |η| < 2.5 - a second jet with $\pt > 150~\GeV$ and |η| < 2.5 - veto on additional jets with $\pt > 150~\GeV$ and |η| < 2.5 - distance between the second jet and the lepton in the eta-phi plane ΔR(jet2, lepton) smaller 1.2 - invariant mass of the leading jet larger than the invariant mass of the combination of the second jet and lepton The differential and normalised differential cross section was measured as a function of the leading jet mass.
Source
code:CMS_2017_I1518399.cc
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/PartonicTops.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/VetoedFinalState.hh"
#include "Rivet/Projections/PromptFinalState.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/LeptonFinder.hh"
#include "Rivet/Projections/ChargedLeptons.hh"
namespace Rivet {
/// Leading-jet mass for boosted top quarks at 8 TeV
class CMS_2017_I1518399 : public Analysis {
public:
/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2017_I1518399);
/// @name Analysis methods
/// @{
/// Book histograms and initialise projections before the run
void init() {
// Dressed leptons
IdentifiedFinalState photons(PID::PHOTON);
ChargedLeptons charged_leptons;
PromptFinalState prompt_leptons(charged_leptons);
Cut leptonCuts = Cuts::pT > 45*GeV && Cuts::abseta < 2.1;
LeptonFinder dressed_leptons(prompt_leptons, photons, 0.1, leptonCuts);
declare(dressed_leptons, "LeptonFinder");
// Jets
VetoedFinalState fs_jets;
fs_jets.vetoNeutrinos();
declare(FastJets(fs_jets, JetAlg::CAM, 1.2), "JetsCA12");
// Partonic top for decay channel definition
declare(PartonicTops(TopDecay::E_MU, PromptEMuFromTau::NO), "LeptonicTops");
declare(PartonicTops(TopDecay::HADRONIC), "HadronicTops");
// Main histograms
book(_hist_mass , "d01-x01-y01");
book(_hist_mass_norm, "d02-x01-y01");
}
/// Perform the per-event analysis
void analyze(const Event& event) {
// Decay mode check
const Particles& leptonicTops = apply<PartonicTops>(event, "LeptonicTops").particlesByPt();
const Particles& hadronicTops = apply<PartonicTops>(event, "HadronicTops").particlesByPt();
if (leptonicTops.size() != 1 || hadronicTops.size() != 1) vetoEvent;
// Get the leptons
const LeptonFinder& dressed_leptons = apply<LeptonFinder>(event, "LeptonFinder");
// Leading dressed lepton
const DressedLeptons leptons = dressed_leptons.dressedLeptons();
if (leptons.empty()) vetoEvent;
Particle lepton;
for (const Particle& l : leptons) {
if (l.pT() > lepton.pT()) lepton = l;
}
// Get the jets
const Jets& psjetsCA12 = apply<FastJets>(event, "JetsCA12").jetsByPt(Cuts::pT > 50*GeV);
// Subtract the lepton four vector from a jet in case of overlap and clean jets
Jets cleanedJets;
for (Jet jet : psjetsCA12) {
if (deltaR(jet, lepton) < 1.2 )
jet = Jet(jet.momentum()-lepton.momentum(), jet.particles(), jet.tags());
if (jet.abseta() < 2.5) cleanedJets.push_back(jet);
}
std::sort(cleanedJets.begin(), cleanedJets.end(), cmpMomByPt);
// Jet pT cuts
if (cleanedJets.size() < 2) vetoEvent;
if (cleanedJets.at(0).pT() < 400*GeV) vetoEvent;
if (cleanedJets.at(1).pT() < 150*GeV) vetoEvent;
// Jet veto
if (cleanedJets.size() > 2 && cleanedJets.at(2).pT() > 150*GeV) vetoEvent;
// Small distance between 2nd jet and lepton
if (deltaR(cleanedJets.at(1), lepton) > 1.2) vetoEvent;
// m(jet1) > m(jet2 +lepton)
FourMomentum secondJetLepton = cleanedJets.at(1).momentum() + lepton.momentum();
if (cleanedJets.at(0).mass() < secondJetLepton.mass()) vetoEvent;
// Fill histograms
_hist_mass->fill(cleanedJets.at(0).mass());
_hist_mass_norm->fill(cleanedJets.at(0).mass());
}
/// Normalise histograms etc., after the run
void finalize() {
const double sf = crossSection()/picobarn * 1000 / sumOfWeights();
scale(_hist_mass, sf);
normalize(_hist_mass_norm, 1.0, false);
}
/// @}
private:
// Histograms
Histo1DPtr _hist_mass, _hist_mass_norm;
};
RIVET_DECLARE_PLUGIN(CMS_2017_I1518399);
}