Rivet analyses


title: CMS_2017_I1518399

Differential $t\bar{t}$ 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: - $t\bar{t}$ 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 $t\bar{t}$ 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 ${t\bar{t}}$ 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 $t\bar{t}$ 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 $|\eta| < 2.1$ - at least one jet with $\pt > 400~\GeV$ and $|\eta| < 2.5$ - a second jet with $\pt > 150~\GeV$ and $|\eta| < 2.5$ - veto on additional jets with $\pt > 150~\GeV$ and $|\eta| < 2.5$ - distance between the second jet and the lepton in the eta-phi plane $\Delta 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++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/ChargedLeptons.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/LeptonFinder.hh"

include "Rivet/Projections/PartonicTops.hh"

include "Rivet/Projections/PromptFinalState.hh"

include "Rivet/Projections/VetoedFinalState.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);

} ```