CMS 3D CMS Logo

RecoCandidate.h

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

Generated on Tue Jun 9 17:31:40 2009 for CMSSW by  doxygen 1.5.4