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 ]

Diff markup

Differences between /event/include/G4SPSRandomGenerator.hh (Version 11.3.0) and /event/include/G4SPSRandomGenerator.hh (Version 10.7.p4)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4SPSRandomGenerator                            26 // G4SPSRandomGenerator
 27 //                                                 27 //
 28 // Class Description:                              28 // Class Description:
 29 //                                                 29 //
 30 // Special random number generator used by G4G     30 // Special random number generator used by G4GeneralParticleSource to allow 
 31 // biasing applied at the lowest level for all     31 // biasing applied at the lowest level for all distributions.
 32 // This is a shared class between threads.         32 // This is a shared class between threads.
 33 // Only one thread should use the set-methods      33 // Only one thread should use the set-methods here.
 34 // Note that this is exactly what is achieved      34 // Note that this is exactly what is achieved using UI commands.
 35 // If you use the set methods to set defaults      35 // If you use the set methods to set defaults in your
 36 // application take care that only one thread      36 // application take care that only one thread is executing them.
 37 // In addition take care of calling these meth     37 // In addition take care of calling these methods before the run is started
 38 // Do not use the setters during the event loo     38 // Do not use the setters during the event loop
 39                                                    39 
 40 // Author: Fan Lei, QinetiQ ltd.                   40 // Author: Fan Lei, QinetiQ ltd.
 41 // Customer: ESA/ESTEC                             41 // Customer: ESA/ESTEC
 42 // History:                                        42 // History:
 43 // - 05/02/2004, Fan Lei - Created.                43 // - 05/02/2004, Fan Lei - Created.
 44 //     Based on the G4GeneralParticleSource cl     44 //     Based on the G4GeneralParticleSource class
 45 // - 06/06/2014, Andrea Dotti                      45 // - 06/06/2014, Andrea Dotti
 46 //     Added a mutex to protect access to shar     46 //     Added a mutex to protect access to shared resources (data members).
 47 //     Getters and Setters are mutex'd but not     47 //     Getters and Setters are mutex'd but not the GetRand* methods,
 48 //     because it is assumed these are called      48 //     because it is assumed these are called only during the event loop
 49 //     during which the status of this class i     49 //     during which the status of this class is invariant
 50 // -------------------------------------------     50 // --------------------------------------------------------------------
 51 #ifndef G4SPSRandomGenerator_hh                    51 #ifndef G4SPSRandomGenerator_hh
 52 #define G4SPSRandomGenerator_hh 1                  52 #define G4SPSRandomGenerator_hh 1
 53                                                    53 
 54 #include "G4PhysicsFreeVector.hh"              <<  54 #include "G4PhysicsOrderedFreeVector.hh"
 55 #include "G4DataInterpolation.hh"                  55 #include "G4DataInterpolation.hh"
 56 #include "G4ThreeVector.hh"                        56 #include "G4ThreeVector.hh"
 57 #include "G4Threading.hh"                          57 #include "G4Threading.hh"
 58 #include "G4Cache.hh"                              58 #include "G4Cache.hh"
 59                                                    59 
 60 class G4SPSRandomGenerator                         60 class G4SPSRandomGenerator
 61 {                                                  61 {
 62   public:                                          62   public:
 63                                                    63 
 64     G4SPSRandomGenerator();                        64     G4SPSRandomGenerator();
 65       // Constructor: initializes variables        65       // Constructor: initializes variables
 66                                                    66 
 67    ~G4SPSRandomGenerator();                        67    ~G4SPSRandomGenerator();
 68       // Destructor                                68       // Destructor
 69                                                    69 
 70     // Biasing Methods                             70     // Biasing Methods
 71                                                    71 
 72     void SetXBias(const G4ThreeVector&);           72     void SetXBias(const G4ThreeVector&);
 73       // Allows the user to re-distribute the      73       // Allows the user to re-distribute the random
 74       // numbers used to generate x co-ordinat     74       // numbers used to generate x co-ordinates
 75                                                    75 
 76     void SetYBias(const G4ThreeVector&);           76     void SetYBias(const G4ThreeVector&);
 77       // Allows the user to re-distribute the      77       // Allows the user to re-distribute the random
 78       // numbers used to generate y co-ordinat     78       // numbers used to generate y co-ordinates
 79                                                    79 
 80     void SetZBias(const G4ThreeVector&);           80     void SetZBias(const G4ThreeVector&);
 81       // Allows the user to re-distribute the      81       // Allows the user to re-distribute the random
 82       // numbers used to generate z co-ordinat     82       // numbers used to generate z co-ordinates
 83                                                    83 
 84     void SetThetaBias(const G4ThreeVector&);       84     void SetThetaBias(const G4ThreeVector&);
 85       // Allows the user to re-distribute the      85       // Allows the user to re-distribute the random
 86       // numbers used to generate values of th     86       // numbers used to generate values of theta
 87                                                    87 
 88     void SetPhiBias(const G4ThreeVector&);         88     void SetPhiBias(const G4ThreeVector&);
 89       // Allows the user to re-distribute the      89       // Allows the user to re-distribute the random
 90       // numbers used to generate values of ph     90       // numbers used to generate values of phi
 91                                                    91 
 92     void SetEnergyBias(const G4ThreeVector&);      92     void SetEnergyBias(const G4ThreeVector&);
 93     // Allows the user to re-distribute the ra     93     // Allows the user to re-distribute the random
 94     // numbers used to generate the energies       94     // numbers used to generate the energies
 95                                                    95 
 96     void SetPosThetaBias(const G4ThreeVector&)     96     void SetPosThetaBias(const G4ThreeVector&);
 97       // Allows the user to re-distribute the      97       // Allows the user to re-distribute the random
 98       // numbers used to generate values of th     98       // numbers used to generate values of theta for position distribution
 99                                                    99 
100     void SetPosPhiBias(const G4ThreeVector&);     100     void SetPosPhiBias(const G4ThreeVector&);
101       // Allows the user to re-distribute the     101       // Allows the user to re-distribute the random
102       // numbers used to generate values of ph    102       // numbers used to generate values of phi for position distribution
103                                                   103 
104     G4double GenRandX();                          104     G4double GenRandX();
105       // Generates the random number for x, wi    105       // Generates the random number for x, with or without biasing
106                                                   106 
107     G4double GenRandY();                          107     G4double GenRandY();
108       // Generates the random number for y, wi    108       // Generates the random number for y, with or without biasing
109                                                   109 
110     G4double GenRandZ();                          110     G4double GenRandZ();
111       // Generates the random number for z, wi    111       // Generates the random number for z, with or without biasing
112                                                   112 
113     G4double GenRandTheta();                      113     G4double GenRandTheta();
114       // Generates the random number for theta    114       // Generates the random number for theta, with or without biasing
115                                                   115 
116     G4double GenRandPhi();                        116     G4double GenRandPhi();
117       // Generates the random number for phi,     117       // Generates the random number for phi, with or without biasing
118                                                   118 
119     G4double GenRandEnergy();                     119     G4double GenRandEnergy();
120       // Generates the random number for energ    120       // Generates the random number for energy, with or without biasing
121                                                   121 
122     G4double GenRandPosTheta();                   122     G4double GenRandPosTheta();
123       // Generates the random number for theta    123       // Generates the random number for theta, with or without biasing
124       // for position distribution                124       // for position distribution
125                                                   125 
126     G4double GenRandPosPhi();                     126     G4double GenRandPosPhi();
127       // Generates the random number for phi,     127       // Generates the random number for phi, with or without biasing
128       // for position distribution                128       // for position distribution
129                                                   129 
130     void SetIntensityWeight(G4double weight);     130     void SetIntensityWeight(G4double weight);
131                                                   131 
132     G4double GetBiasWeight() const ;              132     G4double GetBiasWeight() const ;
133       // Returns the weight change after biasi    133       // Returns the weight change after biasing
134                                                   134 
135         // method to re-set the histograms        135         // method to re-set the histograms
136     void ReSetHist(const G4String&);              136     void ReSetHist(const G4String&);
137       // Resets the histogram for user defined    137       // Resets the histogram for user defined distribution
138                                                   138 
139     void SetVerbosity(G4int a);                   139     void SetVerbosity(G4int a);
140       // Sets the verbosity level                 140       // Sets the verbosity level
141                                                   141 
142   private:                                        142   private:
143                                                   143 
144     // Encapsulate in a struct to guarantee th    144     // Encapsulate in a struct to guarantee that correct
145     // initial state is set via constructor       145     // initial state is set via constructor
146     //                                            146     //
147     struct a_check                                147     struct a_check
148     {                                             148     {
149       G4bool val;                                 149       G4bool val;
150       a_check() { val = false; }                  150       a_check() { val = false; }
151     };                                            151     };
152                                                   152     
153     // See .cc for an explanation of this in m    153     // See .cc for an explanation of this in method GenRandX()
154     //                                            154     //
155     G4Cache<a_check> local_IPDFXBias;             155     G4Cache<a_check> local_IPDFXBias;
156     G4bool XBias, IPDFXBias;                      156     G4bool XBias, IPDFXBias;
157     G4PhysicsFreeVector XBiasH;                << 157     G4PhysicsOrderedFreeVector XBiasH;
158     G4PhysicsFreeVector IPDFXBiasH;            << 158     G4PhysicsOrderedFreeVector IPDFXBiasH;
159     G4Cache<a_check> local_IPDFYBias;             159     G4Cache<a_check> local_IPDFYBias;
160     G4bool YBias, IPDFYBias;                      160     G4bool YBias, IPDFYBias;
161     G4PhysicsFreeVector YBiasH;                << 161     G4PhysicsOrderedFreeVector YBiasH;
162     G4PhysicsFreeVector IPDFYBiasH;            << 162     G4PhysicsOrderedFreeVector IPDFYBiasH;
163     G4Cache<a_check> local_IPDFZBias;             163     G4Cache<a_check> local_IPDFZBias;
164     G4bool ZBias, IPDFZBias;                      164     G4bool ZBias, IPDFZBias;
165     G4PhysicsFreeVector ZBiasH;                << 165     G4PhysicsOrderedFreeVector ZBiasH;
166     G4PhysicsFreeVector IPDFZBiasH;            << 166     G4PhysicsOrderedFreeVector IPDFZBiasH;
167     G4Cache<a_check> local_IPDFThetaBias;         167     G4Cache<a_check> local_IPDFThetaBias;
168     G4bool ThetaBias, IPDFThetaBias;              168     G4bool ThetaBias, IPDFThetaBias;
169     G4PhysicsFreeVector ThetaBiasH;            << 169     G4PhysicsOrderedFreeVector ThetaBiasH;
170     G4PhysicsFreeVector IPDFThetaBiasH;        << 170     G4PhysicsOrderedFreeVector IPDFThetaBiasH;
171     G4Cache<a_check> local_IPDFPhiBias;           171     G4Cache<a_check> local_IPDFPhiBias;
172     G4bool PhiBias, IPDFPhiBias;                  172     G4bool PhiBias, IPDFPhiBias;
173     G4PhysicsFreeVector PhiBiasH;              << 173     G4PhysicsOrderedFreeVector PhiBiasH;
174     G4PhysicsFreeVector IPDFPhiBiasH;          << 174     G4PhysicsOrderedFreeVector IPDFPhiBiasH;
175     G4Cache<a_check> local_IPDFEnergyBias;        175     G4Cache<a_check> local_IPDFEnergyBias;
176     G4bool EnergyBias, IPDFEnergyBias;            176     G4bool EnergyBias, IPDFEnergyBias;
177     G4PhysicsFreeVector EnergyBiasH;           << 177     G4PhysicsOrderedFreeVector EnergyBiasH;
178     G4PhysicsFreeVector IPDFEnergyBiasH;       << 178     G4PhysicsOrderedFreeVector IPDFEnergyBiasH;
179     G4Cache<a_check> local_IPDFPosThetaBias;      179     G4Cache<a_check> local_IPDFPosThetaBias;
180     G4bool PosThetaBias, IPDFPosThetaBias;        180     G4bool PosThetaBias, IPDFPosThetaBias;
181     G4PhysicsFreeVector PosThetaBiasH;         << 181     G4PhysicsOrderedFreeVector PosThetaBiasH;
182     G4PhysicsFreeVector IPDFPosThetaBiasH;     << 182     G4PhysicsOrderedFreeVector IPDFPosThetaBiasH;
183     G4Cache<a_check> local_IPDFPosPhiBias;        183     G4Cache<a_check> local_IPDFPosPhiBias;
184     G4bool PosPhiBias, IPDFPosPhiBias;            184     G4bool PosPhiBias, IPDFPosPhiBias;
185     G4PhysicsFreeVector PosPhiBiasH;           << 185     G4PhysicsOrderedFreeVector PosPhiBiasH;
186     G4PhysicsFreeVector IPDFPosPhiBiasH;       << 186     G4PhysicsOrderedFreeVector IPDFPosPhiBiasH;
187                                                   187 
188     struct bweights_t                             188     struct bweights_t
189     {                                             189     {
190       G4double w[9];                              190       G4double w[9];
191       bweights_t();                               191       bweights_t();
192       G4double& operator[] (const int i);         192       G4double& operator[] (const int i);
193     };                                            193     };
194     G4Cache<bweights_t> bweights;                 194     G4Cache<bweights_t> bweights;
195       // record x,y,z,theta,phi,energy,posThet    195       // record x,y,z,theta,phi,energy,posThet,posPhi,intensity weights
196                                                   196 
197     G4int verbosityLevel;                         197     G4int verbosityLevel;
198       // Verbosity                                198       // Verbosity
199                                                   199  
200     G4Mutex mutex;                                200     G4Mutex mutex;
201       // Protect shared resources                 201       // Protect shared resources
202 };                                                202 };
203                                                   203 
204 #endif                                            204 #endif
205                                                   205