#ifndef TGeomBase_hxx_seen #define TGeomBase_hxx_seen // c++ stl #include #include #include // oaGeomInfo #include "EoaGeomInfo.hxx" #include "IGeometryId.hxx" #include "IGeomModuleBase.hxx" // oaEvent #include namespace COMET { class IGeomBase; class IGeomInfo; }; /// Base class for all the 'singleton-like' objects returned by IGeomInfo. /// Each subdetector's geom object should inherit from this class. class COMET::IGeomBase { friend class IGeomInfo; public: /// Returns the number of detector modules held by the class int GetNumberOfModules() const { return GetModules().size(); } /// return the module geometry information corresponding /// to the root geometry path string provided const IGeomModuleBase& GetModule(const char* geometry_path) const; const IGeomModuleBase& GetModule(COMET::IHandle hit) const; const IGeomModuleBase& GetModule(TVector3 global_position) const; const std::vector< IGeomModuleBase* >& GetModules() const { return fModules; } protected: IGeomBase(){} /// Destructor. /// Remember it is the derived class' responsibility to delete /// the memory it allocated to modules stored in fModules. virtual ~IGeomBase(){} std::vector< IGeomModuleBase* > fModules; /// Fill geometry information virtual void Fill(); /// Clear geometry information virtual void Clear(); private: IGeomBase(const IGeomBase& rhs); IGeomBase& operator=(const IGeomBase& rhs); }; #endif