#include <RecoParticleFlow/PFAlgo/interface/PFCandConnector.h>
Public Member Functions | |
std::auto_ptr < reco::PFCandidateCollection > | connect (std::auto_ptr< reco::PFCandidateCollection > &pfCand) |
PFCandConnector () | |
Private Member Functions | |
bool | isSecondary (const reco::PFCandidate &pf) const |
void | link (reco::PFCandidate &pf1, reco::PFCandidate &pf2) const |
bool | shouldBeLinked (const reco::PFCandidate &pf1, const reco::PFCandidate &pf2) const |
Private Attributes | |
std::auto_ptr < reco::PFCandidateCollection > | pfC_ |
Definition at line 11 of file PFCandConnector.h.
PFCandConnector::PFCandConnector | ( | ) | [inline] |
Definition at line 15 of file PFCandConnector.h.
References pfC_.
00015 { pfC_ = std::auto_ptr<reco::PFCandidateCollection>(new reco::PFCandidateCollection); }
std::auto_ptr< reco::PFCandidateCollection > PFCandConnector::connect | ( | std::auto_ptr< reco::PFCandidateCollection > & | pfCand | ) |
Definition at line 4 of file PFCandConnector.cc.
References false, isSecondary(), link(), pfC_, and shouldBeLinked().
Referenced by PFAlgo::transferCandidates().
00004 { 00005 std::vector<bool> connected( pfCand->size(), false ); 00006 // loop on primary 00007 for( unsigned int prim=0; prim!= pfCand->size(); ++prim) { 00008 if( isSecondary(pfCand->at(prim)) ) continue; 00009 // loop on secondary 00010 for( unsigned int sec=0; sec!= pfCand->size(); ++sec) { 00011 if( prim==sec || connected[sec] || !isSecondary(pfCand->at(sec))) continue; 00012 if( shouldBeLinked( pfCand->at(prim), pfCand->at(sec) ) ) { 00013 link( pfCand->at(prim), pfCand->at(sec) ); 00014 connected[sec]=true; 00015 } 00016 } 00017 pfC_->push_back(pfCand->at(prim)); 00018 } 00019 return pfC_; 00020 }
bool PFCandConnector::isSecondary | ( | const reco::PFCandidate & | pf | ) | const [private] |
Definition at line 22 of file PFCandConnector.cc.
References reco::PFCandidate::flag(), and reco::PFCandidate::T_FROM_NUCLINT.
Referenced by connect().
00022 { 00023 // nuclear 00024 if( pf.flag( reco::PFCandidate::T_FROM_NUCLINT ) ) return true; 00025 // conversion 00026 // || pf.flag( reco::PFCandidate::T_FROM_GAMMACONV ) ) return true; 00027 else return false; 00028 }
void PFCandConnector::link | ( | reco::PFCandidate & | pf1, | |
reco::PFCandidate & | pf2 | |||
) | const [private] |
Definition at line 30 of file PFCandConnector.cc.
References reco::CompositeCandidate::addDaughter(), reco::PFCandidate::flag(), reco::PFCandidate::setFlag(), reco::PFCandidate::T_FROM_NUCLINT, and reco::PFCandidate::T_TO_NUCLINT.
Referenced by connect().
00030 { 00031 // TODO: Add a flag in PFCandidate :GAMMA_TO_GAMMACONV 00032 // nuclear 00033 if( primPFC.flag( reco::PFCandidate::T_TO_NUCLINT ) ) 00034 secPFC.setFlag( reco::PFCandidate::T_FROM_NUCLINT, true ); 00035 // conversion 00036 //else if( primPFC.flag( reco::PFCandidate::GAMMA_TO_GAMMACONV) ) 00037 // secPFC.setFlag( T_FROM_GAMMACONV, true ); 00038 00039 primPFC.addDaughter(secPFC); 00040 }
bool PFCandConnector::shouldBeLinked | ( | const reco::PFCandidate & | pf1, | |
const reco::PFCandidate & | pf2 | |||
) | const [private] |
Definition at line 42 of file PFCandConnector.cc.
References edm::Ref< C, T, F >::isNonnull(), and reco::PFCandidate::nuclearRef().
Referenced by connect().
00043 { 00044 // TODO : methods PFCandidate::conversionRef() 00045 // nuclear 00046 if(primPFC.nuclearRef().isNonnull() && secPFC.nuclearRef().isNonnull() ) { 00047 if( primPFC.nuclearRef() == secPFC.nuclearRef()) return true; 00048 } 00049 // conversion 00050 //else if( primPFC.conversionRef().isValid() && secPFC.conversionRef().isValid() ){ 00051 // if( primPFC.conversionRef() == secPFC.conversionRef()) return true; 00052 //} 00053 return false; 00054 }
std::auto_ptr<reco::PFCandidateCollection> PFCandConnector::pfC_ [private] |