![]() |
![]() |
00001 #ifndef TrackingRecHit_h 00002 #define TrackingRecHit_h 00003 00004 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h" 00005 #include "DataFormats/DetId/interface/DetId.h" 00006 #include "DataFormats/GeometrySurface/interface/LocalError.h" 00007 #include "DataFormats/GeometryVector/interface/LocalPoint.h" 00008 #include "DataFormats/TrackingRecHit/interface/KfComponentsHolder.h" 00009 00010 class TrackingRecHit { 00011 public: 00012 00013 friend class MuonTransientTrackingRecHit; 00014 00015 typedef unsigned int id_type; 00016 00024 enum Type { valid = 0, missing = 1, inactive = 2, bad = 3 }; 00026 enum SharedInputType {all, some}; 00027 00028 explicit TrackingRecHit(DetId id, Type type=valid ) : m_id(id), m_status(type) {} 00029 explicit TrackingRecHit(id_type id=0, Type type=valid ) : m_id(id), m_status(type) {} 00030 00031 virtual ~TrackingRecHit() {} 00032 00033 virtual TrackingRecHit * clone() const = 0; 00034 00035 virtual AlgebraicVector parameters() const = 0; 00036 00037 virtual AlgebraicSymMatrix parametersError() const = 0; 00038 00039 virtual AlgebraicMatrix projectionMatrix() const = 0; 00040 00041 virtual void getKfComponents( KfComponentsHolder & holder ) const ; 00042 00043 virtual int dimension() const = 0; 00044 00046 virtual std::vector<const TrackingRecHit*> recHits() const = 0; 00047 virtual void recHitsV(std::vector<const TrackingRecHit*> & ) const; 00048 00050 virtual std::vector<TrackingRecHit*> recHits() = 0; 00051 virtual void recHitsV(std::vector<TrackingRecHit*> & ); 00052 00053 DetId geographicalId() const {return m_id;} 00054 00055 virtual LocalPoint localPosition() const = 0; 00056 00057 virtual LocalError localPositionError() const = 0; 00058 00059 virtual float weight() const {return 1.;} 00060 00061 Type type() const { return Type(m_status); } 00062 Type getType() const { return Type(m_status); } 00063 bool isValid() const {return getType()==valid;} 00064 00070 virtual bool sharesInput( const TrackingRecHit* other, SharedInputType what) const; 00071 00072 protected: 00073 // used by muon... 00074 void setId(id_type iid) { m_id=iid;} 00075 inline void setType(Type ttype) { m_status=ttype;} 00076 00077 private: 00078 00079 id_type m_id; 00080 int m_status; 00081 00082 }; 00083 00084 #endif