Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4SPSRandomGenerator.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 //
27 //
28 // MODULE: G4SPSRandomGenerator.hh
29 //
30 // Version: 1.0
31 // Date: 5/02/04
32 // Author: Fan Lei
33 // Organisation: QinetiQ ltd.
34 // Customer: ESA/ESTEC
35 //
37 //
38 // CHANGE HISTORY
39 // --------------
40 //
41 // 26/10/2004 F Lei
42 // Created separated the theta, phi generators for position distributions.
43 //
44 // Version 1.0, 05/02/2004, Fan Lei, Created.
45 // Based on the G4GeneralParticleSource class in Geant4 v6.0
46 //
48 //
49 // Class Description:
50 //
51 // Special random number generator used by G4GeneralParticleSource to allow
52 // biasing applied at the lowest level for all distributions.
53 //
55 //
56 // MEMBER FUNCTIONS
57 // ----------------
58 //
59 // G4SPSRandomGenerator ()
60 // Constructor: Initializes variables
61 //
62 // ~G4SPSRandomGenerator ()
63 // Destructor:
64 //
65 // void SetXBias(G4ThreeVector)
66 // Allows the user to re-distribute the random
67 // numbers used to generate x co-ordinates.
68 //
69 // void SetYBias(G4ThreeVector)
70 // Allows the user to re-distribute the random
71 // numbers used to generate y co-ordinates.
72 //
73 // void SetZBias(G4ThreeVector)
74 // Allows the user to re-distribute the random
75 // numbers used to generate z co-ordinates.
76 //
77 // void SetThetaBias(G4ThreeVector)
78 // Allows the user to re-distribute the random
79 // numbers used to generate values of theta.
80 //
81 // void SetPhiBias(G4ThreeVector)
82 // Allows the user to re-distribute the random
83 // numbers used to generate values of phi.
84 //
85 // void SetPosThetaBias(G4ThreeVector)
86 // Allows the user to re-distribute the random
87 // numbers used to generate values of theta for position distribution.
88 //
89 // void SetPosPhiBias(G4ThreeVector)
90 // Allows the user to re-distribute the random
91 // numbers used to generate values of phi for position distribution.
92 //
93 // void SetEnergyBias(G4ThreeVector)
94 // Allows the user to re-distribute the random
95 // numbers used to generate the energies.
96 //
97 // G4double GenRandX()
98 // Generates the random number for x, with or without biasing.
99 //
100 // G4double GenRandY()
101 // Generates the random number for y, with or without biasing.
102 //
103 // G4double GenRandZ()
104 // Generates the random number for z, with or without biasing.
105 //
106 // G4double GenRandTheta()
107 // Generates the random number for theta, with or without biasing.
108 //
109 // G4double GenRandPhi()
110 // Generates the random number for phi, with or without biasing.
111 //
112 // G4double GenRandEnergy()
113 // Generates the random number for energy, with or without biasing.
114 //
115 // G4double GenRandPosTheta()
116 // Generates the random number for theta, with or without biasing for position distribution.
117 //
118 // G4double GenRandPosPhi()
119 // Generates the random number for phi, with or without biasing for position distribution.
120 //
121 // inline G4double GetBiasWeight()
122 // Returns the weight change after biasing
123 //
124 // void ReSetHist(G4String);
125 // Re-sets the histogram for user defined distribution
126 //
127 // void SetVerbosity(G4int)
128 // Sets the verbosity level.
129 //
131 //
132 #ifndef G4SPSRandomGenerator_h
133 #define G4SPSRandomGenerator_h 1
134 
136 #include "G4DataInterpolation.hh"
137 
139 public:
142 
143  // static G4SPSRandomGenerator* getInstance ();
144 
145  // Biasing Methods
146  void SetXBias(G4ThreeVector);
147  void SetYBias(G4ThreeVector);
148  void SetZBias(G4ThreeVector);
154  G4double GenRandX();
155  G4double GenRandY();
156  G4double GenRandZ();
162 
164  bweights[8] = weight;
165  }
166  ;
167 
169  return bweights[0] * bweights[1] * bweights[2] * bweights[3]
170  * bweights[4] * bweights[5] * bweights[6] * bweights[7]
171  * bweights[8];
172  }
173  ;
174 
175  // method to re-set the histograms
176  void ReSetHist(G4String);
177 
178  // Set the verbosity level.
180  verbosityLevel = a;
181  }
182  ;
183 
184 private:
185 
186  // static G4SPSRandomGenerator *instance;
187 
188  G4bool XBias, IPDFXBias;
190  G4PhysicsOrderedFreeVector IPDFXBiasH;
191  G4bool YBias, IPDFYBias;
193  G4PhysicsOrderedFreeVector IPDFYBiasH;
194  G4bool ZBias, IPDFZBias;
196  G4PhysicsOrderedFreeVector IPDFZBiasH;
197  G4bool ThetaBias, IPDFThetaBias;
198  G4PhysicsOrderedFreeVector ThetaBiasH;
199  G4PhysicsOrderedFreeVector IPDFThetaBiasH;
200  G4bool PhiBias, IPDFPhiBias;
202  G4PhysicsOrderedFreeVector IPDFPhiBiasH;
203  G4bool EnergyBias, IPDFEnergyBias;
204  G4PhysicsOrderedFreeVector EnergyBiasH;
205  G4PhysicsOrderedFreeVector IPDFEnergyBiasH;
206  G4bool PosThetaBias, IPDFPosThetaBias;
207  G4PhysicsOrderedFreeVector PosThetaBiasH;
208  G4PhysicsOrderedFreeVector IPDFPosThetaBiasH;
209  G4bool PosPhiBias, IPDFPosPhiBias;
210  G4PhysicsOrderedFreeVector PosPhiBiasH;
211  G4PhysicsOrderedFreeVector IPDFPosPhiBiasH;
212 
213  //G4double alpha; // for biasing energy
214 
215  G4double bweights[9]; //record x,y,z,theta,phi,energy,posThet,posPhi,intensity weights
216 
217  // Verbosity
218  G4int verbosityLevel;
219 
220  G4PhysicsOrderedFreeVector ZeroPhysVector; // for re-set only
221 
222 };
223 
224 #endif
225