41 std::hex << pthread_self() << std::dec);
44 auto wThreadContext =
new G4WorkerThread;
45 G4AutoDelete::Register(wThreadContext);
48 static std::atomic_uint tid(0);
49 wThreadContext->SetThreadId( tid++ );
50 G4Threading::G4SetThreadId( wThreadContext->GetThreadId() );
53 wThreadContext->BuildGeometryAndPhysicsVector();
56 G4MTRunManager* masterRM = G4MTRunManager::GetMasterRunManager();
58 const G4UserWorkerThreadInitialization* workerInitializer =
59 masterRM->GetUserWorkerThreadInitialization();
63 const CLHEP::HepRandomEngine* masterEngine = masterRM->getMasterRandomEngine();
64 workerInitializer->SetupRNGEngine(masterEngine);
68 G4WorkerRunManager* wrm = workerInitializer->CreateWorkerRunManager();
69 wrm->SetWorkerThread(wThreadContext);
77 const_cast<G4VUserDetectorConstruction*
> (masterRM->GetUserDetectorConstruction());
78 wrm->G4RunManager::SetUserInitialization (detector);
82 const_cast<G4VUserPhysicsList*
>(masterRM->GetUserPhysicsList());
83 wrm->SetUserInitialization(physicslist);
86 if(masterRM->GetUserActionInitialization()) {
87 masterRM->GetNonConstUserActionInitialization()->Build();
91 if(masterRM->GetUserWorkerInitialization()) {
92 masterRM->GetUserWorkerInitialization()->WorkerStart();
100 if(masterRM->GetUserWorkerInitialization()) {
101 masterRM->GetUserWorkerInitialization()->WorkerRunStart();
105 std::vector<G4String> cmds = masterRM->GetCommandStack();
107 G4UImanager* uimgr = G4UImanager::GetUIpointer();
108 for(
const auto& it : cmds) {
110 uimgr->ApplyCommand(it);
116 ATH_MSG_INFO(
"==> tbb thread end of initThread with id: 0x" <<
117 std::hex << pthread_self() << std::dec);