Rivet analyses referenceCMS_2018_I1662081Measurement of the differential cross sections of top quark pair production as a function of kinematic event variables in pp collisions at sqrt(s) = 13 TeVExperiment: CMS (LHC) Inspire ID: 1662081 Status: VALIDATED Authors:
Beam energies: (6500.0, 6500.0) GeV Run details:
Abstract : Measurements of the differential t¯t production cross section are presented in the single-lepton decay channel, with respect to a number of global event observables. The measurements are performed with 35.9 fb−1 of proton-proton collision data collected by the CMS experiment at the LHC during 2016 at √s=13 TeV. The differential cross sections are measured at the level of long-lived generated particles in a phase space similar to that accessible by the CMS detector, and are compared to state-of-the-art leading-order and next-to-leading-order t¯t simulations. Rivet : This analysis is to be run on tˉt simulation. The particle level selection requires: - exactly one electron or muon with pT>26 GeV and |η|<2.4 - no additional electrons or muons with pT>15 GeV and |η|<2.4 - at least three jets with pT>30 GeV and |η|<2.4, and one jet with pT>25 GeV and |η|<2.4 - two of these selected jets must be tagged as originating from a b quark. Source code: CMS_2018_I1662081.cc 1#include "Rivet/Analysis.hh"
2#include "Rivet/Projections/FinalState.hh"
3#include "Rivet/Projections/FastJets.hh"
4#include "Rivet/Projections/ChargedLeptons.hh"
5#include "Rivet/Projections/LeptonFinder.hh"
6#include "Rivet/Projections/IdentifiedFinalState.hh"
7#include "Rivet/Projections/PromptFinalState.hh"
8#include "Rivet/Projections/VetoedFinalState.hh"
9#include "Rivet/Projections/MissingMomentum.hh"
10
11namespace Rivet {
12
13
14 class CMS_2018_I1662081 : public Analysis {
15 public:
16
17 // Minimal constructor
18 CMS_2018_I1662081()
19 : Analysis("CMS_2018_I1662081") {}
20
21
22 // Set up projections and book histograms
23 void init() {
24 // Complete final state
25 FinalState fs(Cuts::abseta < 5);
26
27 // Dressed leptons
28 ChargedLeptons charged_leptons(fs);
29 IdentifiedFinalState photons(fs, PID::PHOTON);
30
31 PromptFinalState prompt_leptons(charged_leptons);
32 prompt_leptons.acceptMuonDecays(true);
33 prompt_leptons.acceptTauDecays(true);
34 PromptFinalState prompt_photons(photons);
35 prompt_photons.acceptMuonDecays(true);
36 prompt_photons.acceptTauDecays(true);
37 Cut looseLeptonCuts = Cuts::pt > 15*GeV && Cuts::abseta < 2.4;
38
39 LeptonFinder dressed_leptons(prompt_leptons, prompt_photons, 0.1, looseLeptonCuts);
40 declare(dressed_leptons, "LeptonFinder");
41
42 // Projection for jets
43 VetoedFinalState fsForJets(fs);
44 fsForJets.addVetoOnThisFinalState(dressed_leptons);
45 declare(FastJets(fsForJets, JetAlg::ANTIKT, 0.4), "Jets");
46
47 // Projections for MET
48 declare(MissingMomentum(fs), "MET");
49
50 // Booking of histograms
51 book(_hist_norm_met , 4, 1, 1);
52 book(_hist_norm_ht , 2, 1, 1);
53 book(_hist_norm_st , 3, 1, 1);
54 book(_hist_norm_wpt , 5, 1, 1);
55 book(_hist_norm_njets , 1, 1, 1);
56 book(_hist_norm_lpt , 6, 1, 1);
57 book(_hist_norm_labseta , 7, 1, 1);
58
59 book(_hist_abs_met , 11, 1, 1);
60 book(_hist_abs_ht , 9, 1, 1);
61 book(_hist_abs_st , 10, 1, 1);
62 book(_hist_abs_wpt , 12, 1, 1);
63 book(_hist_abs_njets , 8, 1, 1);
64 book(_hist_abs_lpt , 13, 1, 1);
65 book(_hist_abs_labseta , 14, 1, 1);
66
67 }
68
69
70 // per event analysis
71 void analyze(const Event& event) {
72
73 // Lepton veto selection
74 const LeptonFinder& dressed_leptons = apply<LeptonFinder>(event, "LeptonFinder");
75 if (dressed_leptons.dressedLeptons().size() != 1) vetoEvent;
76
77 // Signal lepton selection
78 FourMomentum lepton = dressed_leptons.dressedLeptons()[0];
79
80 const double leptonPt = lepton.pT();
81 const double leptonAbsEta = std::abs( lepton.eta() );
82 if (leptonPt <= 26*GeV || leptonAbsEta >= 2.4) vetoEvent;
83
84 // Jet selection
85 const FastJets& jetpro = apply<FastJets>(event, "Jets");
86 const Jets jets = jetpro.jets(Cuts::abseta < 2.4 && Cuts::pT > 20*GeV);
87 Jets cleanedJets;
88 unsigned int nJetsAbove30GeV = 0;
89 unsigned int nJetsAbove20GeV = 0;
90 unsigned int nBJetsAbove30GeV = 0;
91 unsigned int nBJetsAbove20GeV = 0;
92 for (const Jet& j : jets) {
93 cleanedJets.push_back( j );
94 ++nJetsAbove20GeV;
95 if ( j.pT() > 30*GeV) ++nJetsAbove30GeV;
96
97 if ( j.bTagged() ) {
98 ++nBJetsAbove20GeV;
99 if ( j.pT() > 30*GeV) ++nBJetsAbove30GeV;
100 }
101 }
102
103 if ( nJetsAbove30GeV < 3 || nJetsAbove20GeV < 4 ) vetoEvent;
104 if ( nBJetsAbove30GeV < 1 || nBJetsAbove20GeV < 2 ) vetoEvent;
105
106 // MET
107 const MissingMomentum& met = apply<MissingMomentum>(event, "MET");
108 _hist_norm_met->fill(met.visibleMomentum().pT()/GeV);
109 _hist_abs_met->fill(met.visibleMomentum().pT()/GeV);
110
111 // HT and ST
112 double ht = 0.0;
113 for (const Jet& j : cleanedJets) ht += j.pT();
114
115 double st = ht + lepton.pT() + met.visibleMomentum().pT();
116 _hist_norm_ht->fill(ht/GeV);
117 _hist_norm_st->fill(st/GeV);
118 _hist_abs_ht->fill(ht/GeV);
119 _hist_abs_st->fill(st/GeV);
120
121 // WPT
122 FourMomentum w = lepton - met.visibleMomentum();
123 _hist_norm_wpt->fill(w.pT()/GeV);
124 _hist_abs_wpt->fill(w.pT()/GeV);
125
126 // Lepton pt and eta
127 _hist_norm_lpt->fill( leptonPt/GeV);
128 _hist_norm_labseta->fill( leptonAbsEta/GeV);
129
130 _hist_abs_lpt->fill( leptonPt/GeV);
131 _hist_abs_labseta->fill( leptonAbsEta/GeV);
132
133 // NJets
134 _hist_norm_njets->fill( cleanedJets.size());
135 _hist_abs_njets->fill( cleanedJets.size());
136
137 }
138
139
140 void finalize() {
141 normalize(_hist_norm_met);
142 normalize(_hist_norm_ht);
143 normalize(_hist_norm_st);
144 normalize(_hist_norm_wpt);
145 normalize(_hist_norm_njets);
146 normalize(_hist_norm_lpt);
147 normalize(_hist_norm_labseta);
148
149 scale(_hist_abs_met, crossSection()/picobarn / sumOfWeights());
150 scale(_hist_abs_ht, crossSection()/picobarn / sumOfWeights());
151 scale(_hist_abs_st, crossSection()/picobarn / sumOfWeights());
152 scale(_hist_abs_wpt, crossSection()/picobarn / sumOfWeights());
153 scale(_hist_abs_njets, crossSection()/picobarn / sumOfWeights());
154 scale(_hist_abs_lpt, crossSection()/picobarn / sumOfWeights());
155 scale(_hist_abs_labseta, crossSection()/picobarn / sumOfWeights());
156
157 }
158
159
160 private:
161 Histo1DPtr _hist_norm_met, _hist_norm_ht, _hist_norm_st, _hist_norm_wpt, _hist_norm_njets, _hist_norm_lpt, _hist_norm_labseta;
162 Histo1DPtr _hist_abs_met, _hist_abs_ht, _hist_abs_st, _hist_abs_wpt, _hist_abs_njets, _hist_abs_lpt, _hist_abs_labseta;
163
164 };
165
166
167 RIVET_DECLARE_PLUGIN(CMS_2018_I1662081);
168
169}
|