00001 #ifndef RECOTRACKER_TRANSIENTRACKINGRECHIT_TSiStripMatchedRecHit_H 00002 #define RECOTRACKER_TRANSIENTRACKINGRECHIT_TSiStripMatchedRecHit_H 00003 00004 #include "TrackingTools/TransientTrackingRecHit/interface/GenericTransientTrackingRecHit.h" 00005 #include "TrackingTools/TransientTrackingRecHit/interface/HelpertRecHit2DLocalPos.h" 00006 #include "RecoLocalTracker/SiStripRecHitConverter/interface/SiStripRecHitMatcher.h" 00007 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h" 00008 #include<memory> 00009 00010 class TSiStripMatchedRecHit : public GenericTransientTrackingRecHit{ 00011 public: 00012 00013 virtual void getKfComponents( KfComponentsHolder & holder ) const { 00014 HelpertRecHit2DLocalPos().getKfComponents(holder, *hit(), *det()); 00015 } 00016 00017 virtual AlgebraicSymMatrix parametersError() const { 00018 return HelpertRecHit2DLocalPos().parError( localPositionError(), *det()); 00019 } 00020 00021 const GeomDetUnit* detUnit() const {return 0;} 00022 00023 static RecHitPointer build( const GeomDet * geom, const TrackingRecHit * rh, 00024 const SiStripRecHitMatcher *matcher, 00025 const StripClusterParameterEstimator* cpe=0, 00026 float weight=1., float annealing=1.) { 00027 return RecHitPointer( new TSiStripMatchedRecHit( geom, rh, matcher,cpe, weight, annealing)); 00028 } 00029 00030 static RecHitPointer build( const GeomDet * geom, std::auto_ptr<TrackingRecHit> rh, 00031 const SiStripRecHitMatcher *matcher, 00032 const StripClusterParameterEstimator* cpe=0, 00033 float weight=1., float annealing=1.) { 00034 return RecHitPointer( new TSiStripMatchedRecHit( geom, rh, matcher,cpe,weight, annealing)); 00035 } 00036 00037 virtual RecHitPointer clone( const TrajectoryStateOnSurface& ts) const; 00038 virtual bool canImproveWithTrack() const {return (theMatcher != 0);} 00039 virtual ConstRecHitContainer transientHits () const; 00040 private: 00041 const SiStripRecHitMatcher* theMatcher; 00042 const StripClusterParameterEstimator* theCPE; 00043 TSiStripMatchedRecHit (const GeomDet * geom, const TrackingRecHit * rh, 00044 const SiStripRecHitMatcher *matcher, 00045 const StripClusterParameterEstimator* cpe, 00046 float weight, float annealing) : 00047 GenericTransientTrackingRecHit(geom, *rh, weight, annealing), theMatcher(matcher),theCPE(cpe) {} 00048 00049 TSiStripMatchedRecHit (const GeomDet * geom, std::auto_ptr<TrackingRecHit> rh, 00050 const SiStripRecHitMatcher *matcher, 00051 const StripClusterParameterEstimator* cpe, 00052 float weight, float annealing) : 00053 GenericTransientTrackingRecHit(geom, rh.release(), weight, annealing), theMatcher(matcher),theCPE(cpe) {} 00054 00055 virtual TSiStripMatchedRecHit* clone() const { 00056 return new TSiStripMatchedRecHit(*this); 00057 } 00058 00059 }; 00060 00061 00062 00063 #endif