00001 #ifndef DetLayers_NavigableLayer_h 00002 #define DetLayers_NavigableLayer_h 00003 00004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00005 #include "TrackingTools/DetLayers/interface/NavigationDirection.h" 00006 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00007 00008 #include <vector> 00009 00010 class DetLayer; 00011 class FreeTrajectoryState; 00012 00021 class NavigableLayer { 00022 public: 00023 00024 virtual ~NavigableLayer() {} 00025 00026 virtual std::vector<const DetLayer*> 00027 nextLayers( NavigationDirection direction) const = 0; 00028 00029 virtual std::vector<const DetLayer*> 00030 nextLayers( const FreeTrajectoryState& fts, 00031 PropagationDirection timeDirection) const = 0; 00032 00033 virtual std::vector<const DetLayer*> 00034 compatibleLayers( NavigationDirection direction) const = 0; 00035 00036 virtual std::vector<const DetLayer*> 00037 compatibleLayers( const FreeTrajectoryState& fts, 00038 PropagationDirection timeDirection) const {int counter =0; return compatibleLayers(fts,timeDirection,counter);}; 00039 00040 virtual std::vector<const DetLayer*> 00041 compatibleLayers( const FreeTrajectoryState& fts, 00042 PropagationDirection timeDirection, 00043 int& counter)const { 00044 edm::LogWarning("DetLayers") << "compatibleLayers(fts,dir,counter) not implemented. returning empty vector"; 00045 return std::vector<const DetLayer*>() ; 00046 } 00047 00048 virtual DetLayer* detLayer() const = 0; 00049 virtual void setDetLayer( DetLayer* dl) = 0; 00050 00051 }; 00052 00053 #endif