ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4GeneralParticleSource.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4GeneralParticleSource.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
//
27
//
28
// MODULE: G4GeneralParticleSource.hh
29
//
30
// Version: 2.0
31
// Date: 5/02/04
32
// Author: Fan Lei
33
// Organisation: QinetiQ ltd.
34
// Customer: ESA/ESTEC
35
//
36
// Documentation avaialable at http://reat.space.qinetiq.com/gps
37
// These include:
38
// User Requirement Document (URD)
39
// Software Specification Documents (SSD)
40
// Software User Manual (SUM): on-line version available
41
// Technical Note (TN) on the physics and algorithms
42
//
44
//
45
// CHANGE HISTORY
46
// --------------
47
// 26/10/2004, F Lei
48
// Added the Multiple_vertex capability.
49
// Removed "inline" from all Set/Get methods.
50
//
51
// Version 2.0, 05/02/2004, Fan Lei, Created.
52
// based on version 1.1 in Geant4 v6.0
53
// - Mutilple particle source definition
54
// - Re-structured commands
55
// - Split the task into smaller classes
56
//
57
// - old commonds have been retained for backward compatibility, but will
58
// be removed in the future.
59
//
60
// 25/03/2014, Andrew Green
61
// Various changes to use the new G4GeneralParticleSourceData class, mostly
62
// just transparent wrappers around the thread safe object.
63
//
65
//
66
// Class Description:
67
//
68
// The General Particle Source is designed to replace the G4ParticleGun class.
69
// It is designed to allow specification of mutiple particle sources, each with
70
// independent definitions of particle type, position, direction (or angular)
71
// and energy distributions.
72
//
74
//
75
// MEMBER FUNCTIONS
76
// ----------------
77
//
78
// G4GeneralParticleSource()
79
// Constructor: Initializes variables and instantiates the
80
// Messenger and generator classes
81
//
82
// ~G4GeneralParticleSourceMessenger()
83
// Destructor: deletes Messenger and others
84
//
85
// G4int GetNumberofSource()
86
// Return the number of particle gun defined
87
//
88
// void ListSource()
89
// List the particle guns defined
90
//
91
// void SetCurrentSourceto(G4int)
92
// set the current gun to the specified one so its definition can be changed
93
//
94
// void SetCurrentSourceIntensity(G4double)
95
// change the current particle gun strength
96
//
97
// void SetMultipleVertex(G4bool )
98
// Set if multiple vertex per event.
99
100
// G4SingleParticleSource* GetCurrentSource()
101
// return the pointer to current particle gun
102
//
103
// G4int GetCurrentSourceIndex()
104
// return the index of the current particle gun
105
//
106
// G4double GetCurrentSourceIntensity()
107
// return the strength of the current gun
108
//
109
// void ClearAll()
110
// remove all defined aprticle gun
111
//
112
// void AddaSource (G4double)
113
// add a new particle gun with the specified strength
114
//
115
// void DeleteaSource(G4int);
116
// delete the specified particle gun
117
//
118
// void SetParticleDefinition ();
119
// G4ParticleDefinition * GetParticleDefinition ()
120
// Get/Set the particle definition of the primary track
121
//
122
// void SetParticleCharge(G4double aCharge)
123
// set the charge state of the primary track
124
//
125
// void SetParticlePolarization (G4ThreeVector aVal)
126
// G4ThreeVector GetParticlePolarization ()
127
// Set/Get the polarization state of the primary track
128
//
129
// void SetParticleTime(G4double aTime) { particle_time = aTime; };
130
// G4double GetParticleTime() { return particle_time; };
131
// Set/Get the Time.
132
//
133
// void SetNumberOfParticles(G4int i)
134
// G4int GetNumberOfParticles()
135
// set/get the number of particles to be generated in the primary track
136
//
137
// G4ThreeVector GetParticlePosition()
138
// G4ThreeVector GetParticleMomentumDirection()
139
// G4double GetParticleEnergy()
140
// get the position, direction, and energy of the current particle
141
//
143
//
144
#ifndef G4GeneralParticleSource_H
145
#define G4GeneralParticleSource_H 1
146
147
#include "
globals.hh
"
148
#include <vector>
149
150
#include "
G4Event.hh
"
151
#include "
G4SingleParticleSource.hh
"
152
//
153
#include "
G4GeneralParticleSourceMessenger.hh
"
154
155
#include "
G4GeneralParticleSourceData.hh
"
156
157
class
G4SingleParticleSource
;
158
179
class
G4GeneralParticleSource
:
public
G4VPrimaryGenerator
180
{
181
//
182
public
:
183
184
G4GeneralParticleSource
();
185
~G4GeneralParticleSource
();
186
187
void
GeneratePrimaryVertex
(
G4Event
*);
188
189
G4int
GetNumberofSource
() {
return
GPSData
->
GetSourceVectorSize
(); };
190
void
ListSource
();
191
void
SetCurrentSourceto
(
G4int
) ;
192
void
SetCurrentSourceIntensity
(
G4double
);
193
G4SingleParticleSource
*
GetCurrentSource
()
const
194
{
return
GPSData
->
GetCurrentSource
();}
195
G4int
GetCurrentSourceIndex
()
const
196
{
return
GPSData
->
GetCurrentSourceIdx
(); }
197
G4double
GetCurrentSourceIntensity
()
const
198
{
return
GPSData
->
GetIntensity
(
GetCurrentSourceIndex
()); }
199
void
ClearAll
();
200
void
AddaSource
(
G4double
);
201
void
DeleteaSource
(
G4int
);
202
203
// Set the verbosity level.
204
void
SetVerbosity
(
G4int
i) {
GPSData
->
SetVerbosityAllSources
(i);} ;
205
206
// Set if multiple vertex per event.
207
void
SetMultipleVertex
(
G4bool
av) {
GPSData
->
SetMultipleVertex
(av);} ;
208
209
// set if flat_sampling is applied in multiple source case
210
211
void
SetFlatSampling
(
G4bool
av) {
GPSData
->
SetFlatSampling
(av);
normalised
=
false
;} ;
212
213
// Set the particle species
214
void
SetParticleDefinition
(
G4ParticleDefinition
* aParticleDefinition)
215
{
GPSData
->
GetCurrentSource
()->
SetParticleDefinition
(aParticleDefinition); } ;
216
217
G4ParticleDefinition
*
GetParticleDefinition
()
const
218
{
return
GPSData
->
GetCurrentSource
()->
GetParticleDefinition
();} ;
219
220
void
SetParticleCharge
(
G4double
aCharge)
221
{
GPSData
->
GetCurrentSource
()->
SetParticleCharge
(aCharge); } ;
222
223
// Set polarization
224
void
SetParticlePolarization
(
G4ThreeVector
aVal)
225
{
GPSData
->
GetCurrentSource
()->
SetParticlePolarization
(aVal);};
226
G4ThreeVector
GetParticlePolarization
()
const
227
{
return
GPSData
->
GetCurrentSource
()->
GetParticlePolarization
();};
228
229
// Set Time.
230
void
SetParticleTime
(
G4double
aTime)
231
{
GPSData
->
GetCurrentSource
()->
SetParticleTime
(aTime); };
232
G4double
GetParticleTime
()
const
233
{
return
GPSData
->
GetCurrentSource
()->
GetParticleTime
(); };
234
235
void
SetNumberOfParticles
(
G4int
i)
236
{
GPSData
->
GetCurrentSource
()->
SetNumberOfParticles
(i); };
237
//
238
G4int
GetNumberOfParticles
()
const
239
{
return
GPSData
->
GetCurrentSource
()->
GetNumberOfParticles
(); };
240
G4ThreeVector
GetParticlePosition
()
const
241
{
return
GPSData
->
GetCurrentSource
()->
GetParticlePosition
();};
242
G4ThreeVector
GetParticleMomentumDirection
()
const
243
{
return
GPSData
->
GetCurrentSource
()->
GetParticleMomentumDirection
();};
244
G4double
GetParticleEnergy
()
const
245
{
return
GPSData
->
GetCurrentSource
()->
GetParticleEnergy
();};
246
247
private
:
248
249
void
IntensityNormalization
();
250
251
private
:
252
//Helper boolean, used to reduce number of locks
253
//at run time (see GeneratePrimaryVertex)
254
G4bool
normalised
;
255
256
//Note this is a shared resource among MT workers
257
G4GeneralParticleSourceMessenger
*
theMessenger
;
258
//Note this is a shared resource among MT workers
259
G4GeneralParticleSourceData
*
GPSData
;
260
261
};
262
263
#endif
geant4
tree
geant4-10.6-release
source
event
include
G4GeneralParticleSource.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:13
using
1.8.2 with
ECCE GitHub integration