Processing math: 100%
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 ppW+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 (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}