00001 #ifndef NavVolume_H 00002 #define NavVolume_H 00003 00004 #include "MagneticField/VolumeGeometry/interface/MagVolume.h" 00005 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00006 #include "DetectorDescription/Core/interface/DDSolidShapes.h" 00007 00008 #include "TrackPropagation/NavGeometry/interface/SurfaceAndBounds.h" 00009 #include "TrackPropagation/NavGeometry/interface/VolumeCrossReturnType.h" 00010 00011 #include <vector> 00012 00013 class NavSurface; 00014 class Bounds; 00015 class TrajectoryStateOnSurface; 00016 00017 class NavVolume : public MagVolume { 00018 public: 00019 00020 NavVolume( const PositionType& pos, const RotationType& rot, 00021 DDSolidShape shape, const MagneticFieldProvider<float> * mfp) : 00022 MagVolume(pos,rot,shape,mfp) {} 00023 00024 typedef std::vector<SurfaceAndBounds> Container; 00026 00027 00028 virtual ~NavVolume() {} 00029 00030 virtual Container nextSurface( const LocalPoint& pos, const LocalVector& mom, double charge, 00031 PropagationDirection propDir = alongMomentum) const = 0; 00032 00034 virtual Container nextSurface( const LocalPoint& pos, const LocalVector& mom, double charge, 00035 PropagationDirection propDir, 00036 ConstReferenceCountingPointer<Surface> NotThisSurfaceP) const = 0; 00037 00038 virtual VolumeCrossReturnType crossToNextVolume( const TrajectoryStateOnSurface& currentState, 00039 const Propagator& prop) const = 0; 00040 00041 virtual bool isIron() const = 0; 00042 00043 }; 00044 00045 #endif 00046