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 #include "FWCore/Utilities/interface/GCC11Compatibility.h" 00011 00012 00013 class DetLayer; 00014 class FreeTrajectoryState; 00015 00024 class NavigableLayer { 00025 public: 00026 00027 virtual ~NavigableLayer() {} 00028 00029 virtual std::vector<const DetLayer*> 00030 nextLayers( NavigationDirection direction) const = 0; 00031 00032 virtual std::vector<const DetLayer*> 00033 nextLayers( const FreeTrajectoryState& fts, 00034 PropagationDirection timeDirection) const = 0; 00035 00036 virtual std::vector<const DetLayer*> 00037 compatibleLayers( NavigationDirection direction) const = 0; 00038 00039 virtual std::vector<const DetLayer*> 00040 compatibleLayers( const FreeTrajectoryState& fts, 00041 PropagationDirection timeDirection) const {int counter =0; return compatibleLayers(fts,timeDirection,counter);}; 00042 00043 virtual std::vector<const DetLayer*> 00044 compatibleLayers( const FreeTrajectoryState& fts, 00045 PropagationDirection timeDirection, 00046 int& counter)const { 00047 edm::LogWarning("DetLayers") << "compatibleLayers(fts,dir,counter) not implemented. returning empty vector"; 00048 return std::vector<const DetLayer*>() ; 00049 } 00050 00051 virtual DetLayer* detLayer() const = 0; 00052 virtual void setDetLayer( DetLayer* dl) = 0; 00053 00054 }; 00055 00056 #endif