Rivet analyses


title: CMS_2015_I1310737

Jet multiplicity and differential cross-sections of $Z$+jets events in $pp$ at $\sqrt{s} = 7$ TeV

Experiment: CMS (LHC)

Inspire ID: 1310737

Status: VALIDATED

Authors: - Fabio Cossutti - Chiara La Licata

References: - Phys.Rev. D91 (2015) 052008 - http://dx.doi.org/10.1103/PhysRevD.91.052008 - arxiv:1408.3104 - http://inspirehep.net/record/1310737

Beams: p+ p+

Beam energies: (3500.0, 3500.0)GeV

Run details: - Run MC generators with Z decaying leptonically into both electrons and muons at 7 TeV CoM energy. Order of 5 million unweighted events can give a reasonable global comparison, but precision in the high jet multiplicity region/high jet pt may require substantially larger samples or statistical enhancement of high jet multiplicities.

Measurements of differential cross sections are presented for the production of a Z boson and at least one hadronic jet in proton-proton collisions at $\sqrt{s}=7$~TeV, recorded by the CMS detector, using a data sample corresponding to an integrated luminosity of 4.9 $\text{fb}^{-1}$. The jet multiplicity distribution is measured for up to six jets. The differential cross sections are measured as a function of jet transverse momentum and pseudorapidity for the four highest transverse momentum jets. The distribution of the scalar sum of jet transverse momenta is also measured as a function of the jet multiplicity. The measurements are compared with theoretical predictions at leading and next-to-leading order in perturbative QCD. Cuts: First two leading electrons or muons with $p_T > 20$ GeV and $|\eta| < 2.4$ Dilepton invariant mass in the [71,111] GeV range Jets $p_T > 30$ GeV and $|\eta| < 2.4$ $\Delta{R}($lepton,jet$) > 0.5$

Source code:CMS_2015_I1310737.cc

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

include "Rivet/Analysis.hh"

include "Rivet/Projections/ChargedFinalState.hh"

include "Rivet/Projections/DileptonFinder.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/InvMassFinalState.hh"

include "Rivet/Projections/PromptFinalState.hh"

include "Rivet/Projections/VetoedFinalState.hh"

include "Rivet/Projections/VisibleFinalState.hh"

namespace Rivet {

class CMS_2015_I1310737 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2015_I1310737);


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

  DileptonFinder zeeFinder(91.2 * GeV, 0.1,
                           Cuts::abseta < 2.4 && Cuts::pT > 20 * GeV && Cuts::abspid == PID::ELECTRON,
                           Cuts::massIn(71 * GeV, 111 * GeV));
  declare(zeeFinder, "ZeeFinder");

  DileptonFinder zmumuFinder(91.2 * GeV, 0.1,
                             Cuts::abseta < 2.4 && Cuts::pT > 20 * GeV && Cuts::abspid == PID::MUON,
                             Cuts::massIn(71 * GeV, 111 * GeV));
  declare(zmumuFinder, "ZmumuFinder");

  VisibleFinalState visfs;
  VetoedFinalState jetConstits(visfs);
  jetConstits.addVetoOnThisFinalState(zeeFinder);
  jetConstits.addVetoOnThisFinalState(zmumuFinder);

  FastJets akt05Jets(jetConstits, JetAlg::ANTIKT, 0.5);
  declare(akt05Jets, "AntiKt05Jets");


  book(_h_excmult_jets_tot, 1, 1, 1);
  book(_h_incmult_jets_tot, 2, 1, 1);
  book(_h_leading_jet_pt_tot, 3, 1, 1);
  book(_h_second_jet_pt_tot, 4, 1, 1);
  book(_h_third_jet_pt_tot, 5, 1, 1);
  book(_h_fourth_jet_pt_tot, 6, 1, 1);
  book(_h_leading_jet_eta_tot, 7, 1, 1);
  book(_h_second_jet_eta_tot, 8, 1, 1);
  book(_h_third_jet_eta_tot, 9, 1, 1);
  book(_h_fourth_jet_eta_tot, 10, 1, 1);
  book(_h_ht1_tot, 11, 1, 1);
  book(_h_ht2_tot, 12, 1, 1);
  book(_h_ht3_tot, 13, 1, 1);
  book(_h_ht4_tot, 14, 1, 1);
}


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

  const DileptonFinder& zeeFS = apply<DileptonFinder>(event, "ZeeFinder");
  const DileptonFinder& zmumuFS = apply<DileptonFinder>(event, "ZmumuFinder");

  const Particles& zees = zeeFS.bosons();
  const Particles& zmumus = zmumuFS.bosons();

  // We did not find exactly one Z. No good.
  if (zees.size() + zmumus.size() != 1) {
    MSG_DEBUG("Did not find exactly one good Z candidate");
    vetoEvent;
  }

  // Find the (dressed!) leptons
  const Particles& dressedLeptons = zees.size() ? zeeFS.constituents() : zmumuFS.constituents();

  // Cluster jets
  // NB. Veto has already been applied on leptons and photons used for dressing
  const FastJets& fj = apply<FastJets>(event, "AntiKt05Jets");
  const Jets& jets = fj.jetsByPt(Cuts::abseta < 2.4 && Cuts::pT > 30 * GeV);

  // Perform lepton-jet overlap and HT calculation
  double ht = 0;
  Jets goodjets;
  for (const Jet& j : jets) {
    // Decide if this jet is "good", i.e. isolated from the leptons
    /// @todo Nice use-case for any() and a C++11 lambda
    bool overlap = false;
    for (const Particle& l : dressedLeptons) {
      if (deltaR(j, l) < 0.5) {
        overlap = true;
        break;
      }
    }

    // Fill HT and good-jets collection
    if (overlap) continue;
    goodjets.push_back(j);
    ht += j.pT();
  }

  // We don't care about events with no isolated jets
  if (goodjets.empty()) {
    MSG_DEBUG("No jets in event");
    vetoEvent;
  }


  /////////////////


  // Weight to be used for histo filling
  const double w = 0.5 * 1.0;

  // Fill jet number integral histograms
  _h_excmult_jets_tot->fill(goodjets.size(), w);
  /// @todo Could be better computed by toIntegral transform on exclusive histo
  for (size_t iJet = 1; iJet <= goodjets.size(); iJet++) _h_incmult_jets_tot->fill(iJet, w);

  // Fill leading jet histograms
  const Jet& j1 = goodjets[0];
  _h_leading_jet_pt_tot->fill(j1.pT() / GeV, w);
  _h_leading_jet_eta_tot->fill(j1.abseta(), w);
  _h_ht1_tot->fill(ht / GeV, w);

  // Fill 2nd jet histograms
  if (goodjets.size() < 2) return;
  const Jet& j2 = goodjets[1];
  _h_second_jet_pt_tot->fill(j2.pT() / GeV, w);
  _h_second_jet_eta_tot->fill(j2.abseta(), w);
  _h_ht2_tot->fill(ht / GeV, w);

  // Fill 3rd jet histograms
  if (goodjets.size() < 3) return;
  const Jet& j3 = goodjets[2];
  _h_third_jet_pt_tot->fill(j3.pT() / GeV, w);
  _h_third_jet_eta_tot->fill(j3.abseta(), w);
  _h_ht3_tot->fill(ht / GeV, w);

  // Fill 4th jet histograms
  if (goodjets.size() < 4) return;
  const Jet& j4 = goodjets[3];
  _h_fourth_jet_pt_tot->fill(j4.pT() / GeV, w);
  _h_fourth_jet_eta_tot->fill(j4.abseta(), w);
  _h_ht4_tot->fill(ht / GeV, w);
}


/// Normalise histograms etc., after the run
void finalize() {

  const double norm = (sumOfWeights() != 0) ? crossSection() / picobarn / sumOfWeights() : 1.0;

  scale(_h_excmult_jets_tot, norm);
  scale(_h_incmult_jets_tot, norm);
  scale(_h_leading_jet_pt_tot, norm);
  scale(_h_second_jet_pt_tot, norm);
  scale(_h_third_jet_pt_tot, norm);
  scale(_h_fourth_jet_pt_tot, norm);
  scale(_h_leading_jet_eta_tot, norm);
  scale(_h_second_jet_eta_tot, norm);
  scale(_h_third_jet_eta_tot, norm);
  scale(_h_fourth_jet_eta_tot, norm);
  scale(_h_ht1_tot, norm);
  scale(_h_ht2_tot, norm);
  scale(_h_ht3_tot, norm);
  scale(_h_ht4_tot, norm);
}

private:

/// @name Histograms

Histo1DPtr _h_excmult_jets_tot, _h_incmult_jets_tot;
Histo1DPtr _h_leading_jet_pt_tot, _h_second_jet_pt_tot, _h_third_jet_pt_tot, _h_fourth_jet_pt_tot;
Histo1DPtr _h_leading_jet_eta_tot, _h_second_jet_eta_tot, _h_third_jet_eta_tot, _h_fourth_jet_eta_tot;
Histo1DPtr _h_ht1_tot, _h_ht2_tot, _h_ht3_tot, _h_ht4_tot;

};

RIVET_DECLARE_PLUGIN(CMS_2015_I1310737);

} ```