rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2013_I1273574

Studies of 4-jet production in proton-proton collisions at $\sqrt{s} = 7$ TeV
Experiment: CMS (LHC)
Inspire ID: 1273574
Status: VALIDATED
Authors:
  • P. Gunnellini
  • A. Buckley
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • Hard QCD events with p_\perp cut at generator level of 45 GeV

Measurements are presented of exclusive 4-jet production cross sections as a function of the transverse momentum $p_T$, pseudorapidity $\eta$, as well as of correlations in azimuthal angle and $p_T$ balance among the jets. The data sample was collected at a centre-of-mass energy of 7 TeV with the CMS detector at the LHC, corresponding to an integrated luminosity of 36 pb$^{-1}$. The jets are reconstructed with the anti-$k_T$ jet algorithm in a range of $|\eta|<4.7$.

Source code: CMS_2013_I1273574.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// CMS 4-jet production at 7 TeV
 10  class CMS_2013_I1273574 : public Analysis {
 11  public:
 12
 13    /// Constructor
 14    CMS_2013_I1273574()
 15      : Analysis("CMS_2013_I1273574")
 16    {    }
 17
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21      const FinalState cnfs((Cuts::etaIn(-4.7, 4.7)));
 22      declare(FastJets(cnfs, JetAlg::ANTIKT, 0.5), "Jets");
 23
 24      // Modified to match the HEPDATA record.
 25      // eta of highest pT jet
 26      //book(_h_jetetas[0]     ,1,1,1);
 27      book(_h_jetetas[0]     ,6,1,1);
 28
 29      // pt of the highest pT jet
 30      book(_h_jetpts[0]      ,2,1,1);
 31
 32      //book(_h_DeltaS         ,3,1,1);
 33      book(_h_DeltaS         ,12,1,1);
 34
 35      //book(_h_DeltaPhiSoft   ,4,1,1);
 36      book(_h_DeltaPhiSoft   ,10,1,1);
 37
 38      //book(_h_DeltaPtRelSoft ,5,1,1);
 39      book(_h_DeltaPtRelSoft ,11,1,1);
 40
 41      // eta and pT of 3rd highest pT jet
 42      //book(_h_jetetas[2]     ,6,1,1);
 43      //book(_h_jetpts[2]      ,7,1,1);
 44      book(_h_jetetas[2]     ,8,1,1);
 45      book(_h_jetpts[2]      ,4,1,1);
 46
 47      // eta and pT of 4th highest pT jet
 48      //book(_h_jetetas[3]     ,8,1,1);
 49      //book(_h_jetpts[3]      ,9,1,1);
 50      book(_h_jetetas[3]     ,9,1,1);
 51      book(_h_jetpts[3]      ,5,1,1);
 52
 53      // eta and pT of 2nd highest pT jet
 54      //book(_h_jetetas[1]     ,10,1,1);
 55      //book(_h_jetpts[1]      ,11,1,1);
 56      book(_h_jetetas[1]     ,7,1,1);
 57      book(_h_jetpts[1]      ,3,1,1);
 58
 59    }
 60
 61
 62    /// Perform the per-event analysis
 63    void analyze(const Event& event) {
 64      const Jets jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 4.7);
 65      if (jets.size() < 4) vetoEvent;
 66
 67      // Ensure that there are exactly 4 jets > 20 GeV, with two above 50 GeV
 68      Jets hardjets, alljets;
 69      for (const Jet& j : jets) {
 70        if (j.pT() > 50*GeV) hardjets.push_back(j);
 71        alljets.push_back(j);
 72      }
 73      if (hardjets.size() < 2 || alljets.size() != 4) vetoEvent;
 74
 75      // Histogram pT and eta of all 4 jets
 76      for (size_t i = 0; i < 4; ++i) {
 77        _h_jetpts[i]->fill(alljets[i].pT()/GeV);
 78        _h_jetetas[i]->fill(alljets[i].eta());
 79      }
 80
 81      // Create vector sums of the hard and soft pairs of jets
 82      const FourMomentum p12 = alljets[0].momentum() + alljets[1].momentum();
 83      const FourMomentum p34 = alljets[2].momentum() + alljets[3].momentum();
 84
 85      // Fill the delta(phi) between the soft jets
 86      const double dphisoft = deltaPhi(alljets[2], alljets[3]);
 87      _h_DeltaPhiSoft->fill(dphisoft);
 88
 89      // Fill the pT balance between the soft jets
 90      const double ptbalanceSoft = p34.pT() / (alljets[2].pT() + alljets[3].pT());
 91      _h_DeltaPtRelSoft->fill(ptbalanceSoft);
 92
 93      // Fill the azimuthal angle difference between the two jet pairs
 94      const double p12p34_trans = p12.px()*p34.px() + p12.py()*p34.py();
 95      const double DeltaS = acos( p12p34_trans / p12.pT() / p34.pT() );
 96      _h_DeltaS->fill(DeltaS);
 97    }
 98
 99
100    /// Normalise histograms (mostly to cross-section)
101    void finalize() {
102      const double invlumi = crossSection()/picobarn/sumOfWeights();
103      for (size_t i = 0; i < 4; ++i) {
104        scale(_h_jetpts[i], invlumi);
105        scale(_h_jetetas[i], invlumi);
106      }
107      normalize(_h_DeltaPtRelSoft);
108      normalize(_h_DeltaPhiSoft);
109      normalize(_h_DeltaS);
110    }
111
112
113  private:
114
115    Histo1DPtr _h_jetpts[4], _h_jetetas[4];
116    Histo1DPtr _h_DeltaS, _h_DeltaPhiSoft, _h_DeltaPtRelSoft;
117
118  };
119
120
121  RIVET_DECLARE_PLUGIN(CMS_2013_I1273574);
122
123}