00001 #ifndef RECOTRACKER_TRANSIENTRACKINGRECHIT_ProjectedRecHit2D_H 00002 #define RECOTRACKER_TRANSIENTRACKINGRECHIT_ProjectedRecHit2D_H 00003 00004 #include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h" 00005 #include "TrackingTools/TransientTrackingRecHit/interface/GenericTransientTrackingRecHit.h" 00006 #include "TrackingTools/TransientTrackingRecHit/interface/HelpertRecHit2DLocalPos.h" 00007 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h" 00008 00009 class SiStripRecHit2D; 00010 00011 class ProjectedRecHit2D : public GenericTransientTrackingRecHit { 00012 public: 00013 00014 virtual void getKfComponents( KfComponentsHolder & holder ) const { 00015 HelpertRecHit2DLocalPos().getKfComponents(holder, *hit(), *det()); 00016 } 00017 00018 00019 virtual AlgebraicSymMatrix parametersError() const { 00020 return HelpertRecHit2DLocalPos().parError( localPositionError(), *det()); 00021 } 00022 00023 const GeomDetUnit* detUnit() const {return 0;} 00024 const GeomDet* originalDet() const {return theOriginalDet;} 00025 00026 static RecHitPointer build( const GeomDet * geom, 00027 const GeomDet* originaldet, 00028 const ProjectedSiStripRecHit2D* rh, 00029 const StripClusterParameterEstimator* cpe, 00030 float weight=1., float annealing=1.) { 00031 return RecHitPointer( new ProjectedRecHit2D( geom, originaldet, rh, cpe, weight, annealing)); 00032 } 00033 00034 static RecHitPointer build( const LocalPoint& pos, const LocalError& err, 00035 const GeomDet* det, const GeomDet* originaldet, 00036 const TransientTrackingRecHit& originalHit, 00037 float weight=1., float annealing=1.) { 00038 return RecHitPointer( new ProjectedRecHit2D( pos, err, det, originaldet, originalHit, weight, annealing)); 00039 } 00040 00041 RecHitPointer clone( const TrajectoryStateOnSurface& ts) const; 00042 00043 const SiStripRecHit2D& originalHit() const { return static_cast<const ProjectedSiStripRecHit2D*>( hit() )->originalHit();} 00044 00045 virtual ConstRecHitContainer transientHits () const; 00046 00047 private: 00048 const StripClusterParameterEstimator* theCPE; 00049 const GeomDet* theOriginalDet; 00050 00051 ProjectedRecHit2D( const LocalPoint& pos, const LocalError& err, 00052 const GeomDet* det, const GeomDet* originaldet, 00053 const TransientTrackingRecHit& originalHit, 00054 float weight, float annealing); 00055 00056 ProjectedRecHit2D( const GeomDet * geom, const GeomDet* originaldet, 00057 const ProjectedSiStripRecHit2D* rh, 00058 const StripClusterParameterEstimator* cpe, 00059 float weight=1., float annealing=1.) : 00060 GenericTransientTrackingRecHit( geom, *rh,weight, annealing), theCPE(cpe), theOriginalDet(originaldet) {} 00061 00062 virtual ProjectedRecHit2D* clone() const { 00063 return new ProjectedRecHit2D(*this); 00064 } 00065 00066 }; 00067 00068 00069 00070 #endif