00001 #ifndef ITOUCHABLETODETECTORELEMENT_H 00002 #define ITOUCHABLETODETECTORELEMENT_H 00003 00004 00034 #include "GaudiKernel/IAlgTool.h" 00035 #include "GaudiKernel/StatusCode.h" 00036 #include <string> 00037 #include <vector> 00038 00039 class G4TouchableHistory; 00040 class IDetectorElement; 00041 class G4VPhysicalVolume; 00042 class IPVolume; 00043 00044 class ITouchableToDetectorElement : virtual public IAlgTool 00045 { 00046 public: 00047 static const InterfaceID& interfaceID(); 00048 00050 virtual StatusCode GetBestDetectorElement( 00051 const G4TouchableHistory* inHistory, // The current particle location 00052 const std::vector<std::string>& inPaths, // Name(s) of specific detElements, or paths to be searched 00053 const IDetectorElement* &outElement, // output: The best element (may be zero!) 00054 int& outCompatibility ) =0; // output: the goodness of the match (higher is better) 00055 00057 virtual StatusCode G4VolumeToDetDesc( 00058 const G4VPhysicalVolume* inVol, 00059 const IPVolume* &outVol 00060 ) = 0; 00061 00063 virtual StatusCode ClearCache() = 0; // To be called to invalidate any caches in case the geometry changes in some substantial way, 00064 // i.e. the top volume fed to G4 changes. 00065 00066 00067 protected: 00068 00069 virtual ~ITouchableToDetectorElement(); 00070 }; 00071 00072 00073 00074 #endif /* ITOUCHABLETODETECTORELEMENT_H */