Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/event/include/G4SPSRandomGenerator.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 // G4SPSRandomGenerator
 27 //
 28 // Class Description:
 29 //
 30 // Special random number generator used by G4GeneralParticleSource to allow 
 31 // biasing applied at the lowest level for all distributions.
 32 // This is a shared class between threads.
 33 // Only one thread should use the set-methods here.
 34 // Note that this is exactly what is achieved using UI commands.
 35 // If you use the set methods to set defaults in your
 36 // application take care that only one thread is executing them.
 37 // In addition take care of calling these methods before the run is started
 38 // Do not use the setters during the event loop
 39 
 40 // Author: Fan Lei, QinetiQ ltd.
 41 // Customer: ESA/ESTEC
 42 // History:
 43 // - 05/02/2004, Fan Lei - Created.
 44 //     Based on the G4GeneralParticleSource class
 45 // - 06/06/2014, Andrea Dotti
 46 //     Added a mutex to protect access to shared resources (data members).
 47 //     Getters and Setters are mutex'd but not the GetRand* methods,
 48 //     because it is assumed these are called only during the event loop
 49 //     during which the status of this class is invariant
 50 // --------------------------------------------------------------------
 51 #ifndef G4SPSRandomGenerator_hh
 52 #define G4SPSRandomGenerator_hh 1
 53 
 54 #include "G4PhysicsFreeVector.hh"
 55 #include "G4DataInterpolation.hh"
 56 #include "G4ThreeVector.hh"
 57 #include "G4Threading.hh"
 58 #include "G4Cache.hh"
 59 
 60 class G4SPSRandomGenerator
 61 {
 62   public:
 63 
 64     G4SPSRandomGenerator();
 65       // Constructor: initializes variables
 66 
 67    ~G4SPSRandomGenerator();
 68       // Destructor
 69 
 70     // Biasing Methods
 71 
 72     void SetXBias(const G4ThreeVector&);
 73       // Allows the user to re-distribute the random
 74       // numbers used to generate x co-ordinates
 75 
 76     void SetYBias(const G4ThreeVector&);
 77       // Allows the user to re-distribute the random
 78       // numbers used to generate y co-ordinates
 79 
 80     void SetZBias(const G4ThreeVector&);
 81       // Allows the user to re-distribute the random
 82       // numbers used to generate z co-ordinates
 83 
 84     void SetThetaBias(const G4ThreeVector&);
 85       // Allows the user to re-distribute the random
 86       // numbers used to generate values of theta
 87 
 88     void SetPhiBias(const G4ThreeVector&);
 89       // Allows the user to re-distribute the random
 90       // numbers used to generate values of phi
 91 
 92     void SetEnergyBias(const G4ThreeVector&);
 93     // Allows the user to re-distribute the random
 94     // numbers used to generate the energies
 95 
 96     void SetPosThetaBias(const G4ThreeVector&);
 97       // Allows the user to re-distribute the random
 98       // numbers used to generate values of theta for position distribution
 99 
100     void SetPosPhiBias(const G4ThreeVector&);
101       // Allows the user to re-distribute the random
102       // numbers used to generate values of phi for position distribution
103 
104     G4double GenRandX();
105       // Generates the random number for x, with or without biasing
106 
107     G4double GenRandY();
108       // Generates the random number for y, with or without biasing
109 
110     G4double GenRandZ();
111       // Generates the random number for z, with or without biasing
112 
113     G4double GenRandTheta();
114       // Generates the random number for theta, with or without biasing
115 
116     G4double GenRandPhi();
117       // Generates the random number for phi, with or without biasing
118 
119     G4double GenRandEnergy();
120       // Generates the random number for energy, with or without biasing
121 
122     G4double GenRandPosTheta();
123       // Generates the random number for theta, with or without biasing
124       // for position distribution
125 
126     G4double GenRandPosPhi();
127       // Generates the random number for phi, with or without biasing
128       // for position distribution
129 
130     void SetIntensityWeight(G4double weight);
131 
132     G4double GetBiasWeight() const ;
133       // Returns the weight change after biasing
134 
135         // method to re-set the histograms
136     void ReSetHist(const G4String&);
137       // Resets the histogram for user defined distribution
138 
139     void SetVerbosity(G4int a);
140       // Sets the verbosity level
141 
142   private:
143 
144     // Encapsulate in a struct to guarantee that correct
145     // initial state is set via constructor
146     //
147     struct a_check
148     {
149       G4bool val;
150       a_check() { val = false; }
151     };
152     
153     // See .cc for an explanation of this in method GenRandX()
154     //
155     G4Cache<a_check> local_IPDFXBias;
156     G4bool XBias, IPDFXBias;
157     G4PhysicsFreeVector XBiasH;
158     G4PhysicsFreeVector IPDFXBiasH;
159     G4Cache<a_check> local_IPDFYBias;
160     G4bool YBias, IPDFYBias;
161     G4PhysicsFreeVector YBiasH;
162     G4PhysicsFreeVector IPDFYBiasH;
163     G4Cache<a_check> local_IPDFZBias;
164     G4bool ZBias, IPDFZBias;
165     G4PhysicsFreeVector ZBiasH;
166     G4PhysicsFreeVector IPDFZBiasH;
167     G4Cache<a_check> local_IPDFThetaBias;
168     G4bool ThetaBias, IPDFThetaBias;
169     G4PhysicsFreeVector ThetaBiasH;
170     G4PhysicsFreeVector IPDFThetaBiasH;
171     G4Cache<a_check> local_IPDFPhiBias;
172     G4bool PhiBias, IPDFPhiBias;
173     G4PhysicsFreeVector PhiBiasH;
174     G4PhysicsFreeVector IPDFPhiBiasH;
175     G4Cache<a_check> local_IPDFEnergyBias;
176     G4bool EnergyBias, IPDFEnergyBias;
177     G4PhysicsFreeVector EnergyBiasH;
178     G4PhysicsFreeVector IPDFEnergyBiasH;
179     G4Cache<a_check> local_IPDFPosThetaBias;
180     G4bool PosThetaBias, IPDFPosThetaBias;
181     G4PhysicsFreeVector PosThetaBiasH;
182     G4PhysicsFreeVector IPDFPosThetaBiasH;
183     G4Cache<a_check> local_IPDFPosPhiBias;
184     G4bool PosPhiBias, IPDFPosPhiBias;
185     G4PhysicsFreeVector PosPhiBiasH;
186     G4PhysicsFreeVector IPDFPosPhiBiasH;
187 
188     struct bweights_t
189     {
190       G4double w[9];
191       bweights_t();
192       G4double& operator[] (const int i);
193     };
194     G4Cache<bweights_t> bweights;
195       // record x,y,z,theta,phi,energy,posThet,posPhi,intensity weights
196 
197     G4int verbosityLevel;
198       // Verbosity
199  
200     G4Mutex mutex;
201       // Protect shared resources
202 };
203 
204 #endif
205