GENIEGenerator
Loading...
Searching...
No Matches
RandomGen.cxx
Go to the documentation of this file.
1//____________________________________________________________________________
2/*
3 Copyright (c) 2003-2025, The GENIE Collaboration
4 For the full text of the license visit http://copyright.genie-mc.org
5
6 Costas Andreopoulos <c.andreopoulos \at cern.ch>
7 University of Liverpool
8*/
9//____________________________________________________________________________
10
11#include <cstdlib>
12
13#include <TSystem.h>
14
18
19#ifdef __GENIE_PYTHIA6_ENABLED__
20#include <TPythia6.h>
21#endif
22
23using namespace genie::controls;
24
25namespace genie {
26
27//____________________________________________________________________________
29//____________________________________________________________________________
31{
32 LOG("Rndm", pINFO) << "RandomGen late initialization";
33
34 fInitalized = false;
35 fInstance = 0;
36/*
37 // try to get this job's random number seed from the environment
38 const char * seed = gSystem->Getenv("GSEED");
39 if(seed) {
40 LOG("Rndm", pDEBUG) << "Reading RandomNumGenerator seed env. var $GSEED";
41 fCurrSeed = atoi(seed);
42 } else {
43 LOG("Rndm", pINFO) << "Env. var. $GSEED is not set. Using default seed";
44 fCurrSeed = kDefaultRandSeed; // default seed number
45 }
46 this->InitRandomGenerators(fCurrSeed);
47*/
48
49 if ( gSystem->Getenv("GSEED") ) {
50 LOG("Rndm", pFATAL)
51 << "\n\n"
52 << "************************************************************************************** \n"
53 << "The random number seed is no longer set via the $GSEED variable.\n"
54 << "Please use the --seed option implemented in all GENIE apps or, if you access RandomGen \n"
55 << "directly in your user code, use RandomGen::SetSeed(long int seed).\n"
56 << "Unset $GSEED to continue running GENIE. \n"
57 << "************************************************************************************** \n";
58 gAbortingInErr = true;
59 exit(1);
60 }
61
62 fCurrSeed = kDefaultRandSeed; // a default seed number is set a init
64
65 fInitalized = true;
66}
67//____________________________________________________________________________
69{
70 fInstance = 0;
71 if(fRandom3) delete fRandom3;
72}
73//____________________________________________________________________________
75{
76 if(fInstance == 0) {
77 static RandomGen::Cleaner cleaner;
79
80 fInstance = new RandomGen;
81 }
82 return fInstance;
83}
84//____________________________________________________________________________
85void RandomGen::SetSeed(long int seed)
86{
87 LOG("Rndm", pNOTICE)
88 << "Setting"
89 << ((fInitalized) ? " " : " default ")
90 << "random number seed"
91 << ((fInitalized) ? ": " : " at random number generator initialization: ")
92 << seed;
93
94 // Set the seed number for all internal GENIE random number generators
95 this->RndKine ().SetSeed(seed);
96 this->RndHadro().SetSeed(seed);
97 this->RndDec ().SetSeed(seed);
98 this->RndFsi ().SetSeed(seed);
99 this->RndLep ().SetSeed(seed);
100 this->RndISel ().SetSeed(seed);
101 this->RndGeom ().SetSeed(seed);
102 this->RndFlux ().SetSeed(seed);
103 this->RndEvg ().SetSeed(seed);
104 this->RndNum ().SetSeed(seed);
105 this->RndGen ().SetSeed(seed);
106
107 // Set the seed number for ROOT's gRandom
108 gRandom ->SetSeed (seed);
109
110#ifdef __GENIE_PYTHIA6_ENABLED__
111 // Set the PYTHIA6 seed number
112 TPythia6 * pythia6 = TPythia6::Instance();
113 pythia6->SetMRPY(1, seed);
114#endif
115
116 LOG("Rndm", pINFO) << "RndKine seed = " << this->RndKine ().GetSeed();
117 LOG("Rndm", pINFO) << "RndHadro seed = " << this->RndHadro().GetSeed();
118 LOG("Rndm", pINFO) << "RndDec seed = " << this->RndDec ().GetSeed();
119 LOG("Rndm", pINFO) << "RndFsi seed = " << this->RndFsi ().GetSeed();
120 LOG("Rndm", pINFO) << "RndLep seed = " << this->RndLep ().GetSeed();
121 LOG("Rndm", pINFO) << "RndISel seed = " << this->RndISel ().GetSeed();
122 LOG("Rndm", pINFO) << "RndGeom seed = " << this->RndGeom ().GetSeed();
123 LOG("Rndm", pINFO) << "RndFlux seed = " << this->RndFlux ().GetSeed();
124 LOG("Rndm", pINFO) << "RndEvg seed = " << this->RndEvg ().GetSeed();
125 LOG("Rndm", pINFO) << "RndNum seed = " << this->RndNum ().GetSeed();
126 LOG("Rndm", pINFO) << "RndGen seed = " << this->RndGen ().GetSeed();
127 LOG("Rndm", pINFO) << "gRandom seed = " << gRandom->GetSeed();
128#ifdef __GENIE_PYTHIA6_ENABLED__
129 LOG("Rndm", pINFO) << "PYTHIA6 seed = " << pythia6->GetMRPY(1);
130#endif
131}
132//____________________________________________________________________________
134{
135 fRandom3 = new TRandom3();
136 this->SetSeed(seed);
137}
138//____________________________________________________________________________
139} // genie namespace
#define pNOTICE
Definition Messenger.h:61
#define pINFO
Definition Messenger.h:62
#define pFATAL
Definition Messenger.h:56
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
A singleton holding random number generator classes. All random number generation in GENIE should tak...
Definition RandomGen.h:29
virtual ~RandomGen()
Definition RandomGen.cxx:68
bool fInitalized
done initializing singleton?
Definition RandomGen.h:95
TRandom3 & RndGeom(void) const
rnd number generator used by geometry drivers
Definition RandomGen.h:68
TRandom3 & RndEvg(void) const
rnd number generator used by the event generation drivers
Definition RandomGen.h:74
TRandom3 & RndHadro(void) const
rnd number generator used by hadronization models
Definition RandomGen.h:53
static RandomGen * Instance()
Access instance.
Definition RandomGen.cxx:74
TRandom3 & RndLep(void) const
rnd number generator used by final state primary lepton generators
Definition RandomGen.h:62
TRandom3 & RndDec(void) const
rnd number generator used by decay models
Definition RandomGen.h:56
TRandom3 * fRandom3
Mersenne Twistor.
Definition RandomGen.h:93
TRandom3 & RndISel(void) const
rnd number generator used by interaction selectors
Definition RandomGen.h:65
void SetSeed(long int seed)
Definition RandomGen.cxx:85
static RandomGen * fInstance
Definition RandomGen.h:91
void InitRandomGenerators(long int seed)
TRandom3 & RndFlux(void) const
rnd number generator used by flux drivers
Definition RandomGen.h:71
TRandom3 & RndFsi(void) const
rnd number generator used by intranuclear cascade monte carlos
Definition RandomGen.h:59
TRandom3 & RndKine(void) const
rnd number generator used by kinematics generators
Definition RandomGen.h:50
long int fCurrSeed
random number generator seed number
Definition RandomGen.h:94
TRandom3 & RndGen(void) const
rnd number generator for generic usage
Definition RandomGen.h:80
TRandom3 & RndNum(void) const
rnd number generator used by MC integrators & other numerical methods
Definition RandomGen.h:77
Misc GENIE control constants.
static const unsigned int kDefaultRandSeed
Definition Controls.h:37
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
bool gAbortingInErr
Definition Messenger.cxx:34