rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2016_I1491950

Differential cross sections for top quark pair production using the lepton+jets final state in proton proton collisions at 13 TeV
Experiment: CMS (LHC)
Inspire ID: 1491950
Status: VALIDATED
Authors:
  • Regina Demina
  • Yi-Ting Duh
  • Mario Galanti
  • Aran Garcia-Bellido
  • Otto Hindrichs
  • Mauro Verzetti
  • Markus Seidel
References: Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • pp QCD interactions at $\sqrt{s} = 13$ TeV. Data collected by CMS during the year 2015. Selection of lepton+jets top pair candidate events at particle level.

Abstract: Differential and double-differential cross sections for the production of top quark pairs in proton-proton collisions at 13 TeV are measured as a function of jet multiplicity and of kinematic variables of the top quarks and the top quark-antiquark system. This analysis is based on data collected by the CMS experiment at the LHC corresponding to an integrated luminosity of 2.3 inverse femtobarns. The measurements are performed in the lepton+jets decay channels with a single muon or electron in the final state. The differential cross sections are presented at particle level, within a phase space close to the experimental acceptance, and at parton level in the full phase space. The results are compared to several standard model predictions. Rivet: This analysis is to be run on $\text{t}\bar{\text{t}}$ Monte Carlo. The particle-level phase space is defined using the following definitions: an electron or muon with $p_\text{T}>30\,\text{GeV}$ and $|\eta|<2.5$, dressed within a cone of radius 0.1; a jet is reconstructed with the anti-$k_t$ algorithm with a radius of 0.4, after removing the neutrinos and dressed leptons, with $p_\text{T}>25\,\text{GeV}$ and $|\eta|<2.5$; a jet that contains a B-hadron. A W boson is reconstructed from a lepton and the sum of the neutrino energies, while another W boson is reconstructed from a light jet pair. The two top quarks are reconstructed by combining b jets to these W boson. A check based on the W boson and top quark masses is performed to choose the proper combinations.

Source code: CMS_2016_I1491950.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/LeptonFinder.hh"
  6#include "Rivet/Projections/PromptFinalState.hh"
  7#include "Rivet/Projections/IdentifiedFinalState.hh"
  8#include "Rivet/Projections/VetoedFinalState.hh"
  9
 10namespace Rivet {
 11
 12
 13  class CMS_2016_I1491950 : public Analysis {
 14  public:
 15
 16    /// Constructor
 17    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2016_I1491950);
 18
 19
 20    /// Book histograms and initialise projections before the run
 21    void init() {
 22
 23    FinalState fs(Cuts::pT > 0. && Cuts::abseta < 6.);
 24    PromptFinalState prompt_fs(fs);
 25    prompt_fs.acceptMuonDecays(true);
 26    prompt_fs.acceptTauDecays(true);
 27
 28    // Projection for dressed electrons and muons
 29    Cut leptonCuts = Cuts::abseta < 2.5 and Cuts::pt > 30.*GeV;
 30    SpecialLeptonFinder dressedleptons(prompt_fs, leptonCuts);
 31    declare(dressedleptons, "LeptonFinder");
 32
 33    // Neutrinos
 34    IdentifiedFinalState neutrinos(prompt_fs);
 35    neutrinos.acceptNeutrinos();
 36    declare(neutrinos, "Neutrinos");
 37
 38    // Projection for jets
 39    VetoedFinalState fsForJets(fs);
 40    fsForJets.addVetoOnThisFinalState(dressedleptons);
 41    fsForJets.addVetoOnThisFinalState(neutrinos);
 42    declare(FastJets(fsForJets, JetAlg::ANTIKT, 0.4, JetMuons::DECAY, JetInvisibles::DECAY), "Jets");
 43
 44    //book hists
 45    book(_hist_thadpt, "d01-x02-y01");
 46    book(_hist_thady, "d03-x02-y01");
 47    book(_hist_tleppt, "d05-x02-y01");
 48    book(_hist_tlepy, "d07-x02-y01");
 49    book(_hist_ttpt, "d09-x02-y01");
 50    book(_hist_tty, "d13-x02-y01");
 51    book(_hist_ttm, "d11-x02-y01");
 52    book(_hist_njet, "d15-x02-y01");
 53    book(_hist_njets_thadpt_1, "d17-x02-y01");
 54    book(_hist_njets_thadpt_2, "d18-x02-y01");
 55    book(_hist_njets_thadpt_3, "d19-x02-y01");
 56    book(_hist_njets_thadpt_4, "d20-x02-y01");
 57    book(_hist_njets_ttpt_1, "d22-x02-y01");
 58    book(_hist_njets_ttpt_2, "d23-x02-y01");
 59    book(_hist_njets_ttpt_3, "d24-x02-y01");
 60    book(_hist_njets_ttpt_4, "d25-x02-y01");
 61    book(_hist_thady_thadpt_1, "d27-x02-y01");
 62    book(_hist_thady_thadpt_2, "d28-x02-y01");
 63    book(_hist_thady_thadpt_3, "d29-x02-y01");
 64    book(_hist_thady_thadpt_4, "d30-x02-y01");
 65    book(_hist_ttm_tty_1, "d32-x02-y01");
 66    book(_hist_ttm_tty_2, "d33-x02-y01");
 67    book(_hist_ttm_tty_3, "d34-x02-y01");
 68    book(_hist_ttm_tty_4, "d35-x02-y01");
 69    book(_hist_ttpt_ttm_1, "d37-x02-y01");
 70    book(_hist_ttpt_ttm_2, "d38-x02-y01");
 71    book(_hist_ttpt_ttm_3, "d39-x02-y01");
 72    book(_hist_ttpt_ttm_4, "d40-x02-y01");
 73    book(_histnorm_thadpt, "d42-x02-y01");
 74    book(_histnorm_thady, "d44-x02-y01");
 75    book(_histnorm_tleppt, "d46-x02-y01");
 76    book(_histnorm_tlepy, "d48-x02-y01");
 77    book(_histnorm_ttpt, "d50-x02-y01");
 78    book(_histnorm_tty, "d54-x02-y01");
 79    book(_histnorm_ttm, "d52-x02-y01");
 80    book(_histnorm_njet, "d56-x02-y01");
 81    book(_histnorm_njets_thadpt_1, "d58-x02-y01");
 82    book(_histnorm_njets_thadpt_2, "d59-x02-y01");
 83    book(_histnorm_njets_thadpt_3, "d60-x02-y01");
 84    book(_histnorm_njets_thadpt_4, "d61-x02-y01");
 85    book(_histnorm_njets_ttpt_1, "d63-x02-y01");
 86    book(_histnorm_njets_ttpt_2, "d64-x02-y01");
 87    book(_histnorm_njets_ttpt_3, "d65-x02-y01");
 88    book(_histnorm_njets_ttpt_4, "d66-x02-y01");
 89    book(_histnorm_thady_thadpt_1, "d68-x02-y01");
 90    book(_histnorm_thady_thadpt_2, "d69-x02-y01");
 91    book(_histnorm_thady_thadpt_3, "d70-x02-y01");
 92    book(_histnorm_thady_thadpt_4, "d71-x02-y01");
 93    book(_histnorm_ttm_tty_1, "d73-x02-y01");
 94    book(_histnorm_ttm_tty_2, "d74-x02-y01");
 95    book(_histnorm_ttm_tty_3, "d75-x02-y01");
 96    book(_histnorm_ttm_tty_4, "d76-x02-y01");
 97    book(_histnorm_ttpt_ttm_1, "d78-x02-y01");
 98    book(_histnorm_ttpt_ttm_2, "d79-x02-y01");
 99    book(_histnorm_ttpt_ttm_3, "d80-x02-y01");
100    book(_histnorm_ttpt_ttm_4, "d81-x02-y01");
101
102   }
103
104
105    /// Perform the per-event analysis
106    void analyze(const Event& event) {
107
108      // leptons
109      const SpecialLeptonFinder& dressedleptons_proj = apply<SpecialLeptonFinder>(event, "LeptonFinder");
110      DressedLeptons dressedLeptons = dressedleptons_proj.dressedLeptons();
111      if(dressedLeptons.size() != 1) return;
112
113      // neutrinos
114      const Particles neutrinos = apply<FinalState>(event, "Neutrinos").particlesByPt();
115      _nusum = FourMomentum(0., 0., 0., 0.);
116      for(const Particle& neutrino : neutrinos)
117          _nusum += neutrino.momentum();
118      _wl = _nusum + dressedLeptons[0].momentum();
119
120      // jets
121      Cut jet_cut = (Cuts::abseta < 2.5) and (Cuts::pT > 25.*GeV);
122      const Jets jets = apply<FastJets>(event, "Jets").jetsByPt(jet_cut);
123      Jets allJets;
124      for (const Jet& jet : jets) {
125        allJets.push_back(jet);
126      }
127      Jets bJets;
128      for (const Jet& jet : allJets) {
129        if (jet.bTagged()) bJets.push_back(jet);
130      }
131
132      if(bJets.size() < 2 || allJets.size() < 4) return;
133
134      //construct top quark proxies
135      double Kmin = numeric_limits<double>::max();
136      for(const Jet& itaj : allJets) {
137          for(const Jet& itbj : allJets) {
138              if (itaj.momentum() == itbj.momentum()) continue;
139              FourMomentum wh(itaj.momentum() + itbj.momentum());
140              for(const Jet& ithbj : bJets) {
141                  if(itaj.momentum() == ithbj.momentum() || itbj.momentum() == ithbj.momentum()) continue;
142                  FourMomentum th(wh + ithbj.momentum());
143                  for(const Jet& itlbj : bJets) {
144                      if(itaj.momentum() == itlbj.momentum() || itbj.momentum() == itlbj.momentum() || ithbj.momentum() == itlbj.momentum()) continue;
145                      FourMomentum tl(_wl + itlbj.momentum());
146
147                      double K = pow(wh.mass() - 80.4, 2) + pow(th.mass() - 172.5, 2) + pow(tl.mass() - 172.5, 2);
148                      if(K < Kmin)
149                        {
150                          Kmin = K;
151                          _tl = tl;
152                          _th = th;
153                          _wh = wh;
154                        }
155                    }
156                }
157            }
158        }
159
160    _hist_thadpt->fill(_th.pt());
161    _hist_thady->fill(abs(_th.rapidity()) );
162    _hist_tleppt->fill(_tl.pt() );
163    _hist_tlepy->fill(abs(_tl.rapidity()) );
164    _histnorm_thadpt->fill(_th.pt());
165    _histnorm_thady->fill(abs(_th.rapidity()) );
166    _histnorm_tleppt->fill(_tl.pt() );
167    _histnorm_tlepy->fill(abs(_tl.rapidity()) );
168    FourMomentum tt(_tl+_th);
169    _hist_ttpt->fill(tt.pt() );
170    _hist_tty->fill(abs(tt.rapidity()) );
171    _hist_ttm->fill(tt.mass() );
172    _hist_njet->fill(min(allJets.size()-4., 4.));
173    _histnorm_ttpt->fill(tt.pt() );
174    _histnorm_tty->fill(abs(tt.rapidity()) );
175    _histnorm_ttm->fill(tt.mass() );
176    _histnorm_njet->fill(min(allJets.size()-4., 4.));
177    if(allJets.size() == 4)
178    {
179     _hist_njets_thadpt_1->fill(_th.pt());
180     _hist_njets_ttpt_1->fill(tt.pt());
181     _histnorm_njets_thadpt_1->fill(_th.pt());
182     _histnorm_njets_ttpt_1->fill(tt.pt());
183    }
184    else if(allJets.size() == 5)
185    {
186     _hist_njets_thadpt_2->fill(_th.pt());
187     _hist_njets_ttpt_2->fill(tt.pt());
188     _histnorm_njets_thadpt_2->fill(_th.pt());
189     _histnorm_njets_ttpt_2->fill(tt.pt());
190    }
191    else if(allJets.size() == 6)
192    {
193     _hist_njets_thadpt_3->fill(_th.pt());
194     _hist_njets_ttpt_3->fill(tt.pt());
195     _histnorm_njets_thadpt_3->fill(_th.pt());
196     _histnorm_njets_ttpt_3->fill(tt.pt());
197    }
198    else //>= 4 jets
199    {
200     _hist_njets_thadpt_4->fill(_th.pt());
201     _hist_njets_ttpt_4->fill(tt.pt());
202     _histnorm_njets_thadpt_4->fill(_th.pt());
203     _histnorm_njets_ttpt_4->fill(tt.pt());
204    }
205
206    if(abs(_th.rapidity()) < 0.5)
207    {
208     _hist_thady_thadpt_1->fill(_th.pt());
209     _histnorm_thady_thadpt_1->fill(_th.pt());
210    }
211    else if(abs(_th.rapidity()) < 1.0)
212    {
213     _hist_thady_thadpt_2->fill(_th.pt());
214     _histnorm_thady_thadpt_2->fill(_th.pt());
215    }
216    else if(abs(_th.rapidity()) < 1.5)
217    {
218     _hist_thady_thadpt_3->fill(_th.pt());
219     _histnorm_thady_thadpt_3->fill(_th.pt());
220    }
221    else if(abs(_th.rapidity()) < 2.5)
222    {
223     _hist_thady_thadpt_4->fill(_th.pt());
224     _histnorm_thady_thadpt_4->fill(_th.pt());
225    }
226
227      if(tt.mass() >= 300. && tt.mass() < 450.)
228        {
229          _hist_ttm_tty_1->fill(abs(tt.rapidity()));
230          _histnorm_ttm_tty_1->fill(abs(tt.rapidity()));
231        }
232      else if(tt.mass() >= 450. && tt.mass() < 625.)
233        {
234          _hist_ttm_tty_2->fill(abs(tt.rapidity()));
235          _histnorm_ttm_tty_2->fill(abs(tt.rapidity()));
236        }
237      else if(tt.mass() >= 625. && tt.mass() < 850.)
238        {
239          _hist_ttm_tty_3->fill(abs(tt.rapidity()));
240          _histnorm_ttm_tty_3->fill(abs(tt.rapidity()));
241        }
242      else if(tt.mass() >= 850. && tt.mass() < 2000.)
243        {
244          _hist_ttm_tty_4->fill(abs(tt.rapidity()));
245          _histnorm_ttm_tty_4->fill(abs(tt.rapidity()));
246        }
247
248      if(tt.pt() < 35.)
249        {
250          _hist_ttpt_ttm_1->fill(tt.mass());
251          _histnorm_ttpt_ttm_1->fill(tt.mass());
252        }
253      else if(tt.pt() < 80.)
254        {
255          _hist_ttpt_ttm_2->fill(tt.mass());
256          _histnorm_ttpt_ttm_2->fill(tt.mass());
257        }
258      else if(tt.pt() < 140.)
259        {
260          _hist_ttpt_ttm_3->fill(tt.mass());
261          _histnorm_ttpt_ttm_3->fill(tt.mass());
262        }
263      else if(tt.pt() < 500.)
264        {
265          _hist_ttpt_ttm_4->fill(tt.mass());
266          _histnorm_ttpt_ttm_4->fill(tt.mass());
267        }
268
269    }
270
271
272    /// Normalise histograms etc., after the run
273    void finalize()
274    {
275      scale(_hist_thadpt, crossSection()/picobarn/sumOfWeights());
276      scale(_hist_thady, crossSection()/picobarn/sumOfWeights());
277      scale(_hist_tleppt, crossSection()/picobarn/sumOfWeights());
278      scale(_hist_tlepy, crossSection()/picobarn/sumOfWeights());
279      scale(_hist_ttpt, crossSection()/picobarn/sumOfWeights());
280      scale(_hist_tty, crossSection()/picobarn/sumOfWeights());
281      scale(_hist_ttm, crossSection()/picobarn/sumOfWeights());
282      scale(_hist_njet, crossSection()/picobarn/sumOfWeights());
283      scale(_hist_njets_thadpt_1, crossSection()/picobarn/sumOfWeights());
284      scale(_hist_njets_thadpt_2, crossSection()/picobarn/sumOfWeights());
285      scale(_hist_njets_thadpt_3, crossSection()/picobarn/sumOfWeights());
286      scale(_hist_njets_thadpt_4, crossSection()/picobarn/sumOfWeights());
287      scale(_hist_njets_ttpt_1, crossSection()/picobarn/sumOfWeights());
288      scale(_hist_njets_ttpt_2, crossSection()/picobarn/sumOfWeights());
289      scale(_hist_njets_ttpt_3, crossSection()/picobarn/sumOfWeights());
290      scale(_hist_njets_ttpt_4, crossSection()/picobarn/sumOfWeights());
291      scale(_hist_thady_thadpt_1, crossSection()/picobarn/sumOfWeights()/0.5);
292      scale(_hist_thady_thadpt_2, crossSection()/picobarn/sumOfWeights()/0.5);
293      scale(_hist_thady_thadpt_3, crossSection()/picobarn/sumOfWeights()/0.5);
294      scale(_hist_thady_thadpt_4, crossSection()/picobarn/sumOfWeights()/1.0);
295      scale(_hist_ttm_tty_1, crossSection()/picobarn/sumOfWeights()/150.);
296      scale(_hist_ttm_tty_2, crossSection()/picobarn/sumOfWeights()/175.);
297      scale(_hist_ttm_tty_3, crossSection()/picobarn/sumOfWeights()/225.);
298      scale(_hist_ttm_tty_4, crossSection()/picobarn/sumOfWeights()/1150.);
299      scale(_hist_ttpt_ttm_1, crossSection()/picobarn/sumOfWeights()/35.);
300      scale(_hist_ttpt_ttm_2, crossSection()/picobarn/sumOfWeights()/45.);
301      scale(_hist_ttpt_ttm_3, crossSection()/picobarn/sumOfWeights()/60.);
302      scale(_hist_ttpt_ttm_4, crossSection()/picobarn/sumOfWeights()/360.);
303
304      scale(_histnorm_thadpt, 1./_histnorm_thadpt->sumW(false));
305      scale(_histnorm_thady, 1./_histnorm_thady->sumW(false));
306      scale(_histnorm_tleppt, 1./_histnorm_tleppt->sumW(false));
307      scale(_histnorm_tlepy, 1./_histnorm_tlepy->sumW(false));
308      scale(_histnorm_ttpt, 1./_histnorm_ttpt->sumW(false));
309      scale(_histnorm_tty, 1./_histnorm_tty->sumW(false));
310      scale(_histnorm_ttm, 1./_histnorm_ttm->sumW(false));
311      scale(_histnorm_njet, 1./_histnorm_njet->sumW(false));
312      double sum_njets_thadpt = _histnorm_njets_thadpt_1->sumW(false) + _histnorm_njets_thadpt_2->sumW(false) + _histnorm_njets_thadpt_3->sumW(false) + _histnorm_njets_thadpt_4->sumW(false);
313      scale(_histnorm_njets_thadpt_1, 1./sum_njets_thadpt);
314      scale(_histnorm_njets_thadpt_2, 1./sum_njets_thadpt);
315      scale(_histnorm_njets_thadpt_3, 1./sum_njets_thadpt);
316      scale(_histnorm_njets_thadpt_4, 1./sum_njets_thadpt);
317      double sum_njets_ttpt = _histnorm_njets_ttpt_1->sumW(false) + _histnorm_njets_ttpt_2->sumW(false) + _histnorm_njets_ttpt_3->sumW(false) + _histnorm_njets_ttpt_4->sumW(false);
318      scale(_histnorm_njets_ttpt_1, 1./sum_njets_ttpt);
319      scale(_histnorm_njets_ttpt_2, 1./sum_njets_ttpt);
320      scale(_histnorm_njets_ttpt_3, 1./sum_njets_ttpt);
321      scale(_histnorm_njets_ttpt_4, 1./sum_njets_ttpt);
322      double sum_thady_thadpt = _histnorm_thady_thadpt_1->sumW(false) + _histnorm_thady_thadpt_2->sumW(false) + _histnorm_thady_thadpt_3->sumW(false) + _histnorm_thady_thadpt_4->sumW(false);
323      scale(_histnorm_thady_thadpt_1, 1./sum_thady_thadpt/0.5);
324      scale(_histnorm_thady_thadpt_2, 1./sum_thady_thadpt/0.5);
325      scale(_histnorm_thady_thadpt_3, 1./sum_thady_thadpt/0.5);
326      scale(_histnorm_thady_thadpt_4, 1./sum_thady_thadpt/1.0);
327      double sum_ttm_tty = _histnorm_ttm_tty_1->sumW(false) + _histnorm_ttm_tty_2->sumW(false) + _histnorm_ttm_tty_3->sumW(false) + _histnorm_ttm_tty_4->sumW(false);
328      scale(_histnorm_ttm_tty_1, 1./sum_ttm_tty/150.);
329      scale(_histnorm_ttm_tty_2, 1./sum_ttm_tty/175.);
330      scale(_histnorm_ttm_tty_3, 1./sum_ttm_tty/225.);
331      scale(_histnorm_ttm_tty_4, 1./sum_ttm_tty/1150.);
332      double sum_ttpt_ttm = _histnorm_ttpt_ttm_1->sumW(false) + _histnorm_ttpt_ttm_2->sumW(false) + _histnorm_ttpt_ttm_3->sumW(false) + _histnorm_ttpt_ttm_4->sumW(false);
333      scale(_histnorm_ttpt_ttm_1, 1./sum_ttpt_ttm/35.);
334      scale(_histnorm_ttpt_ttm_2, 1./sum_ttpt_ttm/45.);
335      scale(_histnorm_ttpt_ttm_3, 1./sum_ttpt_ttm/60.);
336      scale(_histnorm_ttpt_ttm_4, 1./sum_ttpt_ttm/360.);
337
338    }
339
340
341    /// @brief Special dressed lepton finder
342    ///
343    /// Find dressed leptons by clustering all leptons and photons
344    class SpecialLeptonFinder : public FinalState {
345    public:
346
347      /// The default constructor. May specify cuts
348      SpecialLeptonFinder(const FinalState& fs, const Cut& cut)
349        : FinalState(cut) {
350        setName("CMS_2016_I1491950::SpecialLeptonFinder");
351        IdentifiedFinalState ifs(fs);
352        ifs.acceptIdPair(PID::PHOTON);
353        ifs.acceptIdPair(PID::ELECTRON);
354        ifs.acceptIdPair(PID::MUON);
355        declare(FastJets(ifs, JetAlg::ANTIKT, 0.1), "LeptonJets");
356      }
357
358      /// Clone on the heap
359      RIVET_DEFAULT_PROJ_CLONE(SpecialLeptonFinder);
360
361      /// Import to avoid warnings about overload-hiding
362      using Projection::operator =;
363
364      /// Retrieve the dressed leptons
365      const DressedLeptons& dressedLeptons() const { return _clusteredLeptons; }
366
367      /// Compare projections
368      CmpState compare(const Projection& p) const {
369        const PCmp fscmp = mkNamedPCmp(p, "LeptonJets");
370        if (fscmp != CmpState::EQ) return fscmp;
371        const SpecialLeptonFinder& other = dynamic_cast<const SpecialLeptonFinder&>(p);
372        const bool cutcmp = _cuts == other._cuts;
373        if (!cutcmp) return CmpState::NEQ;
374        return CmpState::EQ;
375      }
376
377      /// Perform the calculation
378      void project(const Event& e) {
379
380        _theParticles.clear();
381        _clusteredLeptons.clear();
382
383        DressedLeptons allClusteredLeptons;
384
385        const Jets jets = apply<FastJets>(e, "LeptonJets").jetsByPt(Cuts::pT > 5.*GeV);
386        for (const Jet& jet : jets) {
387          Particle lepCand;
388          for (const Particle& cand : jet.particles()) {
389            const int absPdgId = cand.abspid();
390            if (absPdgId == PID::ELECTRON || absPdgId == PID::MUON) {
391              if (cand.pt() > lepCand.pt()) lepCand = cand;
392            }
393          }
394
395          //Central lepton must be the major component
396          if ((lepCand.pt() < jet.pt()/2.) || (lepCand.pid() == 0)) continue;
397
398          DressedLepton lepton(lepCand);
399          for (const Particle& cand : jet.particles()) {
400            if (isSame(cand, lepCand)) continue;
401            if (cand.pid() != PID::PHOTON) continue;
402            lepton.addConstituent(cand, true);
403          }
404          allClusteredLeptons.push_back(lepton);
405        }
406
407        for (const DressedLepton& lepton : allClusteredLeptons) {
408          if (_cuts->accept(static_cast<const Particle&>(lepton))) {
409            _clusteredLeptons.push_back(lepton);
410            _theParticles.push_back(lepton.bareLepton());
411            _theParticles += lepton.photons();
412          }
413        }
414      }
415
416    protected:
417      /// Container which stores the clustered lepton objects
418      DressedLeptons _clusteredLeptons;
419
420    };
421
422
423  private:
424
425   FourMomentum _tl;
426   FourMomentum _th;
427   FourMomentum _wl;
428   FourMomentum _wh;
429   FourMomentum _nusum;
430
431   Histo1DPtr _hist_thadpt;
432   Histo1DPtr _hist_thady;
433   Histo1DPtr _hist_tleppt;
434   Histo1DPtr _hist_tlepy;
435   Histo1DPtr _hist_ttpt;
436   Histo1DPtr _hist_tty;
437   Histo1DPtr _hist_ttm;
438   Histo1DPtr _hist_njet;
439   Histo1DPtr _hist_njets_thadpt_1;
440   Histo1DPtr _hist_njets_thadpt_2;
441   Histo1DPtr _hist_njets_thadpt_3;
442   Histo1DPtr _hist_njets_thadpt_4;
443   Histo1DPtr _hist_njets_ttpt_1;
444   Histo1DPtr _hist_njets_ttpt_2;
445   Histo1DPtr _hist_njets_ttpt_3;
446   Histo1DPtr _hist_njets_ttpt_4;
447   Histo1DPtr _hist_thady_thadpt_1;
448   Histo1DPtr _hist_thady_thadpt_2;
449   Histo1DPtr _hist_thady_thadpt_3;
450   Histo1DPtr _hist_thady_thadpt_4;
451   Histo1DPtr _hist_ttm_tty_1;
452   Histo1DPtr _hist_ttm_tty_2;
453   Histo1DPtr _hist_ttm_tty_3;
454   Histo1DPtr _hist_ttm_tty_4;
455   Histo1DPtr _hist_ttpt_ttm_1;
456   Histo1DPtr _hist_ttpt_ttm_2;
457   Histo1DPtr _hist_ttpt_ttm_3;
458   Histo1DPtr _hist_ttpt_ttm_4;
459
460   Histo1DPtr _histnorm_thadpt;
461   Histo1DPtr _histnorm_thady;
462   Histo1DPtr _histnorm_tleppt;
463   Histo1DPtr _histnorm_tlepy;
464   Histo1DPtr _histnorm_ttpt;
465   Histo1DPtr _histnorm_tty;
466   Histo1DPtr _histnorm_ttm;
467   Histo1DPtr _histnorm_njet;
468   Histo1DPtr _histnorm_njets_thadpt_1;
469   Histo1DPtr _histnorm_njets_thadpt_2;
470   Histo1DPtr _histnorm_njets_thadpt_3;
471   Histo1DPtr _histnorm_njets_thadpt_4;
472   Histo1DPtr _histnorm_njets_ttpt_1;
473   Histo1DPtr _histnorm_njets_ttpt_2;
474   Histo1DPtr _histnorm_njets_ttpt_3;
475   Histo1DPtr _histnorm_njets_ttpt_4;
476   Histo1DPtr _histnorm_thady_thadpt_1;
477   Histo1DPtr _histnorm_thady_thadpt_2;
478   Histo1DPtr _histnorm_thady_thadpt_3;
479   Histo1DPtr _histnorm_thady_thadpt_4;
480   Histo1DPtr _histnorm_ttm_tty_1;
481   Histo1DPtr _histnorm_ttm_tty_2;
482   Histo1DPtr _histnorm_ttm_tty_3;
483   Histo1DPtr _histnorm_ttm_tty_4;
484   Histo1DPtr _histnorm_ttpt_ttm_1;
485   Histo1DPtr _histnorm_ttpt_ttm_2;
486   Histo1DPtr _histnorm_ttpt_ttm_3;
487   Histo1DPtr _histnorm_ttpt_ttm_4;
488
489 };
490
491
492
493 RIVET_DECLARE_PLUGIN(CMS_2016_I1491950);
494
495}