Rivet analyses referenceCMS_2022_I2142341Measurement of differential fiducial Higgs boson production cross sections in $pp$collisions at $\sqrt{s} = 13$ TeV in the diphoton decay channelExperiment: (LHC) Inspire ID: 2142341 Status: VALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
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
|