/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PhysicsTools/BPHNano/plugins/MatchEmbedder.cc
78 строк
3 KB
Georgios
code formats
16 апр 2025, 20:05
16 апр 2025, 20:05
5d994c4
Код
Авторство
О чём код?
#include <algorithm> #include <limits> #include "DataFormats/Common/interface/View.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/InputTag.h" #include "TrackingTools/IPTools/interface/IPTools.h" #include "TrackingTools/Records/interface/TransientTrackRecord.h" #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "helper.h" template <typename PATOBJ> class MatchEmbedder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) public: explicit MatchEmbedder(const edm::ParameterSet &cfg) : src_{consumes<PATOBJCollection>(cfg.getParameter<edm::InputTag>("src"))}, matching_{ consumes<edm::Association<reco::GenParticleCollection> >(cfg.getParameter<edm::InputTag>("matching"))} { produces<PATOBJCollection>(); } ~MatchEmbedder() override {} void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; private: typedef std::vector<PATOBJ> PATOBJCollection; const edm::EDGetTokenT<PATOBJCollection> src_; const edm::EDGetTokenT<edm::Association<reco::GenParticleCollection> > matching_; }; template <typename PATOBJ> void MatchEmbedder<PATOBJ>::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &iSetup) const { // input edm::Handle<PATOBJCollection> src; evt.getByToken(src_, src); edm::Handle<edm::Association<reco::GenParticleCollection> > matching; evt.getByToken(matching_, matching); size_t nsrc = src->size(); // output std::unique_ptr<PATOBJCollection> out(new PATOBJCollection()); out->reserve(nsrc); for (unsigned int i = 0; i < nsrc; ++i) { edm::Ptr<PATOBJ> ptr(src, i); reco::GenParticleRef match = (*matching)[ptr]; out->emplace_back(src->at(i)); out->back().addUserInt("mcMatch", match.isNonnull() ? match->pdgId() : 0); } // adding label to be consistent with the muon and track naming evt.put(std::move(out)); } #include "DataFormats/PatCandidates/interface/Muon.h" typedef MatchEmbedder<pat::Muon> MuonMatchEmbedder; #include "DataFormats/PatCandidates/interface/Electron.h" typedef MatchEmbedder<pat::Electron> ElectronMatchEmbedder; #include "DataFormats/PatCandidates/interface/CompositeCandidate.h" typedef MatchEmbedder<pat::CompositeCandidate> CompositeCandidateMatchEmbedder; #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(MuonMatchEmbedder); DEFINE_FWK_MODULE(ElectronMatchEmbedder); DEFINE_FWK_MODULE(CompositeCandidateMatchEmbedder);