NJetsMC

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
// -*- C++ -*-
//
// Package:   NJetsMC
// Class:     NJetsMC
//
/**\class NJetsMC NJetsMC.cc

 Description: Filter for DPS MC generation.

 Implementation:
     [Notes on implementation]
*/
//
// Original Author:  "Nathaniel Odell"
//         Created:  Thu Aug 12 09:24:46 CDT 2010
// then moved to more general N-jets purpose in GeneratorInterface/GenFilters
//

#include "DataFormats/Common/interface/Handle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/global/EDFilter.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/InputTag.h"

#include "DataFormats/JetReco/interface/GenJetCollection.h"
#include "DataFormats/JetReco/interface/GenJet.h"

#include <cstdint>

class NJetsMC : public edm::global::EDFilter<> {
public:
  explicit NJetsMC(const edm::ParameterSet&);

private:
  bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;

  // ----------member data ---------------------------

  const edm::EDGetTokenT<reco::GenJetCollection> genToken_;
  const int njets_;
  const double minpt_;
};

NJetsMC::NJetsMC(const edm::ParameterSet& iConfig)
    : genToken_(consumes<reco::GenJetCollection>(iConfig.getUntrackedParameter<edm::InputTag>("GenTag"))),
      njets_(iConfig.getParameter<int32_t>("Njets")),
      minpt_(iConfig.getParameter<double>("MinPt")) {}

bool NJetsMC::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup&) const {
  edm::Handle<reco::GenJetCollection> genJets;
  iEvent.getByToken(genToken_, genJets);

  int count = 0;
  bool result = false;

  for (reco::GenJetCollection::const_iterator iJet = genJets->begin(); iJet != genJets->end(); ++iJet) {
    reco::GenJet myJet = reco::GenJet(*iJet);

    if (myJet.pt() > minpt_)
      ++count;
  }

  if (count >= njets_)
    result = true;

  return result;
}
//define this as a plug-in
DEFINE_FWK_MODULE(NJetsMC);