14 #ifndef DD4HEP_DDG4_GEANT4EVENTSEED_H
15 #define DD4HEP_DDG4_GEANT4EVENTSEED_H
24 namespace Simulation {
53 void begin(
const G4Run*);
70 #define hashsize(n) ( 1U << (n) )
71 #define hashmask(n) ( hashsize ( n ) - 1 )
102 a -= b; a -= c; a ^= (c>>13); \
103 b -= c; b -= a; b ^= (a<<8); \
104 c -= a; c -= b; c ^= (b>>13); \
105 a -= b; a -= c; a ^= (c>>12); \
106 b -= c; b -= a; b ^= (a<<16); \
107 c -= a; c -= b; c ^= (b>>5); \
108 a -= b; a -= c; a ^= (c>>3); \
109 b -= c; b -= a; b ^= (a<<10); \
110 c -= a; c -= b; c ^= (b>>15); \
140 unsigned jenkins_hash (
unsigned char *k,
unsigned length,
unsigned initval )
143 unsigned c = initval;
144 unsigned len = length;
148 while ( len >= 12 ) {
149 a += ( k[0] + ( (unsigned)k[1] << 8 )
150 + ( (unsigned)k[2] << 16 )
151 + ( (unsigned)k[3] << 24 ) );
152 b += ( k[4] + ( (unsigned)k[5] << 8 )
153 + ( (unsigned)k[6] << 16 )
154 + ( (unsigned)k[7] << 24 ) );
155 c += ( k[8] + ( (unsigned)k[9] << 8 )
156 + ( (unsigned)k[10] << 16 )
157 + ( (unsigned)k[11] << 24 ) );
168 case 11: c += ( (unsigned)k[10] << 24 );
169 case 10: c += ( (unsigned)k[9] << 16 );
170 case 9 : c += ( (unsigned)k[8] << 8 );
172 case 8 : b += ( (unsigned)k[7] << 24 );
173 case 7 : b += ( (unsigned)k[6] << 16 );
174 case 6 : b += ( (unsigned)k[5] << 8 );
176 case 4 : a += ( (unsigned)k[3] << 24 );
177 case 3 : a += ( (unsigned)k[2] << 16 );
178 case 2 : a += ( (unsigned)k[1] << 8 );
188 unsigned int hash(
unsigned int initialSeed,
unsigned int eventNumber,
unsigned int runNumber ){
189 unsigned int seed = 0;
190 unsigned char * c = (
unsigned char *) &eventNumber ;
193 c = (
unsigned char *) &runNumber ;
196 c = (
unsigned char *) &initialSeed ;
205 #endif // DD4HEP_DDG4_GEANT4EVENTSEED_H
virtual ~Geant4EventSeed()
Default destructor.
void begin(const G4Run *)
begin-of-run callback
Concrete basic implementation of the Geant4 run action base class.
void beginEvent(const G4Event *)
begin-of-event callback
unsigned int m_initialSeed
unsigned int hash(unsigned int initialSeed, unsigned int eventNumber, unsigned int runNumber)
calculate hash from initialSeed, eventID and runID
unsigned jenkins_hash(unsigned char *k, unsigned length, unsigned initval)
Geant4EventSeed(Geant4Context *, const std::string &)
Standard constructor with initializing arguments.
Generic context to extend user, run and event information.