CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_9/src/TrackPropagation/NavGeometry/interface/NavSurface.h

Go to the documentation of this file.
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