#ifndef TFieldManager_h #define TFieldManager_h #include "IOAMagneticField.hxx" #include "TVector3.h" #include #include namespace COMET { class IFieldManager; }; /// \brief This singleton makes it possible to change the magnetic field within a run /// \author Christian Hansen, hansen@ific.uv.es /// \author Eike Frank, eike.frank@lhep.unibe.ch /// /// IFieldManager /// /// This class is a singleton. It has no constructor and all member- /// functions are static. It saves in memory an instant of IOAMagneticField. /// For now it only manages the B field (E field in future). /// /// A simple example how this class can be called: /// /// \code /// #include "IFieldManager.hxx" /// ... /// IFieldManager::InitializeFieldManager(); /// TVector3 point(1.,1.,1.); /// TVector3 B1 = IFieldManager::GetFieldValue(point); /// cout<<"B1 (x,y,z) "< *GetBMap(int arm_nr); //void GetBMap2Arr(int arm_nr,TVector3 magarm[][41][78]); TVector3 *GetBMapArr(int arm_nr); //void GetBMap2Arr(int arm_nr,TVector3 magarm); std::set *GetNodesX(int arm_nr); std::set *GetNodesY(int arm_nr); std::set *GetNodesZ(int arm_nr); private: static bool fFieldManagerIsInitialized; static COMET::IOAMagneticField* fMagField; IFieldManager(); ~IFieldManager(); static COMET::IOAMagneticField& GetMagneticField(); /// The static pointer to the singleton instance. static IFieldManager* fTFieldManager; double fBFieldType; //pointers to the information from the B-Field mapping std::map *fPtrBMap2; // TVector3 magfieldarm2[39][41][78]; //TVector3 magfieldarm3[11][41][78]; TVector3 magfieldarm2[39*41*78]; TVector3 magfieldarm3[39*41*78]; //TVector3 (*fPtrMagArm2)[41][78]; //TVector3 (*fPtrMagArm3)[41][78]; std::set *fPtrNodesX2; std::set *fPtrNodesY2; std::set *fPtrNodesZ2; std::map *fPtrBMap3; std::set *fPtrNodesX3; std::set *fPtrNodesY3; std::set *fPtrNodesZ3; }; namespace COMET{ IFieldManager& Bman(); }; #endif // #ifdef TFieldManager_h