/** CbmLitEnvironment.h *@author A.Lebedev *@since 2007 ** ** The class is an interface to the CBM detector classes and field. ** The detector geometry which is represented in the form of ** CbmLitDetectorLayout class constructed in this class. **/ #ifndef CBMLITENVIRONMENT_H_ #define CBMLITENVIRONMENT_H_ #include "CbmLitDetectorLayout.h" #include "parallel/LitDetectorGeometry.h" #include "parallel/electron/LitDetectorGeometryElectron.h" #include #include class FairField; class TGeoNode; class TGeoMaterial; class CbmLitEnvironment { public: virtual ~CbmLitEnvironment(); static CbmLitEnvironment* Instance(); FairField* GetField(); const CbmLitDetectorLayout& GetLayout(); // void GetLayoutParallelVec(LitDetectorLayoutVec& layout); // void GetLayoutParallelScal(LitDetectorLayoutScal& layout); // template void GetLayoutParallel(LitDetectorLayout& layout); const CbmLitDetectorLayout& GetMuchLayout() {return fMuchLayout;} const CbmLitDetectorLayout& GetTrdLayout() {return fTrdLayout;} void GetMuchLayoutVec(LitDetectorLayoutVec& layout); void GetMuchLayoutScal(LitDetectorLayoutScal& layout); template void GetMuchLayout(LitDetectorLayout& layout); void GetTrdLayoutVec(LitDetectorLayoutElectronVec& layout); void GetTrdLayoutScal(LitDetectorLayoutElectronScal& layout); template void GetTrdLayout(LitDetectorLayoutElectron& layout); int MaterialId( int stationGroup, int station, int substation, const CbmLitDetectorLayout& layout) const; int TrdMaterialId( int stationGroup, int station, const CbmLitDetectorLayout& layout) const; const CbmLitDetectorLayout& GetTofLayout(); const CbmLitStation& GetTofStation(); bool IsElectronSetup() const; bool IsSts() const; bool IsTrd() const; bool IsMuch() const; bool IsTof() const; bool IsTrdSimple() const; protected: CbmLitEnvironment(); void CombineMuchAndTrd(); void MuchLayout(); void TrdLayout(); void TrdLayoutSimple(); private: void DetermineLayout( const std::vector& stations, CbmLitDetectorLayout& layout); std::vector DivideToSubstations( const std::vector& stations); bool IsStraw() const; bool IsTrdSegmented() const; bool CheckDetectorPresence( const std::string& name) const; static CbmLitEnvironment* fInstance; CbmLitDetectorLayout fLayout; CbmLitDetectorLayout fMuchTrdLayout; CbmLitDetectorLayout fMuchLayout; CbmLitDetectorLayout fTrdLayout; CbmLitDetectorLayout fTofLayout; CbmLitStation fTofStation; FairField *fField; }; #endif // CBMLITENVIRONMENT_H_