Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4INCLRandom.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// INCL++ intra-nuclear cascade model
27// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
38/*
39 * G4INCLRandom.hh
40 *
41 * \date 7 June 2009
42 * \author Pekka Kaitaniemi
43 */
44
45#ifndef G4INCLRANDOM_HH_
46#define G4INCLRANDOM_HH_
47
48#include <iostream>
49#include <cmath>
50#include <utility>
51#include <limits>
53#include "G4INCLThreeVector.hh"
54#include "G4INCLGlobals.hh"
55#include "G4INCLConfig.hh"
56#include "Randomize.hh"
57
58namespace G4INCL {
59
60 namespace Random {
61 /**
62 * Set the random number generator implementation to be used globally by INCL.
63 *
64 * @see G4INCL::IRandomGenerator
65 */
66 void setGenerator(G4INCL::IRandomGenerator *aGenerator);
67
68 /**
69 * Set the seeds of the current generator.
70 *
71 */
72 void setSeeds(const SeedVector &sv);
73
74 /**
75 * Get the seeds of the current generator.
76 *
77 */
79
80 /**
81 * Generate flat distribution of random numbers.
82 */
84
85 /**
86 * Return a random number in the ]0,1] interval
87 */
89
90 /**
91 * Return a random number in the [0,1[ interval
92 */
94
95 /**
96 * Return a random integer in the [0,n[ interval
97 */
98 template<typename T> T shootInteger(T n){
99 return static_cast<T>(shoot1() * n);
100 }
101
102 /**
103 * Generate random numbers using gaussian distribution.
104 */
105 G4double gauss(G4double sigma=1.);
106
107#ifdef INCLXX_IN_GEANT4_MODE
108 /**
109 * Generate random numbers using gaussian distribution to be used only
110 * for correlated pairs
111 */
113#endif
114
115 /**
116 * Generate isotropically-distributed ThreeVectors of given norm.
117 */
119
120 /**
121 * Generate ThreeVectors that are uniformly distributed in a sphere of
122 * radius rmax.
123 */
125
126 /** \brief Generate Gaussianly-distributed ThreeVectors
127 *
128 * Generate ThreeVectors that are distributed as a three-dimensional
129 * Gaussian of the given sigma.
130 */
132
133 /// \brief Generate pairs of correlated Gaussian random numbers
134 std::pair<G4double,G4double> correlatedGaussian(const G4double corrCoeff, const G4double x0=0., const G4double sigma=1.);
135
136 /// \brief Generate pairs of correlated uniform random numbers
137 std::pair<G4double,G4double> correlatedUniform(const G4double corrCoeff);
138
139 /**
140 * Delete the generator
141 */
142 void deleteGenerator();
143
144 /**
145 * Check if the generator is initialized.
146 */
148
149#ifdef INCL_COUNT_RND_CALLS
150 /// \brief Return the number of calls to the RNG
151 unsigned long long getNumberOfCalls();
152#endif
153
154 /// \brief Save the status of the random-number generator
155 void saveSeeds();
156
157 /// \brief Get the saved status of the random-number generator
158 SeedVector getSavedSeeds();
159
160 /// \brief Initialize generator according to a Config object
161#ifdef INCLXX_IN_GEANT4_MODE
162 void initialize(Config const * const);
163#else
164 void initialize(Config const * const theConfig);
165#endif
166
167 class Adapter {
168 public:
169 using result_type = unsigned long;
170
171 static constexpr result_type min() {
172 return std::numeric_limits<Adapter::result_type>::min();
173 }
174
175 static constexpr result_type max() {
176 return std::numeric_limits<Adapter::result_type>::max();
177 }
178
180 #ifdef INCLXX_IN_GEANT4_MODE
181 return G4RandFlat::shootInt(INT_MAX);
182 #else
183 return shootInteger(max());
184 #endif
185 }
186
187 };
188
189 Adapter const &getAdapter();
190 }
191
192}
193
194#endif /* G4INCLRANDOM_HH_ */
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
static constexpr result_type max()
static constexpr result_type min()
unsigned long result_type
result_type operator()() const
ThreeVector normVector(G4double norm=1.)
SeedVector getSeeds()
Definition: G4INCLRandom.cc:89
G4double gaussWithMemory(G4double sigma=1.)
ThreeVector sphereVector(G4double rmax=1.)
ThreeVector gaussVector(G4double sigma=1.)
Generate Gaussianly-distributed ThreeVectors.
SeedVector getSavedSeeds()
Get the saved status of the random-number generator.
G4double shoot0()
Adapter const & getAdapter()
G4bool isInitialized()
G4double shoot()
Definition: G4INCLRandom.cc:93
T shootInteger(T n)
Definition: G4INCLRandom.hh:98
void setSeeds(const SeedVector &sv)
Definition: G4INCLRandom.cc:85
void deleteGenerator()
G4double shoot1()
std::pair< G4double, G4double > correlatedGaussian(const G4double corrCoeff, const G4double x0=0., const G4double sigma=1.)
Generate pairs of correlated Gaussian random numbers.
void setGenerator(G4INCL::IRandomGenerator *aGenerator)
Definition: G4INCLRandom.cc:72
std::pair< G4double, G4double > correlatedUniform(const G4double corrCoeff)
Generate pairs of correlated uniform random numbers.
void saveSeeds()
Save the status of the random-number generator.
void initialize(Config const *const)
Initialize generator according to a Config object.
#define INT_MAX
Definition: templates.hh:90