rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2014_I1266056

Photon + jets triple differential cross-section
Experiment: CMS (LHC)
Inspire ID: 1266056
Status: UNVALIDATED
Authors:
  • David Grellscheid
References: Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • Inclusive photon+jet+X events at $\sqrt{s} = 7$ TeV.

A measurement of the triple differential cross section in photon+jets final states in $pp$ collisions at $\sqrt{s} = 7$ TeV. Photons with $|\eta|<2.5$ and $40$ GeV$<p_T<300$ GeV and jets with $|\eta|<2.5$ and $p_T>30$ GeV are selected. The measurement uses 2.14 fb$^{-1}$ of integrated luminosity collected with the CMS detector.

Source code: CMS_2014_I1266056.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/LeadingParticlesFinalState.hh"
  5#include "Rivet/Projections/VetoedFinalState.hh"
  6#include "Rivet/Projections/FastJets.hh"
  7
  8namespace Rivet {
  9
 10
 11  /// @brief Measurement of gamma + jets + X triple differential cross-sections
 12  ///
 13  /// @author David Grellscheid
 14  class CMS_2014_I1266056 : public Analysis {
 15  public:
 16
 17    // Constructor
 18    CMS_2014_I1266056()
 19      : Analysis("CMS_2014_I1266056")
 20    {    }
 21
 22
 23    // Book histograms and initialise projections before the run
 24    void init() {
 25      // Final state
 26      FinalState fs((Cuts::etaIn(-3, 3)));
 27      declare(fs, "FS");
 28
 29      // Leading photon
 30      LeadingParticlesFinalState photonfs(FinalState((Cuts::etaIn(-2.5, 2.5) && Cuts::pT >=  40.0*GeV)));
 31      photonfs.addParticleId(PID::PHOTON);
 32      declare(photonfs, "LeadingPhoton");
 33
 34      // FS excluding the leading photon
 35      VetoedFinalState vfs(fs);
 36      vfs.addVetoOnThisFinalState(photonfs);
 37      declare(vfs, "JetFS");
 38
 39      // Jets
 40      FastJets jetpro(vfs, JetAlg::ANTIKT, 0.5);
 41      //jetpro.useInvisibles();
 42      declare(jetpro, "Jets");
 43
 44      book(_h_phverycentral_jetcentral, 1, 1, 1);
 45      book(_h_phcentral_jetcentral    , 2, 1, 1);
 46      book(_h_phforward_jetcentral    , 3, 1, 1);
 47      book(_h_phveryforward_jetcentral, 4, 1, 1);
 48
 49      book(_h_phverycentral_jetforward, 1, 1, 2);
 50      book(_h_phcentral_jetforward    , 2, 1, 2);
 51      book(_h_phforward_jetforward    , 3, 1, 2);
 52      book(_h_phveryforward_jetforward, 4, 1, 2);
 53
 54    }
 55
 56    // Perform the per-event analysis
 57    void analyze(const Event& event) {
 58
 59      // Get the photon
 60      const FinalState& photonfs = apply<FinalState>(event, "LeadingPhoton");
 61      if (photonfs.particles().empty()) vetoEvent;
 62      const FourMomentum photon = photonfs.particles().front().momentum();
 63
 64      // Get the jet
 65      Jets jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV);
 66      if (jets.empty()) vetoEvent;
 67      FourMomentum leadingJet;
 68      for ( const Jet & j : jets ) {
 69        leadingJet = j.momentum();
 70        // keep the first separated jet
 71        if (deltaR(photon, leadingJet) > 0.5)
 72          break;
 73      }
 74      if (deltaR(photon, leadingJet) < 0.5)
 75          vetoEvent;
 76
 77      // Veto if leading jet is outside plotted rapidity regions
 78      if (leadingJet.abseta() > 2.5) vetoEvent;
 79
 80      // TODO: photon isolation 'IsoGamma' needed?
 81
 82      // Fill histos
 83      const double abs_jet_eta = leadingJet.abseta();
 84      const double photon_pt = photon.pT()/GeV;
 85      const double abs_photon_eta = photon.abseta();
 86
 87      if (abs_jet_eta < 1.5) {
 88        if      (abs_photon_eta < 0.9)  _h_phverycentral_jetcentral->fill(photon_pt);
 89        else if (abs_photon_eta < 1.44) _h_phcentral_jetcentral->fill(    photon_pt);
 90        else if (abs_photon_eta < 1.57) {}
 91        else if (abs_photon_eta < 2.1)  _h_phforward_jetcentral->fill(    photon_pt);
 92        else if (abs_photon_eta < 2.5)  _h_phveryforward_jetcentral->fill(photon_pt);
 93      }
 94      else if (abs_jet_eta < 2.5) {
 95        if      (abs_photon_eta < 0.9)  _h_phverycentral_jetforward->fill(photon_pt);
 96        else if (abs_photon_eta < 1.44) _h_phcentral_jetforward->fill(    photon_pt);
 97        else if (abs_photon_eta < 1.57) {}
 98        else if (abs_photon_eta < 2.1)  _h_phforward_jetforward->fill(    photon_pt);
 99        else if (abs_photon_eta < 2.5)  _h_phveryforward_jetforward->fill(photon_pt);
100      }
101    }
102
103
104
105    /// Normalise histograms etc., after the run
106    void finalize() {
107      const double scale_jetcentral = crossSection()/picobarn/sumOfWeights(); // *3 (jet eta < 1.5)
108      scale(_h_phverycentral_jetcentral, scale_jetcentral); // * 1.8 (photon eta < 0.9)
109      scale(_h_phcentral_jetcentral    , scale_jetcentral); // * 1.08 (0.9 .. 1.44)
110      scale(_h_phforward_jetcentral    , scale_jetcentral); // * 1.06 (1.57 .. 2.1)
111      scale(_h_phveryforward_jetcentral, scale_jetcentral); // * 0.8  (2.1 .. 2.5)
112
113      const double scale_jetforward = crossSection()/picobarn/sumOfWeights(); // *2 (1.5 < eta < 2.5)
114      scale(_h_phverycentral_jetforward, scale_jetforward); // .. as above ..
115      scale(_h_phcentral_jetforward    , scale_jetforward); // .. as above ..
116      scale(_h_phforward_jetforward    , scale_jetforward); // .. as above ..
117      scale(_h_phveryforward_jetforward, scale_jetforward); // .. as above ..
118
119    }
120
121
122  private:
123
124    Histo1DPtr _h_phverycentral_jetcentral;
125    Histo1DPtr _h_phcentral_jetcentral    ;
126    Histo1DPtr _h_phforward_jetcentral    ;
127    Histo1DPtr _h_phveryforward_jetcentral;
128
129    Histo1DPtr _h_phverycentral_jetforward;
130    Histo1DPtr _h_phcentral_jetforward    ;
131    Histo1DPtr _h_phforward_jetforward    ;
132    Histo1DPtr _h_phveryforward_jetforward;
133
134  };
135
136
137  RIVET_DECLARE_PLUGIN(CMS_2014_I1266056);
138
139
140}