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
Ranlux64Engine.h
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file Ranlux64Engine.h
1
// -*- C++ -*-
2
//
3
// -----------------------------------------------------------------------
4
// HEP Random
5
// --- Ranlux64Engine ---
6
// class header file
7
// -----------------------------------------------------------------------
8
// The algorithm for this random engine has been taken from the notes of
9
// a double-precision ranlux implementation by Martin Luscher, dated
10
// November 1997.
11
//
12
// Like the previous ranlux generator, this one also has "luxury" levels,
13
// determining how many pseudo-random numbers are discarded for every
14
// twelve values used. Three levels are given, with the note that Luscher
15
// himself advocates only the highest two levels for this engine.
16
// level 0 (p=109): Throw away 109 values for every 12 used
17
// level 1 (p=202): (default) Throw away 202 values for every 12 used
18
// level 2 (p=397): Throw away 397 values for every 12 used
19
//
20
// The initialization is carried out using a Multiplicative Congruential
21
// generator using formula constants of L'Ecuyer as described in "F.James,
22
// Comp. Phys. Comm. 60 (1990) 329-344".
23
// =======================================================================
24
// Ken Smith - Created Initial draft: 14th Jul 1998
25
// - Added conversion operators: 6th Aug 1998
26
// Mark Fischler
27
// 9/9/98 - Added update() routine to allow computation of many at once
28
// - Replaced algorithm with jone exactly matching Luscher:
29
// 48-bits generated
30
// skip n-12 instead of n numbers
31
// - Corrected protection agains overflow
32
// 12/8/04 - Methods for instance save/restore
33
// 12/27/04 - methods for anonymous save/restore 12/27/04
34
//
35
// =======================================================================
36
37
#ifndef Ranlux64Engine_h
38
#define Ranlux64Engine_h
39
40
#include "
CLHEP/Random/RandomEngine.h
"
41
42
namespace
CLHEP {
43
48
class
Ranlux64Engine
:
public
HepRandomEngine
{
49
50
public
:
51
52
Ranlux64Engine
( std::istream& is );
53
Ranlux64Engine
();
54
Ranlux64Engine
(
long
seed
,
int
lux
= 1 );
55
Ranlux64Engine
(
int
rowIndex,
int
colIndex,
int
lux
);
56
virtual
~Ranlux64Engine
();
57
// Constructors and destructor
58
59
double
flat
();
60
// It returns a pseudo random number between 0 and 1,
61
// excluding the end points.
62
63
void
flatArray
(
const
int
size,
double
* vect);
64
// Fills the array "vect" of specified size with flat random values.
65
66
void
setSeed
(
long
seed,
int
lux=1);
67
// Sets the state of the algorithm according to seed.
68
69
void
setSeeds
(
const
long
* seeds,
int
lux=1);
70
// Sets the state of the algorithm according to the zero terminated
71
// array of seeds. Only the first seed is used.
72
73
void
saveStatus
(
const
char
filename
[] =
"Ranlux64.conf"
)
const
;
74
// Saves in named file the current engine status.
75
76
void
restoreStatus
(
const
char
filename
[] =
"Ranlux64.conf"
);
77
// Reads from named file the last saved engine status and restores it.
78
79
void
showStatus
()
const
;
80
// Dumps the engine status on the screen.
81
82
int
getLuxury
()
const
{
return
luxury
; }
83
// Gets the luxury level.
84
85
virtual
std::ostream &
put
(std::ostream & os)
const
;
86
virtual
std::istream &
get
(std::istream & is);
87
static
std::string
beginTag
( );
88
virtual
std::istream &
getState
( std::istream & is );
89
90
std::string
name
()
const
;
91
static
std::string
engineName
() {
return
"Ranlux64Engine"
;}
92
93
std::vector<unsigned long>
put
()
const
;
94
bool
get
(
const
std::vector<unsigned long> &
v
);
95
bool
getState
(
const
std::vector<unsigned long> &
v
);
96
97
static
const
unsigned
int
VECTOR_STATE_SIZE
= 30;
98
99
private
:
100
101
void
update
();
102
void
advance
(
int
dozens);
103
104
int
pDiscard
;
// separate sequence by p-r = p-12 discarded elements
105
int
pDozens
;
// pDiscard / 12;
106
int
endIters
;
// pDiscard % 12;
107
int
luxury
;
108
109
int
index
;
110
double
randoms
[12];
// randoms [i] is the x[n-i] of Luscher's note
111
double
carry
;
112
113
};
// Ranlux64Engine
114
115
}
// namespace CLHEP
116
117
#endif // Ranlux64Engine_h
geant4
tree
geant4-10.6-release
source
externals
clhep
include
CLHEP
Random
Ranlux64Engine.h
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:14
using
1.8.2 with
ECCE GitHub integration