11 #include "G4StateManager.hh"
13 #include "G4LogicalVolumeStore.hh"
14 #include "G4GeometryManager.hh"
15 #include "G4MTRunManager.hh"
16 #include "G4TransportationManager.hh"
17 #include "G4VUserDetectorConstruction.hh"
18 #include "G4UImanager.hh"
19 #include "G4HadronicProcessStore.hh"
22 #include "GaudiKernel/ISvcLocator.h"
23 #include "GaudiKernel/Bootstrap.h"
24 #include "GaudiKernel/IMessageSvc.h"
25 #include "GaudiKernel/GaudiException.h"
32 G4AtlasWorkerRunManager::G4AtlasWorkerRunManager()
33 : G4WorkerRunManager()
38 G4AtlasWorkerRunManager* G4AtlasWorkerRunManager::GetG4AtlasWorkerRunManager()
41 auto* wrm = G4RunManager::GetRunManager();
42 if(wrm) {
return static_cast<G4AtlasWorkerRunManager*
>(wrm); }
43 else {
return new G4AtlasWorkerRunManager; }
50 std::lock_guard<std::mutex>
lock(workerInitMutex);
53 G4HadronicProcessStore::Instance()->SetVerbose(0);
70 ATH_MSG_DEBUG(
"G4 Command: Trying at the end of Initialize()");
71 const std::string methodName =
"G4AtlasWorkerRunManager::Initialize";
72 G4MTRunManager* masterRM = G4MTRunManager::GetMasterRunManager();
73 std::vector<G4String>
cmds = masterRM->GetCommandStack();
74 G4UImanager* uimgr = G4UImanager::GetUIpointer();
75 for(
const auto&
it :
cmds) {
76 int retVal = uimgr->ApplyCommand(
it);
77 CommandLog(retVal,
it);
78 if(retVal!=fCommandSucceeded) {
79 std::string errMsg{
"Failed to apply command <"};
81 throw GaudiException(errMsg,methodName,StatusCode::FAILURE);
86 ConstructScoringWorlds();
89 if (m_quietMode) { SetVerboseLevel(0); }
93 void G4AtlasWorkerRunManager::InitializeGeometry()
95 const std::string methodName =
"G4AtlasWorkerRunManager::InitializeGeometry";
98 if(G4RunManager::IfGeometryHasBeenDestroyed()) {
99 G4TransportationManager::GetTransportationManager()->ClearParallelWorlds();
103 G4RunManagerKernel* masterKernel = G4MTRunManager::GetMasterRunManagerKernel();
104 G4VPhysicalVolume* worldVol = masterKernel->GetCurrentWorld();
105 kernel->WorkerDefineWorldVolume(worldVol,
false);
107 kernel->SetNumberOfParallelWorld(masterKernel->GetNumberOfParallelWorld());
110 userDetector->ConstructSDandField();
111 userDetector->ConstructParallelSD();
114 geometryInitialized =
true;
117 void G4AtlasWorkerRunManager::InitializePhysics()
119 const std::string methodName =
"G4AtlasWorkerRunManager::InitializePhysics";
122 G4RunManager::InitializePhysics();
126 bool G4AtlasWorkerRunManager::ProcessEvent(G4Event*
event)
129 G4StateManager* stateManager = G4StateManager::GetStateManager();
130 stateManager->SetNewState(G4State_GeomClosed);
132 currentEvent =
event;
136 eventManager->ProcessOneEvent(currentEvent);
137 if (currentEvent->IsAborted()) {
139 "Event Aborted at Detector Simulation level" );
140 currentEvent =
nullptr;
144 this->AnalyzeEvent(currentEvent);
145 if (currentEvent->IsAborted()) {
147 "Event Aborted at Analysis level" );
148 currentEvent =
nullptr;
152 this->StackPreviousEvent(currentEvent);
153 bool abort = currentEvent->IsAborted();
154 currentEvent =
nullptr;
160 void G4AtlasWorkerRunManager::RunTermination()
164 G4WorkerRunManager::RunTermination();
167 void G4AtlasWorkerRunManager::CommandLog(
int returnCode,
const std::string& commandString)
const
170 case 0: {
ATH_MSG_DEBUG(
"G4 Command: " << commandString <<
" - Command Succeeded"); }
break;
171 case 100: {
ATH_MSG_ERROR(
"G4 Command: " << commandString <<
" - Command Not Found!"); }
break;
173 auto* stateManager = G4StateManager::GetStateManager();
174 ATH_MSG_DEBUG(
"G4 Command: " << commandString <<
" - Illegal Application State (" <<
175 stateManager->GetStateString(stateManager->GetCurrentState()) <<
")!");
177 case 300: {
ATH_MSG_ERROR(
"G4 Command: " << commandString <<
" - Parameter Out of Range!"); }
break;
178 case 400: {
ATH_MSG_ERROR(
"G4 Command: " << commandString <<
" - Parameter Unreadable!"); }
break;
179 case 500: {
ATH_MSG_ERROR(
"G4 Command: " << commandString <<
" - Parameter Out of Candidates!"); }
break;
180 case 600: {
ATH_MSG_ERROR(
"G4 Command: " << commandString <<
" - Alias Not Found!"); }
break;
181 default: {
ATH_MSG_ERROR(
"G4 Command: " << commandString <<
" - Unknown Status!"); }
break;
186 #endif // G4MULTITHREADED