RunManager.cc

Go to the documentation of this file.
00001 // $Header: /cvs/lcd/slic/src/RunManager.cc,v 1.17 2010/01/08 23:18:56 jeremy Exp $
00002 #include "RunManager.hh"
00003 
00004 // lcdd
00005 #include "LCDDParser.hh"
00006 #include "LCDDProcessor.hh"
00007 
00008 // slic
00009 #include "EventAction.hh"
00010 #include "EventSourceManager.hh"
00011 #include "ModuleRegistry.hh"
00012 #include "PhysicsListManager.hh"
00013 #include "PrimaryGeneratorAction.hh"
00014 #include "RunAction.hh"
00015 #include "SteppingAction.hh"
00016 #include "TrackingAction.hh"
00017 
00018 // geant4
00019 #include "G4StateManager.hh"
00020 #include "G4UImanager.hh"
00021 
00022 namespace slic
00023 {
00024 
00025     RunManager::RunManager() :
00026         Module("RunManager", false),
00027         m_userActionsInitialized(false)
00028     {}
00029 
00030     RunManager::~RunManager()
00031     {}
00032 
00033     void RunManager::initializeUserActions()
00034     {
00035         SetUserAction(new PrimaryGeneratorAction);
00036         SetUserAction(new RunAction);
00037         SetUserAction(new EventAction);
00038         SetUserAction(new TrackingAction);
00039         SetUserAction(new SteppingAction);
00040         m_userActionsInitialized = true;
00041     }
00042 
00043     void RunManager::Initialize()
00044     {
00045         // This makes sure that physics initialization occurs before other user actions.
00046         G4RunManager::Initialize();
00047 
00048         // Initialize user actions here to avoid ordering problems.
00049         if (!m_userActionsInitialized)
00050             initializeUserActions();
00051 
00052         // Initialize the event generation manager.
00053         EventSourceManager::instance();
00054 
00055         // Setup the default event source.
00056         EventSourceManager::instance()->setupEventSource();
00057 
00058         // Print list of registered modules.
00059 #ifdef SLIC_LOG
00060         ModuleRegistry::instance()->print();
00061 #endif
00062     }
00063 
00064     void RunManager::InitializePhysics()
00065     {
00066         // Initialize the physics list.
00067         PhysicsListManager::instance()->initializePhysicsList();
00068 
00069         // Call the G4RunManager's intitialization method.
00070         G4RunManager::InitializePhysics();
00071 
00072         // Check if the LCDD subsystem got some limits.
00073         LCDDProcessor* lcdd = LCDDProcessor::instance();
00074         PhysicsListManager* pmgr = PhysicsListManager::instance();
00075         if ( lcdd->getLimitSetsBegin() != lcdd->getLimitSetsEnd() ) 
00076         {
00077             pmgr->enableLimits(true);            
00078         }
00079 
00080         // Enable physics limits, if necessary.
00081         if ( pmgr->enableLimits() )  
00082         {
00083             pmgr->setupUserLimitsProcesses();
00084         }
00085     }
00086 
00087     void RunManager::InitializeGeometry()
00088     {
00089         if ( !LCDDParser::instance()->isValidSetup() ) 
00090         {
00091             G4Exception("FATAL ERROR: Current LCDD geometry setup is not valid.");
00092         }
00093 
00094         G4RunManager::InitializeGeometry();
00095     }
00096 
00097     void RunManager::BeamOn(G4int n_event, const char* macroFile, G4int n_select)
00098     {
00099         // Attempt to initialize Geant4 if not in idle state.
00100         if ( G4StateManager::GetStateManager()->GetCurrentState() != G4State_Idle ) 
00101         {
00102             this->Initialize();
00103         }
00104 
00105         m_numberOfEventsToRun = n_event;
00106 
00107         G4RunManager::BeamOn(n_event, macroFile, n_select);
00108     }
00109 
00110     int RunManager::getNumberOfEventsToRun()
00111     {
00112         return m_numberOfEventsToRun;
00113     }
00114 }

Generated on Mon Jun 7 17:45:21 2010 for Simulator for the Linear Collider by  doxygen 1.5.4