![]() |
![]() |
00001 #ifndef NavSurface_H 00002 #define NavSurface_H 00003 00004 #include "DataFormats/GeometrySurface/interface/Surface.h" 00005 00006 #include <utility> 00007 00008 #include "FWCore/Utilities/interface/GCC11Compatibility.h" 00009 00010 00011 class NavVolume; 00012 class TrajectoryStateOnSurface; 00013 class Propagator; 00014 class Bounds; 00015 00016 class NavSurface : public ReferenceCountedInConditions // : public virtual Surface 00017 { 00018 public: 00019 00020 // NavSurface( const PositionType& pos, const RotationType& rot) : Surface(pos,rot) {} 00021 00022 typedef Surface::LocalPoint LocalPoint; 00023 typedef Surface::LocalVector LocalVector; 00024 typedef Surface::GlobalPoint GlobalPoint; 00025 typedef Surface::GlobalVector GlobalVector; 00026 typedef std::pair<TrajectoryStateOnSurface,double> TSOSwithPath; 00027 00028 virtual ~NavSurface() {} 00029 00031 virtual const Surface& surface() const = 0; 00032 00033 virtual const NavVolume* nextVolume( const LocalPoint& point, 00034 SurfaceOrientation::Side side) const = 0; 00035 00037 virtual TrajectoryStateOnSurface 00038 propagate( const Propagator& prop, const TrajectoryStateOnSurface& startingState) const = 0; 00039 00041 virtual TSOSwithPath 00042 propagateWithPath( const Propagator& prop, const TrajectoryStateOnSurface& startingState) const = 0; 00043 00045 virtual const Bounds* bounds( const NavVolume* vol) = 0; 00046 00048 // FIXME: should not be public... 00049 virtual void addVolume( const NavVolume* vol, const Bounds* bounds, 00050 SurfaceOrientation::Side side) = 0; 00051 00055 virtual std::pair<bool,double> 00056 distanceAlongLine( const GlobalPoint& pos, const GlobalVector& dir) const = 0; 00057 00059 LocalPoint toLocal( const GlobalPoint& p) const {return surface().toLocal(p);} 00060 LocalVector toLocal( const GlobalVector& p) const {return surface().toLocal(p);} 00061 GlobalPoint toGlobal( const LocalPoint& p) const {return surface().toGlobal(p);} 00062 GlobalVector toGlobal( const LocalVector& p) const {return surface().toGlobal(p);} 00063 00064 00065 }; 00066 00067 #endif