16#ifndef _RMG_WORKER_INITIALIZATION_HH_
17#define _RMG_WORKER_INITIALIZATION_HH_
21#include "G4AutoLock.hh"
22#include "G4UserTaskThreadInitialization.hh"
23#include "Randomize.hh"
25#include "RMGManager.hh"
29 G4Mutex RMGWorkerInitializationRNGMutex = G4MUTEX_INITIALIZER;
41template<
typename ThreadInitialization>
42class RMGWorkerInitialization :
public ThreadInitialization {
43 static_assert(std::is_base_of_v<G4UserWorkerThreadInitialization, ThreadInitialization>);
47 RMGWorkerInitialization() =
default;
48 ~RMGWorkerInitialization() =
default;
54 G4AutoLock l(&RMGWorkerInitializationRNGMutex);
59 if (rmg_man->GetRandEngineSelected()) rmg_man->ApplyRandEngineForCurrentThread();
60 else ThreadInitialization::SetupRNGEngine(aRNGEngine);
static RMGManager * Instance()
Retrieves the singleton instance of RMGManager.
Definition RMGManager.hh:75
void SetupRNGEngine(const CLHEP::HepRandomEngine *aRNGEngine) const override
Install the user-selected random engine on this worker, or fall back to Geant4's.
Definition RMGWorkerInitialization.hh:53