![]() |
![]() |
00001 #include "Validation/RecoMuon/plugins/RecoMuonFromPFProducer.h" 00002 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00003 00004 #include <sstream> 00005 00006 using namespace std; 00007 00008 using namespace boost; 00009 00010 using namespace edm; 00011 00012 #include "DataFormats/MuonReco/interface/MuonFwd.h" 00013 #include "DataFormats/MuonReco/interface/Muon.h" 00014 00015 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" 00016 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" 00017 00018 00019 00020 RecoMuonFromPFProducer::RecoMuonFromPFProducer(const edm::ParameterSet& iConfig) { 00021 00022 inputTagPF_ 00023 = iConfig.getParameter<InputTag>("particles"); 00024 00025 verbose_ = 00026 iConfig.getUntrackedParameter<bool>("verbose",false); 00027 00028 // register products 00029 produces<reco::MuonCollection>(); 00030 } 00031 00032 00033 00034 RecoMuonFromPFProducer::~RecoMuonFromPFProducer() {} 00035 00036 00037 void 00038 RecoMuonFromPFProducer::beginJob() {} 00039 00040 void 00041 RecoMuonFromPFProducer::beginRun(edm::Run & run, 00042 const edm::EventSetup & es) {} 00043 00044 00045 00046 void 00047 RecoMuonFromPFProducer::produce(Event& iEvent, 00048 const EventSetup& iSetup) { 00049 00050 00051 std::auto_ptr< reco::MuonCollection > 00052 pOutput( new reco::MuonCollection); 00053 00054 edm::Handle<reco::PFCandidateCollection> pfCandidates; 00055 iEvent.getByLabel( inputTagPF_, pfCandidates); 00056 00057 typedef reco::PFCandidateCollection::const_iterator IP; 00058 for (IP ip=pfCandidates->begin(); ip !=pfCandidates->end(); ++ip ) { 00059 00060 const reco::PFCandidate& cand = *ip; 00061 if( cand.particleId() == reco::PFCandidate::mu) { 00062 if( !cand.muonRef().isAvailable() ) { 00063 cout<<cand.muonRef().id()<<endl; 00064 LogError("RecoMuonFromPFProducer")<<"reference to reco::Muon not available for muon PFCandidate "<<cand<<endl; 00065 00066 assert( false ); 00067 } 00068 00069 pOutput->push_back( *(cand.muonRef()) ); 00070 } 00071 } 00072 00073 iEvent.put(pOutput); 00074 00075 } 00076 00077 DEFINE_FWK_MODULE(RecoMuonFromPFProducer);