00001 #ifndef RecoParticleFlow_PFProducer_GsfElectronLinker_h 00002 #define RecoParticleFlow_PFProducer_GsfElectronLinker_h 00003 00007 00008 #include <iostream> 00009 #include <string> 00010 00011 // user include files 00012 #include "FWCore/Framework/interface/Frameworkfwd.h" 00013 #include "FWCore/Framework/interface/EDProducer.h" 00014 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00015 #include "FWCore/Framework/interface/Event.h" 00016 #include "FWCore/Framework/interface/MakerMacros.h" 00017 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" 00018 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" 00019 #include "DataFormats/Common/interface/ValueMap.h" 00020 00021 #include <string> 00022 00023 class GsfElectronLinker : public edm::EDProducer { 00024 public: 00025 00026 explicit GsfElectronLinker(const edm::ParameterSet&); 00027 00028 ~GsfElectronLinker(); 00029 00030 virtual void produce(edm::Event&, const edm::EventSetup&); 00031 00032 virtual void beginRun(edm::Run& run,const edm::EventSetup & es); 00033 00034 private: 00035 bool fetchCandidateCollection(edm::Handle<reco::PFCandidateCollection>& c, 00036 const edm::InputTag& tag, 00037 const edm::Event& iEvent) const ; 00038 00039 bool fetchGsfElectronCollection(edm::Handle<reco::GsfElectronCollection>& c, 00040 const edm::InputTag& tag, 00041 const edm::Event& iEvent) const ; 00042 00043 void fillValueMap(edm::Handle<reco::GsfElectronCollection>& c, 00044 const edm::OrphanHandle<reco::PFCandidateCollection> & pfHandle, 00045 edm::ValueMap<reco::PFCandidateRef>::Filler & filler) const; 00046 00047 private: 00048 00050 edm::InputTag inputTagPFCandidates_; 00051 00053 edm::InputTag inputTagGsfElectrons_; 00054 00056 std::string nameOutputPF_; 00057 00059 std::map<reco::GsfElectronRef,unsigned> electronCandidateMap_; 00060 }; 00061 00062 #endif