Skip to content

Commit

Permalink
seeds random for multithreading
Browse files Browse the repository at this point in the history
  • Loading branch information
martinunland committed Jul 5, 2024
1 parent 1bb757c commit 8db81e6
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 16 deletions.
5 changes: 1 addition & 4 deletions common/framework/include/OMSimActionInitialization.hh
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@
class OMSimActionInitialization : public G4VUserActionInitialization
{
public:
OMSimActionInitialization(long pSeed);
OMSimActionInitialization();
virtual ~OMSimActionInitialization();

virtual void BuildForMaster() const;
virtual void Build() const;

private:
long mMasterSeed;
};

#endif
9 changes: 5 additions & 4 deletions common/framework/src/OMSim.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ extern std::shared_ptr<spdlog::logger> globalLogger;
OMSim::OMSim() :
mStartingTime(std::chrono::high_resolution_clock::now()),
mGeneralOptions("General options"),
mRunManager(std::make_unique<G4MTRunManager>()),
mRunManager(nullptr),
mVisManager(std::make_unique<G4VisExecutive>()),
mNavigator(std::make_unique<G4Navigator>())
{
Expand Down Expand Up @@ -155,9 +155,9 @@ void OMSim::initialiseSimulation(OMSimDetectorConstruction* pDetectorConstructio

//CLHEP::HepRandom::setTheEngine(new CLHEP::RanluxEngine(lArgs.get<long>("seed"), 3));
//CLHEP::HepRandom::setTheEngine(new CLHEP::MixMaxRng(lArgs.get<long>("seed")));
//G4Random::setTheEngine(new CLHEP::RanluxEngine(lArgs.get<long>("seed"), 3));
G4Random::setTheEngine(new CLHEP::RanluxEngine(lArgs.get<long>("seed"), 3));


mRunManager = std::make_unique<G4MTRunManager>();
mRunManager->SetUserInitialization(pDetectorConstruction);

mPhysics = std::make_unique<OMSimPhysicsList>();
Expand All @@ -166,7 +166,7 @@ void OMSim::initialiseSimulation(OMSimDetectorConstruction* pDetectorConstructio

mVisManager->Initialize();

OMSimActionInitialization* actionInitialization = new OMSimActionInitialization(lArgs.get<long>("seed"));
OMSimActionInitialization* actionInitialization = new OMSimActionInitialization();
mRunManager->SetUserInitialization(actionInitialization);

// Set number of threads
Expand All @@ -182,6 +182,7 @@ void OMSim::initialiseSimulation(OMSimDetectorConstruction* pDetectorConstructio
mNavigator.get()->LocateGlobalPointAndSetup(G4ThreeVector(0., 0., 0.));

mHistory = std::unique_ptr<G4TouchableHistory>(mNavigator->CreateTouchableHistory());

}

/**
Expand Down
10 changes: 2 additions & 8 deletions common/framework/src/OMSimActionInitialization.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
#include "OMSimSteppingAction.hh"
#include <G4RandomTools.hh>

OMSimActionInitialization::OMSimActionInitialization(long pSeed)
: G4VUserActionInitialization(), mMasterSeed(pSeed)
OMSimActionInitialization::OMSimActionInitialization()
: G4VUserActionInitialization()
{
}

Expand All @@ -27,10 +27,4 @@ void OMSimActionInitialization::Build() const
SetUserAction(new OMSimEventAction);
SetUserAction(new OMSimTrackingAction);
SetUserAction(new OMSimSteppingAction);
const long lPrime = 2147483647;
long lSeed = (mMasterSeed + (G4Threading::G4GetThreadId()+1) * lPrime);
lSeed = lSeed % std::numeric_limits<long>::max();
log_debug("Random engine of thread {} was assigned seed {}", G4Threading::G4GetThreadId(), lSeed);
G4Random::setTheSeed(lSeed);
G4Random::setTheEngine(new CLHEP::RanluxEngine);
}

0 comments on commit 8db81e6

Please sign in to comment.