Skip to content
Snippets Groups Projects
Commit ff6717fe authored by Administrator's avatar Administrator Committed by Florian Uhlig
Browse files

Set random seed when running a simulation

Up to now the ROOT random number generator was always initialised with the
same default value. In some cases this gives strange results when doing
large scale simulations with several jobs.
To solve the problem TRandom is now initialised with the value 0 which uses a
seed value based on the system time with a granularity of 100ns.
This granularity should be good enough to have different seed values even if
several jobs start a similar times on the batch farm.
A setter was added to allow to set the seed value explicitly from a macro,
refs #1395, #2066
parent fc8ed615
No related branches found
No related tags found
1 merge request!290Set random seed when running a simulation
......@@ -33,6 +33,7 @@
#include "TGeant4.h"
#include "TGeoManager.h"
#include "TPythia6Decayer.h"
#include "TRandom.h"
#include "TROOT.h"
#include "TStopwatch.h"
#include "TString.h"
......@@ -469,6 +470,9 @@ void CbmTransport::Run(Int_t nEvents) {
// --- Timer
TStopwatch timer;
// --- Set the global random seed
gRandom->SetSeed(fRandomSeed);
// --- Check presence of required requisites
if (fOutFileName.IsNull())
LOG(fatal) << GetName() << ": No output file specified!";
......
......@@ -304,6 +304,16 @@ public:
Double_t phiMax = 2. * TMath::Pi());
/** @brief Set global random seed value
** @param seedValue
**
** This function allows to set the global seed value used
** by ROOTs random number generator TRandom
**/
void SetRandomSeed(const ULong_t seedValue) {
fRandomSeed = seedValue;
}
/** @brief Enable smearing of event vertex in x and y.
** @param choice If kTRUE(default), smearing is enabled.
**
......@@ -381,6 +391,8 @@ private:
CbmGeant3Settings* fGeant3Settings {nullptr}; //!
CbmGeant4Settings* fGeant4Settings {nullptr}; //!
ULong_t fRandomSeed {0};
/** @brief Event generator initialisation **/
void InitEventGenerator();
......@@ -403,7 +415,7 @@ private:
/** @brief Create and register the setup modules **/
void RegisterSetup();
ClassDef(CbmTransport, 3);
ClassDef(CbmTransport, 4);
};
#endif /* CBMTRANSPORT_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment