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