diff --git a/CommonTools/ParticleFlow/interface/PFMETAlgo.h b/CommonTools/ParticleFlow/interface/PFMETAlgo.h index 3a6906fa27844..c4fb35d50a040 100644 --- a/CommonTools/ParticleFlow/interface/PFMETAlgo.h +++ b/CommonTools/ParticleFlow/interface/PFMETAlgo.h @@ -31,9 +31,7 @@ namespace pf2pat { public: explicit PFMETAlgo(const edm::ParameterSet&); - ~PFMETAlgo(); - - reco::MET produce(const reco::PFCandidateCollection& pfCandidates); + reco::MET produce(const reco::PFCandidateCollection& pfCandidates) const; private: /// HF calibration factor (in 31X applied by PFProducer) diff --git a/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc b/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc index f95b194d050c1..019c77c16126f 100644 --- a/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc +++ b/CommonTools/ParticleFlow/plugins/DeltaBetaWeights.cc @@ -9,20 +9,19 @@ #include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" -#include "FWCore/Framework/interface/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include -class DeltaBetaWeights : public edm::EDProducer { +class DeltaBetaWeights : public edm::global::EDProducer<> { public: explicit DeltaBetaWeights(const edm::ParameterSet&); - ~DeltaBetaWeights() override; private: - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; // ----------member data --------------------------- edm::InputTag src_; edm::InputTag pfCharged_; @@ -48,32 +47,24 @@ DeltaBetaWeights::DeltaBetaWeights(const edm::ParameterSet& iConfig) // src_token = consumes(src_); } -DeltaBetaWeights::~DeltaBetaWeights() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(DeltaBetaWeights); // ------------ method called to produce the data ------------ -void DeltaBetaWeights::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void DeltaBetaWeights::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { using namespace edm; - edm::Handle > pfCharged; - edm::Handle > pfPU; - edm::Handle > src; - - iEvent.getByToken(src_token, src); - iEvent.getByToken(pfCharged_token, pfCharged); - iEvent.getByToken(pfPU_token, pfPU); + edm::View const pfCharged = iEvent.get(pfCharged_token); + edm::View const& pfPU = iEvent.get(pfPU_token); + edm::View const& src = iEvent.get(src_token); double sumNPU = .0; double sumPU = .0; std::unique_ptr out(new reco::PFCandidateCollection); - for (const reco::Candidate& cand : *src) { + out->reserve(src.size()); + for (const reco::Candidate& cand : src) { if (cand.charge() != 0) { // this part of code should be executed only if input collection is not entirely composed of neutral candidates, i.e. never by default edm::LogWarning("DeltaBetaWeights") @@ -87,14 +78,14 @@ void DeltaBetaWeights::produce(edm::Event& iEvent, const edm::EventSetup& iSetup sumPU = 1.0; double eta = cand.eta(); double phi = cand.phi(); - for (const reco::Candidate& chCand : *pfCharged) { + for (const reco::Candidate& chCand : pfCharged) { double sum = (chCand.pt() * chCand.pt()) / (deltaR2(eta, phi, chCand.eta(), chCand.phi())); if (sum > 1.0) sumNPU *= sum; } sumNPU = 0.5 * log(sumNPU); - for (const reco::Candidate& puCand : *pfPU) { + for (const reco::Candidate& puCand : pfPU) { double sum = (puCand.pt() * puCand.pt()) / (deltaR2(eta, phi, puCand.eta(), puCand.phi())); if (sum > 1.0) sumPU *= sum; diff --git a/CommonTools/ParticleFlow/plugins/PFCandidateRecalibrator.cc b/CommonTools/ParticleFlow/plugins/PFCandidateRecalibrator.cc index afc9bbf89617b..c41b89c53023e 100644 --- a/CommonTools/ParticleFlow/plugins/PFCandidateRecalibrator.cc +++ b/CommonTools/ParticleFlow/plugins/PFCandidateRecalibrator.cc @@ -64,6 +64,12 @@ class PFCandidateRecalibrator : public edm::stream::EDProducer<> { edm::EDGetTokenT pfcandidates_; + const edm::ESGetToken gtCondToken_; + const edm::ESGetToken htopoToken_; + const edm::ESGetToken buggedCondToken_; + const edm::ESGetToken calogeomTokenRun_; + const edm::ESGetToken calogeomTokenEvent_; + std::vector badChHE_; std::vector badChHF_; @@ -73,6 +79,11 @@ class PFCandidateRecalibrator : public edm::stream::EDProducer<> { PFCandidateRecalibrator::PFCandidateRecalibrator(const edm::ParameterSet& iConfig) : pfcandidates_(consumes(iConfig.getParameter("pfcandidates"))), + gtCondToken_(esConsumes()), + htopoToken_(esConsumes()), + buggedCondToken_(esConsumes(edm::ESInputTag("", "bugged"))), + calogeomTokenRun_(esConsumes()), + calogeomTokenEvent_(esConsumes()), shortFibreThr_(iConfig.getParameter("shortFibreThr")), longFibreThr_(iConfig.getParameter("longFibreThr")) { produces(); @@ -83,25 +94,17 @@ PFCandidateRecalibrator::PFCandidateRecalibrator(const edm::ParameterSet& iConfi void PFCandidateRecalibrator::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) { if (hcalDbWatcher_.check(iSetup) || hcalRCWatcher_.check(iSetup)) { //Get Calib Constants from current GT - edm::ESHandle gtCond; - iSetup.get().get(gtCond); + HcalDbService const& gtCond = iSetup.getData(gtCondToken_); //Get Calib Constants from bugged tag - edm::ESHandle htopo; - iSetup.get().get(htopo); - const HcalTopology* theHBHETopology = htopo.product(); + const HcalTopology& theHBHETopology = iSetup.getData(htopoToken_); - edm::ESHandle buggedCond; - iSetup.get().get("bugged", buggedCond); - HcalRespCorrs buggedRespCorrs(*buggedCond.product()); - buggedRespCorrs.setTopo(theHBHETopology); + HcalRespCorrs buggedRespCorrs = iSetup.getData(buggedCondToken_); + buggedRespCorrs.setTopo(&theHBHETopology); //access calogeometry - edm::ESHandle calogeom; - iSetup.get().get(calogeom); - const CaloGeometry* cgeo = calogeom.product(); - const HcalGeometry* hgeom = - static_cast(cgeo->getSubdetectorGeometry(DetId::Hcal, HcalForward)); + const CaloGeometry& cgeo = iSetup.getData(calogeomTokenRun_); + const HcalGeometry* hgeom = static_cast(cgeo.getSubdetectorGeometry(DetId::Hcal, HcalForward)); //reset the bad channel containers badChHE_.clear(); @@ -110,7 +113,7 @@ void PFCandidateRecalibrator::beginRun(const edm::Run& iRun, const edm::EventSet //fill bad cells HE (use eta, phi) const std::vector& cellsHE = hgeom->getValidDetIds(DetId::Detector::Hcal, HcalEndcap); for (auto id : cellsHE) { - float currentRespCorr = gtCond->getHcalRespCorr(id)->getValue(); + float currentRespCorr = gtCond.getHcalRespCorr(id)->getValue(); float buggedRespCorr = buggedRespCorrs.getValues(id)->getValue(); if (buggedRespCorr == 0.) continue; @@ -125,7 +128,7 @@ void PFCandidateRecalibrator::beginRun(const edm::Run& iRun, const edm::EventSet //fill bad cells HF (use ieta, iphi) auto const& cellsHF = hgeom->getValidDetIds(DetId::Detector::Hcal, HcalForward); for (auto id : cellsHF) { - float currentRespCorr = gtCond->getHcalRespCorr(id)->getValue(); + float currentRespCorr = gtCond.getHcalRespCorr(id)->getValue(); float buggedRespCorr = buggedRespCorrs.getValues(id)->getValue(); if (buggedRespCorr == 0.) continue; @@ -143,10 +146,8 @@ void PFCandidateRecalibrator::endRun(const edm::Run& iRun, const edm::EventSetup void PFCandidateRecalibrator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { //access calogeometry - edm::ESHandle calogeom; - iSetup.get().get(calogeom); - const CaloGeometry* cgeo = calogeom.product(); - const HcalGeometry* hgeom = static_cast(cgeo->getSubdetectorGeometry(DetId::Hcal, HcalForward)); + const CaloGeometry& cgeo = iSetup.getData(calogeomTokenEvent_); + const HcalGeometry* hgeom = static_cast(cgeo.getSubdetectorGeometry(DetId::Hcal, HcalForward)); //access PFCandidates edm::Handle pfcandidates; diff --git a/CommonTools/ParticleFlow/plugins/PFMET.cc b/CommonTools/ParticleFlow/plugins/PFMET.cc index 7810cc771598f..629431d56e17e 100644 --- a/CommonTools/ParticleFlow/plugins/PFMET.cc +++ b/CommonTools/ParticleFlow/plugins/PFMET.cc @@ -12,10 +12,8 @@ #include "DataFormats/METReco/interface/METFwd.h" #include "DataFormats/Math/interface/LorentzVector.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "FWCore/Framework/interface/EDProducer.h" -#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/Exception.h" @@ -23,20 +21,16 @@ #include #include -class PFMET : public edm::EDProducer { +class PFMET : public edm::global::EDProducer<> { public: explicit PFMET(const edm::ParameterSet&); - ~PFMET() override; - - void produce(edm::Event&, const edm::EventSetup&) override; - - void beginJob() override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: /// Input PFCandidates - edm::InputTag inputTagPFCandidates_; edm::EDGetTokenT tokenPFCandidates_; + edm::EDPutTokenT putToken_; pf2pat::PFMETAlgo pfMETAlgo_; }; @@ -47,33 +41,23 @@ using namespace reco; using namespace math; PFMET::PFMET(const edm::ParameterSet& iConfig) : pfMETAlgo_(iConfig) { - inputTagPFCandidates_ = iConfig.getParameter("PFCandidates"); - tokenPFCandidates_ = consumes(inputTagPFCandidates_); + auto inputTagPFCandidates = iConfig.getParameter("PFCandidates"); + tokenPFCandidates_ = consumes(inputTagPFCandidates); - produces(); + putToken_ = produces(); - LogDebug("PFMET") << " input collection : " << inputTagPFCandidates_; + LogDebug("PFMET") << " input collection : " << inputTagPFCandidates; } #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(PFMET); -PFMET::~PFMET() {} - -void PFMET::beginJob() {} - -void PFMET::produce(Event& iEvent, const EventSetup& iSetup) { +void PFMET::produce(edm::StreamID, Event& iEvent, const EventSetup& iSetup) const { LogDebug("PFMET") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl; // get PFCandidates - - Handle pfCandidates; - iEvent.getByToken(tokenPFCandidates_, pfCandidates); - - unique_ptr pOutput(new METCollection()); - - pOutput->push_back(pfMETAlgo_.produce(*pfCandidates)); - iEvent.put(std::move(pOutput)); + METCollection output{1, pfMETAlgo_.produce(iEvent.get(tokenPFCandidates_))}; + iEvent.emplace(putToken_, std::move(output)); LogDebug("PFMET") << "STOP event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl; } diff --git a/CommonTools/ParticleFlow/src/PFMETAlgo.cc b/CommonTools/ParticleFlow/src/PFMETAlgo.cc index e06c63de47a39..073e60336a689 100644 --- a/CommonTools/ParticleFlow/src/PFMETAlgo.cc +++ b/CommonTools/ParticleFlow/src/PFMETAlgo.cc @@ -20,9 +20,7 @@ PFMETAlgo::PFMETAlgo(const edm::ParameterSet& iConfig) { hfCalibFactor_ = iConfig.getParameter("hfCalibFactor"); } -PFMETAlgo::~PFMETAlgo() {} - -reco::MET PFMETAlgo::produce(const reco::PFCandidateCollection& pfCandidates) { +reco::MET PFMETAlgo::produce(const reco::PFCandidateCollection& pfCandidates) const { double sumEx = 0; double sumEy = 0; double sumEt = 0; diff --git a/CommonTools/ParticleFlow/test/PFIsoReaderDemo.cc b/CommonTools/ParticleFlow/test/PFIsoReaderDemo.cc index 5f87d865fecf0..088e301c352f9 100644 --- a/CommonTools/ParticleFlow/test/PFIsoReaderDemo.cc +++ b/CommonTools/ParticleFlow/test/PFIsoReaderDemo.cc @@ -13,6 +13,7 @@ #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" PFIsoReaderDemo::PFIsoReaderDemo(const edm::ParameterSet& iConfig) { + usesResource(TFileService::kSharedResource); inputTagGsfElectrons_ = iConfig.getParameter("Electrons"); tokenGsfElectrons_ = consumes(inputTagGsfElectrons_); inputTagPhotons_ = iConfig.getParameter("Photons"); diff --git a/CommonTools/ParticleFlow/test/PFIsoReaderDemo.h b/CommonTools/ParticleFlow/test/PFIsoReaderDemo.h index 4a04915ecdca3..4f704adcbf839 100644 --- a/CommonTools/ParticleFlow/test/PFIsoReaderDemo.h +++ b/CommonTools/ParticleFlow/test/PFIsoReaderDemo.h @@ -1,6 +1,6 @@ #ifndef PFISOREADERDEMO_H #define PFISOREADERDEMO_H -#include "FWCore/Framework/interface/EDAnalyzer.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" @@ -13,12 +13,13 @@ #include "TH2F.h" -class PFIsoReaderDemo : public edm::EDAnalyzer { +class PFIsoReaderDemo : public edm::one::EDAnalyzer { public: explicit PFIsoReaderDemo(const edm::ParameterSet&); - ~PFIsoReaderDemo(); - virtual void beginRun(edm::Run const&, edm::EventSetup const&); - virtual void analyze(const edm::Event& iEvent, const edm::EventSetup& c); + ~PFIsoReaderDemo() override; + void beginRun(edm::Run const&, edm::EventSetup const&) override; + void analyze(const edm::Event& iEvent, const edm::EventSetup& c) override; + void endRun(edm::Run const&, edm::EventSetup const&) override {} typedef std::vector > > IsoDepositMaps; typedef std::vector > > IsoDepositVals;