00001 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" 00002 #include "DataFormats/GeometryCommonDetAlgo/interface/ErrorFrameTransformer.h" 00003 00004 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h" 00005 00006 const GeomDetUnit * TransientTrackingRecHit::detUnit() const 00007 { 00008 return dynamic_cast<const GeomDetUnit*>(det()); 00009 } 00010 00011 00012 GlobalPoint TransientTrackingRecHit::globalPosition() const { 00013 if(! hasGlobalPosition_){ 00014 globalPosition_ = surface()->toGlobal(localPosition()); 00015 hasGlobalPosition_ = true; 00016 return globalPosition_; 00017 }else{ 00018 return globalPosition_; 00019 } 00020 } 00021 00022 GlobalError TransientTrackingRecHit::globalPositionError() const { 00023 if(! hasGlobalError_){ 00024 setPositionErrors(); 00025 return globalError_; 00026 }else{ 00027 return globalError_; 00028 } 00029 00030 } 00031 00032 float 00033 TransientTrackingRecHit::errorGlobalR() const { 00034 if(!hasGlobalError_){ 00035 setPositionErrors(); 00036 return errorR_; 00037 }else{ 00038 return errorR_; 00039 } 00040 } 00041 00042 float 00043 TransientTrackingRecHit::errorGlobalZ() const { 00044 if(!hasGlobalError_){ 00045 setPositionErrors(); 00046 return errorZ_; 00047 }else{ 00048 return errorZ_; 00049 } 00050 } 00051 00052 float 00053 TransientTrackingRecHit::errorGlobalRPhi() const { 00054 if(!hasGlobalError_){ 00055 setPositionErrors(); 00056 return errorRPhi_; 00057 }else{ 00058 return errorRPhi_; 00059 } 00060 } 00061 00062 void 00063 TransientTrackingRecHit::setPositionErrors() const { 00064 globalError_ = ErrorFrameTransformer().transform( localPositionError(), *surface() ); 00065 errorRPhi_ = globalPosition().perp()*sqrt(globalError_.phierr(globalPosition())); 00066 errorR_ = sqrt(globalError_.rerr(globalPosition())); 00067 errorZ_ = sqrt(globalError_.czz()); 00068 hasGlobalError_ = true; 00069 } 00070 00071 TransientTrackingRecHit::ConstRecHitContainer TransientTrackingRecHit::transientHits() const 00072 { 00073 // no components by default 00074 return ConstRecHitContainer(); 00075 } 00076 00077 TransientTrackingRecHit::RecHitPointer 00078 TransientTrackingRecHit::clone( const TrajectoryStateOnSurface& ts) const { 00079 return RecHitPointer(const_cast<TransientTrackingRecHit*>(this)); 00080 }