Geant4  10.01
G4SingleParticleSource.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 
28 //
29 // MODULE: G4SingleParticleSource.hh
30 //
31 // Version: 1.0
32 // Date: 5/02/04
33 // Author: Fan Lei
34 // Organisation: QinetiQ ltd.
35 // Customer: ESA/ESTEC
36 //
38 //
39 // CHANGE HISTORY
40 // --------------
41 //
42 // Version 1.0, 05/02/2004, Fan Lei, Created.
43 // Based on the G4GeneralParticleSource class in Geant4 v6.0
44 //
46 //
47 // Class Description:
48 //
49 // The Single Particle Source is designed to extend the functionality of the
50 // G4ParticleGun class. It is designed to allow specification of input
51 // particles in terms of position, direction (or angular) and energy
52 // distributions. It is used by the General Particle source class
53 // and it is derived from G4VPrimaryGenerator.
54 //
55 // Note on thread safety:
56 // G4SingleParticleSource instances can be shared among threads. GeneratePrimaryVertex
57 // is protected via a mutex because underlying generators are not assumed to be thread-safe.
58 // Note that internal status of this class is assumed to be changed by master thread (typically
59 // via UI commands).
60 //
62 //
63 // MEMBER FUNCTIONS
64 // ----------------
65 //
66 // G4SingleParticleSource ()
67 // Constructor: Initializes variables and instantiates the
68 // Messenger and Navigator classes
69 //
70 // ~G4SingleParticleSource ()
71 // Destructor: deletes Messenger and prints out run information.
72 //
73 // void GeneratePrimaryVertex(G4Event *evt)
74 // Generate the particles initial parameters.
75 //
76 // G4SPSPosDistribution* GetPosDist()
77 // Return a pointer to the position distribution generator
78 //
79 // G4SPSAngDistribution* GetAngDist()
80 // Return a pointer to the angular distribution generator
81 //
82 // G4SPSEneDistribution* GetEneDist()
83 // Return a pointer to the energy distribution generator
84 //
85 // G4SPSRandomGenerator* GetBiasRndm() {return biasRndm;};
86 // Return a pointer to the biased random number generator
87 //
88 // void SetVerbosity(G4int);
89 // Set the verbosity level.
90 //
91 // void SetParticleDefinition ();
92 // G4ParticleDefinition * GetParticleDefinition ()
93 // Get/Set the particle definition of the primary track
94 //
95 // void SetParticleCharge(G4double aCharge)
96 // set the charge state of the primary track
97 //
98 // inline void SetParticlePolarization (G4ThreeVector aVal)
99 // inline G4ThreeVector GetParticlePolarization ()
100 // Set/Get the polarization state of the primary track
101 //
102 // inline void SetParticleTime(G4double aTime) { particle_time = aTime; };
103 // inline G4double GetParticleTime() { return particle_time; };
104 // Set/Get the Time.
105 //
106 // inline void SetNumberOfParticles(G4int i)
107 // inline G4int GetNumberOfParticles()
108 // set/get the number of particles to be generated in the primary track
109 //
110 // inline G4ThreeVector GetParticlePosition()
111 // inline G4ThreeVector GetParticleMomentumDirection()
112 // inline G4double GetParticleEnergy()
113 // get the position, direction, and energy of the current particle
114 //
116 //
117 #ifndef G4SingleParticleSource_h
118 #define G4SingleParticleSource_h 1
119 
120 #include "G4VPrimaryGenerator.hh"
121 #include "G4ParticleMomentum.hh"
122 #include "G4ParticleDefinition.hh"
123 //
124 #include "G4SPSPosDistribution.hh"
125 #include "G4SPSAngDistribution.hh"
126 #include "G4SPSEneDistribution.hh"
127 #include "G4SPSRandomGenerator.hh"
128 #include "G4Threading.hh"
129 
131 public:
134  void GeneratePrimaryVertex(G4Event *evt);
135  //
137  return posGenerator;
138  }
139  ;
141  return angGenerator;
142  }
143  ;
145  return eneGenerator;
146  }
147  ;
149  return biasRndm;
150  }
151  ;
152 
153  // Set the verbosity level.
154  void SetVerbosity(G4int);
155 
156  // Set the particle species
157  void SetParticleDefinition(G4ParticleDefinition * aParticleDefinition);
159  return particle_definition;
160  }
161  ;
162 
163  inline void SetParticleCharge(G4double aCharge) {
164  particle_charge = aCharge;
165  }
166  ;
167 
168  // Set polarization
170  particle_polarization = aVal;
171  }
172  ;
174  return particle_polarization;
175  }
176  ;
177 
178  // Set Time.
179  inline void SetParticleTime(G4double aTime) {
180  particle_time = aTime;
181  }
182  ;
184  return particle_time;
185  }
186  ;
187 
188  inline void SetNumberOfParticles(G4int i) {
190  }
191  ;
192  //
195  }
196  ;
198  return particle_position;
199  }
200  ;
203  }
204  ;
206  return particle_energy;
207  }
208  ;
209 
210 private:
211 
216  //
217  // Other particle properties
227 
228  // Verbosity
230 
231  //This can be a shared resource, this mutex is used in GeneratePrimaryVertex
233 };
234 
235 #endif
236 
G4SPSRandomGenerator * GetBiasRndm()
G4SPSEneDistribution * GetEneDist()
void SetParticleTime(G4double aTime)
CLHEP::Hep3Vector G4ThreeVector
G4SPSPosDistribution * GetPosDist()
G4ParticleDefinition * GetParticleDefinition()
G4SPSEneDistribution * eneGenerator
int G4int
Definition: G4Types.hh:78
G4SPSPosDistribution * posGenerator
G4ThreeVector GetParticleMomentumDirection()
G4ParticleMomentum particle_momentum_direction
G4SPSRandomGenerator * biasRndm
void SetParticlePolarization(G4ThreeVector aVal)
void SetParticleDefinition(G4ParticleDefinition *aParticleDefinition)
G4SPSAngDistribution * GetAngDist()
G4int G4Mutex
Definition: G4Threading.hh:161
G4ThreeVector GetParticlePolarization()
void GeneratePrimaryVertex(G4Event *evt)
void SetParticleCharge(G4double aCharge)
double G4double
Definition: G4Types.hh:76
G4ThreeVector G4ParticleMomentum
G4ParticleDefinition * particle_definition
G4SPSAngDistribution * angGenerator