Rivet analyses

Photon + jets triple differential cross-section

Experiment: CMS (LHC)

Inspire ID: 1266056

Status: UNVALIDATED

Authors: - David Grellscheid

References: - arXiv: 1311.6141

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 |η| < 2.5 and 40GeV < pT < 300GeV and jets with |η| < 2.5 and pT > 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

// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/FastJets.hh"
#include "Rivet/Projections/FinalState.hh"
#include "Rivet/Projections/LeadingParticlesFinalState.hh"
#include "Rivet/Projections/VetoedFinalState.hh"

namespace Rivet {


  /// @brief Measurement of gamma + jets + X triple differential cross-sections
  ///
  /// @author David Grellscheid
  class CMS_2014_I1266056 : public Analysis {
  public:

    // Constructor
    CMS_2014_I1266056()
        : Analysis("CMS_2014_I1266056") { }


    // Book histograms and initialise projections before the run
    void init() {
      // Final state
      FinalState fs((Cuts::etaIn(-3, 3)));
      declare(fs, "FS");

      // Leading photon
      LeadingParticlesFinalState photonfs(FinalState((Cuts::etaIn(-2.5, 2.5) && Cuts::pT >= 40.0 * GeV)));
      photonfs.addParticleId(PID::PHOTON);
      declare(photonfs, "LeadingPhoton");

      // FS excluding the leading photon
      VetoedFinalState vfs(fs);
      vfs.addVetoOnThisFinalState(photonfs);
      declare(vfs, "JetFS");

      // Jets
      FastJets jetpro(vfs, JetAlg::ANTIKT, 0.5);
      //jetpro.useInvisibles();
      declare(jetpro, "Jets");

      book(_h_phverycentral_jetcentral, 1, 1, 1);
      book(_h_phcentral_jetcentral, 2, 1, 1);
      book(_h_phforward_jetcentral, 3, 1, 1);
      book(_h_phveryforward_jetcentral, 4, 1, 1);

      book(_h_phverycentral_jetforward, 1, 1, 2);
      book(_h_phcentral_jetforward, 2, 1, 2);
      book(_h_phforward_jetforward, 3, 1, 2);
      book(_h_phveryforward_jetforward, 4, 1, 2);
    }

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

      // Get the photon
      const FinalState& photonfs = apply<FinalState>(event, "LeadingPhoton");
      if (photonfs.particles().empty()) vetoEvent;
      const FourMomentum photon = photonfs.particles().front().momentum();

      // Get the jet
      Jets jets = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 30 * GeV);
      if (jets.empty()) vetoEvent;
      FourMomentum leadingJet;
      for (const Jet& j : jets) {
        leadingJet = j.momentum();
        // keep the first separated jet
        if (deltaR(photon, leadingJet) > 0.5) break;
      }
      if (deltaR(photon, leadingJet) < 0.5) vetoEvent;

      // Veto if leading jet is outside plotted rapidity regions
      if (leadingJet.abseta() > 2.5) vetoEvent;

      // TODO: photon isolation 'IsoGamma' needed?

      // Fill histos
      const double abs_jet_eta = leadingJet.abseta();
      const double photon_pt = photon.pT() / GeV;
      const double abs_photon_eta = photon.abseta();

      if (abs_jet_eta < 1.5) {
        if (abs_photon_eta < 0.9)
          _h_phverycentral_jetcentral->fill(photon_pt);
        else if (abs_photon_eta < 1.44)
          _h_phcentral_jetcentral->fill(photon_pt);
        else if (abs_photon_eta < 1.57) { }
        else if (abs_photon_eta < 2.1)
          _h_phforward_jetcentral->fill(photon_pt);
        else if (abs_photon_eta < 2.5)
          _h_phveryforward_jetcentral->fill(photon_pt);
      }
      else if (abs_jet_eta < 2.5) {
        if (abs_photon_eta < 0.9)
          _h_phverycentral_jetforward->fill(photon_pt);
        else if (abs_photon_eta < 1.44)
          _h_phcentral_jetforward->fill(photon_pt);
        else if (abs_photon_eta < 1.57) { }
        else if (abs_photon_eta < 2.1)
          _h_phforward_jetforward->fill(photon_pt);
        else if (abs_photon_eta < 2.5)
          _h_phveryforward_jetforward->fill(photon_pt);
      }
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      const double scale_jetcentral = crossSection() / picobarn / sumOfWeights(); // *3 (jet eta < 1.5)
      scale(_h_phverycentral_jetcentral, scale_jetcentral);                       // * 1.8 (photon eta < 0.9)
      scale(_h_phcentral_jetcentral, scale_jetcentral);                           // * 1.08 (0.9 .. 1.44)
      scale(_h_phforward_jetcentral, scale_jetcentral);                           // * 1.06 (1.57 .. 2.1)
      scale(_h_phveryforward_jetcentral, scale_jetcentral);                       // * 0.8  (2.1 .. 2.5)

      const double scale_jetforward = crossSection() / picobarn / sumOfWeights(); // *2 (1.5 < eta < 2.5)
      scale(_h_phverycentral_jetforward, scale_jetforward);                       // .. as above ..
      scale(_h_phcentral_jetforward, scale_jetforward);                           // .. as above ..
      scale(_h_phforward_jetforward, scale_jetforward);                           // .. as above ..
      scale(_h_phveryforward_jetforward, scale_jetforward);                       // .. as above ..
    }


  private:

    Histo1DPtr _h_phverycentral_jetcentral;
    Histo1DPtr _h_phcentral_jetcentral;
    Histo1DPtr _h_phforward_jetcentral;
    Histo1DPtr _h_phveryforward_jetcentral;

    Histo1DPtr _h_phverycentral_jetforward;
    Histo1DPtr _h_phcentral_jetforward;
    Histo1DPtr _h_phforward_jetforward;
    Histo1DPtr _h_phveryforward_jetforward;
  };


  RIVET_DECLARE_PLUGIN(CMS_2014_I1266056);


}