ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLRandom.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4INCLRandom.hh
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 
58 namespace G4INCL {
59 
60  namespace Random {
66  void setGenerator(G4INCL::IRandomGenerator *aGenerator);
67 
72  void setSeeds(const SeedVector &sv);
73 
79 
83  G4double shoot();
84 
88  G4double shoot0();
89 
93  G4double shoot1();
94 
98  template<typename T> T shootInteger(T n){
99  return static_cast<T>(shoot1() * n);
100  }
101 
105  G4double gauss(G4double sigma=1.);
106 
107 #ifdef INCLXX_IN_GEANT4_MODE
108 
113 #endif
114 
119 
125 
131  ThreeVector gaussVector(G4double sigma=1.);
132 
134  std::pair<G4double,G4double> correlatedGaussian(const G4double corrCoeff, const G4double x0=0., const G4double sigma=1.);
135 
137  std::pair<G4double,G4double> correlatedUniform(const G4double corrCoeff);
138 
142  void deleteGenerator();
143 
148 
149 #ifdef INCL_COUNT_RND_CALLS
150 
151  unsigned long long getNumberOfCalls();
152 #endif
153 
155  void saveSeeds();
156 
158  SeedVector getSavedSeeds();
159 
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() {
173  }
174 
175  static constexpr result_type max() {
177  }
178 
180 // return shootInteger(max());
181  return G4RandFlat::shootInt(INT_MAX);
182  }
183 
184  };
185 
186  Adapter const &getAdapter();
187  }
188 
189 }
190 
191 #endif /* G4INCLRANDOM_HH_ */