rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

CMS_2021_I1920187

Study of quark and gluon jet substructure in Z+jet and dijet events from pp collisions at 13 TeV
Experiment: CMS (LHC)
Inspire ID: 1920187
Status: VALIDATED
Authors:
  • cms-pag-conveners-smp@cern.ch
  • Andreas Hinzmann
References: Beams: p+ p+
Beam energies: (6500.0, 6500.0) GeV
Run details:
  • QCD with pt>15 or Z -> mu mu

Measurements of jet substructure describing the composition of quark- and gluon-initiated jets are presented. Proton-proton (pp) collision data at sqrt(s)=13 TeV collected with the CMS detector are used, corresponding to an integrated luminosity of 35.9/fb. Generalized angularities are measured that characterize the jet substructure and distinguish quark- and gluon-initiated jets. These observables are sensitive to the distributions of transverse momenta and angular distances within a jet. The analysis is performed using a data sample of dijet events enriched in gluon-initiated jets, and, for the first time, a Z+jet event sample enriched in quark-initiated jets. The observables are measured in bins of jet transverse momentum, and as a function of the jet radius parameter. Each measurement is repeated applying a "soft drop" grooming procedure that removes soft and large angle radiation from the jet.

Source code: CMS_2021_I1920187.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/FinalState.hh"
  4#include "Rivet/Projections/FastJets.hh"
  5#include "Rivet/Projections/IdentifiedFinalState.hh"
  6#include "Rivet/Projections/VetoedFinalState.hh"
  7#include "Rivet/Projections/DileptonFinder.hh"
  8#include "fastjet/JetDefinition.hh"
  9#include "fastjet/ClusterSequence.hh"
 10#include "fastjet/tools/Recluster.hh"
 11#include "fastjet/contrib/SoftDrop.hh"
 12#include <algorithm>
 13
 14namespace Rivet {
 15
 16  // This analysis uses all the FJ stuff...
 17  using namespace fastjet;
 18
 19
 20  /// Routine for QG substructure analysis
 21  class CMS_2021_I1920187 : public Analysis {
 22  public:
 23
 24
 25    /// Constructor
 26    RIVET_DEFAULT_ANALYSIS_CTOR(CMS_2021_I1920187);
 27
 28
 29    /// Book histograms and initialise projections before the run
 30    void init() {
 31
 32      _mode = 0;
 33      if ( getOption("MODE") == "DIJET" ) _mode = 1;
 34      else if ( getOption("MODE") == "ZJET" ) _mode = 2;
 35      else {
 36        MSG_WARNING("Mode not specified in CMS_2021_I1920187, using DIJET");
 37        _mode = 1;
 38      }
 39
 40      // Initialise and register projections
 41      FinalState fs(Cuts::abseta < 5);
 42      // Z-jet
 43      if (_mode == 2) {
 44        // for the muons
 45        double mu_pt = 26.;
 46        double mz_min = (90-20);
 47        double mz_max = (90+20);
 48        double eta_max = 2.4;
 49        DileptonFinder zfinder(fs, 91.2*GeV, 0.1, Cuts::pT > mu_pt*GeV  && Cuts::abseta < eta_max &&
 50                                   Cuts::abspid == PID::MUON, Cuts::massIn(mz_min*GeV, mz_max*GeV));
 51        declare(zfinder, "DileptonFinder");
 52
 53        eta_max = 2.4;
 54        FinalState fs_muons(Cuts::abseta < eta_max);
 55        IdentifiedFinalState muons_noCut(fs_muons, {PID::MUON, PID::ANTIMUON});
 56        declare(muons_noCut, "MUONS_NOCUT");
 57        // Particles for the jets
 58        VetoedFinalState jet_input(fs);
 59        jet_input.vetoNeutrinos();
 60        jet_input.addVetoOnThisFinalState(getProjection<DileptonFinder>("DileptonFinder"));
 61        declare(jet_input, "JET_INPUT");
 62        _ptBinsGen = { 50, 65, 88, 120, 150, 186, 254, 326, 408, 1500};
 63      }
 64      // dijet
 65      else {
 66        // Particles for the jets
 67        VetoedFinalState jet_input(fs);
 68        jet_input.vetoNeutrinos();
 69        declare(jet_input, "JET_INPUT");
 70        _ptBinsGen = {50, 65, 88, 120, 150, 186, 254, 326, 408, 481, 614, 800, 1000, 4000};
 71      }
 72      // Book histograms
 73      // resize vectors appropriately
 74      size_t nHistsRadii = _jetRadii.size();
 75      size_t nHistsLambda = _lambdaVars.size();
 76      size_t nHistsPt = _ptBinsGen.size()-1;
 77
 78      // Z jet
 79      if (_mode == 2) {
 80        _h_zpj.resize(nHistsRadii, vector<vector<Histo1DPtr> >(nHistsLambda, vector<Histo1DPtr>(nHistsPt)));
 81        _h_zpj_groomed.resize(nHistsRadii, vector<vector<Histo1DPtr> >(nHistsLambda, vector<Histo1DPtr>(nHistsPt)));
 82
 83        // Now book histos
 84        // remember 1-indexed
 85
 86        // yoda plot naming scheme
 87        // --------------------------------------------------------------------------
 88        // channel (ak4/8 radii [000, 100] + zjet / dijet cen / fwd [00, 10, 20] + groomed versions [0, 1])
 89        // lambda variable; neutral+charged & charged-only are treated separately [0000,..,4000]
 90        // pT bin [00000,..,120000]
 91        for (size_t radiusInd=0; radiusInd < _jetRadii.size(); radiusInd++) {
 92          for (size_t lambdaInd=0; lambdaInd < _lambdaVars.size(); lambdaInd++) {
 93            for (size_t ptInd=0; ptInd < _ptBinsGen.size()-1; ptInd++) {
 94              book(_h_zpj[radiusInd][lambdaInd][ptInd], _hepdata_index.at(0+100*radiusInd+1000*lambdaInd+10000*ptInd), 1, 1);
 95              book(_h_zpj_groomed[radiusInd][lambdaInd][ptInd], _hepdata_index.at(10+100*radiusInd+1000*lambdaInd+10000*ptInd), 1, 1);
 96            }
 97          }
 98        }
 99      }
100      // di jet
101      else {
102        _h_dijet_cen.resize(nHistsRadii, vector<vector<Histo1DPtr> >(nHistsLambda, vector<Histo1DPtr>(nHistsPt)));
103        _h_dijet_cen_groomed.resize(nHistsRadii, vector<vector<Histo1DPtr> >(nHistsLambda, vector<Histo1DPtr>(nHistsPt)));
104        _h_dijet_fwd.resize(nHistsRadii, vector<vector<Histo1DPtr> >(nHistsLambda, vector<Histo1DPtr>(nHistsPt)));
105        _h_dijet_fwd_groomed.resize(nHistsRadii, vector<vector<Histo1DPtr> >(nHistsLambda, vector<Histo1DPtr>(nHistsPt)));
106
107        // Now book histos
108        // remember 1-indexed
109
110        // yoda plot naming scheme
111        // --------------------------------------------------------------------------
112        // channel (ak4/8 radii [000, 100] + zjet / dijet cen / fwd [00, 10, 20] + groomed versions [0, 1])
113        // lambda variable; neutral+charged & charged-only are treated separately [0000,..,4000]
114        // pT bin [00000,..,120000]
115        for (size_t radiusInd=0; radiusInd < _jetRadii.size(); radiusInd++) {
116          for (size_t lambdaInd=0; lambdaInd < _lambdaVars.size(); lambdaInd++) {
117            for (size_t ptInd=0; ptInd < _ptBinsGen.size()-1; ptInd++) {
118              book(_h_dijet_cen[radiusInd][lambdaInd][ptInd], _hepdata_index.at(1+100*radiusInd+1000*lambdaInd+10000*ptInd), 1, 1);
119              book(_h_dijet_cen_groomed[radiusInd][lambdaInd][ptInd], _hepdata_index.at(11+100*radiusInd+1000*lambdaInd+10000*ptInd), 1, 1);
120              book(_h_dijet_fwd[radiusInd][lambdaInd][ptInd], _hepdata_index.at(2+100*radiusInd+1000*lambdaInd+10000*ptInd), 1, 1);
121              book(_h_dijet_fwd_groomed[radiusInd][lambdaInd][ptInd], _hepdata_index.at(12+100*radiusInd+1000*lambdaInd+10000*ptInd), 1, 1);
122            }
123          }
124        }
125      }
126    }
127
128    // Get index of largest bin smaller than value in vector
129    // e.g. what you'd need when binning a continuous variable
130    size_t getBinIndex(float value, const vector<float>& bins) {
131      auto itr = std::lower_bound(bins.begin(), bins.end(), value);
132      return itr - bins.begin() - 1;
133    }
134
135    /// Perform the per-event analysis
136    void analyze(const Event& event) {
137      // Convert Particles into PseudoJets for clustering
138      const VetoedFinalState& fs = apply<VetoedFinalState>(event, "JET_INPUT");
139      const Particles& fsParticles = fs.particles();
140      vector<PseudoJet> particles;
141      particles.reserve(fsParticles.size());
142      for (size_t iFS=0; iFS<fsParticles.size(); iFS++){
143        PseudoJet p = fsParticles[iFS].pseudojet();
144        p.set_user_index(fsParticles[iFS].isCharged()); // for later reference to charge
145        particles.push_back(p);
146      }
147
148      // z jet
149      if (_mode == 2) {
150        for (size_t radiusInd=0; radiusInd < _jetRadii.size(); radiusInd++) {
151          float jetRadius = _jetRadii.at(radiusInd);
152
153          JetDefinition jet_def(antikt_algorithm, jetRadius);
154          vector<PseudoJet> jets = (SelectorPtMin(15))(jet_def(particles));
155
156          const FinalState& muons = apply<IdentifiedFinalState>(event, "MUONS_NOCUT");
157          if (muons.size() >= 2) {
158            Particle muon1 = muons.particlesByPt()[0];
159            Particle muon2 = muons.particlesByPt()[1];
160            FourMomentum z = muon1.momentum() + muon2.momentum();
161            if (jets.size() > 0) {
162              PseudoJet jet1 = jets[0];
163            }
164          }
165
166          // Reconstruct Z
167          const DileptonFinder& zfinder = apply<DileptonFinder>(event, "DileptonFinder");
168          if (zfinder.bosons().size() < 1) continue;
169
170          const Particle & z = zfinder.bosons()[0];
171          double zpt = z.pt();
172
173          // Now do selection criteria
174          bool passZpJ = false;
175          if (jets.size() < 1) continue;
176          PseudoJet jet1 = jets[0];
177          float jet1pt = jet1.pt();
178          float asym = fabs((jet1pt - zpt) / (jet1pt+zpt));
179          float dphi = Rivet::deltaPhi(jet1.phi(), z.phi());
180          passZpJ = ((fabs(jet1.rapidity()) < 1.7) && (zpt > 30) && (asym < 0.3) && (dphi > 2.0));
181
182          if (!passZpJ) continue;
183
184          // Now calculate lambda variables and fill hists
185
186          // Simplify life - ignore this jet if it is below 1st hist pt range
187          // Note that we don't apply it to the original jet pt cut - since
188          // we have phase space where one jet is > 50, and one < 50
189          if (jet1pt < _ptBinsGen[0]) continue;
190          // ignore jet if beyond the last bin
191          if (jet1pt > _ptBinsGen.back()) continue;
192
193          // Need to use original, ungroomed jet pT to bin
194          size_t ptBinInd = getBinIndex(jet1pt, _ptBinsGen);
195
196          // UNGROOMED VERSION
197          // -------------------------------------------------------------------
198          vector<PseudoJet> chargedParticles;
199          for (size_t iC=0; iC<jet1.constituents().size(); iC++)
200            if (jet1.constituents()[iC].user_index())
201              chargedParticles.push_back(jet1.constituents()[iC]);
202          vector<PseudoJet> chargedJets = jet_def(chargedParticles);
203
204          // Fill hists for each lambda variable
205          for (size_t lambdaInd=0; lambdaInd < _lambdaVars.size(); lambdaInd++) {
206            const LambdaVar & thisLambdaVar = _lambdaVars[lambdaInd];
207            Angularity angularity(thisLambdaVar.beta, jetRadius, thisLambdaVar.kappa, thisLambdaVar.constitCut);
208            float val = -1;
209            if (thisLambdaVar.isCharged)
210              val = (chargedJets.size()>0) ? angularity(chargedJets[0]) : -1;
211            else
212              val = angularity(jet1);
213            if (val<0) continue;
214            _h_zpj[radiusInd][lambdaInd][ptBinInd]->fill(val);
215          }
216
217          // GROOMED VERSION
218          // -------------------------------------------------------------------
219          // Get groomed jet
220          fastjet::contrib::SoftDrop sd(0, 0.1, jetRadius);
221          PseudoJet groomedJet = sd(jet1);
222          PseudoJet groomedJetCharged;
223          if (chargedJets.size()>0)
224            groomedJetCharged= sd(chargedJets[0]);
225
226          // Fill hists for each lambda variable
227          for (size_t lambdaInd=0; lambdaInd < _lambdaVars.size(); lambdaInd++) {
228            const LambdaVar & thisLambdaVar = _lambdaVars[lambdaInd];
229            Angularity angularity(thisLambdaVar.beta, jetRadius, thisLambdaVar.kappa, thisLambdaVar.constitCut);
230            float val = -1;
231            if (thisLambdaVar.isCharged)
232              val = (chargedJets.size()>0) ? angularity(groomedJetCharged) : -1;
233            else
234              val = angularity(groomedJet);
235            if (val<0) continue;
236            _h_zpj_groomed[radiusInd][lambdaInd][ptBinInd]->fill(val);
237          }
238        } // end loop over jet radii
239      }
240      // di jet
241      else {
242        for (size_t radiusInd=0; radiusInd < _jetRadii.size(); radiusInd++) {
243          float jetRadius = _jetRadii.at(radiusInd);
244
245          JetDefinition jet_def(antikt_algorithm, jetRadius);
246          vector<PseudoJet> jets = (SelectorNHardest(2) * SelectorPtMin(15))(jet_def(particles));
247
248          bool passDijet = false;
249          if (jets.size() < 2) continue;
250          const auto & jet1 = jets.at(0);
251          const auto & jet2 = jets.at(1);
252          float jet1pt = jet1.pt();
253          float jet2pt = jet2.pt();
254          float asym = (jet1pt - jet2pt) / (jet1pt+jet2pt);
255          float dphi = Rivet::deltaPhi(jet1.phi(), jet2.phi());
256          passDijet = ((fabs(jet1.rapidity()) < 1.7) && (fabs(jet2.rapidity()) < 1.7) && (asym < 0.3) && (dphi > 2.0));
257
258          if (!passDijet) continue;
259
260          // Sort by increasing absolute rapidity
261          vector<PseudoJet> dijets = {jet1, jet2};
262          std::sort(dijets.begin(), dijets.end(),
263              [] (const PseudoJet & A, const PseudoJet & B)
264              { return fabs(A.rapidity()) < fabs(B.rapidity()); }
265              );
266
267          for (size_t iJ=0; iJ<dijets.size(); iJ++) {
268            bool isCentral = (iJ == 0);
269            PseudoJet & jetItr = dijets[iJ];
270
271            // Simplify life - ignore this jet if it is below 1st hist pt range
272            // Note that we don't apply it to the original jet pt cut - since
273            // we have phase space where one jet is > 50, and one < 50
274            if (jetItr.pt() < _ptBinsGen[0]) continue;
275            // ignore jet if beyond the last bin
276            if (jetItr.pt() > _ptBinsGen.back()) continue;
277
278            // Need to use original, ungroomed jet pT to bin
279            size_t ptBinInd = getBinIndex(jetItr.pt(), _ptBinsGen);
280
281            // UNGROOMED VERSION
282            // -------------------------------------------------------------------
283            vector<PseudoJet> chargedParticles;
284            for (size_t iC=0; iC<jetItr.constituents().size(); iC++)
285              if (jetItr.constituents()[iC].user_index())
286          chargedParticles.push_back(jetItr.constituents()[iC]);
287            vector<PseudoJet> chargedJets = jet_def(chargedParticles);
288
289            // Fill hists for each lambda variable
290            for (size_t lambdaInd=0; lambdaInd < _lambdaVars.size(); lambdaInd++) {
291              const LambdaVar & thisLambdaVar = _lambdaVars[lambdaInd];
292              Angularity angularity(thisLambdaVar.beta, jetRadius, thisLambdaVar.kappa, thisLambdaVar.constitCut);
293              float val = -1;
294              if (thisLambdaVar.isCharged)
295                val = (chargedJets.size()>0) ? angularity(chargedJets[0]) : -1;
296              else
297                val = angularity(jetItr);
298              if (val<0) continue;
299
300              if (isCentral) {
301                _h_dijet_cen[radiusInd][lambdaInd][ptBinInd]->fill(val);
302              } else {
303                _h_dijet_fwd[radiusInd][lambdaInd][ptBinInd]->fill(val);
304              }
305            }
306
307            // GROOMED VERSION
308            // -------------------------------------------------------------------
309            // Get groomed jet
310            fastjet::contrib::SoftDrop sd(0, 0.1, jetRadius);
311            PseudoJet groomedJet = sd(jetItr);
312            PseudoJet groomedJetCharged;
313            if (chargedJets.size()>0)
314              groomedJetCharged= sd(chargedJets[0]);
315
316            // Fill hists for each lambda variable
317            for (size_t lambdaInd=0; lambdaInd < _lambdaVars.size(); lambdaInd++) {
318              const LambdaVar & thisLambdaVar = _lambdaVars[lambdaInd];
319              Angularity angularity(thisLambdaVar.beta, jetRadius, thisLambdaVar.kappa, thisLambdaVar.constitCut);
320              float val = -1;
321              if (thisLambdaVar.isCharged)
322                val = (chargedJets.size()>0) ? angularity(groomedJetCharged) : -1;
323              else
324                val = angularity(groomedJet);
325              if (val<0) continue;
326
327              if (isCentral) {
328                _h_dijet_cen_groomed[radiusInd][lambdaInd][ptBinInd]->fill(val);
329              } else {
330                _h_dijet_fwd_groomed[radiusInd][lambdaInd][ptBinInd]->fill(val);
331              }
332            }
333
334          } // end loop over dijets
335        } // end loop over jet radii
336      }
337    } // end analyze() function
338
339
340    /// @class Angularity
341    /// Definition of angularity
342    ///
343    class Angularity : public fastjet::FunctionOfPseudoJet<double> {
344    public:
345
346      /// ctor
347      Angularity(double alpha, double jet_radius,
348                 double kappa=1.0, Selector constitCut=SelectorPtMin(0.))
349        : _alpha(alpha), _radius(jet_radius), _kappa(kappa), _constitCut(constitCut) {}
350
351      /// computation of the angularity itself
352      double result(const PseudoJet& jet) const{
353        // get the jet constituents
354        vector<PseudoJet> constits = jet.constituents();
355
356        // get the reference axis
357        PseudoJet reference_axis = _get_reference_axis(jet);
358
359        // do the actual coputation
360        double numerator = 0.0, denominator = 0.0;
361        for (const auto &c : constits){
362          if (!_constitCut.pass(c)) continue;
363          double pt = c.pt();
364          // Note: better compute (dist^2)^(alpha/2) to avoid an extra square root
365          numerator   += pow(pt, _kappa) * pow(c.squared_distance(reference_axis), 0.5*_alpha);
366          denominator += pt;
367        }
368        if (denominator == 0) return -1;
369        // the formula is only correct for the the typical angularities which satisfy either kappa==1 or alpha==0.
370        else return numerator/(pow(denominator, _kappa)*pow(_radius, _alpha));
371      }
372
373    protected:
374
375      PseudoJet _get_reference_axis(const PseudoJet& jet) const{
376        if (_alpha>1) return jet;
377
378        Recluster recluster(JetDefinition(antikt_algorithm, JetDefinition::max_allowable_R, WTA_pt_scheme));
379        return recluster(jet);
380      }
381
382      double _alpha, _radius, _kappa;
383      Selector _constitCut;
384    };
385
386
387    /// Lightweight class to hold info about Lambda variable
388    class LambdaVar {
389    public:
390      LambdaVar(const std::string & name_, float kappa_, float beta_, bool isCharged_, Selector constitCut_):
391        name(name_),
392        kappa(kappa_),
393        beta(beta_),
394        isCharged(isCharged_),
395        constitCut(constitCut_)
396      {}
397
398      string name;
399      float kappa;
400      float beta;
401      bool isCharged;
402      Selector constitCut;
403    };
404
405
406    // Order matters here
407    const vector<float> _jetRadii = {0.4, 0.8};
408
409    // This order is important! index in vector used to create YODA plot name
410    // Must match that in extracRivetPlotsDijet.py
411    const vector<LambdaVar> _lambdaVars = {
412      LambdaVar("jet_multiplicity", 0, 0, false, SelectorPtMin(1.)),
413      LambdaVar("jet_pTD", 2, 0, false, SelectorPtMin(0.)),
414      LambdaVar("jet_LHA", 1, 0.5, false, SelectorPtMin(0.)),
415      LambdaVar("jet_width", 1, 1, false, SelectorPtMin(0.)),
416      LambdaVar("jet_thrust", 1, 2, false, SelectorPtMin(0.)),
417      LambdaVar("jet_multiplicity_charged", 0, 0, true, SelectorPtMin(1.)),
418      LambdaVar("jet_pTD_charged", 2, 0, true, SelectorPtMin(0.)),
419      LambdaVar("jet_LHA_charged", 1, 0.5, true, SelectorPtMin(0.)),
420      LambdaVar("jet_width_charged", 1, 1, true, SelectorPtMin(0.)),
421      LambdaVar("jet_thrust_charged", 1, 2, true, SelectorPtMin(0.)),
422    };
423
424    vector<float> _ptBinsGen;
425
426    const map<size_t, size_t> _hepdata_index {
427      {30000,1},{30001,2},{31000,3},{31001,4},{34000,5},{34001,6},
428      {33000,7},{33001,8},{32000,9},{32001,10},{82000,11},
429      {122001,12},{32100,13},{32101,14},{37000,15},{37001,16},
430      {32010,17},{32011,18},{2000,139},{12000,140},{22000,141},
431      {42000,142},{52000,143},{62000,144},{72000,145},{2001,155},
432      {12001,156},{22001,157},{42001,158},{52001,159},{62001,160},
433      {72001,161},{82001,162},{92001,163},{102001,164},{112001,165},
434      {2002,179},{12002,180},{22002,181},{32002,182},{42002,183},
435      {52002,184},{62002,185},{72002,186},{82002,187},{92002,188},
436      {102002,189},{112002,190},{122002,191},{7000,192},{17000,193},
437      {27000,194},{47000,195},{57000,196},{67000,197},{77000,198},
438      {87000,199},{7001,209},{17001,210},{27001,211},{47001,212},
439      {57001,213},{67001,214},{77001,215},{87001,216},{97001,217},
440      {107001,218},{117001,219},{127001,220},{7002,234},{17002,235},
441      {27002,236},{37002,237},{47002,238},{57002,239},{67002,240},
442      {77002,241},{87002,242},{97002,243},{107002,244},{117002,245},
443      {127002,246},{5000,247},{15000,248},{25000,249},{35000,250},
444      {45000,251},{55000,252},{65000,253},{75000,254},{85000,255},
445      {5001,265},{15001,266},{25001,267},{35001,268},{45001,269},
446      {55001,270},{65001,271},{75001,272},{85001,273},{95001,274},
447      {105001,275},{115001,276},{125001,277},{5002,291},{15002,292},
448      {25002,293},{35002,294},{45002,295},{55002,296},{65002,297},
449      {75002,298},{85002,299},{95002,300},{105002,301},{115002,302},
450      {125002,303},{6000,304},{16000,305},{26000,306},{36000,307},
451      {46000,308},{56000,309},{66000,310},{76000,311},{86000,312},
452      {6001,322},{16001,323},{26001,324},{36001,325},{46001,326},
453      {56001,327},{66001,328},{76001,329},{86001,330},{96001,331},
454      {106001,332},{116001,333},{126001,334},{6002,348},{16002,349},
455      {26002,350},{36002,351},{46002,352},{56002,353},{66002,354},
456      {76002,355},{86002,356},{96002,357},{106002,358},{116002,359},
457      {126002,360},{9000,361},{19000,362},{29000,363},{39000,364},
458      {49000,365},{59000,366},{69000,367},{79000,368},{89000,369},
459      {9001,379},{19001,380},{29001,381},{39001,382},{49001,383},
460      {59001,384},{69001,385},{79001,386},{89001,387},{99001,388},
461      {109001,389},{119001,390},{129001,391},{9002,405},{19002,406},
462      {29002,407},{39002,408},{49002,409},{59002,410},{69002,411},
463      {79002,412},{89002,413},{99002,414},{109002,415},{119002,416},
464      {129002,417},{8000,418},{18000,419},{28000,420},{38000,421},
465      {48000,422},{58000,423},{68000,424},{78000,425},{88000,426},
466      {8001,436},{18001,437},{28001,438},{38001,439},{48001,440},
467      {58001,441},{68001,442},{78001,443},{88001,444},{98001,445},
468      {108001,446},{118001,447},{128001,448},{8002,462},{18002,463},
469      {28002,464},{38002,465},{48002,466},{58002,467},{68002,468},
470      {78002,469},{88002,470},{98002,471},{108002,472},{118002,473},
471      {128002,474},{0,475},{10000,476},{20000,477},{40000,478},
472      {50000,479},{60000,480},{70000,481},{80000,482},{1,492},
473      {10001,493},{20001,494},{40001,495},{50001,496},{60001,497},
474      {70001,498},{80001,499},{90001,500},{100001,501},{110001,502},
475      {120001,503},{2,517},{10002,518},{20002,519},{30002,520},
476      {40002,521},{50002,522},{60002,523},{70002,524},{80002,525},
477      {90002,526},{100002,527},{110002,528},{120002,529},{1000,530},
478      {11000,531},{21000,532},{41000,533},{51000,534},{61000,535},
479      {71000,536},{81000,537},{1001,547},{11001,548},{21001,549},
480      {41001,550},{51001,551},{61001,552},{71001,553},{81001,554},
481      {91001,555},{101001,556},{111001,557},{121001,558},{1002,572},
482      {11002,573},{21002,574},{31002,575},{41002,576},{51002,577},
483      {61002,578},{71002,579},{81002,580},{91002,581},{101002,582},
484      {111002,583},{121002,584},{4000,585},{14000,586},{24000,587},
485      {44000,588},{54000,589},{64000,590},{74000,591},{84000,592},
486      {4001,602},{14001,603},{24001,604},{44001,605},{54001,606},
487      {64001,607},{74001,608},{84001,609},{94001,610},{104001,611},
488      {114001,612},{124001,613},{4002,627},{14002,628},{24002,629},
489      {34002,630},{44002,631},{54002,632},{64002,633},{74002,634},
490      {84002,635},{94002,636},{104002,637},{114002,638},{124002,639},
491      {3000,640},{13000,641},{23000,642},{43000,643},{53000,644},
492      {63000,645},{73000,646},{83000,647},{3001,657},{13001,658},
493      {23001,659},{43001,660},{53001,661},{63001,662},{73001,663},
494      {83001,664},{93001,665},{103001,666},{113001,667},{123001,668},
495      {3002,682},{13002,683},{23002,684},{33002,685},{43002,686},
496      {53002,687},{63002,688},{73002,689},{83002,690},{93002,691},
497      {103002,692},{113002,693},{123002,694},{2010,695},{12010,696},
498      {22010,697},{42010,698},{52010,699},{62010,700},{72010,701},
499      {82010,702},{2011,712},{12011,713},{22011,714},{42011,715},
500      {52011,716},{62011,717},{72011,718},{82011,719},{92011,720},
501      {102011,721},{112011,722},{122011,723},{2012,737},{12012,738},
502      {22012,739},{32012,740},{42012,741},{52012,742},{62012,743},
503      {72012,744},{82012,745},{92012,746},{102012,747},{112012,748},
504      {122012,749},{7010,750},{17010,751},{27010,752},{37010,753},
505      {47010,754},{57010,755},{67010,756},{77010,757},{87010,758},
506      {7011,768},{17011,769},{27011,770},{37011,771},{47011,772},
507      {57011,773},{67011,774},{77011,775},{87011,776},{97011,777},
508      {107011,778},{117011,779},{127011,780},{7012,794},{17012,795},
509      {27012,796},{37012,797},{47012,798},{57012,799},{67012,800},
510      {77012,801},{87012,802},{97012,803},{107012,804},{117012,805},
511      {127012,806},{5010,807},{15010,808},{25010,809},{35010,810},
512      {45010,811},{55010,812},{65010,813},{75010,814},{85010,815},
513      {5011,825},{15011,826},{25011,827},{35011,828},{45011,829},
514      {55011,830},{65011,831},{75011,832},{85011,833},{95011,834},
515      {105011,835},{115011,836},{125011,837},{5012,851},{15012,852},
516      {25012,853},{35012,854},{45012,855},{55012,856},{65012,857},
517      {75012,858},{85012,859},{95012,860},{105012,861},{115012,862},
518      {125012,863},{6010,864},{16010,865},{26010,866},{36010,867},
519      {46010,868},{56010,869},{66010,870},{76010,871},{86010,872},
520      {6011,882},{16011,883},{26011,884},{36011,885},{46011,886},
521      {56011,887},{66011,888},{76011,889},{86011,890},{96011,891},
522      {106011,892},{116011,893},{126011,894},{6012,908},{16012,909},
523      {26012,910},{36012,911},{46012,912},{56012,913},{66012,914},
524      {76012,915},{86012,916},{96012,917},{106012,918},{116012,919},
525      {126012,920},{9010,921},{19010,922},{29010,923},{39010,924},
526      {49010,925},{59010,926},{69010,927},{79010,928},{89010,929},
527      {9011,939},{19011,940},{29011,941},{39011,942},{49011,943},
528      {59011,944},{69011,945},{79011,946},{89011,947},{99011,948},
529      {109011,949},{119011,950},{129011,951},{9012,965},{19012,966},
530      {29012,967},{39012,968},{49012,969},{59012,970},{69012,971},
531      {79012,972},{89012,973},{99012,974},{109012,975},{119012,976},
532      {129012,977},{8010,978},{18010,979},{28010,980},{38010,981},
533      {48010,982},{58010,983},{68010,984},{78010,985},{88010,986},
534      {8011,996},{18011,997},{28011,998},{38011,999},{48011,1000},
535      {58011,1001},{68011,1002},{78011,1003},{88011,1004},{98011,1005},
536      {108011,1006},{118011,1007},{128011,1008},{8012,1022},
537      {18012,1023},{28012,1024},{38012,1025},{48012,1026},
538      {58012,1027},{68012,1028},{78012,1029},{88012,1030},
539      {98012,1031},{108012,1032},{118012,1033},{128012,1034},
540      {10,1035},{10010,1036},{20010,1037},{30010,1038},{40010,1039},
541      {50010,1040},{60010,1041},{70010,1042},{80010,1043},{11,1053},
542      {10011,1054},{20011,1055},{30011,1056},{40011,1057},{50011,1058},
543      {60011,1059},{70011,1060},{80011,1061},{90011,1062},{100011,1063},
544      {110011,1064},{120011,1065},{12,1079},{10012,1080},{20012,1081},
545      {30012,1082},{40012,1083},{50012,1084},{60012,1085},{70012,1086},
546      {80012,1087},{90012,1088},{100012,1089},{110012,1090},
547      {120012,1091},{1010,1092},{11010,1093},{21010,1094},{31010,1095},
548      {41010,1096},{51010,1097},{61010,1098},{71010,1099},{81010,1100},
549      {1011,1110},{11011,1111},{21011,1112},{31011,1113},{41011,1114},
550      {51011,1115},{61011,1116},{71011,1117},{81011,1118},{91011,1119},
551      {101011,1120},{111011,1121},{121011,1122},{1012,1136},{11012,1137},
552      {21012,1138},{31012,1139},{41012,1140},{51012,1141},{61012,1142},
553      {71012,1143},{81012,1144},{91012,1145},{101012,1146},{111012,1147},
554      {121012,1148},{4010,1149},{14010,1150},{24010,1151},{34010,1152},
555      {44010,1153},{54010,1154},{64010,1155},{74010,1156},{84010,1157},
556      {4011,1167},{14011,1168},{24011,1169},{34011,1170},{44011,1171},
557      {54011,1172},{64011,1173},{74011,1174},{84011,1175},{94011,1176},
558      {104011,1177},{114011,1178},{124011,1179},{4012,1193},{14012,1194},
559      {24012,1195},{34012,1196},{44012,1197},{54012,1198},{64012,1199},
560      {74012,1200},{84012,1201},{94012,1202},{104012,1203},{114012,1204},
561      {124012,1205},{3010,1206},{13010,1207},{23010,1208},{33010,1209},
562      {43010,1210},{53010,1211},{63010,1212},{73010,1213},{83010,1214},
563      {3011,1224},{13011,1225},{23011,1226},{33011,1227},{43011,1228},
564      {53011,1229},{63011,1230},{73011,1231},{83011,1232},{93011,1233},
565      {103011,1234},{113011,1235},{123011,1236},{3012,1250},{13012,1251},
566      {23012,1252},{33012,1253},{43012,1254},{53012,1255},{63012,1256},
567      {73012,1257},{83012,1258},{93012,1259},{103012,1260},{113012,1261},
568      {123012,1262},{2100,1263},{12100,1264},{22100,1265},{42100,1266},
569      {52100,1267},{62100,1268},{72100,1269},{82100,1270},{2101,1271},
570      {12101,1272},{22101,1273},{42101,1274},{52101,1275},{62101,1276},
571      {72101,1277},{82101,1278},{92101,1279},{102101,1280},{112101,1281},
572      {122101,1282},{2102,1283},{12102,1284},{22102,1285},{32102,1286},
573      {42102,1287},{52102,1288},{62102,1289},{72102,1290},{82102,1291},
574      {92102,1292},{102102,1293},{112102,1294},{122102,1295},{7100,1296},
575      {17100,1297},{27100,1298},{37100,1299},{47100,1300},{57100,1301},
576      {67100,1302},{77100,1303},{87100,1304},{7101,1314},{17101,1315},
577      {27101,1316},{37101,1317},{47101,1318},{57101,1319},{67101,1320},
578      {77101,1321},{87101,1322},{97101,1323},{107101,1324},{117101,1325},
579      {127101,1326},{7102,1327},{17102,1328},{27102,1329},{37102,1330},
580      {47102,1331},{57102,1332},{67102,1333},{77102,1334},{87102,1335},
581      {97102,1336},{107102,1337},{117102,1338},{127102,1339},{5100,1340},
582      {15100,1341},{25100,1342},{35100,1343},{45100,1344},{55100,1345},
583      {65100,1346},{75100,1347},{85100,1348},{5101,1358},{15101,1359},
584      {25101,1360},{35101,1361},{45101,1362},{55101,1363},{65101,1364},
585      {75101,1365},{85101,1366},{95101,1367},{105101,1368},{115101,1369},
586      {125101,1370},{5102,1371},{15102,1372},{25102,1373},{35102,1374},
587      {45102,1375},{55102,1376},{65102,1377},{75102,1378},{85102,1379},
588      {95102,1380},{105102,1381},{115102,1382},{125102,1383},{6100,1384},
589      {16100,1385},{26100,1386},{36100,1387},{46100,1388},{56100,1389},
590      {66100,1390},{76100,1391},{86100,1392},{6101,1402},{16101,1403},
591      {26101,1404},{36101,1405},{46101,1406},{56101,1407},{66101,1408},
592      {76101,1409},{86101,1410},{96101,1411},{106101,1412},{116101,1413},
593      {126101,1414},{6102,1415},{16102,1416},{26102,1417},{36102,1418},
594      {46102,1419},{56102,1420},{66102,1421},{76102,1422},{86102,1423},
595      {96102,1424},{106102,1425},{116102,1426},{126102,1427},{9100,1428},
596      {19100,1429},{29100,1430},{39100,1431},{49100,1432},{59100,1433},
597      {69100,1434},{79100,1435},{89100,1436},{9101,1446},{19101,1447},
598      {29101,1448},{39101,1449},{49101,1450},{59101,1451},{69101,1452},
599      {79101,1453},{89101,1454},{99101,1455},{109101,1456},{119101,1457},
600      {129101,1458},{9102,1459},{19102,1460},{29102,1461},{39102,1462},
601      {49102,1463},{59102,1464},{69102,1465},{79102,1466},{89102,1467},
602      {99102,1468},{109102,1469},{119102,1470},{129102,1471},{8100,1472},
603      {18100,1473},{28100,1474},{38100,1475},{48100,1476},{58100,1477},
604      {68100,1478},{78100,1479},{88100,1480},{8101,1490},{18101,1491},
605      {28101,1492},{38101,1493},{48101,1494},{58101,1495},{68101,1496},
606      {78101,1497},{88101,1498},{98101,1499},{108101,1500},{118101,1501},
607      {128101,1502},{8102,1503},{18102,1504},{28102,1505},{38102,1506},
608      {48102,1507},{58102,1508},{68102,1509},{78102,1510},{88102,1511},
609      {98102,1512},{108102,1513},{118102,1514},{128102,1515},{100,1516},
610      {10100,1517},{20100,1518},{30100,1519},{40100,1520},{50100,1521},
611      {60100,1522},{70100,1523},{80100,1524},{101,1525},{10101,1526},
612      {20101,1527},{30101,1528},{40101,1529},{50101,1530},{60101,1531},
613      {70101,1532},{80101,1533},{90101,1534},{100101,1535},{110101,1536},
614      {120101,1537},{102,1538},{10102,1539},{20102,1540},{30102,1541},
615      {40102,1542},{50102,1543},{60102,1544},{70102,1545},{80102,1546},
616      {90102,1547},{100102,1548},{110102,1549},{120102,1550},{1100,1551},
617      {11100,1552},{21100,1553},{31100,1554},{41100,1555},{51100,1556},
618      {61100,1557},{71100,1558},{81100,1559},{1101,1560},{11101,1561},
619      {21101,1562},{31101,1563},{41101,1564},{51101,1565},{61101,1566},
620      {71101,1567},{81101,1568},{91101,1569},{101101,1570},{111101,1571},
621      {121101,1572},{1102,1573},{11102,1574},{21102,1575},{31102,1576},
622      {41102,1577},{51102,1578},{61102,1579},{71102,1580},{81102,1581},
623      {91102,1582},{101102,1583},{111102,1584},{121102,1585},{4100,1586},
624      {14100,1587},{24100,1588},{34100,1589},{44100,1590},{54100,1591},
625      {64100,1592},{74100,1593},{84100,1594},{4101,1595},{14101,1596},
626      {24101,1597},{34101,1598},{44101,1599},{54101,1600},{64101,1601},
627      {74101,1602},{84101,1603},{94101,1604},{104101,1605},{114101,1606},
628      {124101,1607},{4102,1608},{14102,1609},{24102,1610},{34102,1611},
629      {44102,1612},{54102,1613},{64102,1614},{74102,1615},{84102,1616},
630      {94102,1617},{104102,1618},{114102,1619},{124102,1620},{3100,1621},
631      {13100,1622},{23100,1623},{33100,1624},{43100,1625},{53100,1626},
632      {63100,1627},{73100,1628},{83100,1629},{3101,1630},{13101,1631},
633      {23101,1632},{33101,1633},{43101,1634},{53101,1635},{63101,1636},
634      {73101,1637},{83101,1638},{93101,1639},{103101,1640},{113101,1641},
635      {123101,1642},{3102,1643},{13102,1644},{23102,1645},{33102,1646},
636      {43102,1647},{53102,1648},{63102,1649},{73102,1650},{83102,1651},
637      {93102,1652},{103102,1653},{113102,1654},{123102,1655},{2110,1656},
638      {12110,1657},{22110,1658},{32110,1659},{42110,1660},{52110,1661},
639      {62110,1662},{72110,1663},{82110,1664},{2111,1674},{12111,1675},
640      {22111,1676},{32111,1677},{42111,1678},{52111,1679},{62111,1680},
641      {72111,1681},{82111,1682},{92111,1683},{102111,1684},{112111,1685},
642      {122111,1686},{2112,1687},{12112,1688},{22112,1689},{32112,1690},
643      {42112,1691},{52112,1692},{62112,1693},{72112,1694},{82112,1695},
644      {92112,1696},{102112,1697},{112112,1698},{122112,1699},{7110,1700},
645      {17110,1701},{27110,1702},{37110,1703},{47110,1704},{57110,1705},
646      {67110,1706},{77110,1707},{87110,1708},{7111,1718},{17111,1719},
647      {27111,1720},{37111,1721},{47111,1722},{57111,1723},{67111,1724},
648      {77111,1725},{87111,1726},{97111,1727},{107111,1728},{117111,1729},
649      {127111,1730},{7112,1731},{17112,1732},{27112,1733},{37112,1734},
650      {47112,1735},{57112,1736},{67112,1737},{77112,1738},{87112,1739},
651      {97112,1740},{107112,1741},{117112,1742},{127112,1743},{5110,1744},
652      {15110,1745},{25110,1746},{35110,1747},{45110,1748},{55110,1749},
653      {65110,1750},{75110,1751},{85110,1752},{5111,1762},{15111,1763},
654      {25111,1764},{35111,1765},{45111,1766},{55111,1767},{65111,1768},
655      {75111,1769},{85111,1770},{95111,1771},{105111,1772},{115111,1773},
656      {125111,1774},{5112,1775},{15112,1776},{25112,1777},{35112,1778},
657      {45112,1779},{55112,1780},{65112,1781},{75112,1782},{85112,1783},
658      {95112,1784},{105112,1785},{115112,1786},{125112,1787},{6110,1788},
659      {16110,1789},{26110,1790},{36110,1791},{46110,1792},{56110,1793},
660      {66110,1794},{76110,1795},{86110,1796},{6111,1806},{16111,1807},
661      {26111,1808},{36111,1809},{46111,1810},{56111,1811},{66111,1812},
662      {76111,1813},{86111,1814},{96111,1815},{106111,1816},{116111,1817},
663      {126111,1818},{6112,1819},{16112,1820},{26112,1821},{36112,1822},
664      {46112,1823},{56112,1824},{66112,1825},{76112,1826},{86112,1827},
665      {96112,1828},{106112,1829},{116112,1830},{126112,1831},{9110,1832},
666      {19110,1833},{29110,1834},{39110,1835},{49110,1836},{59110,1837},
667      {69110,1838},{79110,1839},{89110,1840},{9111,1850},{19111,1851},
668      {29111,1852},{39111,1853},{49111,1854},{59111,1855},{69111,1856},
669      {79111,1857},{89111,1858},{99111,1859},{109111,1860},{119111,1861},
670      {129111,1862},{9112,1863},{19112,1864},{29112,1865},{39112,1866},
671      {49112,1867},{59112,1868},{69112,1869},{79112,1870},{89112,1871},
672      {99112,1872},{109112,1873},{119112,1874},{129112,1875},{8110,1876},
673      {18110,1877},{28110,1878},{38110,1879},{48110,1880},{58110,1881},
674      {68110,1882},{78110,1883},{88110,1884},{8111,1894},{18111,1895},
675      {28111,1896},{38111,1897},{48111,1898},{58111,1899},{68111,1900},
676      {78111,1901},{88111,1902},{98111,1903},{108111,1904},{118111,1905},
677      {128111,1906},{8112,1907},{18112,1908},{28112,1909},{38112,1910},
678      {48112,1911},{58112,1912},{68112,1913},{78112,1914},{88112,1915},
679      {98112,1916},{108112,1917},{118112,1918},{128112,1919},{110,1920},
680      {10110,1921},{20110,1922},{30110,1923},{40110,1924},{50110,1925},
681      {60110,1926},{70110,1927},{80110,1928},{111,1938},{10111,1939},
682      {20111,1940},{30111,1941},{40111,1942},{50111,1943},{60111,1944},
683      {70111,1945},{80111,1946},{90111,1947},{100111,1948},{110111,1949},
684      {120111,1950},{112,1951},{10112,1952},{20112,1953},{30112,1954},
685      {40112,1955},{50112,1956},{60112,1957},{70112,1958},{80112,1959},
686      {90112,1960},{100112,1961},{110112,1962},{120112,1963},{1110,1964},
687      {11110,1965},{21110,1966},{31110,1967},{41110,1968},{51110,1969},
688      {61110,1970},{71110,1971},{81110,1972},{1111,1982},{11111,1983},
689      {21111,1984},{31111,1985},{41111,1986},{51111,1987},{61111,1988},
690      {71111,1989},{81111,1990},{91111,1991},{101111,1992},{111111,1993},
691      {121111,1994},{1112,1995},{11112,1996},{21112,1997},{31112,1998},
692      {41112,1999},{51112,2000},{61112,2001},{71112,2002},{81112,2003},
693      {91112,2004},{101112,2005},{111112,2006},{121112,2007},{4110,2008},
694      {14110,2009},{24110,2010},{34110,2011},{44110,2012},{54110,2013},
695      {64110,2014},{74110,2015},{84110,2016},{4111,2026},{14111,2027},
696      {24111,2028},{34111,2029},{44111,2030},{54111,2031},{64111,2032},
697      {74111,2033},{84111,2034},{94111,2035},{104111,2036},{114111,2037},
698      {124111,2038},{4112,2039},{14112,2040},{24112,2041},{34112,2042},
699      {44112,2043},{54112,2044},{64112,2045},{74112,2046},{84112,2047},
700      {94112,2048},{104112,2049},{114112,2050},{124112,2051},{3110,2052},
701      {13110,2053},{23110,2054},{33110,2055},{43110,2056},{53110,2057},
702      {63110,2058},{73110,2059},{83110,2060},{3111,2070},{13111,2071},
703      {23111,2072},{33111,2073},{43111,2074},{53111,2075},{63111,2076},
704      {73111,2077},{83111,2078},{93111,2079},{103111,2080},{113111,2081},
705      {123111,2082},{3112,2083},{13112,2084},{23112,2085},{33112,2086},
706      {43112,2087},{53112,2088},{63112,2089},{73112,2090},{83112,2091},
707      {93112,2092},{103112,2093},{113112,2094},{123112,2095} };
708
709    // mode for the analysis
710    unsigned int _mode;
711
712    // 3D vector: [jet radius][lambda variable][pt bin]
713    // since each pt bin has its own normalised distribution
714    vector<vector<vector<Histo1DPtr> > > _h_dijet_cen,
715                                         _h_dijet_cen_groomed,
716                                         _h_dijet_fwd,
717                                         _h_dijet_fwd_groomed;
718
719    // 3D vector: [jet radius][lambda variable][pt bin]
720    // since each pt bin has its own normalised distribution
721    vector<vector<vector<Histo1DPtr> > > _h_zpj, _h_zpj_groomed;
722
723  };
724
725
726
727  RIVET_DECLARE_PLUGIN(CMS_2021_I1920187);
728
729}