File indexing completed on 2024-04-06 12:23:47
0001 #include "DataFormats/Common/interface/View.h"
0002 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0003 #include "DataFormats/PatCandidates/interface/Electron.h"
0004 #include "DataFormats/PatCandidates/interface/Jet.h"
0005 #include "DataFormats/PatCandidates/interface/Muon.h"
0006 #include "DataFormats/PatCandidates/interface/Photon.h"
0007 #include "DataFormats/PatCandidates/interface/Tau.h"
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Framework/interface/stream/EDProducer.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "FWCore/Utilities/interface/InputTag.h"
0012 #include "PhysicsTools/PatAlgos/interface/ObjectModifier.h"
0013
0014 #include <memory>
0015
0016 namespace pat {
0017
0018 template <class T>
0019 class ModifiedObjectProducer : public edm::stream::EDProducer<> {
0020 public:
0021 typedef std::vector<T> Collection;
0022 typedef pat::ObjectModifier<T> Modifier;
0023
0024 ModifiedObjectProducer(const edm::ParameterSet& conf) {
0025
0026 src_ = consumes<edm::View<T> >(conf.getParameter<edm::InputTag>("src"));
0027
0028 const edm::ParameterSet& mod_config = conf.getParameter<edm::ParameterSet>("modifierConfig");
0029 modifier_ = std::make_unique<Modifier>(mod_config, consumesCollector());
0030
0031 produces<Collection>();
0032 }
0033 ~ModifiedObjectProducer() override {}
0034
0035 void produce(edm::Event& evt, const edm::EventSetup& evs) final {
0036 modifier_->setEventContent(evs);
0037
0038 auto output = std::make_unique<Collection>();
0039
0040 auto input = evt.getHandle(src_);
0041 output->reserve(input->size());
0042
0043 modifier_->setEvent(evt);
0044
0045 for (auto const& itr : *input) {
0046 output->push_back(itr);
0047 T& obj = output->back();
0048 modifier_->modify(obj);
0049 }
0050
0051 evt.put(std::move(output));
0052 }
0053
0054 private:
0055 edm::EDGetTokenT<edm::View<T> > src_;
0056 std::unique_ptr<Modifier> modifier_;
0057 };
0058 }
0059
0060 typedef pat::ModifiedObjectProducer<reco::GsfElectron> ModifiedGsfElectronProducer;
0061 typedef pat::ModifiedObjectProducer<pat::Electron> ModifiedElectronProducer;
0062 typedef pat::ModifiedObjectProducer<pat::Photon> ModifiedPhotonProducer;
0063 typedef pat::ModifiedObjectProducer<pat::Muon> ModifiedMuonProducer;
0064 typedef pat::ModifiedObjectProducer<pat::Tau> ModifiedTauProducer;
0065 typedef pat::ModifiedObjectProducer<pat::Jet> ModifiedJetProducer;
0066
0067 #include "FWCore/Framework/interface/MakerMacros.h"
0068 DEFINE_FWK_MODULE(ModifiedGsfElectronProducer);
0069 DEFINE_FWK_MODULE(ModifiedElectronProducer);
0070 DEFINE_FWK_MODULE(ModifiedPhotonProducer);
0071 DEFINE_FWK_MODULE(ModifiedMuonProducer);
0072 DEFINE_FWK_MODULE(ModifiedTauProducer);
0073 DEFINE_FWK_MODULE(ModifiedJetProducer);