13 #ifndef DDG4_PLUGINS_GEANT4EVENTSEED_H
14 #define DDG4_PLUGINS_GEANT4EVENTSEED_H
45 class Geant4EventSeed:
public Geant4RunAction {
59 void begin(
const G4Run*);
78 #define hashsize(n) ( 1U << (n) )
79 #define hashmask(n) ( hashsize ( n ) - 1 )
110 a -= b; a -= c; a ^= (c>>13); \
111 b -= c; b -= a; b ^= (a<<8); \
112 c -= a; c -= b; c ^= (b>>13); \
113 a -= b; a -= c; a ^= (c>>12); \
114 b -= c; b -= a; b ^= (a<<16); \
115 c -= a; c -= b; c ^= (b>>5); \
116 a -= b; a -= c; a ^= (c>>3); \
117 b -= c; b -= a; b ^= (a<<10); \
118 c -= a; c -= b; c ^= (b>>15); \
148 unsigned jenkins_hash (
unsigned char *k,
unsigned length,
unsigned initval )
151 unsigned c = initval;
152 unsigned len = length;
156 while ( len >= 12 ) {
157 a += ( k[0] + ( (unsigned)k[1] << 8 )
158 + ( (unsigned)k[2] << 16 )
159 + ( (unsigned)k[3] << 24 ) );
160 b += ( k[4] + ( (unsigned)k[5] << 8 )
161 + ( (unsigned)k[6] << 16 )
162 + ( (unsigned)k[7] << 24 ) );
163 c += ( k[8] + ( (unsigned)k[9] << 8 )
164 + ( (unsigned)k[10] << 16 )
165 + ( (unsigned)k[11] << 24 ) );
176 case 11: c += ( (unsigned)k[10] << 24 ); [[fallthrough]];
177 case 10: c += ( (unsigned)k[9] << 16 ); [[fallthrough]];
178 case 9 : c += ( (unsigned)k[8] << 8 ); [[fallthrough]];
180 case 8 : b += ( (unsigned)k[7] << 24 ); [[fallthrough]];
181 case 7 : b += ( (unsigned)k[6] << 16 ); [[fallthrough]];
182 case 6 : b += ( (unsigned)k[5] << 8 ); [[fallthrough]];
183 case 5 : b += k[4]; [[fallthrough]];
184 case 4 : a += ( (unsigned)k[3] << 24 ); [[fallthrough]];
185 case 3 : a += ( (unsigned)k[2] << 16 ); [[fallthrough]];
186 case 2 : a += ( (unsigned)k[1] << 8 ); [[fallthrough]];
196 unsigned int hash(
unsigned int initialSeed,
unsigned int eventNumber,
unsigned int runNumber ){
197 unsigned int seed = 0;
198 unsigned char * c = (
unsigned char *) &eventNumber ;
201 c = (
unsigned char *) &runNumber ;
204 c = (
unsigned char *) &initialSeed ;
213 #endif // DDG4_PLUGINS_GEANT4EVENTSEED_H