Rivet analyses


title: CMS_2018_I1681435

Study of the underlying event in top quark pair production in pp collisions at 13 TeV

Experiment: CMS (LHC)

Inspire ID: 1681435

Status: VALIDATED

Authors: - Niels Van den Bossche - Pedro Manuel Vieira De Castro Ferreira Da Silva

References: - Eur. Phys. J. C 79 (2019) 123 - Expt page: CMS-TOP-17-015 - arXiv: 1807.02810

Beams: p+ p+

Beam energies: (6500.0, 6500.0)GeV

Run details: - ttbar inclusive or dilepton events at 13 TeV

Measurements of normalized differential cross sections as functions of the multiplicity and kinematic variables of charged-particle tracks from the underlying event in top quark and antiquark pair production are presented. The measurements are performed in proton-proton collisions at a center-of-mass energy of 13 TeV, and are based on data collected by the CMS experiment at the LHC in 2016 corresponding to an integrated luminosity of 35.9/fb. Events containing one electron, one muon, and two jets from the hadronization and fragmentation of b quarks are used. These measurements characterize, for the first time, properties of the underlying event in top quark pair production and show no deviation from the universality hypothesis at energy scales typically above twice the top quark mass.

Source code:CMS_2018_I1681435.cc

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

include "Rivet/Analysis.hh"

include "Rivet/DressedLepton.hh"

include "Rivet/Projections/ChargedFinalState.hh"

include "Rivet/Projections/ChargedLeptons.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/LeptonFinder.hh"

include "Rivet/Projections/PromptFinalState.hh"

include "Rivet/Projections/Sphericity.hh"

include "Rivet/Projections/VetoedFinalState.hh"

namespace Rivet {

/// @brief Study of the underlying event in top quark pair production in pp collisions at 13 TeV class CMS_2018_I1681435 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2018_I1681435);


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

/// Book histograms and initialise projections before the run
void init() {
  // Complete final state
  FinalState fs(Cuts::abseta < 5.0);

  // Leptonfinder to identify dressed leptons:
  Cut lepton_acc = Cuts::abseta < 2.5 && Cuts::pT > 20 * GeV;
  FinalState photons(fs, Cuts::abspid == PID::PHOTON);

  ChargedLeptons charged_leptons(fs);
  PromptFinalState prompt_leptons(charged_leptons);
  prompt_leptons.acceptMuonDecays(true);
  prompt_leptons.acceptTauDecays(true);
  PromptFinalState prompt_photons(photons);
  prompt_photons.acceptMuonDecays(true);
  prompt_photons.acceptTauDecays(true);

  LeptonFinder dressed_leptons(prompt_leptons, prompt_photons, 0.1, lepton_acc, DressingType::AKT);
  declare(dressed_leptons, "LeptonFinder");

  // Jets
  VetoedFinalState fsForJets(fs);
  fsForJets.addVetoOnThisFinalState(dressed_leptons);
  declare(FastJets(fsForJets, JetAlg::ANTIKT, 0.4, JetMuons::ALL, JetInvisibles::NONE), "Jets");

  //charged particles
  ChargedFinalState baseChfs(Cuts::abseta < 2.1 && Cuts::pT > 0.9 * GeV);
  VetoedFinalState chfs_veto(baseChfs);
  // veto the dressed leptons from the charged-particle collection
  chfs_veto.addVetoOnThisFinalState(dressed_leptons);
  declare(chfs_veto, "charged");

  //ue
  book(_h["chmult"], 1, 1, 1);
  book(_h["chflux"], 2, 1, 1);
  book(_h["chavgpt"], 3, 1, 1);
  book(_h["magpt"], 4, 1, 1);

  book(_h["chfluxz"], 5, 1, 1);
  book(_h["chavgpz"], 6, 1, 1);

  book(_h["sphericity"], 7, 1, 1);
  book(_h["aplanarity"], 8, 1, 1);
  book(_h["C"], 9, 1, 1);
  book(_h["D"], 10, 1, 1);
}


/// Perform the per-event analysis
void analyze(const Event& event) {
  // Select the dilepton pair
  const DressedLeptons dressedLeptons = apply<LeptonFinder>(event, "LeptonFinder").dressedLeptons();
  if (dressedLeptons.size() < 2) vetoEvent;
  int chId(abs(dressedLeptons[0].pid() * dressedLeptons[1].pid()));
  int reqChId((PID::ELECTRON) * (PID::MUON));
  if (chId != reqChId) vetoEvent;
  if (dressedLeptons[0].pT() < 25 * GeV) vetoEvent;

  //dilepton kinematics
  FourMomentum ll(dressedLeptons[0].mom() + dressedLeptons[1].mom());
  if (ll.mass() < 12) vetoEvent;

  // jet selection
  const FastJets& jetpro = apply<FastJets>(event, "Jets");
  Jets jets = jetpro.jetsByPt(Cuts::pT > 30.0 * GeV && Cuts::abseta < 2.4);
  idiscardIfAnyDeltaRLess(jets, dressedLeptons, 0.4);
  Jets selJets, selBJets;
  for (const Jet& j : jets) {
    selJets.push_back(j);

    // b-tags
    bool isBJet(j.bTagged());
    if (!isBJet) continue;
    selBJets.push_back(j);
  }
  if (selBJets.size() < 2) vetoEvent;

  // loop over selected charged particles
  int nch(0);
  double chflux(0.), chfluxz(0.);
  const VetoedFinalState& charged = apply<VetoedFinalState>(event, "charged");
  std::vector<FourMomentum> selCharged;
  FourMomentum pTch;
  for (const Particle& p : charged.particles()) {

    // remove particles matching the b-jets
    if (selBJets[0].containsParticle(p) || selBJets[1].containsParticle(p)) continue;

    //add particle
    nch++;
    chflux += p.momentum().pT();
    chfluxz += fabs(p.momentum().pz());
    selCharged.push_back(p.momentum());
    // Only add the transverse momentum
    pTch += p.momentum();
  }

  // fill UE histos
  if (nch == 0) vetoEvent;

  double chavgpt(chflux / nch);
  double chavgpz(chfluxz / nch);

  double rparam_sphericity = 1.0;
  Sphericity _spher(rparam_sphericity);
  _spher.calc(selCharged);
  double sphericity(_spher.sphericity());
  if (isZero(sphericity)) sphericity = 0.;
  double aplanarity(_spher.aplanarity());
  double C(3
           * (_spher.lambda1() * _spher.lambda2() + _spher.lambda1() * _spher.lambda3()
              + _spher.lambda2() * _spher.lambda3()));
  double D(27 * _spher.lambda1() * _spher.lambda2() * _spher.lambda3());

  _h["chmult"]->fill(nch);
  _h["chflux"]->fill(chflux / GeV);
  _h["chavgpt"]->fill(chavgpt / GeV);
  _h["magpt"]->fill(pTch.pT() / GeV);
  _h["chfluxz"]->fill(chfluxz / GeV);
  _h["chavgpz"]->fill(chavgpz / GeV);

  _h["sphericity"]->fill(sphericity);
  _h["aplanarity"]->fill(aplanarity);
  _h["C"]->fill(C);
  _h["D"]->fill(D);
}


/// Normalise histograms etc., after the run
void finalize() {
  // Normalize histograms
  normalize(_h);
}

/// @}

/// @name Histograms
/// @{
map<string, Histo1DPtr> _h;
/// @}

};

RIVET_DECLARE_PLUGIN(CMS_2018_I1681435);

} ```