ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Generators
ParticleGun
python
ParticleGunConfig.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
3
from
GeneratorConfig.Sequences
import
EvgenSequence, EvgenSequenceFactory
4
5
6
def
ParticleGunBaseCfg
(flags):
7
result = ComponentAccumulator()
8
import
ParticleGun
as
PG
9
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
10
result.addEventAlgo(pg)
11
return
result
12
13
14
def
ParticleGun_flatpt_2particleCfg
(flags):
15
result = ComponentAccumulator()
16
import
ParticleGun
as
PG
17
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
18
pg.samplers.append(PG.ParticleSampler())
# add a second sampler
19
pg.samplers[0].pid = (-13, 13)
# cycle mu+-
20
pg.samplers[0].mom = PG.PtEtaMPhiSampler(pt=[4000, 100000], eta=[1.0, 3.2])
# flat in pt and +ve eta
21
pg.samplers[1].pid = (13, -13)
# cycle mu-+
22
pg.samplers[1].mom = PG.PtEtaMPhiSampler(pt=[4000, 100000], eta=[-3.2, -1.0])
# flat in pt and -ve eta
23
result.addEventAlgo(pg)
24
return
result
25
26
27
def
ParticleGun_SingleMuonBasicCfg
(flags):
28
result = ComponentAccumulator()
29
import
ParticleGun
as
PG
30
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
31
pg.sampler.pid = 13
32
pg.sampler.mom = PG.EEtaMPhiSampler(energy=10000, eta=[-1,1])
33
result.addEventAlgo(pg)
34
return
result
35
36
37
def
ParticleGun_SingleMuonCfg
(flags):
38
result = ComponentAccumulator()
39
import
ParticleGun
as
PG
40
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
41
pg.sampler.pid = PG.CyclicSeqSampler([-13,13])
42
pg.sampler.mom = PG.PtEtaMPhiSampler(pt=50000, eta=[-4,4])
43
result.addEventAlgo(pg)
44
return
result
45
46
47
def
ParticleGun_SingleElectronCfg
(flags):
48
result = ComponentAccumulator()
49
import
ParticleGun
as
PG
50
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
51
pg.sampler.pid = PG.CyclicSeqSampler([-11,11])
52
pg.sampler.mom = PG.PtEtaMPhiSampler(pt=10000, eta=[-3,3])
53
result.addEventAlgo(pg)
54
return
result
55
56
57
def
ParticleGun_SinglePionCfg
(flags):
58
result = ComponentAccumulator()
59
import
ParticleGun
as
PG
60
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
61
pg.sampler.pid = PG.CyclicSeqSampler([-211,211])
62
pg.sampler.mom = PG.PtEtaMPhiSampler(pt=50000, eta=[-4,4])
63
result.addEventAlgo(pg)
64
return
result
65
66
67
def
ALFA_SingleParticlePreInclude
(flags):
68
flags.BField.solenoidOn=
False
69
flags.BField.barrelToroidOn=
False
70
flags.BField.endcapToroidOn=
False
71
from
SimulationConfig.SimEnums
import
VertexSource
72
flags.Sim.VertexSource=VertexSource.AsGenerated
73
flags.Sim.GenerationConfiguration=
"ParticleGun.ParticleGunConfig.ParticleGun_ALFA_SingleParticleCfg"
74
from
ForwardTransportSvc.ForwardTransportSvcConfig
import
ForwardTransportBeta90mPreInclude
75
ForwardTransportBeta90mPreInclude(flags)
76
77
78
def
ParticleGun_ALFA_SingleParticleCfg
(flags):
79
result = ComponentAccumulator()
80
import
ParticleGun
as
PG
81
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
82
pg.sampler.pid = 2212
83
pg.sampler.mom = PG.EEtaMPhiSampler(energy=3500000, eta=10)
84
result.addEventAlgo(pg)
85
return
result
86
87
88
def
ZDC_SingleParticlePreInclude
(flags):
89
from
SimulationConfig.SimEnums
import
VertexSource
90
flags.Sim.VertexSource=VertexSource.AsGenerated
91
flags.Sim.GenerationConfiguration=
"ParticleGun.ParticleGunConfig.ParticleGun_ZDC_SingleParticleCfg"
92
from
ForwardTransportSvc.ForwardTransportSvcConfig
import
ForwardTransportBeta055mPreInclude
93
ForwardTransportBeta055mPreInclude(flags)
94
95
96
def
ParticleGun_ZDC_SingleParticleCfg
(flags):
97
result = ComponentAccumulator()
98
import
ParticleGun
as
PG
99
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
100
pg.sampler.pid = PG.CyclicSeqSampler([2112, 22, 2112, 22])
101
esampler = PG.CyclicSeqSampler([1360000, 500000, 1360000, 500000])
102
thsampler = PG.CyclicSeqSampler([0, 0, PG.PI, PG.PI])
103
pg.sampler.mom = PG.EThetaMPhiSampler(energy=esampler, theta=thsampler)
104
result.addEventAlgo(pg)
105
return
result
106
107
108
def
ParticleGun_TestBeam_SingleParticleCfg
(flags):
109
result = ComponentAccumulator()
110
import
ParticleGun
as
PG
111
pg = PG.ParticleGun(randomStream =
"SINGLE"
, randomSeed = flags.Random.SeedOffset)
112
# 50 GeV pions
113
#pg.sampler.pid = 211
114
#pg.sampler.pos = PG.PosSampler(x=-27500, y=[-10,15], z=[-15,15], t=-27500)
115
#pg.sampler.mom = PG.EEtaMPhiSampler(energy=50000, eta=0, phi=0)
116
117
# 100 GeV electrons - use for sampling faction calculation
118
#pg.sampler.pid = 11
119
#pg.sampler.pos = PG.PosSampler(x=-27500, y=[-20,20], z=[-15,15], t=-27500)
120
#pg.sampler.mom = PG.EEtaMPhiSampler(energy=100000, eta=0, phi=0)
121
122
pg.sampler.pid = flags.TestBeam.BeamPID
123
pg.sampler.pos = PG.PosSampler(
124
x=flags.TestBeam.Xbeam,
125
y=flags.TestBeam.Ybeam,
126
z=flags.TestBeam.Zbeam,
127
t=flags.TestBeam.Tbeam)
128
pg.sampler.mom = PG.EEtaMPhiSampler(
129
energy=flags.TestBeam.BeamEnergy,
130
eta=0,
131
phi=0)
132
result.addEventAlgo(pg)
133
return
result
134
135
136
def
_makeMomentumSampler
(PG, samplerType="EEtaMPhi", **kwargs):
137
"""
138
Factory for the various PG momentum samplers.
139
kwargs are passed through to the corresponding sampler.
140
"""
141
from
math
import
pi
142
143
if
samplerType ==
"EEtaMPhi"
:
144
# energy: float or sequence, eta/phi can be scalar or range
145
return
PG.EEtaMPhiSampler(
146
energy=kwargs[
"energy"
],
147
eta=kwargs.get(
"eta"
),
148
mass=kwargs.get(
"mass"
, 0),
149
phi=kwargs.get(
"phi"
, [0, 2*pi]),
150
)
151
152
if
samplerType ==
"PtEtaMPhi"
:
153
# pt: float or [min,max], eta: float or [min,max]
154
return
PG.PtEtaMPhiSampler(
155
pt=kwargs[
"pt"
],
156
eta=kwargs.get(
"eta"
),
157
mass=kwargs.get(
"mass"
, 0),
158
phi=kwargs.get(
"phi"
, [0, 2*pi]),
159
)
160
161
if
samplerType ==
"EThetaMPhi"
:
162
# energy, theta: can be scalars or cyclic samplers
163
return
PG.EThetaMPhiSampler(
164
energy=kwargs[
"energy"
],
165
theta=kwargs[
"theta"
],
166
mass=kwargs.get(
"mass"
, 0),
167
phi=kwargs.get(
"phi"
, [0, 2*pi]),
168
)
169
170
raise
ValueError(f
"Unknown samplerType '{samplerType}'"
)
171
172
173
def
ParticleGun_SteeredSingleParticleCfg
(
174
flags,
175
*,
176
pid,
177
samplerType="EEtaMPhi",
178
randomStream="SINGLE",
179
randomSeed=None,
180
**kwargs,
181
):
182
"""
183
Generic single-particle gun configuration steered via arguments.
184
185
Parameters
186
----------
187
pid : int or sequence
188
PDG ID (or sampler) for the primary particle.
189
samplerType : str
190
Which momentum sampler to use: "EEtaMPhi", "PtEtaMPhi", "EThetaMPhi".
191
randomStream : str
192
Name of the random stream (defaults to "SINGLE").
193
randomSeed : int or None
194
Random seed (defaults to flags.Random.SeedOffset if None).
195
momKwargs : dict
196
Keyword arguments passed to the momentum sampler factory.
197
E.g. for samplerType="EEtaMPhi":
198
energy=50000, eta=0
199
for samplerType="PtEtaMPhi":
200
pt=[4000, 100000], eta=[-2.5, 2.5]
201
"""
202
import
ParticleGun
as
PG
203
ca = ComponentAccumulator(EvgenSequenceFactory(EvgenSequence.Generator))
204
205
# Announce generator to service
206
from
GeneratorConfig.GeneratorInfoSvcConfig
import
GeneratorInfoSvcCfg
207
ca.merge(GeneratorInfoSvcCfg(flags, Generators=[
"ParticleGun"
]), sequenceName=EvgenSequence.Generator.value)
208
209
if
randomSeed
is
None
:
210
randomSeed = flags.Random.SeedOffset
211
212
pg = PG.ParticleGun(
213
randomStream=randomStream,
214
randomSeed=randomSeed,
215
)
216
217
# Select the particle type
218
pg.sampler.pid = pid
219
220
# Select the momentum sampler
221
pg.sampler.mom =
_makeMomentumSampler
(
222
PG,
223
samplerType=samplerType,
224
**kwargs,
225
)
226
227
ca.addEventAlgo(pg)
228
229
return
ca
python.ParticleGunConfig.ALFA_SingleParticlePreInclude
ALFA_SingleParticlePreInclude(flags)
Definition
ParticleGunConfig.py:67
python.ParticleGunConfig.ParticleGun_SingleMuonBasicCfg
ParticleGun_SingleMuonBasicCfg(flags)
Definition
ParticleGunConfig.py:27
python.ParticleGunConfig.ParticleGun_ALFA_SingleParticleCfg
ParticleGun_ALFA_SingleParticleCfg(flags)
Definition
ParticleGunConfig.py:78
python.ParticleGunConfig.ParticleGun_SingleMuonCfg
ParticleGun_SingleMuonCfg(flags)
Definition
ParticleGunConfig.py:37
python.ParticleGunConfig.ParticleGun_TestBeam_SingleParticleCfg
ParticleGun_TestBeam_SingleParticleCfg(flags)
Definition
ParticleGunConfig.py:108
python.ParticleGunConfig.ParticleGun_SteeredSingleParticleCfg
ParticleGun_SteeredSingleParticleCfg(flags, *, pid, samplerType="EEtaMPhi", randomStream="SINGLE", randomSeed=None, **kwargs)
Definition
ParticleGunConfig.py:181
python.ParticleGunConfig.ParticleGun_flatpt_2particleCfg
ParticleGun_flatpt_2particleCfg(flags)
Definition
ParticleGunConfig.py:14
python.ParticleGunConfig.ZDC_SingleParticlePreInclude
ZDC_SingleParticlePreInclude(flags)
Definition
ParticleGunConfig.py:88
python.ParticleGunConfig.ParticleGun_SingleElectronCfg
ParticleGun_SingleElectronCfg(flags)
Definition
ParticleGunConfig.py:47
python.ParticleGunConfig.ParticleGunBaseCfg
ParticleGunBaseCfg(flags)
Definition
ParticleGunConfig.py:6
python.ParticleGunConfig.ParticleGun_SinglePionCfg
ParticleGun_SinglePionCfg(flags)
Definition
ParticleGunConfig.py:57
python.ParticleGunConfig.ParticleGun_ZDC_SingleParticleCfg
ParticleGun_ZDC_SingleParticleCfg(flags)
Definition
ParticleGunConfig.py:96
python.ParticleGunConfig._makeMomentumSampler
_makeMomentumSampler(PG, samplerType="EEtaMPhi", **kwargs)
Definition
ParticleGunConfig.py:136
Generated on
for ATLAS Offline Software by
1.17.0