11 #include "G4StateManager.hh"
12 #include "G4GeometryManager.hh"
13 #include "G4UserRunAction.hh"
15 #include "G4LogicalVolumeStore.hh"
16 #include "G4MTRunManagerKernel.hh"
18 #include "G4IonTable.hh"
19 #include "G4ParticleTable.hh"
20 #include "G4CascadeInterface.hh"
22 #include "GaudiKernel/ISvcLocator.h"
23 #include "GaudiKernel/Bootstrap.h"
25 G4AtlasMTRunManager::G4AtlasMTRunManager()
28 , m_detGeoSvc(
"DetectorGeometrySvc",
"G4AtlasMTRunManager")
29 , m_physListSvc(
"PhysicsListSvc",
"G4AtlasMTRunManager")
30 , m_fastSimTool(
"FastSimulationMasterTool")
36 static G4AtlasMTRunManager* thisManager =
nullptr;
37 if (!thisManager) { thisManager =
new G4AtlasMTRunManager; }
48 ConstructScoringWorlds();
54 GetMTMasterRunManagerKernel()->SetUpDecayChannels();
56 PrepareCommandsStack();
60 void G4AtlasMTRunManager::InitializeGeometry()
65 if (m_detGeoSvc.retrieve().isFailure()) {
68 description <<
"InitializeGeometry: Failed to retrieve IDetectorGeometrySvc.";
69 G4Exception(
"G4AtlasMTRunManager",
"CouldNotRetrieveDetGeoSvc",
75 SetUserInitialization( m_detGeoSvc->GetDetectorConstruction() );
77 G4RunManager::InitializeGeometry();
81 ATH_MSG_WARNING(
"User Detector not set!!! Geometry NOT initialized!!!");
92 void G4AtlasMTRunManager::InitializePhysics()
95 kernel->InitializePhysics();
99 physicsInitialized =
true;
102 if (m_physListSvc.retrieve().isFailure()) {
105 description <<
"InitializePhysics: Failed to retrieve IPhysicsListSvc.";
106 G4Exception(
"G4AtlasMTRunManager",
"CouldNotRetrievePLTool",
110 m_physListSvc->SetPhysicsOptions();
113 const std::string methodName =
"G4AtlasMTRunManager::InitializePhysics";
114 if(m_fastSimTool.retrieve().isFailure()) {
115 throw GaudiException(
"Could not retrieve FastSims master tool",
116 methodName, StatusCode::FAILURE);
118 if(m_fastSimTool->initializeFastSims().isFailure()) {
119 throw GaudiException(
"Failed to initialize FastSims for master thread",
120 methodName, StatusCode::FAILURE);
129 void G4AtlasMTRunManager::RunTermination()
132 CleanUpPreviousEvents();
133 previousEvents->clear();
135 if(userRunAction) { userRunAction->EndOfRunAction(currentRun); }
138 currentRun =
nullptr;
142 G4StateManager* stateManager = G4StateManager::GetStateManager();
143 stateManager->SetNewState(G4State_Idle);
146 G4GeometryManager::GetInstance()->OpenGeometry();
149 stateManager->GetStateString( stateManager->GetCurrentState() ) );
150 kernel->RunTermination();
153 userRunAction =
nullptr;
154 userEventAction =
nullptr;
155 userSteppingAction =
nullptr;
156 userStackingAction =
nullptr;
157 userTrackingAction =
nullptr;
159 userDetector =
nullptr;
160 userPrimaryGeneratorAction =
nullptr;
163 #endif // G4MULTITHREADED