![]() |
![]() |
00001 #ifndef CommonTools_ParticleFlow_PFCandidateWithSrcPtrFactor_h 00002 #define CommonTools_ParticleFlow_PFCandidateWithSrcPtrFactor_h 00003 00012 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" 00013 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" 00014 00015 namespace reco { 00016 class PFCandidateWithSrcPtrFactory : public std::unary_function<reco::PFCandidate, edm::FwdPtr<reco::PFCandidate> > { 00017 public : 00018 reco::PFCandidate operator()( edm::FwdPtr<reco::PFCandidate> const & input ) const { 00019 reco::PFCandidate output( *input ); 00020 /* really, what's the point in this ? The one below should be enough 00021 //and the one loop here is a torture of converting Ptr<PFCandidate> to Ptr<Candidate> and back 00022 for ( unsigned int isource = 0; isource < input->numberOfSourceCandidatePtrs(); ++isource ) { 00023 edm::Ptr<reco::PFCandidate> ptr (input->sourceCandidatePtr(isource) ); 00024 output.setSourceCandidatePtr( ptr ); 00025 } 00026 */ 00027 output.setSourceCandidatePtr( input.backPtr() ); 00028 return output; 00029 } 00030 }; 00031 } 00032 00033 #endif