ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
G4Extensions
Quirks
python
QuirksConfig.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3
from
AthenaConfiguration.AccumulatorCache
import
AccumulatorCache
4
from
AthenaConfiguration.ComponentFactory
import
CompFactory
5
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
6
from
AthenaConfiguration.Enums
import
ProductionStep
7
8
9
@AccumulatorCache
10
def
load_files_for_quirks_scenario
(flags):
11
from
ExtraParticles.PDGHelpers
import
getPDGTABLE
12
if
getPDGTABLE(
'PDGTABLE.MeV'
):
13
quirk_firststring=1e-6
#mm
14
quirk_maxboost=1e-2
15
quirk_maxmerge=1e-6
#mm
16
quirk_debugenabled=
False
17
quirk_debugdist=1000
#mm
18
quirk_debugsteps=1000
19
simdict = flags.Input.SpecialConfiguration
20
quirk_mass = float(simdict[
"MASS"
])
21
quirk_charge = float(simdict[
"CHARGE"
])
22
quirk_pdgid = int(simdict[
"PDGID"
])
23
quirk_stringforce = float(simdict[
"STRINGFORCE"
])
24
25
f = open(
'PDGTABLE.MeV'
,
'a'
)
26
f.write(
"M%8d %.8E +0.0E+00 -0.0E+00 Quirk +\n"
% (quirk_pdgid, quirk_mass))
27
f.write(
"W%8d 0.E+00 +0.0E+00 -0.0E+00 Quirk +\n"
% quirk_pdgid)
28
f.close()
29
30
if
flags.Common.ProductionStep == ProductionStep.Simulation:
31
f = open(
'quirks_setup.txt'
,
'w'
)
32
for
x
in
[quirk_mass, quirk_charge, quirk_pdgid, quirk_stringforce, quirk_firststring, quirk_maxboost, quirk_maxmerge, quirk_maxmerge]:
33
f.write(repr(x) +
"\n"
)
34
if
quirk_debugenabled:
35
f.write(
"1\n"
)
36
f.write(repr(quirk_debugdist) +
"\n"
)
37
f.write(repr(quirk_debugsteps) +
"\n"
)
38
else
:
39
f.write(
"0\n"
)
40
f.close()
41
42
43
def
QuirksPhysicsToolCfg
(flags, name="QuirksPhysicsTool", **kwargs):
44
result = ComponentAccumulator()
45
result.setPrivateTools( CompFactory.QuirksPhysicsTool(name, **kwargs) )
46
return
result
47
48
49
def
DebugSteppingActionToolCfg
(flags, name="DebugSteppingActionTool", **kwargs):
50
result = ComponentAccumulator()
51
# TODO UserActionConfig flag not yet migrated
52
# example custom configuration
53
# if name in flags.Sim.UserActionConfig.keys():
54
# for prop,value in flags.Sim.UserActionConfig[name].iteritems():
55
# kwargs.setdefault(prop,value)
56
result.setPrivateTools( CompFactory.G4UA.DebugSteppingActionTool(name, **kwargs) )
57
return
result
58
59
60
def
QuirksPreInclude
(flags):
61
"""Declare the quirk to the EVNT->G4 input filter, before the flags lock."""
62
simdict = flags.Input.SpecialConfiguration
63
if
"InteractingPDGCodes"
not
in
simdict:
64
assert
"PDGID"
in
simdict
65
CODE = int(simdict[
"PDGID"
])
66
simdict[
'InteractingPDGCodes'
] = str([CODE, -CODE])
67
flags.Input.SpecialConfiguration = simdict
68
69
killer =
'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg'
70
if
killer
not
in
flags.Sim.OptionalUserActionList:
71
flags.Sim.OptionalUserActionList += [killer]
72
73
74
def
QuirksCfg
(flags):
75
result = ComponentAccumulator()
76
if
flags.Common.ProductionStep == ProductionStep.Simulation:
77
from
G4AtlasServices.G4AtlasServicesConfig
import
PhysicsListSvcCfg
78
result.merge(PhysicsListSvcCfg(flags))
79
80
simdict = flags.Input.SpecialConfiguration
81
assert
"MASS"
in
simdict
82
assert
"CHARGE"
in
simdict
83
assert
"PDGID"
in
simdict
84
assert
"STRINGFORCE"
in
simdict
85
load_files_for_quirks_scenario
(flags)
86
pdgcodes = eval(simdict[
'InteractingPDGCodes'
])
if
'InteractingPDGCodes'
in
simdict
else
[]
87
from
ExtraParticles.PDGHelpers
import
updateExtraParticleAcceptList
88
updateExtraParticleAcceptList(
'G4particle_acceptlist_ExtraParticles.txt'
, pdgcodes)
89
90
if
flags.Common.ProductionStep == ProductionStep.Simulation:
91
from
GaudiKernel.GaudiHandles
import
PrivateToolHandleArray
92
physicsOptions = PrivateToolHandleArray([ result.popToolsAndMerge(
QuirksPhysicsToolCfg
(flags)) ])
93
result.getService(
"PhysicsListSvc"
).PhysOption = physicsOptions + result.getService(
"PhysicsListSvc"
).PhysOption
94
return
result
QuirksConfig.QuirksCfg
QuirksCfg(flags)
Definition
QuirksConfig.py:74
QuirksConfig.DebugSteppingActionToolCfg
DebugSteppingActionToolCfg(flags, name="DebugSteppingActionTool", **kwargs)
Definition
QuirksConfig.py:49
QuirksConfig.QuirksPhysicsToolCfg
QuirksPhysicsToolCfg(flags, name="QuirksPhysicsTool", **kwargs)
Definition
QuirksConfig.py:43
QuirksConfig.load_files_for_quirks_scenario
load_files_for_quirks_scenario(flags)
Definition
QuirksConfig.py:10
QuirksConfig.QuirksPreInclude
QuirksPreInclude(flags)
Definition
QuirksConfig.py:60
Generated on
for ATLAS Offline Software by
1.17.0