#ifndef _tls_GlobalPhysicsList_h_ #define _tls_GlobalPhysicsList_h_ #include #include namespace tls { /** \class GlobalPhysicsList \brief G4VUserPhysicsList to aggregate physics lists to be used by multiple Geant4 modules in one offline session. This physics list is only a container. It is an aggregation of lists where it is expected there will be a default list that provides most of the processes and particles and other lists that can potentially add processes that are used in particular modules. Currently the only default physics list is DefaultPhysicsList. In order to run a module with a customized physics list, one only needs to provide a class that inherits from G4VUserPhysicsList and register it using the RegisterPhysics method. This list (and none of the geant4 tools for that matter) will check the consistency of the lists created. It is the responsibility of the module developers to keep track of that. \author Martin Maur \author Javier Gonzalez \date 14 May 2012 \ingroup geant4 */ class GlobalPhysicsList: public G4VUserPhysicsList { public: GlobalPhysicsList(); ~GlobalPhysicsList(); // "SetCuts" method sets a cut value for all particle types // in the particle table virtual void SetCuts(); // This method will be invoked in the Construct() method. // Users do not to use it. virtual void ConstructParticle(); // This method will be invoked in the Construct() method. // Users do not to use it. virtual void ConstructProcess(); // This is the method users are supposed to use. void RegisterPhysics(const G4String& name, G4VUserPhysicsList* userList); const G4VUserPhysicsList* GetPhysics(const G4String& name) const; void SetVerboseLevel(bool verbosity); private: // easy way to keep the order of insertion std::vector fPhysicsVectorNames; std::vector fPhysicsVector; }; } // tls #endif // _tls_GlobalPhysicsList_h_