rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2022_I2142341

Measurement of differential fiducial Higgs boson production cross sections in $pp$collisions at $\sqrt{s} = 13$ TeV in the diphoton decay channel
Experiment: (LHC)
Inspire ID: 2142341
Status: VALIDATED
Authors:
  • Alessandro Tarabini
  • Massimiliano Galli
References: Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • H->$\gamma\gamma$; ggH, VBF, VH, and ttH production modes are included

The cross section for Higgs boson production in pp collisions is measured using the $H\rightarrow \gamma\gamma$ decay mode. The measurements are performed using data collected by the CMS experiment at the LHC at a centre-of-mass energy of 13 TeV, corresponding to an integrated luminosity of $138\,\text{fb}^{-1}$.

Source code: CMS_2022_I2142341.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FastJets.hh"
  4#include "Rivet/Projections/FinalState.hh"
  5#include "Rivet/Tools/RivetYODA.hh"
  6
  7namespace Rivet {
  8
  9  /// @brief H->yy analysis at 13 TeV
 10  class CMS_2022_I2142341 : public Analysis {
 11   public:
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2022_I2142341);
 14
 15    void init() {
 16      //---All particle final state
 17      FinalState fs;
 18      declare(fs, "FS");
 19
 20      //---Photons
 21      FinalState fs_photons(Cuts::abspid == PID::PHOTON);
 22      declare(fs_photons, "FS_PHOTONS");
 23
 24      //---Jets
 25      FastJets fs_jets(fs, JetAlg::ANTIKT, 0.4);
 26      declare(fs_jets, "JETS");
 27
 28      //---Histograms
 29      book(_h["pt_gg"], "d01-x01-y01");
 30      book(_h["njets_eta2p5"], "d03-x01-y01");
 31      book(_h["cos_theta_star"], "d05-x01-y01");
 32      book(_h["rapidity_gg"], "d07-x01-y01");
 33      book(_h["jet_pt_eta2p5"], "d09-x01-y01");
 34      book(_h["jet_rapidity_eta2p5"], "d11-x01-y01");
 35      book(_h["deltaphijj"], "d23-x01-y01");
 36      book(_h["deltaetajj"], "d29-x01-y01");
 37    }
 38
 39    // cos theta star angle in the Collins Soper frame
 40    double getCosThetaStar_CS(const FourMomentum& h1, const FourMomentum& h2) {
 41      FourMomentum hh = h1 + h2;
 42      LorentzTransform boost = LorentzTransform::mkFrameTransformFromBeta(hh.betaVec());
 43      FourMomentum h1_boosted = boost.transform(h1);
 44      return abs(cos(h1_boosted.theta()));
 45    }
 46
 47    void analyze(const Event& event) {
 48      Particles photons = apply<FinalState>(event, "FS_PHOTONS").particlesByPt();
 49
 50      if (photons.size() < 2) vetoEvent;
 51
 52      //---Isolate photons with ET_sum in cone
 53      Particles isolated_photons;
 54      Particles fs = apply<FinalState>(event, "FS").particlesByPt();
 55      for (const Particle& photon : photons) {
 56        FourMomentum mom_in_cone;
 57        for (const Particle& particle : fs) {
 58          if (deltaR(photon, particle) < 0.3 && photon.p() != particle.p())
 59            mom_in_cone += particle.momentum();
 60        }
 61        if (mom_in_cone.pt() < 10 * GeV && photon.abseta() < 2.5)
 62          isolated_photons.push_back(photon);
 63      }
 64
 65      if (isolated_photons.size() < 2)
 66        vetoEvent;
 67
 68      //---kinematic photon selection
 69      FourMomentum mom_PP = isolated_photons[0].mom() + isolated_photons[1].mom();
 70      if (isolated_photons[0].pT() < mom_PP.mass() / 3. || isolated_photons[1].pT() < mom_PP.mass() / 4.)
 71        vetoEvent;
 72
 73      _h["pt_gg"]->fill(mom_PP.pt() / GeV);
 74      _h["rapidity_gg"]->fill(abs(mom_PP.rapidity()));
 75      _h["cos_theta_star"]->fill(getCosThetaStar_CS(isolated_photons[0].mom(), isolated_photons[1].mom()));
 76
 77      //---jets
 78      auto jets_eta4p7 = apply<FastJets>(event, "JETS").jetsByPt(Cuts::abseta < 4.7 && Cuts::pt > 30 * GeV);
 79      Jets jets_eta4p7_npart;
 80      for (const Jet& j : jets_eta4p7) {
 81        if (j.constituents().size() > 5) jets_eta4p7_npart.push_back(j);
 82      }
 83      Particles selected_photons;
 84      selected_photons.push_back(isolated_photons[0]);
 85      selected_photons.push_back(isolated_photons[1]);
 86      idiscardIfAnyDeltaRLess(jets_eta4p7_npart, selected_photons, 0.4);
 87      if (jets_eta4p7_npart.size() > 1) {
 88        _h["deltaphijj"]->fill(deltaPhi(jets_eta4p7_npart[0], jets_eta4p7_npart[1]));
 89        _h["deltaetajj"]->fill(deltaEta(jets_eta4p7_npart[0], jets_eta4p7_npart[1]));
 90      }
 91
 92      Jets jets_eta2p5;
 93      for (const Jet& j : jets_eta4p7_npart) {
 94        if (j.abseta() < 2.5) jets_eta2p5.push_back(j);
 95      }
 96      _h["njets_eta2p5"]->fill(jets_eta2p5.size());
 97      if (jets_eta2p5.size() > 0) {
 98        _h["jet_pt_eta2p5"]->fill(jets_eta2p5[0].pt() / GeV);
 99        _h["jet_rapidity_eta2p5"]->fill(abs(jets_eta2p5[0].rapidity()));
100      }
101    }
102
103    void finalize() {
104      scale(_h, crossSection() / femtobarn * BR / sumOfWeights());
105    }
106
107   private:
108
109    map<string, Histo1DPtr> _h;
110    const double BR = 0.00227;
111  };
112
113  RIVET_DECLARE_PLUGIN(CMS_2022_I2142341);
114
115}  // namespace Rivet