00001 #include "RecoTracker/TransientTrackingRecHit/interface/TSiStripRecHit2DLocalPos.h" 00002 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h" 00003 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" 00004 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h" 00005 00006 00007 TransientTrackingRecHit::RecHitPointer 00008 TSiStripRecHit2DLocalPos::clone (const TrajectoryStateOnSurface& ts) const 00009 { 00010 if (theCPE != 0) { 00011 00013 00014 if(!specificHit()->cluster().isNull()){ 00015 const SiStripCluster& clust = *specificHit()->cluster(); 00016 StripClusterParameterEstimator::LocalValues lv = 00017 theCPE->localParameters( clust, *detUnit(), ts.localParameters()); 00018 return TSiStripRecHit2DLocalPos::build( lv.first, lv.second, det(), 00019 specificHit()->cluster(), theCPE, weight(), getAnnealingFactor()); 00020 }else{ 00021 const SiStripCluster& clust = *specificHit()->cluster_regional(); 00022 StripClusterParameterEstimator::LocalValues lv = 00023 theCPE->localParameters( clust, *detUnit(), ts.localParameters()); 00024 return TSiStripRecHit2DLocalPos::build( lv.first, lv.second, det(), 00025 specificHit()->cluster_regional(), theCPE, weight(), getAnnealingFactor()); 00026 } 00027 00028 } 00030 else return clone(); 00031 } 00032 00033 const GeomDetUnit* TSiStripRecHit2DLocalPos::detUnit() const 00034 { 00035 return static_cast<const GeomDetUnit*>(det()); 00036 }