ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
RanecuEngine.h
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file RanecuEngine.h
1
// -*- C++ -*-
2
//
3
// -----------------------------------------------------------------------
4
// HEP Random
5
// --- RanecuEngine ---
6
// class header file
7
// -----------------------------------------------------------------------
8
// This file is part of Geant4 (simulation toolkit for HEP).
9
//
10
// RANECU Random Engine - algorithm originally written in FORTRAN77
11
// as part of the MATHLIB HEP library.
12
// The initialisation is carried out using a Multiplicative Congruential
13
// generator using formula constants of L'Ecuyer as described in "F.James,
14
// Comp. Phys. Comm. 60 (1990) 329-344".
15
// Seeds are taken from a seed table given an index, the getSeed() method
16
// returns the current index in the seed table, the getSeeds() method
17
// returns a pointer to the couple of seeds stored in the local table of
18
// seeds at the current index.
19
20
// =======================================================================
21
// Gabriele Cosmo - Created: 2nd February 1996
22
// - Minor corrections: 31st October 1996
23
// - Added methods for engine status: 19th November 1996
24
// - setSeed() now has default dummy argument
25
// set to zero: 11th July 1997
26
// - Added default index to setSeeds(): 16th Oct 1997
27
// J.Marraffino - Added stream operators and related constructor.
28
// Added automatic seed selection from seed table and
29
// engine counter: 16th Feb 1998
30
// Ken Smith - Added conversion operators: 6th Aug 1998
31
// Mark Fischler Methods for distrib. instance save/restore 12/8/04
32
// Mark Fischler methods for anonymous save/restore 12/27/04
33
// =======================================================================
34
35
#ifndef RanecuEngine_h
36
#define RanecuEngine_h 1
37
38
#include "
CLHEP/Random/RandomEngine.h
"
39
40
namespace
CLHEP {
41
46
class
RanecuEngine
:
public
HepRandomEngine
{
47
48
public
:
49
50
RanecuEngine
(std::istream& is);
51
RanecuEngine
();
52
RanecuEngine
(
int
index);
53
virtual
~RanecuEngine
();
54
// Constructors and destructor.
55
56
double
flat
();
57
// Returns a pseudo random number between 0 and 1
58
// (excluding the end points)
59
60
void
flatArray
(
const
int
size,
double
* vect);
61
// Fills an array "vect" of specified size with flat random values.
62
63
void
setIndex
(
long
index);
64
// Sets the state of the algorithm according to "index", the position
65
// in the local table of seeds.
66
67
void
setSeed
(
long
index,
int
dum=0);
68
// Resets the state of the algorithm according to "index", the position
69
// in the static table of seeds stored in HepRandom.
70
71
void
setSeeds
(
const
long
* seeds,
int
index=-1);
72
// Sets the state of the algorithm according to the array of seeds
73
// "seeds" containing two seed values to be stored in the local table at
74
// "index" position.
75
76
void
saveStatus
(
const
char
filename
[] =
"Ranecu.conf"
)
const
;
77
// Saves on file Ranecu.conf the current engine status.
78
79
void
restoreStatus
(
const
char
filename
[] =
"Ranecu.conf"
);
80
// Reads from file Ranecu.conf the last saved engine status
81
// and restores it.
82
83
void
showStatus
()
const
;
84
// Dumps the engine status on the screen.
85
86
operator
double();
87
// Returns same as flat()
88
operator
float();
89
// less precise flat, faster if possible
90
operator
unsigned
int
();
91
// 32-bit int flat, faster in this case
92
93
virtual
std::ostream &
put
(std::ostream & os)
const
;
94
virtual
std::istream &
get
(std::istream & is);
95
static
std::string
beginTag
( );
96
virtual
std::istream &
getState
( std::istream & is );
97
98
std::string
name
()
const
;
99
static
std::string
engineName
() {
return
"RanecuEngine"
;}
100
101
std::vector<unsigned long>
put
()
const
;
102
bool
get
(
const
std::vector<unsigned long> &
v
);
103
bool
getState
(
const
std::vector<unsigned long> &
v
);
104
105
protected
:
106
107
// Suggested L'ecuyer coefficients for portable 32 bits generators.
108
109
static
const
int
ecuyer_a
= 40014;
110
static
const
int
ecuyer_b
= 53668;
111
static
const
int
ecuyer_c
= 12211;
112
static
const
int
ecuyer_d
= 40692;
113
static
const
int
ecuyer_e
= 52774;
114
static
const
int
ecuyer_f
= 3791;
115
static
const
int
shift1
= 2147483563;
116
static
const
int
shift2
= 2147483399;
117
118
static
const
unsigned
int
VECTOR_STATE_SIZE
= 4;
119
120
private
:
121
122
// private method used to mitigate the effects of using a lookup table
123
void
further_randomize
(
int
seq
,
int
col
,
int
index,
int
modulus);
124
125
// Members defining the current state of the generator.
126
127
static
const
int
maxSeq
= 215;
128
long
table
[215][2];
129
int
seq
;
130
131
};
132
133
}
// namespace CLHEP
134
135
#endif
geant4
tree
geant4-10.6-release
source
externals
clhep
include
CLHEP
Random
RanecuEngine.h
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:14
using
1.8.2 with
ECCE GitHub integration