File indexing completed on 2024-04-06 12:19:26
0001 #include <string>
0002 #include <memory>
0003
0004 #include "FWCore/Framework/interface/Frameworkfwd.h"
0005 #include "FWCore/Framework/interface/global/EDProducer.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0008 #include "FWCore/Framework/interface/Event.h"
0009
0010 #include "DataFormats/Common/interface/RefToPtr.h"
0011 #include "DataFormats/Candidate/interface/Candidate.h"
0012 #include "DataFormats/Candidate/interface/CandidateFwd.h"
0013 #include "DataFormats/PatCandidates/interface/Jet.h"
0014
0015 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
0016 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0017 #include "DataFormats/Candidate/interface/CompositeCandidate.h"
0018 #include "DataFormats/Candidate/interface/ShallowCloneCandidate.h"
0019 #include "DataFormats/Candidate/interface/LeafCandidate.h"
0020 #include "DataFormats/Math/interface/Point3D.h"
0021
0022 namespace pat {
0023 class BadPFCandidateJetsEEnoiseProducer : public edm::global::EDProducer<> {
0024 public:
0025 explicit BadPFCandidateJetsEEnoiseProducer(const edm::ParameterSet&);
0026 ~BadPFCandidateJetsEEnoiseProducer() override;
0027 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0028 void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0029
0030 private:
0031 edm::EDGetTokenT<edm::View<pat::Jet>> jetsrc_;
0032 double ptThreshold_;
0033 double minEtaThreshold_;
0034 double maxEtaThreshold_;
0035 bool userawPt_;
0036 };
0037 }
0038
0039 pat::BadPFCandidateJetsEEnoiseProducer::BadPFCandidateJetsEEnoiseProducer(const edm::ParameterSet& iConfig)
0040 : jetsrc_(consumes<edm::View<pat::Jet>>(iConfig.getParameter<edm::InputTag>("jetsrc"))),
0041 ptThreshold_(iConfig.getParameter<double>("ptThreshold")),
0042 minEtaThreshold_(iConfig.getParameter<double>("minEtaThreshold")),
0043 maxEtaThreshold_(iConfig.getParameter<double>("maxEtaThreshold")),
0044 userawPt_(iConfig.getParameter<bool>("userawPt")) {
0045 produces<std::vector<pat::Jet>>("good");
0046 produces<std::vector<pat::Jet>>("bad");
0047 }
0048
0049 pat::BadPFCandidateJetsEEnoiseProducer::~BadPFCandidateJetsEEnoiseProducer() {}
0050
0051 void pat::BadPFCandidateJetsEEnoiseProducer::produce(edm::StreamID,
0052 edm::Event& iEvent,
0053 const edm::EventSetup& iSetup) const {
0054 auto goodJets = std::make_unique<std::vector<pat::Jet>>();
0055 auto badJets = std::make_unique<std::vector<pat::Jet>>();
0056
0057 edm::Handle<edm::View<pat::Jet>> jetcandidates;
0058 iEvent.getByToken(jetsrc_, jetcandidates);
0059
0060 int njets = jetcandidates->size();
0061
0062
0063 for (int jetindex = 0; jetindex < njets; ++jetindex) {
0064 edm::Ptr<pat::Jet> candjet = jetcandidates->ptrAt(jetindex);
0065
0066
0067 double ptJet = userawPt_ ? candjet->correctedJet("Uncorrected").pt() : candjet->pt();
0068 double absEtaJet = std::abs(candjet->eta());
0069
0070 if (ptJet > ptThreshold_ || absEtaJet < minEtaThreshold_ || absEtaJet > maxEtaThreshold_) {
0071
0072 goodJets->emplace_back(candjet);
0073 } else {
0074
0075 badJets->emplace_back(candjet);
0076 }
0077 }
0078 iEvent.put(std::move(goodJets), "good");
0079 iEvent.put(std::move(badJets), "bad");
0080 }
0081
0082 void pat::BadPFCandidateJetsEEnoiseProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0083 edm::ParameterSetDescription desc;
0084 desc.add<edm::InputTag>("jetsrc", edm::InputTag("slimmedJets"));
0085 desc.add<bool>("userawPt", true);
0086 desc.add<double>("ptThreshold", 50.0);
0087 desc.add<double>("minEtaThreshold", 2.65);
0088 desc.add<double>("maxEtaThreshold", 3.139);
0089
0090 descriptions.add("BadPFCandidateJetsEEnoiseProducer", desc);
0091 }
0092
0093 using pat::BadPFCandidateJetsEEnoiseProducer;
0094
0095 #include "FWCore/Framework/interface/MakerMacros.h"
0096 DEFINE_FWK_MODULE(BadPFCandidateJetsEEnoiseProducer);