rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2015_I1397174

Measurement of ttbar production with additional jet activity, including b quark jets, in the dilepton decay channel using pp collisions at sqrt(s)=8 TeV
Experiment: CMS (LHC)
Inspire ID: 1397174
Status: VALIDATED
Authors:
  • Javier Fernandez
  • Jungwan John Goh
  • Efe Yazgan
  • Markus Seidel
  • James Keaveney
  • Elvire Bouvier
  • Benedikt Maier
  • Andy Buckley
References: Beams: p+ p+
Beam energies: (4000.0, 4000.0) GeV
Run details:
  • ttbar events at $\sqrt{s}=8 \text{TeV}. Top quarks are expected in the event record to identify additional jets. Gap fractions require high statistics in a single run or custom merging of the YODA files.

Jet multiplicity distributions in top quark pair ($t\bar{t}$) events are measured in $pp$ collisions at a centre-of-mass energy of 8 \text{TeV} with the CMS detector at the LHC, using a data set corresponding to an integrated luminosity of 19.7/fb. The measurement is performed in the dilepton decay channels $e^+e^-$, $\mu^+\mu^-$, and $e^\pm\mu^\mp$). The absolute and normalized differential cross-sections for $t\bar{t}$ production are measured as a function of jet multiplicity for different jet transverse momentum thresholds and the kinematic properties of the leading additional jets. The differential $t\bar{t}b$ and $t\bar{t}b\bar{b}$ cross-sections are presented for the first time as a function of the kinematic properties of the leading additional $b$-jets. Furthermore, the fraction of events without additional jets above a threshold is measured as a function of the transverse momenta of the leading additional jets and the scalar sum of the transverse momenta of all additional jets.

Source code: CMS_2015_I1397174.cc
  1#include "Rivet/Analysis.hh"
  2#include "Rivet/Projections/PartonicTops.hh"
  3#include "Rivet/Projections/VetoedFinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5
  6namespace Rivet {
  7
  8
  9  /// Fully leptonic partonic ttbar analysis
 10  class CMS_2015_I1397174 : public Analysis {
 11  public:
 12
 13    /// Minimal constructor
 14    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2015_I1397174);
 15
 16
 17    /// @name Analysis methods
 18    /// @{
 19
 20    /// Set up projections and book histograms
 21    void init() {
 22
 23      // Parton level top quarks
 24      declare(PartonicTops(TopDecay::E_MU, PromptEMuFromTau::NO), "PartonTops");
 25
 26      // Find jets not related to the top/W decays
 27      VetoedFinalState vfs;
 28      vfs.addDecayProductsVeto(PID::WPLUSBOSON);
 29      vfs.addDecayProductsVeto(PID::WMINUSBOSON);
 30      FastJets fj(vfs, JetAlg::ANTIKT, 0.5, JetMuons::ALL, JetInvisibles::ALL);
 31      declare(fj, "Jets");
 32
 33      // Book histograms
 34      book(_hVis_nJet30_abs       , 1, 1, 1);
 35      book(_hVis_nJet30           , 2, 1, 1);
 36      book(_hVis_nJet60_abs       , 3, 1, 1);
 37      book(_hVis_nJet60           , 4, 1, 1);
 38      book(_hVis_nJet100_abs      , 5, 1, 1);
 39      book(_hVis_nJet100          , 6, 1, 1);
 40
 41      book(_hVis_addJet1Pt_abs    , 7, 1, 1);
 42      book(_hVis_addJet1Pt        , 8, 1, 1);
 43      book(_hVis_addJet1Eta_abs   , 9, 1, 1);
 44      book(_hVis_addJet1Eta       ,10, 1, 1);
 45      book(_hVis_addJet2Pt_abs    ,11, 1, 1);
 46      book(_hVis_addJet2Pt        ,12, 1, 1);
 47      book(_hVis_addJet2Eta_abs   ,13, 1, 1);
 48      book(_hVis_addJet2Eta       ,14, 1, 1);
 49      book(_hVis_addJJMass_abs    ,15, 1, 1);
 50      book(_hVis_addJJMass        ,16, 1, 1);
 51      book(_hVis_addJJDR_abs      ,17, 1, 1);
 52      book(_hVis_addJJDR          ,18, 1, 1);
 53      book(_hVis_addJJHT_abs      ,19, 1, 1);
 54      book(_hVis_addJJHT          ,20, 1, 1);
 55
 56      book(_hFull_addJet1Pt_abs   ,21, 1, 1);
 57      book(_hFull_addJet1Pt       ,22, 1, 1);
 58      book(_hFull_addJet1Eta_abs  ,23, 1, 1);
 59      book(_hFull_addJet1Eta      ,24, 1, 1);
 60      book(_hFull_addJet2Pt_abs   ,25, 1, 1);
 61      book(_hFull_addJet2Pt       ,26, 1, 1);
 62      book(_hFull_addJet2Eta_abs  ,27, 1, 1);
 63      book(_hFull_addJet2Eta      ,28, 1, 1);
 64      book(_hFull_addJJMass_abs   ,29, 1, 1);
 65      book(_hFull_addJJMass       ,30, 1, 1);
 66      book(_hFull_addJJDR_abs     ,31, 1, 1);
 67      book(_hFull_addJJDR         ,32, 1, 1);
 68      book(_hFull_addJJHT_abs     ,33, 1, 1);
 69      book(_hFull_addJJHT         ,34, 1, 1);
 70
 71      book(_hVis_addBJet1Pt_abs   ,35, 1, 1);
 72      book(_hVis_addBJet1Pt       ,36, 1, 1);
 73      book(_hVis_addBJet1Eta_abs  ,37, 1, 1);
 74      book(_hVis_addBJet1Eta      ,38, 1, 1);
 75      book(_hVis_addBJet2Pt_abs   ,39, 1, 1);
 76      book(_hVis_addBJet2Pt       ,40, 1, 1);
 77      book(_hVis_addBJet2Eta_abs  ,41, 1, 1);
 78      book(_hVis_addBJet2Eta      ,42, 1, 1);
 79      book(_hVis_addBBMass_abs    ,43, 1, 1);
 80      book(_hVis_addBBMass        ,44, 1, 1);
 81      book(_hVis_addBBDR_abs      ,45, 1, 1);
 82      book(_hVis_addBBDR          ,46, 1, 1);
 83
 84      book(_hFull_addBJet1Pt_abs  ,47, 1, 1);
 85      book(_hFull_addBJet1Pt      ,48, 1, 1);
 86      book(_hFull_addBJet1Eta_abs ,49, 1, 1);
 87      book(_hFull_addBJet1Eta     ,50, 1, 1);
 88      book(_hFull_addBJet2Pt_abs  ,51, 1, 1);
 89      book(_hFull_addBJet2Pt      ,52, 1, 1);
 90      book(_hFull_addBJet2Eta_abs ,53, 1, 1);
 91      book(_hFull_addBJet2Eta     ,54, 1, 1);
 92      book(_hFull_addBBMass_abs   ,55, 1, 1);
 93      book(_hFull_addBBMass       ,56, 1, 1);
 94      book(_hFull_addBBDR_abs     ,57, 1, 1);
 95      book(_hFull_addBBDR         ,58, 1, 1);
 96
 97      book(_h_gap_addJet1Pt       ,59, 1, 1);
 98      book(_h_gap_addJet1Pt_eta0  ,60, 1, 1);
 99      book(_h_gap_addJet1Pt_eta1  ,61, 1, 1);
100      book(_h_gap_addJet1Pt_eta2  ,62, 1, 1);
101      book(_h_gap_addJet2Pt       ,63, 1, 1);
102      book(_h_gap_addJet2Pt_eta0  ,64, 1, 1);
103      book(_h_gap_addJet2Pt_eta1  ,65, 1, 1);
104      book(_h_gap_addJet2Pt_eta2  ,66, 1, 1);
105      book(_h_gap_addJetHT        ,67, 1, 1);
106      book(_h_gap_addJetHT_eta0   ,68, 1, 1);
107      book(_h_gap_addJetHT_eta1   ,69, 1, 1);
108      book(_h_gap_addJetHT_eta2   ,70, 1, 1);
109    }
110
111
112    void analyze(const Event& event) {
113
114      // The objects used in the PAPER 12-041 are defined as follows (see p.16 for details):
115      //
116      //   * Leptons    : from the W boson decays after FSR
117      //   * Jets       : anti-kT R=0.5 to all stable particles
118      //                               exclude W->enu, munu, taunu
119      //   * B jet      : B-Ghost matched
120      //   * B from top : B hadron from top->b decay
121      //
122      // Visible phase space definition:
123      //
124      //   * Leptons         : pT > 20, |eta| < 2.4
125      //   * B jets from top : pT > 30, |eta| < 2.4
126      //     Additional jets : pT > 20, |eta| < 2.4
127      //   *
128      // Full phase space definition:
129      //
130      //   * Correction to dilepton BR from W boson BR
131      //   * No cut on top decay products
132      //   * Additional jets : pT > 20, |eta| < 2.4
133
134      // Do the analysis only for the ttbar full leptonic channel, removing tau decays
135      const Particles partontops = apply<ParticleFinder>(event, "PartonTops").particlesByPt();
136      if (partontops.size() != 2) vetoEvent;
137      const Particle& t1 = partontops[0];
138      const Particle& t2 = partontops[1];
139
140      // Apply acceptance cuts on top-decay leptons (existence should be guaranteed)
141      const auto isPromptChLepton = [](const Particle& p){return p.isPrompt() && isChargedLepton(p);};
142      const Particle lep1 = t1.allDescendants(lastParticleWith(isPromptChLepton)).front();
143      const Particle lep2 = t2.allDescendants(lastParticleWith(isPromptChLepton)).front();
144      if (lep1.pT() < 1e-9*GeV || lep2.pT() < 1e-9*GeV) vetoEvent; // sanity check?
145
146      const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt(Cuts::pT > 20*GeV && Cuts::abseta < 2.4);
147      int nJet30 = 0, nJet60 = 0, nJet100 = 0;
148      Jets topBJets, addJets, addBJets, addJets_eta0, addJets_eta1, addJets_eta2;
149      for (const Jet& jet : jets) {
150        if (jet.pT() >  30*GeV) nJet30 += 1;
151        if (jet.pT() >  60*GeV) nJet60 += 1;
152        if (jet.pT() > 100*GeV) nJet100 += 1;
153
154        const bool isBtagged = jet.bTagged();
155        const bool isBFromTop = any(jet.bTags(), hasParticleAncestorWith(Cuts::abspid == PID::TQUARK, false));
156
157        if (isBFromTop) {
158          if (jet.pT() > 30*GeV) topBJets.push_back(jet);
159        } else {
160          addJets.push_back(jet);
161          if (isBtagged) addBJets.push_back(jet);
162          if      (jet.abseta() < 0.8 ) addJets_eta0.push_back(jet);
163          else if (jet.abseta() < 1.5 ) addJets_eta1.push_back(jet);
164          else if (jet.abseta() < 2.4 ) addJets_eta2.push_back(jet);
165        }
166      }
167
168
169      const bool isVisiblePS = topBJets.size() >= 2
170        && lep1.pT() > 20*GeV && lep1.abseta() < 2.4 && lep2.pT() > 20*GeV && lep2.abseta() < 2.4;
171      MSG_DEBUG(isVisiblePS << ": #b(top) = " << topBJets.size()
172                << "; l1 = " << lep1.pT() << ", " << lep1.abseta()
173                << "; l2 = " << lep2.pT() << ", " << lep2.abseta());
174
175
176
177      if (isVisiblePS) {
178        fillWithOF(_hVis_nJet30_abs,  nJet30);
179        fillWithOF(_hVis_nJet30,      nJet30);
180        fillWithOF(_hVis_nJet60_abs,  nJet60);
181        fillWithOF(_hVis_nJet60,      nJet60);
182        fillWithOF(_hVis_nJet100_abs, nJet100);
183        fillWithOF(_hVis_nJet100,     nJet100);
184
185        fillGapFractions(addJets, _h_gap_addJet1Pt, _h_gap_addJet2Pt, _h_gap_addJetHT);
186        fillGapFractions(addJets_eta0, _h_gap_addJet1Pt_eta0, _h_gap_addJet2Pt_eta0, _h_gap_addJetHT_eta0);
187        fillGapFractions(addJets_eta1, _h_gap_addJet1Pt_eta1, _h_gap_addJet2Pt_eta1, _h_gap_addJetHT_eta1);
188        fillGapFractions(addJets_eta2, _h_gap_addJet1Pt_eta2, _h_gap_addJet2Pt_eta2, _h_gap_addJetHT_eta2);
189      }
190
191      // Plots with two additional jets
192      if (addJets.size() >= 1) {
193        const double ht = sum(addJets, Kin::pT, 0.0);
194        _hFull_addJJHT_abs->fill(ht/GeV);
195        _hFull_addJJHT    ->fill(ht/GeV);
196        if (isVisiblePS) {
197          _hVis_addJJHT_abs->fill(ht/GeV);
198          _hVis_addJJHT    ->fill(ht/GeV);
199        }
200
201        const Jet& j1 = addJets[0];
202        _hFull_addJet1Pt_abs ->fill(j1.pT()/GeV);
203        _hFull_addJet1Pt     ->fill(j1.pT()/GeV);
204        _hFull_addJet1Eta_abs->fill(j1.abseta());
205        _hFull_addJet1Eta    ->fill(j1.abseta());
206        if (isVisiblePS) {
207          _hVis_addJet1Pt_abs ->fill(j1.pT()/GeV);
208          _hVis_addJet1Pt     ->fill(j1.pT()/GeV);
209          _hVis_addJet1Eta_abs->fill(j1.abseta());
210          _hVis_addJet1Eta    ->fill(j1.abseta());
211        }
212
213        if (addJets.size() >= 2) {
214          const Jet& j2 = addJets[1];
215
216          _hFull_addJet2Pt_abs ->fill(j2.pT()/GeV);
217          _hFull_addJet2Pt     ->fill(j2.pT()/GeV);
218          _hFull_addJet2Eta_abs->fill(j2.abseta());
219          _hFull_addJet2Eta    ->fill(j2.abseta());
220          if (isVisiblePS) {
221            _hVis_addJet2Pt_abs ->fill(j2.pT()/GeV);
222            _hVis_addJet2Pt     ->fill(j2.pT()/GeV);
223            _hVis_addJet2Eta_abs->fill(j2.abseta());
224            _hVis_addJet2Eta    ->fill(j2.abseta());
225          }
226
227          const double jjmass = (j1.mom() + j2.mom()).mass();
228          const double jjdR = deltaR(j1, j2);
229          _hFull_addJJMass_abs->fill(jjmass/GeV);
230          _hFull_addJJMass    ->fill(jjmass/GeV);
231          _hFull_addJJDR_abs  ->fill(jjdR);
232          _hFull_addJJDR      ->fill(jjdR);
233          if (isVisiblePS) {
234            _hVis_addJJMass_abs->fill(jjmass/GeV);
235            _hVis_addJJMass    ->fill(jjmass/GeV);
236            _hVis_addJJDR_abs  ->fill(jjdR);
237            _hVis_addJJDR      ->fill(jjdR);
238          }
239        }
240      }
241
242
243      // Same set of plots if there are additional b-jets
244      if (addBJets.size() >= 1) {
245        const Jet& b1 = addBJets[0];
246        _hFull_addBJet1Pt_abs ->fill(b1.pT()/GeV);
247        _hFull_addBJet1Pt     ->fill(b1.pT()/GeV);
248        _hFull_addBJet1Eta_abs->fill(b1.abseta());
249        _hFull_addBJet1Eta    ->fill(b1.abseta());
250        if (isVisiblePS) {
251          _hVis_addBJet1Pt_abs ->fill(b1.pT()/GeV);
252          _hVis_addBJet1Pt     ->fill(b1.pT()/GeV);
253          _hVis_addBJet1Eta_abs->fill(b1.abseta());
254          _hVis_addBJet1Eta    ->fill(b1.abseta());
255        }
256
257        if (addBJets.size() >= 2) {
258          const Jet& b2 = addBJets[1];
259
260          _hFull_addBJet2Pt_abs ->fill(b2.pT()/GeV);
261          _hFull_addBJet2Pt     ->fill(b2.pT()/GeV);
262          _hFull_addBJet2Eta_abs->fill(b2.abseta());
263          _hFull_addBJet2Eta    ->fill(b2.abseta());
264          if (isVisiblePS) {
265            _hVis_addBJet2Pt_abs ->fill(b2.pT()/GeV);
266            _hVis_addBJet2Pt     ->fill(b2.pT()/GeV);
267            _hVis_addBJet2Eta_abs->fill(b2.abseta());
268            _hVis_addBJet2Eta    ->fill(b2.abseta());
269          }
270
271          const double bbmass = (b1.mom() + b2.mom()).mass();
272          const double bbdR = deltaR(b1, b2);
273          _hFull_addBBMass_abs->fill(bbmass/GeV);
274          _hFull_addBBMass    ->fill(bbmass/GeV);
275          _hFull_addBBDR_abs  ->fill(bbdR);
276          _hFull_addBBDR      ->fill(bbdR);
277          if (isVisiblePS) {
278            _hVis_addBBMass_abs->fill(bbmass/GeV);
279            _hVis_addBBMass    ->fill(bbmass/GeV);
280            _hVis_addBBDR_abs  ->fill(bbdR);
281            _hVis_addBBDR      ->fill(bbdR);
282          }
283        }
284      }
285
286    }
287
288
289    void finalize() {
290      const double ttbarXS = !std::isnan(crossSectionPerEvent()) ? crossSection() : 252.89*picobarn;
291      if (std::isnan(crossSectionPerEvent()))
292        MSG_INFO("No valid cross-section given, using NNLO (arXiv:1303.6254; sqrt(s)=8 TeV, m_t=172.5 GeV): " << ttbarXS/picobarn << " pb");
293
294        normalize(_hVis_nJet30); normalize(_hVis_nJet60); normalize(_hVis_nJet100);
295        normalize(_hVis_addJet1Pt); normalize(_hVis_addJet1Eta); normalize(_hVis_addJet2Pt);
296        normalize(_hVis_addJet2Eta); normalize(_hVis_addJJMass); normalize(_hVis_addJJDR);
297        normalize(_hVis_addJJHT); normalize(_hFull_addJet1Pt); normalize(_hFull_addJet1Eta);
298        normalize(_hFull_addJet2Pt); normalize(_hFull_addJet2Eta); normalize(_hFull_addJJMass);
299        normalize(_hFull_addJJDR); normalize(_hFull_addJJHT); normalize(_hVis_addBJet1Pt);
300        normalize(_hVis_addBJet1Eta); normalize(_hVis_addBJet2Pt); normalize(_hVis_addBJet2Eta);
301        normalize(_hVis_addBBMass); normalize(_hVis_addBBDR); normalize(_hFull_addBJet1Pt);
302        normalize(_hFull_addBJet1Eta); normalize(_hFull_addBJet2Pt); normalize(_hFull_addBJet2Eta);
303        normalize(_hFull_addBBMass); normalize(_hFull_addBBDR);
304
305        const double xsPerWeight = ttbarXS/picobarn / sumOfWeights();
306        scale(_hVis_nJet30_abs,     xsPerWeight); scale(_hVis_nJet60_abs,      xsPerWeight);
307        scale(_hVis_nJet100_abs,    xsPerWeight); scale(_hVis_addJet1Pt_abs,   xsPerWeight);
308        scale(_hVis_addJet1Eta_abs, xsPerWeight); scale(_hVis_addJet2Pt_abs,   xsPerWeight);
309        scale(_hVis_addJet2Eta_abs, xsPerWeight); scale(_hVis_addJJMass_abs,   xsPerWeight);
310        scale(_hVis_addJJDR_abs,    xsPerWeight); scale(_hVis_addJJHT_abs,     xsPerWeight);
311        scale(_hVis_addBJet1Pt_abs, xsPerWeight); scale(_hVis_addBJet1Eta_abs, xsPerWeight);
312        scale(_hVis_addBJet2Pt_abs, xsPerWeight); scale(_hVis_addBJet2Eta_abs, xsPerWeight);
313        scale(_hVis_addBBMass_abs,  xsPerWeight); scale(_hVis_addBBDR_abs,     xsPerWeight);
314
315        const double sfull = xsPerWeight / 0.0454; //< correct for dilepton branching fraction
316        scale(_hFull_addJet1Pt_abs, sfull); scale(_hFull_addJet1Eta_abs, sfull);
317        scale(_hFull_addJet2Pt_abs, sfull); scale(_hFull_addJet2Eta_abs, sfull);
318        scale(_hFull_addJJMass_abs, sfull); scale(_hFull_addJJDR_abs, sfull);
319        scale(_hFull_addJJHT_abs, sfull); scale(_hFull_addBJet1Pt_abs, sfull);
320        scale(_hFull_addBJet1Eta_abs, sfull); scale(_hFull_addBJet2Pt_abs, sfull);
321        scale(_hFull_addBJet2Eta_abs, sfull); scale(_hFull_addBBMass_abs, sfull);
322        scale(_hFull_addBBDR_abs, sfull);
323    }
324
325    /// @}
326
327
328    void fillWithOF(Histo1DPtr h, double x) {
329      h->fill(std::min(x, h->xMax()-1e-9));
330    }
331
332
333    void fillGapFractions(const Jets& addJets, Profile1DPtr h_gap_addJet1Pt, Profile1DPtr h_gap_addJet2Pt, Profile1DPtr h_gap_addJetHT) {
334      const double j1pt = (addJets.size() > 0) ? addJets[0].pT() : 0;
335      for (size_t i = 1; i <= h_gap_addJet1Pt->numBins(); ++i) {
336        const double binCenter = h_gap_addJet1Pt->bin(i).xMid();
337        h_gap_addJet1Pt->fill(binCenter, int(j1pt/GeV < binCenter));
338      }
339
340      const double j2pt = (addJets.size() > 1) ? addJets[1].pT() : 0;
341      for (size_t i = 1; i <= h_gap_addJet2Pt->numBins(); ++i) {
342        const double binCenter = h_gap_addJet2Pt->bin(i).xMid();
343        h_gap_addJet2Pt->fill(binCenter, int(j2pt/GeV < binCenter));
344      }
345
346      const double ht = sum(addJets, Kin::pT, 0.);
347      for (size_t i = 1; i <= h_gap_addJetHT->numBins(); ++i) {
348        const double binCenter = h_gap_addJetHT->bin(i).xMid();
349        h_gap_addJetHT->fill(binCenter, int(ht/GeV < binCenter) );
350      }
351    }
352
353
354    // @name Histogram data members
355    /// @{
356
357    Histo1DPtr _hVis_nJet30_abs, _hVis_nJet60_abs, _hVis_nJet100_abs;
358    Histo1DPtr _hVis_addJet1Pt_abs, _hVis_addJet1Eta_abs, _hVis_addJet2Pt_abs, _hVis_addJet2Eta_abs;
359    Histo1DPtr _hVis_addJJMass_abs, _hVis_addJJDR_abs, _hVis_addJJHT_abs;
360    Histo1DPtr _hFull_addJet1Pt_abs, _hFull_addJet1Eta_abs, _hFull_addJet2Pt_abs, _hFull_addJet2Eta_abs;
361    Histo1DPtr _hFull_addJJMass_abs, _hFull_addJJDR_abs, _hFull_addJJHT_abs;
362    Histo1DPtr _hVis_addBJet1Pt_abs, _hVis_addBJet1Eta_abs, _hVis_addBJet2Pt_abs, _hVis_addBJet2Eta_abs;
363    Histo1DPtr _hVis_addBBMass_abs, _hVis_addBBDR_abs;
364    Histo1DPtr _hFull_addBJet1Pt_abs, _hFull_addBJet1Eta_abs, _hFull_addBJet2Pt_abs, _hFull_addBJet2Eta_abs;
365    Histo1DPtr _hFull_addBBMass_abs, _hFull_addBBDR_abs;
366
367    Histo1DPtr _hVis_nJet30, _hVis_nJet60, _hVis_nJet100;
368    Histo1DPtr _hVis_addJet1Pt, _hVis_addJet1Eta, _hVis_addJet2Pt, _hVis_addJet2Eta;
369    Histo1DPtr _hVis_addJJMass, _hVis_addJJDR, _hVis_addJJHT;
370    Histo1DPtr _hFull_addJet1Pt, _hFull_addJet1Eta, _hFull_addJet2Pt, _hFull_addJet2Eta;
371    Histo1DPtr _hFull_addJJMass, _hFull_addJJDR, _hFull_addJJHT;
372    Histo1DPtr _hVis_addBJet1Pt, _hVis_addBJet1Eta, _hVis_addBJet2Pt, _hVis_addBJet2Eta;
373    Histo1DPtr _hVis_addBBMass, _hVis_addBBDR;
374    Histo1DPtr _hFull_addBJet1Pt, _hFull_addBJet1Eta, _hFull_addBJet2Pt, _hFull_addBJet2Eta;
375    Histo1DPtr _hFull_addBBMass, _hFull_addBBDR;
376
377    Profile1DPtr _h_gap_addJet1Pt, _h_gap_addJet1Pt_eta0, _h_gap_addJet1Pt_eta1, _h_gap_addJet1Pt_eta2;
378    Profile1DPtr _h_gap_addJet2Pt, _h_gap_addJet2Pt_eta0, _h_gap_addJet2Pt_eta1, _h_gap_addJet2Pt_eta2;
379    Profile1DPtr _h_gap_addJetHT, _h_gap_addJetHT_eta0, _h_gap_addJetHT_eta1, _h_gap_addJetHT_eta2;
380
381    /// @}
382
383  };
384
385
386
387  RIVET_DECLARE_PLUGIN(CMS_2015_I1397174);
388
389
390}