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 ($H_T$) 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 $H_T$ and as a function of angular variables. The cross sections are measured in the fiducial region defined by a muon with $p_T > 25$ GeV and pseudorapidity $|\eta| < 2.1$, and by a transverse mass between the muon and the missing transverse energy $M_T > 50$ GeV. Jets are reconstructed using the anti-kT algorithm with a distance parameter R = 0.5, and only jets with $p_T > 30$ GeV, $|\eta| < 2.4$, and a separation of $\Delta 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}
|