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 #include "FWCore/Utilities/interface/GCC11Compatibility.h"
00014
00015
00016 class NavSurface;
00017 class Bounds;
00018 class TrajectoryStateOnSurface;
00019
00020 class NavVolume : public MagVolume {
00021 public:
00022
00023 NavVolume( const PositionType& pos, const RotationType& rot,
00024 DDSolidShape shape, const MagneticFieldProvider<float> * mfp) :
00025 MagVolume(pos,rot,shape,mfp) {}
00026
00027 typedef std::vector<SurfaceAndBounds> Container;
00029
00030
00031 virtual ~NavVolume() {}
00032
00033 virtual Container nextSurface( const LocalPoint& pos, const LocalVector& mom, double charge,
00034 PropagationDirection propDir = alongMomentum) const = 0;
00035
00037 virtual Container nextSurface( const LocalPoint& pos, const LocalVector& mom, double charge,
00038 PropagationDirection propDir,
00039 ConstReferenceCountingPointer<Surface> NotThisSurfaceP) const = 0;
00040
00041 virtual VolumeCrossReturnType crossToNextVolume( const TrajectoryStateOnSurface& currentState,
00042 const Propagator& prop) const = 0;
00043
00044 virtual bool isIron() const = 0;
00045
00046 };
00047
00048 #endif
00049