Go to the documentation of this file.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 #include "FWCore/Utilities/interface/GCC11Compatibility.h"
00010
00011 class TrackingRecHit {
00012 public:
00013
00014 friend class MuonTransientTrackingRecHit;
00015
00016 typedef unsigned int id_type;
00017
00025 enum Type { valid = 0, missing = 1, inactive = 2, bad = 3 };
00026 static const int typeMask = 0xf;
00027 static const int rttiShift = 24;
00028
00030 enum SharedInputType {all, some};
00031
00032 explicit TrackingRecHit(DetId id, Type type=valid ) : m_id(id), m_status(type) {}
00033 explicit TrackingRecHit(id_type id=0, Type type=valid ) : m_id(id), m_status(type) {}
00034
00035 TrackingRecHit(DetId id, unsigned int rt, Type type=valid ) : m_id(id), m_status((rt<< rttiShift)|int(type)) {}
00036
00037
00038 virtual ~TrackingRecHit() {}
00039
00040 virtual TrackingRecHit * clone() const = 0;
00041
00042 virtual AlgebraicVector parameters() const = 0;
00043
00044 virtual AlgebraicSymMatrix parametersError() const = 0;
00045
00046 virtual AlgebraicMatrix projectionMatrix() const = 0;
00047
00048 virtual void getKfComponents( KfComponentsHolder & holder ) const ;
00049
00050 virtual int dimension() const = 0;
00051
00053 virtual std::vector<const TrackingRecHit*> recHits() const = 0;
00054 virtual void recHitsV(std::vector<const TrackingRecHit*> & ) const;
00055
00057 virtual std::vector<TrackingRecHit*> recHits() = 0;
00058 virtual void recHitsV(std::vector<TrackingRecHit*> & );
00059
00060
00061 id_type rawId() const { return m_id;}
00062 DetId geographicalId() const {return m_id;}
00063
00064 virtual LocalPoint localPosition() const = 0;
00065
00066 virtual LocalError localPositionError() const = 0;
00067
00069 virtual bool hasPositionAndError() const {return true;};
00070
00071 virtual float weight() const {return 1.;}
00072
00073 Type type() const { return Type(typeMask&m_status); }
00074 Type getType() const { return Type(typeMask&m_status); }
00075 bool isValid() const {return getType()==valid;}
00076
00077 unsigned int getRTTI() const { return m_status >> rttiShift;}
00078
00084 virtual bool sharesInput( const TrackingRecHit* other, SharedInputType what) const;
00085
00086 protected:
00087
00088 void setId(id_type iid) { m_id=iid;}
00089 void setType(Type ttype) { m_status=ttype;}
00090
00091 void setRTTI (unsigned int rt) { m_status &= (rt<< rttiShift);}
00092
00093 private:
00094
00095 id_type m_id;
00096
00097 unsigned int m_status;
00098
00099 };
00100
00101 #endif