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