00001 #ifndef TOUCHABLETODETECTORELEMENT_H
00002 #define TOUCHABLETODETECTORELEMENT_H
00003
00007
00008 #include "G4DataHelpers/ITouchableToDetectorElement.h"
00009 #include "GaudiAlg/GaudiTool.h"
00010
00011 #include "DetDesc/ILVolume.h"
00012
00013 class TouchableToDetectorElement : public GaudiTool, virtual ITouchableToDetectorElement
00014 {
00015 public:
00016 TouchableToDetectorElement(const std::string& type,
00017 const std::string& name,
00018 const IInterface* parent);
00019 virtual ~TouchableToDetectorElement() {};
00020
00022 virtual StatusCode GetBestDetectorElement(
00023 const G4TouchableHistory* inHistory,
00024 const std::vector<std::string>& inPath,
00025 const IDetectorElement* &outElement,
00026 int& outCompatibility );
00027
00029 virtual StatusCode G4VolumeToDetDesc( const G4VPhysicalVolume* inVol,
00030 const IPVolume* &outVol
00031 );
00032
00033
00035 virtual StatusCode ClearCache() { return StatusCode::SUCCESS; };
00036
00037
00038 struct SpecifiedVolume {
00039 const IDetectorElement* mTop;
00040 ILVolume::ReplicaPath mRpath;
00041 };
00043 virtual StatusCode G4VolumeToDetDesc( const G4VPhysicalVolume* inVol,
00044 const IPVolume* &outVol,
00045 ILVolume::ReplicaPath& outPath
00046 );
00047
00048 StatusCode GetSpecifiedVolume(const G4TouchableHistory* inHistory, SpecifiedVolume& outVol);
00049 StatusCode GetSpecifiedVolume(const IDetectorElement* inElem, const IDetectorElement* inTopElem, SpecifiedVolume& outVol);
00050
00051
00053 int Compatability(const SpecifiedVolume& inPlace, const SpecifiedVolume& inContainer);
00054
00055 template < class T >
00056 StatusCode FindObjectsInDirectory(const std::string& dirname, std::vector<const T*>& outList);
00057
00058 };
00059
00060
00061 #endif