ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
G4Extensions
Charginos
python
CharginosConfig.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
import
shutil, re
5
from
AthenaConfiguration.ComponentFactory
import
CompFactory
6
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
7
from
AthenaCommon.SystemOfUnits
import
MeV, ns, GeV
# noqa: F401
8
from
AthenaConfiguration.Enums
import
ProductionStep
9
from
ExtraParticles.PDGHelpers
import
getPDGTABLE
10
11
12
@AccumulatorCache
13
def
get_and_fix_PDGTABLE_AMSB
(replace):
14
15
# Download generic PDGTABLE (overwrite existing one if it exists)
16
if
getPDGTABLE(
'PDGTABLE.MeV'
):
17
shutil.move(
'PDGTABLE.MeV'
,
'PDGTABLE.MeV.org'
)
18
19
# an example line to illustrate the fixed format, see PDGTABLE.MeV for more details
20
# M 1000022 0.E+00 +0.0E+00 -0.0E+00 ~chi(0,1) 0
21
22
lines = open(
'PDGTABLE.MeV.org'
).readlines()
23
for
pdgid,mass,name,charge
in
replace:
24
if
not
re.search(
r'[MW]\s+'
+str(pdgid)+
r'\s+\S+'
,
''
.join(lines)):
25
lines.append(
'M'
+ str(pdgid).rjust(8) +
''
.ljust(26) +
26
(
'%11.5E'
% mass).ljust(15) +
27
'+0.0E+00'
.ljust(9) +
'-0.0E+00'
.ljust(9) +
28
name.strip() +
''
.ljust(6) + charge.strip()+
''
.rjust(20-len(name.strip())) +
'\n'
)
29
lines.append(
'W'
+ str(pdgid).rjust(8) +
''
.ljust(26) +
30
'0.E+00'
.ljust(15) +
'+0.0E+00'
.ljust(9) +
'-0.0E+00'
.ljust(9) +
31
name.strip() +
''
.ljust(6) + charge.strip()+
''
.rjust(20-len(name.strip())) +
'\n'
)
32
else
:
33
from
past.builtins
import
xrange
# Temporary workaround for python3 compatibility use range in CA-based config
34
for
i
in
xrange
(len(lines)):
35
if
re.search(
r'M\s+'
+str(pdgid)+
r'\s+\S+'
, lines[i]):
36
l = lines[i]
37
lines[i] = l[0:35] + (
'%11.5E'
% mass).ljust(14) + l[49:]
38
39
update = open(
'PDGTABLE.MeV'
,
'w'
)
40
update.write(
''
.join(lines))
41
update.close()
42
43
44
def
CharginosPhysicsToolCfg
(flags, name="CharginosPhysicsTool", **kwargs):
45
result = ComponentAccumulator()
46
# Example specialConfiguration: {'AMSBC1Mass': '1200.16*GeV', 'AMSBN1Mass': '1200.0*GeV', 'AMSBC1Lifetime': '0.2*ns'}
47
C1Mass = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1Mass"
,
None
))
48
N1Mass = eval(flags.Input.SpecialConfiguration.get(
"AMSBN1Mass"
,
None
))
49
C1Lifetime = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1Lifetime"
,
"-1.0"
))
50
51
kwargs.setdefault(
"CharginoPlusMass"
, C1Mass)
52
kwargs.setdefault(
"CharginoPlusStable"
, (C1Lifetime < 0))
53
if
not
(C1Lifetime < 0):
54
kwargs.setdefault(
"CharginoPlusLifetime"
, C1Lifetime)
55
56
kwargs.setdefault(
"CharginoMinusMass"
, C1Mass)
57
kwargs.setdefault(
"CharginoMinusStable"
, (C1Lifetime < 0))
58
if
not
(C1Lifetime < 0):
59
kwargs.setdefault(
"CharginoMinusLifetime"
, C1Lifetime)
60
61
kwargs.setdefault(
"NeutralinoMass"
, N1Mass)
62
63
result.setPrivateTools(CompFactory.CharginosPhysicsTool(name, **kwargs))
64
return
result
65
66
67
def
CharginoPlusToPiPlusNeutralinoCfg
(flags, name="CharginoPlusToPiPlusNeutralino", **kwargs):
68
result = ComponentAccumulator()
69
C1ToPiBR = 1.0
70
C1ToEleBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToEleBR"
,
"-1.0"
))
71
if
C1ToEleBR > 0.0:
72
C1ToPiBR -= C1ToEleBR
73
C1ToMuBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToMuBR"
,
"-1.0"
))
74
if
C1ToMuBR > 0.0:
75
C1ToPiBR -= C1ToMuBR
76
kwargs.setdefault(
"ParticleName"
,
"s_chi_plus_1"
)
77
kwargs.setdefault(
"BR"
,C1ToPiBR)
#Branching Ratio
78
kwargs.setdefault(
"Daughters"
,
"s_chi_0_1,pi+"
)
79
result.setPrivateTools(CompFactory.AddPhysicsDecayTool(name, **kwargs))
80
return
result
81
82
83
def
CharginoMinusToPiMinusNeutralinoCfg
(flags, name="CharginoMinusToPiMinusNeutralino", **kwargs):
84
result = ComponentAccumulator()
85
C1ToPiBR = 1.0
86
C1ToEleBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToEleBR"
,
"-1.0"
))
87
if
C1ToEleBR > 0.0:
88
C1ToPiBR -= C1ToEleBR
89
C1ToMuBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToMuBR"
,
"-1.0"
))
90
if
C1ToMuBR > 0.0:
91
C1ToPiBR -= C1ToMuBR
92
kwargs.setdefault(
"ParticleName"
,
"s_chi_minus_1"
)
93
kwargs.setdefault(
"BR"
,C1ToPiBR)
#Branching Ratio
94
kwargs.setdefault(
"Daughters"
,
"s_chi_0_1,pi-"
)
95
result.setPrivateTools(CompFactory.AddPhysicsDecayTool(name, **kwargs))
96
return
result
97
98
99
def
CharginoPlusToEPlusNeutralinoCfg
(flags, name="CharginoPlusToEPlusNeutralino", **kwargs):
100
result = ComponentAccumulator()
101
C1ToEBR = 0.0
102
C1ToEleBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToEleBR"
,
"-1.0"
))
103
if
C1ToEleBR > 0.0:
104
C1ToEBR = C1ToEleBR
105
kwargs.setdefault(
"ParticleName"
,
"s_chi_plus_1"
)
106
kwargs.setdefault(
"BR"
,C1ToEBR)
#Branching Ratio
107
kwargs.setdefault(
"Daughters"
,
"s_chi_0_1,nu_e,e+"
)
108
result.setPrivateTools(CompFactory.AddPhysicsDecayTool(name, **kwargs))
109
return
result
110
111
112
def
CharginoMinusToEMinusNeutralinoCfg
(flags, name="CharginoMinusToEMinusNeutralino", **kwargs):
113
result = ComponentAccumulator()
114
C1ToEBR = 0.0
115
C1ToEleBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToEleBR"
,
"-1.0"
))
116
if
C1ToEleBR > 0.0:
117
C1ToEBR = C1ToEleBR
118
kwargs.setdefault(
"ParticleName"
,
"s_chi_minus_1"
)
119
kwargs.setdefault(
"BR"
,C1ToEBR)
#Branching Ratio
120
kwargs.setdefault(
"Daughters"
,
"s_chi_0_1,anti_nu_e,e-"
)
121
result.setPrivateTools(CompFactory.AddPhysicsDecayTool(name, **kwargs))
122
return
result
123
124
125
def
CharginoPlusToMuPlusNeutralinoCfg
(flags, name="CharginoPlusToMuPlusNeutralino", **kwargs):
126
result = ComponentAccumulator()
127
C1ToMuonBR = 0.0
128
C1ToMuBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToMuBR"
,
"-1.0"
))
129
if
C1ToMuBR > 0.0:
130
C1ToMuonBR = C1ToMuBR
131
kwargs.setdefault(
"ParticleName"
,
"s_chi_plus_1"
)
132
kwargs.setdefault(
"BR"
,C1ToMuonBR)
#Branching Ratio
133
kwargs.setdefault(
"Daughters"
,
"s_chi_0_1,nu_mu,mu+"
)
134
result.setPrivateTools(CompFactory.AddPhysicsDecayTool(name, **kwargs))
135
return
result
136
137
138
def
CharginoMinusToMuMinusNeutralinoCfg
(flags, name="CharginoMinusToMuMinusNeutralino", **kwargs):
139
result = ComponentAccumulator()
140
C1ToMuonBR = 0.0
141
C1ToMuBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToMuBR"
,
"-1.0"
))
142
if
C1ToMuBR > 0.0:
143
C1ToMuonBR = C1ToMuBR
144
kwargs.setdefault(
"ParticleName"
,
"s_chi_minus_1"
)
145
kwargs.setdefault(
"BR"
,C1ToMuonBR)
#Branching Ratio
146
kwargs.setdefault(
"Daughters"
,
"s_chi_0_1,anti_nu_mu,mu-"
)
147
result.setPrivateTools(CompFactory.AddPhysicsDecayTool(name, **kwargs))
148
return
result
149
150
151
def
AMSB_Cfg
(flags):
152
result = ComponentAccumulator()
153
if
flags.Common.ProductionStep == ProductionStep.Simulation:
154
from
G4AtlasServices.G4AtlasServicesConfig
import
PhysicsListSvcCfg
155
result.merge(PhysicsListSvcCfg(flags))
156
C1Mass = eval(flags.Input.SpecialConfiguration[
"AMSBC1Mass"
])
157
N1Mass = eval(flags.Input.SpecialConfiguration[
"AMSBN1Mass"
])
158
# patching PDGTABLE
159
get_and_fix_PDGTABLE_AMSB
([(1000022, N1Mass,
'~chi(0,1)'
,
'0'
), (1000024, C1Mass,
'~chi(+,1)'
,
'+'
)])
160
from
ExtraParticles.PDGHelpers
import
updateExtraParticleAcceptList
161
updateExtraParticleAcceptList(
'G4particle_acceptlist_ExtraParticles.txt'
, [1000022,-1000024,1000024])
162
if
flags.Common.ProductionStep == ProductionStep.Simulation:
163
physicsOptions = [ result.popToolsAndMerge(
CharginosPhysicsToolCfg
(flags)) ]
164
# Add Chargino decays if necessary
165
C1Lifetime = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1Lifetime"
,
"-1.0"
))
166
if
C1Lifetime > 0.0:
167
physicsOptions += [ result.popToolsAndMerge(
CharginoPlusToPiPlusNeutralinoCfg
(flags)) ]
168
physicsOptions += [ result.popToolsAndMerge(
CharginoMinusToPiMinusNeutralinoCfg
(flags)) ]
169
C1ToEleBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToEleBR"
,
"-1.0"
))
170
if
C1ToEleBR > 0.0:
171
physicsOptions += [ result.popToolsAndMerge(
CharginoPlusToEPlusNeutralinoCfg
(flags)) ]
172
physicsOptions += [ result.popToolsAndMerge(
CharginoMinusToEMinusNeutralinoCfg
(flags)) ]
173
C1ToMuBR = eval(flags.Input.SpecialConfiguration.get(
"AMSBC1ToMuBR"
,
"-1.0"
))
174
if
C1ToMuBR > 0.0:
175
physicsOptions += [ result.popToolsAndMerge(
CharginoPlusToMuPlusNeutralinoCfg
(flags)) ]
176
physicsOptions += [ result.popToolsAndMerge(
CharginoMinusToMuMinusNeutralinoCfg
(flags)) ]
177
result.getService(
"PhysicsListSvc"
).PhysOption += physicsOptions
178
179
return
result
180
181
182
def
AMSB_VerboseSelectorCfg
(flags, name="G4UA::VerboseSelectorTool
", **kwargs):
183
kwargs.setdefault('TargetEvent'
,1)
184
kwargs.setdefault(
'VerboseLevel'
,1)
185
kwargs.setdefault(
'TargetPdgIDs'
,
186
[
187
1000022,
# ~chi(0,1)
188
-1000024,1000024
# ~chi(+,1)
189
])
190
from
G4DebuggingTools.G4DebuggingToolsConfig
import
VerboseSelectorToolCfg
191
return
VerboseSelectorToolCfg(flags, name, **kwargs)
xrange
void xrange(TH1 *h, bool symmetric)
Definition
computils.cxx:518
CharginosConfig.CharginosPhysicsToolCfg
CharginosPhysicsToolCfg(flags, name="CharginosPhysicsTool", **kwargs)
Definition
CharginosConfig.py:44
CharginosConfig.CharginoMinusToEMinusNeutralinoCfg
CharginoMinusToEMinusNeutralinoCfg(flags, name="CharginoMinusToEMinusNeutralino", **kwargs)
Definition
CharginosConfig.py:112
CharginosConfig.CharginoPlusToEPlusNeutralinoCfg
CharginoPlusToEPlusNeutralinoCfg(flags, name="CharginoPlusToEPlusNeutralino", **kwargs)
Definition
CharginosConfig.py:99
CharginosConfig.CharginoMinusToMuMinusNeutralinoCfg
CharginoMinusToMuMinusNeutralinoCfg(flags, name="CharginoMinusToMuMinusNeutralino", **kwargs)
Definition
CharginosConfig.py:138
CharginosConfig.CharginoPlusToMuPlusNeutralinoCfg
CharginoPlusToMuPlusNeutralinoCfg(flags, name="CharginoPlusToMuPlusNeutralino", **kwargs)
Definition
CharginosConfig.py:125
CharginosConfig.AMSB_Cfg
AMSB_Cfg(flags)
Definition
CharginosConfig.py:151
CharginosConfig.get_and_fix_PDGTABLE_AMSB
get_and_fix_PDGTABLE_AMSB(replace)
Definition
CharginosConfig.py:13
CharginosConfig.CharginoMinusToPiMinusNeutralinoCfg
CharginoMinusToPiMinusNeutralinoCfg(flags, name="CharginoMinusToPiMinusNeutralino", **kwargs)
Definition
CharginosConfig.py:83
CharginosConfig.AMSB_VerboseSelectorCfg
AMSB_VerboseSelectorCfg(flags, name="G4UA::VerboseSelectorTool", **kwargs)
Definition
CharginosConfig.py:182
CharginosConfig.CharginoPlusToPiPlusNeutralinoCfg
CharginoPlusToPiPlusNeutralinoCfg(flags, name="CharginoPlusToPiPlusNeutralino", **kwargs)
Definition
CharginosConfig.py:67
Generated on
for ATLAS Offline Software by
1.17.0