CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/Validation/RecoMuon/plugins/RecoMuonFromPFProducer.cc

Go to the documentation of this file.
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);