Rivet analyses referenceCMS_2016_I1491953Differential cross sections for associated production of a W boson and jets at 8 TeVExperiment: CMS (LHC) Inspire ID: 1491953 Status: VALIDATED Authors:
Beam energies: (4000.0, 4000.0) GeV Run details:
Differential cross sections for a W boson produced in association with jets are measured in a data sample of proton-proton collisions at a center-of-mass energy of 8 TeV recorded with the CMS detector and corresponding to an integrated luminosity of 19.6 inverse femtobarns. The W bosons are identified through their decay into a muon and a neutrino. The cross sections are reported as functions of jet multiplicity, jet transverse momenta, and the scalar sum of jet transverse momenta (HT) for different jet multiplicities. Distributions of the angular correlations between the jets and the muon are examined, as well as the average number of jets as a function of HT and as a function of angular variables. The cross sections are measured in the fiducial region defined by a muon with pT>25 GeV and pseudorapidity |η|<2.1, and by a transverse mass between the muon and the missing transverse energy MT>50 GeV. Jets are reconstructed using the anti-kT algorithm with a distance parameter R = 0.5, and only jets with pT>30 GeV, |η|<2.4, and a separation of ΔR>0.5 from the muon are considered. Source code: CMS_2016_I1491953.cc 1#include "Rivet/Analysis.hh"
2#include "Rivet/Projections/FinalState.hh"
3#include "Rivet/Projections/FastJets.hh"
4#include "Rivet/Projections/VetoedFinalState.hh"
5#include "Rivet/Projections/LeptonFinder.hh"
6#include "Rivet/Projections/MissingMomentum.hh"
7
8namespace Rivet {
9
10
11 /// @brief Differential cross sections for associated production of a W boson and jets at 8 TeV
12 class CMS_2016_I1491953 : public Analysis {
13 public:
14
15 /// Constructor
16 RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2016_I1491953);
17
18
19 /// @name Analysis methods
20 /// @{
21
22 /// Book histograms and initialise projections before the run
23 void init() {
24
25 // Initialise and register projections
26 LeptonFinder lf(0.1, Cuts::abseta < 2.4 && Cuts::abspid == PID::MUON);
27 declare(lf, "Muons");
28 declare(MissingMom(), "MET");
29
30 // Define veto FS
31 VetoedFinalState vfs;
32 vfs.addVetoOnThisFinalState(lf);
33 vfs.addVetoPairId(PID::MUON);
34 vfs.vetoNeutrinos();
35
36 FastJets fastjets(vfs, JetAlg::ANTIKT, 0.5);
37 declare(fastjets, "Jets");
38
39 book(_hist_Mult_exc ,1,1,1);
40 book(_hist_inc_WJetMult ,2,1,1);
41
42 book(_hist_addJetPt1j ,3,1,1);
43 book(_hist_addJetPt2j ,4,1,1);
44 book(_hist_addJetPt3j ,5,1,1);
45 book(_hist_addJetPt4j ,6,1,1);
46
47 book(_hist_addHt_1j ,7,1,1);
48 book(_hist_addHt_2j ,8,1,1);
49 book(_hist_addHt_3j ,9,1,1);
50 book(_hist_addHt_4j ,10,1,1);
51
52 book(_hist_diJetPt_2j ,11,1,1);
53 book(_hist_diJetPt_3j ,12,1,1);
54 book(_hist_diJetPt_4j ,13,1,1);
55
56 book(_hist_dijetM_2j ,14,1,1);
57 book(_hist_dijetM_3j ,15,1,1);
58 book(_hist_dijetM_4j ,16,1,1);
59
60 book(_hist_Jeteta1j ,17,1,1);
61 book(_hist_Jeteta2j ,18,1,1);
62 book(_hist_Jeteta3j ,19,1,1);
63 book(_hist_Jeteta4j ,20,1,1);
64
65 book(_hist_dyj1j2_2j ,21,1,1);
66 book(_hist_dyj1j2_3j ,22,1,1);
67 book(_hist_dyj1j2_4j ,23,1,1);
68
69 book(_hist_dyj1j3_3j ,24,1,1);
70 book(_hist_dyj2j3_3j ,25,1,1);
71
72 book(_hist_dyjFjB_2j ,26,1,1);
73 book(_hist_dyjFjB_3j ,27,1,1);
74 book(_hist_dyjFjB_4j ,28,1,1);
75
76 book(_hist_dphij1j2_2j ,29,1,1);
77 book(_hist_dphijFjB_2j ,30,1,1);
78 book(_hist_dRj1j2_2j ,31,1,1);
79
80 book(_hist_dphij1mu_1j ,32,1,1);
81 book(_hist_dphij2mu_2j ,33,1,1);
82 book(_hist_dphij3mu_3j ,34,1,1);
83 book(_hist_dphij4mu_4j ,35,1,1);
84
85 book(_hist_MeanNJht_1j ,36,1,1);
86 book(_hist_MeanNJht_2j ,37,1,1);
87 book(_hist_MeanNJdyj1j2_2j ,38,1,1);
88 book(_hist_MeanNJdyjFjB_2j ,39,1,1);
89
90 }
91
92
93 // Define function used for filiing inc Njets histo
94 void _fill(Histo1DPtr& _histJetMult, vector<FourMomentum>& finaljet_list) {
95 _histJetMult->fill(0);
96 for (size_t i = 0 ; i < finaljet_list.size() ; ++i) {
97 if (i == 7) break;
98 _histJetMult->fill(i+1); // inclusive multiplicity
99 }
100 }
101
102
103 /// Perform the per-event analysis
104 void analyze(const Event& event) {
105
106 // Identify the closest-matching l+MET to m == mW
107 const P4& pmiss = apply<MissingMom>(event, "MET").missingMom();
108 const Particles& mus = apply<LeptonFinder>(event, "Muons").particles();
109 const Particles mus_mtfilt = select(mus, [&](const Particle& m){ return mT(m, pmiss) > 0*GeV; });
110 const int ifound = closestMatchIndex(mus_mtfilt, pmiss, Kin::mass, 80.4*GeV);
111
112 // Make cuts on the identified mT and lepton
113 if (ifound < 0) vetoEvent;
114 const FourMomentum& lepton0 = mus_mtfilt[ifound].momentum();
115 const double WmT = mT(pmiss, lepton0);
116 if (WmT < 50.0*GeV) vetoEvent;
117 if (lepton0.abseta() > 2.1 || lepton0.pT() < 25.0*GeV) vetoEvent;
118
119 // Select final jets, ordered by decreasing pT
120 vector<FourMomentum> finaljet_list;
121 double HT = 0.0;
122 const Jets jListAll = apply<FastJets>(event, "Jets").jetsByPt(Cuts::pT > 30*GeV);
123 for (const Jet& j : jListAll) {
124 if (j.abseta() < 2.4 && j.pT() > 30.0*GeV && deltaR(lepton0, j) > 0.5) {
125 finaljet_list.push_back(j.momentum());
126 HT += j.pT();
127 }
128 }
129
130 // Another jet list, sorted by increasing rapidity
131 vector<FourMomentum> jListRap = finaljet_list;
132 std::sort(jListRap.begin(), jListRap.end(), cmpMomByRap);
133
134 // Multiplicity exc plot.
135 if (finaljet_list.size()<=7) {
136 _hist_Mult_exc->fill(finaljet_list.size());
137 } else if (finaljet_list.size()>7){
138 _hist_Mult_exc->fill(7.);
139 }
140 // Multiplicity inc plot.
141 _fill(_hist_inc_WJetMult, finaljet_list);
142
143 if (finaljet_list.size()>=1) {
144 _hist_addJetPt1j->fill(finaljet_list[0].pT());
145 _hist_Jeteta1j->fill(fabs(finaljet_list[0].eta()));
146 _hist_addHt_1j->fill(HT);
147 _hist_dphij1mu_1j->fill( deltaPhi(finaljet_list[0].phi(), lepton0.phi()) );
148 _hist_MeanNJht_1j->fill( HT, finaljet_list.size());
149 }
150
151 if (finaljet_list.size()>=2) {
152 _hist_addJetPt2j->fill(finaljet_list[1].pT());
153 _hist_Jeteta2j->fill(fabs(finaljet_list[1].eta()));
154 _hist_addHt_2j->fill(HT);
155
156 _hist_dyj1j2_2j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()));
157 _hist_dyjFjB_2j ->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()));
158 _hist_dphij1j2_2j ->fill( deltaPhi(finaljet_list[0].phi(), finaljet_list[1].phi()));
159 _hist_dphijFjB_2j ->fill( deltaPhi(jListRap[0].phi(), jListRap[jListRap.size()-1].phi()) );
160
161 _hist_dijetM_2j ->fill( (add(finaljet_list[0], finaljet_list[1])).mass());
162 _hist_diJetPt_2j ->fill( (add(finaljet_list[0], finaljet_list[1])).pT());
163 _hist_dRj1j2_2j ->fill( deltaR(finaljet_list[0].rapidity(), finaljet_list[0].phi(), finaljet_list[1].rapidity(), finaljet_list[1].phi()));
164
165 _hist_dphij2mu_2j ->fill( deltaPhi(finaljet_list[1].phi(), lepton0.phi()) );
166
167 _hist_MeanNJht_2j->fill( HT, finaljet_list.size());
168 _hist_MeanNJdyj1j2_2j->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()), finaljet_list.size());
169 _hist_MeanNJdyjFjB_2j->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()), finaljet_list.size());
170 }
171
172 if (finaljet_list.size()>=3) {
173 _hist_addJetPt3j->fill(finaljet_list[2].pT());
174 _hist_Jeteta3j->fill(fabs(finaljet_list[2].eta()));
175 _hist_addHt_3j->fill(HT);
176
177 _hist_dyj1j2_3j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()));
178 _hist_dyj1j3_3j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[2].rapidity()));
179 _hist_dyj2j3_3j ->fill( fabs(finaljet_list[1].rapidity() - finaljet_list[2].rapidity()));
180 _hist_dyjFjB_3j ->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()));
181
182 _hist_dijetM_3j ->fill( (add(finaljet_list[0], finaljet_list[1])).mass());
183 _hist_diJetPt_3j ->fill( (add(finaljet_list[0], finaljet_list[1])).pT());
184
185 _hist_dphij3mu_3j->fill( deltaPhi(finaljet_list[2].phi(), lepton0.phi()) );
186 }
187
188 if (finaljet_list.size()>=4) {
189 _hist_addJetPt4j->fill(finaljet_list[3].pT());
190 _hist_Jeteta4j->fill(fabs(finaljet_list[3].eta()));
191 _hist_addHt_4j->fill(HT);
192
193 _hist_dyj1j2_4j ->fill( fabs(finaljet_list[0].rapidity() - finaljet_list[1].rapidity()));
194 _hist_dyjFjB_4j ->fill( fabs(jListRap[0].rapidity() - jListRap[jListRap.size()-1].rapidity()));
195
196 _hist_dijetM_4j ->fill( (add(finaljet_list[0], finaljet_list[1])).mass());
197 _hist_diJetPt_4j ->fill( (add(finaljet_list[0], finaljet_list[1])).pT());
198 _hist_dphij4mu_4j->fill( deltaPhi(finaljet_list[3].phi(), lepton0.phi()) );
199 }
200
201 } //void loop
202
203
204 /// Normalise histograms etc., after the run
205 void finalize() {
206
207 const double crossec = !std::isnan(crossSectionPerEvent()) ? crossSection() : 36703*picobarn;
208 if (std::isnan(crossSectionPerEvent())){
209 MSG_INFO("No valid cross-section given, using NNLO xsec calculated by FEWZ " << crossec/picobarn << " pb");
210 }
211
212 scale(_hist_Mult_exc, crossec/picobarn/sumOfWeights());
213 scale(_hist_inc_WJetMult, crossec/picobarn/sumOfWeights());
214
215 scale(_hist_addJetPt1j, crossec/picobarn/sumOfWeights());
216 scale(_hist_addJetPt2j, crossec/picobarn/sumOfWeights());
217 scale(_hist_addJetPt3j, crossec/picobarn/sumOfWeights());
218 scale(_hist_addJetPt4j, crossec/picobarn/sumOfWeights());
219
220 scale(_hist_Jeteta1j, crossec/picobarn/sumOfWeights());
221 scale(_hist_Jeteta2j, crossec/picobarn/sumOfWeights());
222 scale(_hist_Jeteta3j, crossec/picobarn/sumOfWeights());
223 scale(_hist_Jeteta4j, crossec/picobarn/sumOfWeights());
224
225 scale(_hist_addHt_1j, crossec/picobarn/sumOfWeights());
226 scale(_hist_addHt_2j, crossec/picobarn/sumOfWeights());
227 scale(_hist_addHt_3j, crossec/picobarn/sumOfWeights());
228 scale(_hist_addHt_4j, crossec/picobarn/sumOfWeights());
229
230 //-------------------------------------
231 scale(_hist_dyj1j2_2j, crossec/picobarn/sumOfWeights());
232 scale(_hist_dyj1j2_3j, crossec/picobarn/sumOfWeights());
233 scale(_hist_dyj1j2_4j, crossec/picobarn/sumOfWeights());
234
235 scale(_hist_dyjFjB_2j, crossec/picobarn/sumOfWeights());
236 scale(_hist_dyjFjB_3j, crossec/picobarn/sumOfWeights());
237 scale(_hist_dyjFjB_4j, crossec/picobarn/sumOfWeights());
238
239 scale(_hist_dyj1j3_3j, crossec/picobarn/sumOfWeights());
240 scale(_hist_dyj2j3_3j, crossec/picobarn/sumOfWeights());
241
242 scale(_hist_dphij1j2_2j, crossec/picobarn/sumOfWeights());
243 scale(_hist_dphijFjB_2j, crossec/picobarn/sumOfWeights());
244
245 scale(_hist_dRj1j2_2j, crossec/picobarn/sumOfWeights());
246
247 scale(_hist_dijetM_2j, crossec/picobarn/sumOfWeights());
248 scale(_hist_dijetM_3j, crossec/picobarn/sumOfWeights());
249 scale(_hist_dijetM_4j, crossec/picobarn/sumOfWeights());
250
251 scale(_hist_diJetPt_2j, crossec/picobarn/sumOfWeights());
252 scale(_hist_diJetPt_3j, crossec/picobarn/sumOfWeights());
253 scale(_hist_diJetPt_4j, crossec/picobarn/sumOfWeights());
254
255 scale(_hist_dphij1mu_1j, crossec/picobarn/sumOfWeights());
256 scale(_hist_dphij2mu_2j, crossec/picobarn/sumOfWeights());
257 scale(_hist_dphij3mu_3j, crossec/picobarn/sumOfWeights());
258 scale(_hist_dphij4mu_4j, crossec/picobarn/sumOfWeights());
259
260 }
261
262 /// @}
263
264 private:
265
266 /// @name Histograms
267 /// @{
268
269 Histo1DPtr _hist_inc_WJetMult;
270 Histo1DPtr _hist_Mult_exc;
271
272 Histo1DPtr _hist_addJetPt1j;
273 Histo1DPtr _hist_addJetPt2j;
274 Histo1DPtr _hist_addJetPt3j;
275 Histo1DPtr _hist_addJetPt4j;
276
277 Histo1DPtr _hist_Jeteta1j;
278 Histo1DPtr _hist_Jeteta2j;
279 Histo1DPtr _hist_Jeteta3j;
280 Histo1DPtr _hist_Jeteta4j;
281
282 Histo1DPtr _hist_addHt_1j;
283 Histo1DPtr _hist_addHt_2j;
284 Histo1DPtr _hist_addHt_3j;
285 Histo1DPtr _hist_addHt_4j;
286
287 //-------------------------------------
288 Histo1DPtr _hist_dyj1j2_2j;
289 Histo1DPtr _hist_dyj1j2_3j;
290 Histo1DPtr _hist_dyj1j2_4j;
291
292 Histo1DPtr _hist_dyjFjB_2j;
293 Histo1DPtr _hist_dyjFjB_3j;
294 Histo1DPtr _hist_dyjFjB_4j;
295
296 Histo1DPtr _hist_dyj1j3_3j;
297 Histo1DPtr _hist_dyj2j3_3j;
298
299 Histo1DPtr _hist_dphij1j2_2j;
300 Histo1DPtr _hist_dphijFjB_2j;
301
302 Histo1DPtr _hist_dRj1j2_2j;
303
304 Histo1DPtr _hist_dijetM_2j;
305 Histo1DPtr _hist_dijetM_3j;
306 Histo1DPtr _hist_dijetM_4j;
307
308 Histo1DPtr _hist_diJetPt_2j;
309 Histo1DPtr _hist_diJetPt_3j;
310 Histo1DPtr _hist_diJetPt_4j;
311
312 Histo1DPtr _hist_dphij1mu_1j;
313 Histo1DPtr _hist_dphij2mu_2j;
314 Histo1DPtr _hist_dphij3mu_3j;
315 Histo1DPtr _hist_dphij4mu_4j;
316
317 //-------------------------------------
318 Profile1DPtr _hist_MeanNJht_1j;
319 Profile1DPtr _hist_MeanNJht_2j;
320 Profile1DPtr _hist_MeanNJdyj1j2_2j;
321 Profile1DPtr _hist_MeanNJdyjFjB_2j;
322
323 /// @}
324
325 };
326
327
328 RIVET_DECLARE_PLUGIN(CMS_2016_I1491953);
329
330
331}
|