00001 #ifndef DTSLRECCLUSTER_H 00002 #define DTSLRECCLUSTER_H 00003 00017 /* Base Class Headers */ 00018 #include "DataFormats/TrackingRecHit/interface/RecHit1D.h" 00019 00020 /* Collaborating Class Declarations */ 00021 #include "DataFormats/MuonDetId/interface/DTSuperLayerId.h" 00022 #include "DataFormats/DTRecHit/interface/DTRecHit1DPair.h" 00023 00024 /* C++ Headers */ 00025 #include <iosfwd> 00026 00027 /* ====================================================================== */ 00028 00029 /* Class DTSLRecCluster Interface */ 00030 00031 class DTSLRecCluster : public RecHit1D { 00032 00033 public: 00034 00035 /* Constructor */ 00036 DTSLRecCluster() {} 00037 00039 DTSLRecCluster(const DTSuperLayerId id, const std::vector<DTRecHit1DPair>& pair) ; 00040 00042 DTSLRecCluster(const DTSuperLayerId id, 00043 const LocalPoint&, 00044 const LocalError&, 00045 const std::vector<DTRecHit1DPair>& pair) ; 00046 00047 /* Destructor */ 00048 virtual ~DTSLRecCluster() {} 00049 00050 /* Operations */ 00052 virtual DTSLRecCluster* clone() const { return new DTSLRecCluster(*this); } 00053 00055 DTSuperLayerId superLayerId() const { return theSlid; } 00056 00058 virtual AlgebraicVector parameters() const { 00059 return param( localPosition()); 00060 } 00061 00062 // The parameter error matrix 00063 virtual AlgebraicSymMatrix parametersError() const { 00064 return parError( localPositionError()); 00065 } 00066 00070 virtual AlgebraicMatrix projectionMatrix() const { 00071 if ( !isInitialized) initialize(); 00072 return theProjectionMatrix; 00073 } 00074 00076 virtual int dimension() const { return 2;} 00077 virtual LocalPoint localPosition() const { return thePos; } 00078 virtual LocalError localPositionError() const { return thePosError; } 00079 00081 virtual std::vector<const TrackingRecHit*> recHits() const ; 00082 00083 virtual std::vector<TrackingRecHit*> recHits() ; 00084 00086 std::vector<DTRecHit1DPair> specificRecHits() const { return thePairs; } 00087 00088 int nHits() const { return thePairs.size() ; } 00089 00090 private: 00091 DTSuperLayerId theSlid; 00092 00093 LocalPoint thePos; 00094 LocalError thePosError; 00095 00096 std::vector<DTRecHit1DPair> thePairs; 00097 00098 private: 00099 static bool isInitialized; 00100 static AlgebraicMatrix theProjectionMatrix; 00101 00102 void initialize() const { 00103 isInitialized=true; 00104 theProjectionMatrix = AlgebraicMatrix( 2, 5, 0); 00105 theProjectionMatrix[0][1]=1; 00106 } 00107 00108 AlgebraicVector param( const LocalPoint& lp) const { 00109 AlgebraicVector result(1); 00110 result[1]=lp.x(); 00111 return result; 00112 } 00113 00114 AlgebraicSymMatrix parError( const LocalError& le) const { 00115 AlgebraicSymMatrix m(1); 00116 m[0][0]=le.xx(); 00117 return m; 00118 } 00119 00120 protected: 00121 00122 }; 00123 std::ostream& operator<<(std::ostream& os, const DTSLRecCluster& seg); 00124 #endif // DTSLRECCLUSTER_H 00125