40 const unsigned long MASK32=0xffffffff;
58 setSeed(static_cast<long>(numberOfEngines));
91 if (
this == &rng) {
return *
this; }
95 HepRandomEngine::operator=(rng);
110 FILE *fh= fopen(filename,
"w");
127 std::cout << std::endl;
128 std::cout <<
"------- MixMaxRng engine status -------" << std::endl;
130 std::cout <<
" Current state vector is:" << std::endl;
133 std::cout <<
"---------------------------------------" << std::endl;
138 unsigned long seed0, seed1= 0, seed2= 0, seed3= 0;
141 if(
sizeof(
long) > 4)
142 seed0=
static_cast<unsigned long>(longSeed) &
MASK32 ;
155 unsigned long seed0, seed1= 0, seed2= 0, seed3= 0;
158 seed0=
static_cast<unsigned long>(Seeds[0]) &
MASK32;
159 seed1=
static_cast<unsigned long>(Seeds[1]) &
MASK32;
164 seed0=
static_cast<unsigned long>(Seeds[0]) &
MASK32;
165 if( seedNum > 1){ seed1=
static_cast<unsigned long>(Seeds[1]) &
MASK32; }
166 if( seedNum > 2){ seed2=
static_cast<unsigned long>(Seeds[2]) &
MASK32; }
169 seed0=
static_cast<unsigned long>(Seeds[0]) &
MASK32;
170 seed1=
static_cast<unsigned long>(Seeds[1]) &
MASK32;
171 seed2=
static_cast<unsigned long>(Seeds[2]) &
MASK32;
172 seed3=
static_cast<unsigned long>(Seeds[3]) &
MASK32;
190 MixMaxRng::operator
unsigned int()
199 char beginMarker[] =
"MixMaxRng-begin";
200 char endMarker[] =
"MixMaxRng-end";
202 int pr = os.precision(24);
203 os << beginMarker <<
" ";
210 os << endMarker <<
"\n";
217 std::vector<unsigned long>
v;
218 v.push_back (engineIDulong<MixMaxRng>());
222 v.push_back(static_cast<unsigned long>(
fRngState->
V[i] >> 32 ));
239 if (strcmp(beginMarker,
"MixMaxRng-begin")) {
240 is.clear(std::ios::badbit | is.rdstate());
241 std::cerr <<
"\nInput stream mispositioned or" 242 <<
"\nMixMaxRng state description missing or" 243 <<
"\nwrong engine type found." << std::endl;
251 return "MixMaxRng-begin";
258 for (
int i=0; i<rng_get_N(); ++i) is >>
fRngState->
V[i];
265 if (strcmp(endMarker,
"MixMaxRng-end")) {
266 is.clear(std::ios::badbit | is.rdstate());
267 std::cerr <<
"\nMixMaxRng state description incomplete." 268 <<
"\nInput stream is probably mispositioned now.\n";
272 std::cerr <<
"\nMixMaxRng::getState(): " 273 <<
"vector read wrong value of counter from file!" 274 <<
"\nInput stream is probably mispositioned now.\n";
279 std::cerr <<
"\nMixMaxRng::getState(): " 280 <<
"checksum disagrees with value stored in file!" 281 <<
"\nInput stream is probably mispositioned now.\n";
289 if ((v[0] & 0xffffffffUL) != engineIDulong<MixMaxRng>()) {
291 "\nMixMaxRng::get(): vector has wrong ID word - state unchanged\n";
301 "\nMixMaxRng::getState(): vector has wrong length - state unchanged\n";
312 std::cerr <<
"\nMixMaxRng::getState(): vector has wrong checksum!" 313 <<
"\nInput vector is probably mispositioned now.\n";
void restoreStatus(const char filename[]="MixMaxRngState.conf")
void print_state(rng_state_t *X)
static const int MarkerLen
myuint get_next(rng_state_t *X)
const unsigned long MASK32
virtual std::istream & getState(std::istream &is)
MixMaxRng & operator=(const MixMaxRng &rng)
void setSeeds(const long *seeds, int seedNum=0)
int rng_free(rng_state_t *X)
static std::string beginTag()
void seed_uniquestream(rng_state_t *X, myID_t clusterID, myID_t machineID, myID_t runID, myID_t streamID)
void saveStatus(const char filename[]="MixMaxRngState.conf") const
static const unsigned int VECTOR_STATE_SIZE
double get_next_float(rng_state_t *X)
#define CLHEP_ATOMIC_INT_TYPE
rng_state_t * rng_alloc()
rng_state_t * rng_copy(myuint *Y)
void flatArray(const int size, double *vect)
void setSeed(long seed, int dum=0)
myuint precalc(rng_state_t *X)
void fill_array(rng_state_t *X, unsigned int n, double *array)
virtual std::istream & get(std::istream &is)
void read_state(rng_state_t *X, const char filename[])
std::vector< unsigned long > put() const