00001 #ifndef RecoCandidate_RecoCandidate_h 00002 #define RecoCandidate_RecoCandidate_h 00003 00012 #include "DataFormats/Candidate/interface/LeafCandidate.h" 00013 #include "DataFormats/TrackReco/interface/TrackFwd.h" 00014 #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h" 00015 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" 00016 #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" 00017 #include "DataFormats/CaloTowers/interface/CaloTowerFwd.h" 00018 00019 namespace reco { 00020 00021 class RecoCandidate : public LeafCandidate { 00022 public: 00024 RecoCandidate() : LeafCandidate() { } 00026 RecoCandidate( Charge q, const LorentzVector & p4, const Point & vtx = Point( 0, 0, 0 ), 00027 int pdgId = 0, int status = 0 ) : 00028 LeafCandidate( q, p4, vtx, pdgId, status ) { } 00030 RecoCandidate( Charge q, const PolarLorentzVector & p4, const Point & vtx = Point( 0, 0, 0 ), 00031 int pdgId = 0, int status = 0 ) : 00032 LeafCandidate( q, p4, vtx, pdgId, status ) { } 00034 virtual ~RecoCandidate(); 00036 virtual bool overlap( const Candidate & ) const = 0; 00038 virtual reco::TrackRef track() const; 00040 virtual reco::TrackRef track( size_t ) const; 00042 virtual size_t numberOfTracks() const; 00044 virtual reco::GsfTrackRef gsfTrack() const; 00046 virtual reco::TrackRef standAloneMuon() const; 00048 virtual reco::TrackRef combinedMuon() const; 00050 virtual reco::SuperClusterRef superCluster() const; 00052 virtual CaloTowerRef caloTower() const; 00054 const Track * bestTrack() const; 00056 TrackBaseRef bestTrackRef() const; 00058 enum TrackType { noTrackType, recoTrackType, gsfTrackType }; 00060 TrackType bestTrackType() const; 00061 protected: 00063 template<typename R> 00064 bool checkOverlap( const R & r1, const R & r2 ) const { 00065 return( ! r1.isNull() && ! r2.isNull() && r1 == r2 ); 00066 } 00067 00068 private: 00069 template<typename, typename, typename> friend struct component; 00070 }; 00071 00073 struct StandAloneMuonTag { }; 00075 struct CombinedMuonTag { }; 00076 00078 GET_DEFAULT_CANDIDATE_COMPONENT( RecoCandidate, TrackRef, track ); 00080 GET_DEFAULT_CANDIDATE_MULTIPLECOMPONENTS( RecoCandidate, TrackRef, track, numberOfTracks ); 00082 GET_DEFAULT_CANDIDATE_COMPONENT( RecoCandidate, GsfTrackRef, gsfTrack ); 00084 GET_CANDIDATE_COMPONENT( RecoCandidate, TrackRef, standAloneMuon, StandAloneMuonTag ); 00086 GET_CANDIDATE_COMPONENT( RecoCandidate, TrackRef, combinedMuon, CombinedMuonTag ); 00088 GET_DEFAULT_CANDIDATE_COMPONENT( RecoCandidate, SuperClusterRef, superCluster ); 00090 GET_DEFAULT_CANDIDATE_COMPONENT( RecoCandidate, CaloTowerRef, caloTower ); 00092 GET_DEFAULT_CANDIDATE_COMPONENT( RecoCandidate, const Track *, bestTrack ); 00094 GET_DEFAULT_CANDIDATE_COMPONENT( RecoCandidate, RecoCandidate::TrackType, bestTrackType ); 00095 00096 } 00097 00098 #endif