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