44 std::hex << pthread_self() << std::dec);
47 auto wThreadContext =
new G4WorkerThread;
48 G4AutoDelete::Register(wThreadContext);
51 static std::atomic_uint tid(0);
52 wThreadContext->SetThreadId( tid++ );
53 G4Threading::G4SetThreadId( wThreadContext->GetThreadId() );
56 wThreadContext->BuildGeometryAndPhysicsVector();
59 G4MTRunManager* masterRM = G4MTRunManager::GetMasterRunManager();
64 masterRM->SetNumberOfThreads(Gaudi::Concurrency::ConcurrencyFlags::numThreads());
67 const G4UserWorkerThreadInitialization* workerInitializer =
68 masterRM->GetUserWorkerThreadInitialization();
72 const CLHEP::HepRandomEngine* masterEngine = masterRM->getMasterRandomEngine();
73 workerInitializer->SetupRNGEngine(masterEngine);
77 G4WorkerRunManager* wrm = workerInitializer->CreateWorkerRunManager();
78 wrm->SetWorkerThread(wThreadContext);
86 const_cast<G4VUserDetectorConstruction*
> (masterRM->GetUserDetectorConstruction());
87 wrm->G4RunManager::SetUserInitialization (detector);
91 const_cast<G4VUserPhysicsList*
>(masterRM->GetUserPhysicsList());
92 wrm->SetUserInitialization(physicslist);
95 if(masterRM->GetUserActionInitialization()) {
96 masterRM->GetNonConstUserActionInitialization()->Build();
100 if(masterRM->GetUserWorkerInitialization()) {
101 masterRM->GetUserWorkerInitialization()->WorkerStart();
109 if(masterRM->GetUserWorkerInitialization()) {
110 masterRM->GetUserWorkerInitialization()->WorkerRunStart();
114 std::vector<G4String> cmds = masterRM->GetCommandStack();
116 G4UImanager* uimgr = G4UImanager::GetUIpointer();
117 for(
const auto& it : cmds) {
119 uimgr->ApplyCommand(it);
125 ATH_MSG_INFO(
"==> tbb thread end of initThread with id: 0x" <<
126 std::hex << pthread_self() << std::dec);