CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_9/src/DataFormats/DTRecHit/interface/DTSLRecCluster.h

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