using option '-treename HLTesdTree' for EsdCollector, adding default parameter for...
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8130 / xmldoc / RandomNumbers.xml
1 <chapter name="Random Numbers">
2     
3 <h2>Random Numbers</h2>
4
5 This page describes the random-number generator in PYTHIA and 
6 how it can be replaced by an external one.
7  
8 <h3>Internal random numbers</h3>
9
10 The <code>Rndm</code> class generates random numbers, using the 
11 Marsaglia-Zaman-Tsang algorithm <ref>Mar90</ref>. It is purely static, 
12 i.e. only exists in one copy, so that one cannot run several copies, 
13 each with the same random number sequence, by mistake. 
14
15 <p/>
16 Random numbers <code>R</code> uniformly distributed in 
17 <code>0 &lt; R &lt; 1</code> are obtained with
18 <pre>
19    Rndm::flat();
20 </pre>
21 There are also methods to generate according to an exponential, to 
22 <ei>x * exp(-x)</ei>, to a Gaussian, or picked among a set of 
23 possibilites, which make use of <code>flat()</code>.
24
25 <p/>
26 If the random number generator is not initialized before, it will be
27 so the first time it is asked to generate a random number, and then
28 with the default seed, 19780503. You can initialize, or reinitialize,
29 with your own choice of seed with a 
30 <pre>
31    Rndm::init(seed);
32 </pre>
33 Here values <code>0 &lt; seed &lt; 900 000 000</code> gives so many 
34 different random number sequences, while <code>seed = 0</code> will call 
35 the <code>Stdlib time(0)</code> function to provide a "random" 
36 <code>seed</code>, and <code>seed &lt; 0</code> will revert back to 
37 the default <code>seed</code>.
38
39 <p/>
40 The <code>Pythia</code> class defines <aloc href="RandomNumberSeed">a 
41 flag and a mode</aloc>, that allows the <code>seed</code> to be set in 
42 the <code>Pythia::init</code> call. That would be the standard way for a 
43 user to pick the random number sequence in a run.
44
45 <h3>External random numbers</h3>
46
47 <code>RndmEngine</code> is a base class for the external handling of 
48 random-number generation. The user-written derived class is called 
49 if a pointer to it has been handed in with the 
50 <code>pythia.rndmEnginePtr()</code> method. Since the default 
51 Marsaglia-Zaman-Tsang algorithm is quite good, chances are that any 
52 replacement would be a step down, but this may still be required by 
53 consistency with other program elements in big experimental frameworks.
54
55 <p/>
56 There is only one pure virtual method in <code>RndmEngine</code>, to 
57 generate one random number flat in the range between 0 and 1: 
58 <pre>
59   virtual double flat() = 0;
60 </pre>
61 Note that methods for initialization are not provided in the base 
62 class, in part since input parameters may be specific to the generator
63 used, in part since initialization can as well be taken care of 
64 externally to the <code>Pythia</code> code.
65
66 <p/>
67 An example illustrating how to run with an external random number
68 generator is provided in <code>main24.cc</code>.
69
70 </chapter>
71
72 <!-- Copyright (C) 2008 Torbjorn Sjostrand -->