40 const unsigned long MASK32=0xffffffff;
56 int numEngines = ++numberOfEngines;
58 setSeed(static_cast<long>(numEngines));
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;
131 fRngState->
fh=stdout;
133 std::cout <<
"---------------------------------------" << std::endl;
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;
188 for (
int i=0; i<size; ++i) { vect[i] =
flat(); }
191 MixMaxRng::operator
unsigned int()
193 return static_cast<unsigned int>(
get_next(fRngState));
200 char beginMarker[] =
"MixMaxRng-begin";
201 char endMarker[] =
"MixMaxRng-end";
203 int pr = os.precision(24);
204 os << beginMarker <<
" ";
207 os << fRngState->
V[i] <<
"\n";
209 os << fRngState->
counter <<
"\n";
210 os << fRngState->
sumtot <<
"\n";
211 os << endMarker <<
"\n";
218 std::vector<unsigned long> v;
219 v.push_back (engineIDulong<MixMaxRng>());
221 v.push_back(static_cast<unsigned long>(fRngState->
V[i] &
MASK32));
223 v.push_back(static_cast<unsigned long>(fRngState->
V[i] >> 32 ));
226 v.push_back(static_cast<unsigned long>(fRngState->
counter));
227 v.push_back(static_cast<unsigned long>(fRngState->
sumtot &
MASK32));
228 v.push_back(static_cast<unsigned long>(fRngState->
sumtot >> 32));
240 if (strcmp(beginMarker,
"MixMaxRng-begin")) {
241 is.clear(std::ios::badbit | is.rdstate());
242 std::cerr <<
"\nInput stream mispositioned or"
243 <<
"\nMixMaxRng state description missing or"
244 <<
"\nwrong engine type found." << std::endl;
252 return "MixMaxRng-begin";
259 for (
int i=0; i<rng_get_N(); ++i) is >> fRngState->
V[i];
266 if (strcmp(endMarker,
"MixMaxRng-end")) {
267 is.clear(std::ios::badbit | is.rdstate());
268 std::cerr <<
"\nMixMaxRng state description incomplete."
269 <<
"\nInput stream is probably mispositioned now.\n";
273 std::cerr <<
"\nMixMaxRng::getState(): "
274 <<
"vector read wrong value of counter from file!"
275 <<
"\nInput stream is probably mispositioned now.\n";
279 if ( checksum != fRngState->
sumtot) {
280 std::cerr <<
"\nMixMaxRng::getState(): "
281 <<
"checksum disagrees with value stored in file!"
282 <<
"\nInput stream is probably mispositioned now.\n";
290 if ((v[0] & 0xffffffffUL) != engineIDulong<MixMaxRng>()) {
292 "\nMixMaxRng::get(): vector has wrong ID word - state unchanged\n";
302 "\nMixMaxRng::getState(): vector has wrong length - state unchanged\n";
306 fRngState->
V[i/2]= ( (v[i] &
MASK32) | ( (
myuint)(v[i+1]) << 32 ) );
313 std::cerr <<
"\nMixMaxRng::getState(): vector has wrong checksum!"
314 <<
"\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)
std::vector< unsigned long > put() const
static const unsigned int VECTOR_STATE_SIZE
void seed_spbox(rng_state_t *X, myuint seed)
double get_next_float(rng_state_t *X)
#define CLHEP_ATOMIC_INT_TYPE
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
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 saveStatus(const char filename[]="MixMaxRngState.conf") const
virtual std::istream & get(std::istream &is)
void read_state(rng_state_t *X, const char filename[])