00001 #ifndef RecoParticleFlow_PFProducer_PFLinker_h 00002 #define RecoParticleFlow_PFProducer_PFLinker_h 00003 00015 #include <iostream> 00016 #include <string> 00017 00018 // user include files 00019 #include "FWCore/Framework/interface/Frameworkfwd.h" 00020 #include "FWCore/Framework/interface/EDProducer.h" 00021 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00022 #include "FWCore/Framework/interface/Event.h" 00023 #include "FWCore/Framework/interface/MakerMacros.h" 00024 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h" 00025 #include "DataFormats/EgammaCandidates/interface/PhotonFwd.h" 00026 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" 00027 #include "DataFormats/Common/interface/ValueMap.h" 00028 00029 #include <string> 00030 00031 class PFLinker : public edm::EDProducer { 00032 public: 00033 00034 explicit PFLinker(const edm::ParameterSet&); 00035 00036 ~PFLinker(); 00037 00038 virtual void produce(edm::Event&, const edm::EventSetup&); 00039 00040 virtual void beginRun(edm::Run& run,const edm::EventSetup & es); 00041 00042 private: 00043 00044 template<typename T> 00045 bool fetchCollection(edm::Handle<T>& c, 00046 const edm::InputTag& tag, 00047 const edm::Event& iEvent) const ; 00048 00049 template<typename TYPE> 00050 edm::ValueMap<reco::PFCandidatePtr> fillValueMap(edm::Event & event, 00051 std::string label, 00052 edm::Handle<TYPE>& inputObjCollection, 00053 const std::map<edm::Ref<TYPE>, reco::PFCandidatePtr> & mapToTheCandidate, 00054 const edm::OrphanHandle<reco::PFCandidateCollection> & newPFCandColl) const; 00055 00056 private: 00057 00059 std::vector<edm::InputTag> inputTagPFCandidates_; 00060 00062 edm::InputTag inputTagGsfElectrons_; 00063 00065 edm::InputTag inputTagPhotons_; 00066 00068 edm::InputTag inputTagMuons_; 00069 00071 std::string nameOutputPF_; 00072 00074 std::string nameOutputElectronsPF_; 00075 00077 std::string nameOutputPhotonsPF_; 00078 00080 std::string nameOutputMergedPF_; 00081 00083 bool producePFCandidates_; 00084 00086 bool fillMuonRefs_; 00087 00088 }; 00089 00090 #endif