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
G4SingleParticleSource.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4SingleParticleSource.cc
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
#include <cmath>
48
49
#include "
G4SingleParticleSource.hh
"
50
51
#include "
G4SystemOfUnits.hh
"
52
#include "
G4PrimaryParticle.hh
"
53
#include "
G4Event.hh
"
54
#include "
Randomize.hh
"
55
#include "
G4ParticleTable.hh
"
56
#include "
G4Geantino.hh
"
57
#include "
G4ParticleDefinition.hh
"
58
#include "
G4IonTable.hh
"
59
#include "
G4Ions.hh
"
60
#include "
G4TrackingManager.hh
"
61
#include "
G4Track.hh
"
62
#include "
G4AutoLock.hh
"
63
64
G4SingleParticleSource::part_prop_t::part_prop_t
() {
65
//definition = G4Geantino::GeantinoDefinition();
66
momentum_direction
=
G4ParticleMomentum
(1,0,0);
67
energy
= 1.*
MeV
;
68
position
=
G4ThreeVector
();
69
}
70
71
G4SingleParticleSource::G4SingleParticleSource
() {
72
// // Initialise all variables
73
// // Position distribution Variables
74
//
75
NumberOfParticlesToBeGenerated
= 1;
76
definition
=
G4Geantino::GeantinoDefinition
();
77
// G4ThreeVector zero;
78
// particle_momentum_direction = G4ParticleMomentum(1, 0, 0);
79
// particle_energy = 1.0 * MeV;
80
// particle_position = zero;
81
// particle_time = 0.0;
82
// particle_polarization = zero;
83
charge
= 0.0;
84
time
= 0;
85
polarization
=
G4ThreeVector
();
86
87
biasRndm
=
new
G4SPSRandomGenerator
();
88
posGenerator
=
new
G4SPSPosDistribution
();
89
posGenerator
->
SetBiasRndm
(
biasRndm
);
90
angGenerator
=
new
G4SPSAngDistribution
();
91
angGenerator
->
SetPosDistribution
(
posGenerator
);
92
angGenerator
->
SetBiasRndm
(
biasRndm
);
93
eneGenerator
=
new
G4SPSEneDistribution
();
94
eneGenerator
->
SetBiasRndm
(
biasRndm
);
95
96
// verbosity
97
verbosityLevel
= 0;
98
99
G4MUTEXINIT
(
mutex
);
100
101
}
102
103
G4SingleParticleSource::~G4SingleParticleSource
() {
104
delete
biasRndm
;
105
delete
posGenerator
;
106
delete
angGenerator
;
107
delete
eneGenerator
;
108
G4MUTEXDESTROY
(
mutex
);
109
}
110
111
void
G4SingleParticleSource::SetVerbosity
(
int
vL) {
112
G4AutoLock
l(&
mutex
);
113
verbosityLevel
= vL;
114
posGenerator
->
SetVerbosity
(vL);
115
angGenerator
->
SetVerbosity
(vL);
116
eneGenerator
->
SetVerbosity
(vL);
117
//G4cout << "Verbosity Set to: " << verbosityLevel << G4endl;
118
}
119
120
void
G4SingleParticleSource::SetParticleDefinition
(
121
G4ParticleDefinition
* aParticleDefinition) {
122
definition
= aParticleDefinition;
123
charge
= aParticleDefinition->
GetPDGCharge
();
124
}
125
126
void
G4SingleParticleSource::GeneratePrimaryVertex
(
G4Event
*evt) {
127
128
//G4AutoLock l(&mutex);
129
//part_prop_t& pp = ParticleProperties.Get();
130
if
(
definition
== NULL) {
131
//TODO: Should this rise an exception???
132
return
;
133
}
134
//return;
135
136
if
(
verbosityLevel
> 1)
137
G4cout
<<
" NumberOfParticlesToBeGenerated: "
138
<<
NumberOfParticlesToBeGenerated
<<
G4endl
;
139
140
part_prop_t
&
pp
=
ParticleProperties
.
Get
();
141
// Position stuff
142
pp.
position
=
posGenerator
->
GenerateOne
();
143
144
// create a new vertex
145
G4PrimaryVertex
* vertex =
new
G4PrimaryVertex
(pp.
position
,
time
);
146
147
for
(
G4int
i = 0; i <
NumberOfParticlesToBeGenerated
; i++) {
148
// Angular stuff
149
pp.
momentum_direction
=
angGenerator
->
GenerateOne
();
150
// Energy stuff
151
pp.
energy
=
eneGenerator
->
GenerateOne
(
definition
);
152
153
if
(
verbosityLevel
>= 2)
154
G4cout
<<
"Creating primaries and assigning to vertex"
<<
G4endl
;
155
// create new primaries and set them to the vertex
156
G4double
mass
=
definition
->
GetPDGMass
();
157
G4PrimaryParticle
*
particle
=
158
new
G4PrimaryParticle
(
definition
);
159
particle->
SetKineticEnergy
(pp.
energy
);
160
particle->
SetMass
( mass );
161
particle->
SetMomentumDirection
( pp.
momentum_direction
);
162
particle->
SetCharge
(
charge
);
163
particle->
SetPolarization
(
polarization
.
x
(),
164
polarization
.
y
(),
165
polarization
.
z
());
166
if
(
verbosityLevel
> 1) {
167
G4cout
<<
"Particle name: "
168
<<
definition
->
GetParticleName
() <<
G4endl
;
169
G4cout
<<
" Energy: "
<< pp.
energy
<<
G4endl
;
170
G4cout
<<
" Position: "
<< pp.
position
<<
G4endl
;
171
G4cout
<<
" Direction: "
<< pp.
momentum_direction
172
<<
G4endl
;
173
}
174
// Set bweight equal to the multiple of all non-zero weights
175
G4double
weight
=
eneGenerator
->
GetWeight
()*
biasRndm
->
GetBiasWeight
();
176
// pass it to primary particle
177
particle->
SetWeight
(weight);
178
179
vertex->
SetPrimary
(particle);
180
181
}
182
// now pass the weight to the primary vertex. CANNOT be used here!
183
// vertex->SetWeight(particle_weight);
184
evt->
AddPrimaryVertex
(vertex);
185
if
(
verbosityLevel
> 1)
186
G4cout
<<
" Primary Vetex generated !"
<<
G4endl
;
187
}
188
geant4
tree
geant4-10.6-release
source
event
src
G4SingleParticleSource.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:13
using
1.8.2 with
ECCE GitHub integration