rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2016_I1491953

Differential cross sections for associated production of a W boson and jets at 8 TeV
Experiment: CMS (LHC)
Inspire ID: 1491953
Status: VALIDATED
Authors:
  • Emanuela Barberis
  • B. Bhawandeep
  • Apichart Hortiangtham
  • Kadir Ocalan
  • Philippe Gras
References: Beams: p+ p+
Beam energies: (4000.0, 4000.0) GeV
Run details:
  • 8 TeV $pp \to W+jets$.

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}