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