3 from AthenaConfiguration.AccumulatorCache
import AccumulatorCache
5 from AthenaConfiguration.ComponentFactory
import CompFactory
6 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
7 from AthenaConfiguration.Enums
import ProductionStep
8 from ExtraParticles.PDGHelpers
import getPDGTABLE
14 ALINE1=
"M 4110000 {intmass}.E+03 +0.0E+00 -0.0E+00 Monopole 0".
format(intmass=
int(MASS))
15 ALINE2=
"W 4110000 0.E+00 +0.0E+00 -0.0E+00 Monopole 0"
16 BLINE1=
"4110000 {intmass}.00 0.0 {gcharge} # Monopole".
format(intmass=
int(MASS), gcharge=GCHARGE)
17 BLINE2=
"-4110000 {intmass}.00 0.0 -{gcharge} # MonopoleBar".
format(intmass=
int(MASS), gcharge=GCHARGE)
19 f=
open(
'PDGTABLE.MeV',
'a')
20 f.writelines(
str(ALINE1))
22 f.writelines(
str(ALINE2))
25 partmod = os.path.isfile(
'particles.txt')
27 os.remove(
'particles.txt')
28 f=
open(
'particles.txt',
'w')
29 f.writelines(
str(BLINE1))
31 f.writelines(
str(BLINE2))
46 ALINE1=
"M {code} {intmass}.E+03 +0.0E+00 -0.0E+00 Qball +".
format(code=CODE,intmass=
int(MASS))
47 ALINE2=
"W {code} 0.E+00 +0.0E+00 -0.0E+00 Qball +".
format(code=CODE)
48 BLINE1=
"{code} {intmass}.00 {charge} 0.0 # Qball".
format(code=CODE,intmass=
int(MASS), charge=CHARGE)
49 BLINE2=
"-{code} {intmass}.00 -{charge} 0.0 # QballBar".
format(code=CODE,intmass=
int(MASS), charge=CHARGE)
51 f=
open(
'PDGTABLE.MeV',
'a')
52 f.writelines(
str(ALINE1))
54 f.writelines(
str(ALINE2))
57 partmod = os.path.isfile(
'particles.txt')
59 os.remove(
'particles.txt')
60 f=
open(
'particles.txt',
'w')
61 f.writelines(
str(BLINE1))
63 f.writelines(
str(BLINE2))
76 print(
"Trying to load %s, %s for particle with code %s" % (X, Y, CODE))
78 pdgLine1=
"M {code} {intmass}.E+03 +0.0E+00 -0.0E+00 fcp +\n".
format(code=CODE,intmass=
int(MASS))
79 pdgLine2=
"W {code} 0.E+00 +0.0E+00 -0.0E+00 fcp +\n".
format(code=CODE)
80 particleLine1=
"{code} {intmass}.00 {fcharge} 0.0 # fcp\n".
format(code=CODE,intmass=
int(MASS), fcharge=
float(CHARGE))
81 particleLine2=
"-{code} {intmass}.00 -{fcharge} 0.0 # fcpBar\n".
format(code=CODE,intmass=
int(MASS), fcharge=
float(CHARGE))
85 f=
open(
'PDGTABLE.MeV',
'a')
86 f.writelines(
str(pdgLine1))
87 f.writelines(
str(pdgLine2))
89 partmod = os.path.isfile(
'particles.txt')
91 os.remove(
'particles.txt')
92 f=
open(
'particles.txt',
'w')
93 f.writelines(
str(particleLine1))
94 f.writelines(
str(particleLine2))
105 CODE=4110000+
int(CHARGE)*10
106 CODE2=4120000+
int(CHARGE)*10
108 ALINE1=
"M {code} {intmass}.E+03 +0.0E+00 -0.0E+00 DyonSS 0".
format(code=CODE,intmass=
int(MASS))
109 ALINE2=
"W {code} 0.E+00 +0.0E+00 -0.0E+00 DyonSS 0".
format(code=CODE)
110 ALINE3=
"M {code2} {intmass}.E+03 +0.0E+00 -0.0E+00 DyonOS 0".
format(code2=CODE2,intmass=
int(MASS))
111 ALINE4=
"W {code2} 0.E+00 +0.0E+00 -0.0E+00 DyonOS 0".
format(code2=CODE2)
114 BLINE1=
"{code} {intmass}.00 {fcharge} {gcharge} # DyonSS".
format(code=CODE, intmass=
int(MASS), fcharge=
float(CHARGE), gcharge=GCHARGE)
115 BLINE2=
"-{code} {intmass}.00 -{fcharge} -{gcharge} # DyonSSBar".
format(code=CODE, intmass=
int(MASS), fcharge=
float(CHARGE), gcharge=GCHARGE)
116 BLINE3=
"{code2} {intmass}.00 -{fcharge} {gcharge} # DyonOS".
format(code2=CODE2, intmass=
int(MASS), fcharge=
float(CHARGE), gcharge=GCHARGE)
117 BLINE4=
"-{code2} {intmass}.00 {fcharge} -{gcharge} # DyonOSBar".
format(code2=CODE2, intmass=
int(MASS), fcharge=
float(CHARGE), gcharge=GCHARGE)
119 f=
open(
'PDGTABLE.MeV',
'a')
120 f.writelines(
str(ALINE1))
122 f.writelines(
str(ALINE2))
124 f.writelines(
str(ALINE3))
126 f.writelines(
str(ALINE4))
129 partmod = os.path.isfile(
'particles.txt')
131 os.remove(
'particles.txt')
132 f=
open(
'particles.txt',
'w')
133 f.writelines(
str(BLINE1))
135 f.writelines(
str(BLINE2))
137 f.writelines(
str(BLINE3))
139 f.writelines(
str(BLINE4))
155 result.setPrivateTools( CompFactory.MonopolePhysicsTool(name, **kwargs) )
161 result.setPrivateTools( CompFactory.G4mplEqMagElectricFieldTool(name, **kwargs) )
166 simdict = flags.Input.SpecialConfiguration
167 if flags.Common.ProductionStep == ProductionStep.Simulation:
169 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg']
171 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.HIPKillerToolCfg']
172 if "InteractingPDGCodes" not in simdict:
173 assert "CHARGE" in simdict
174 assert "X" in simdict
175 assert "Y" in simdict
176 CODE=
int(20000000)+
int(simdict[
"X"])*1000+
int(simdict[
"Y"])*10
177 simdict[
'InteractingPDGCodes'] =
str([CODE,-1*CODE])
178 flags.Input.SpecialConfiguration = simdict
183 if flags.Common.ProductionStep == ProductionStep.Simulation:
184 from G4AtlasServices.G4AtlasServicesConfig
import PhysicsListSvcCfg
187 simdict = flags.Input.SpecialConfiguration
189 pdgcodes = eval(simdict[
'InteractingPDGCodes'])
if 'InteractingPDGCodes' in simdict
else []
190 from ExtraParticles.PDGHelpers
import updateExtraParticleAcceptList
193 if flags.Common.ProductionStep == ProductionStep.Simulation:
195 result.getService(
"PhysicsListSvc").PhysOption += physicsOptions
205 simdict = flags.Input.SpecialConfiguration
206 if flags.Common.ProductionStep == ProductionStep.Simulation:
208 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg']
210 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.HIPKillerToolCfg']
211 if "InteractingPDGCodes" not in simdict:
212 assert "CHARGE" in simdict
213 CODE=10000000+
int(
float(simdict[
"CHARGE"])*100)
214 simdict[
'InteractingPDGCodes'] =
str([CODE,-1*CODE])
215 flags.Input.SpecialConfiguration = simdict
220 simdict = flags.Input.SpecialConfiguration
221 if flags.Common.ProductionStep == ProductionStep.Simulation:
222 from G4AtlasServices.G4AtlasServicesConfig
import PhysicsListSvcCfg
224 if "InteractingPDGCodes" not in simdict:
225 assert "CHARGE" in simdict
226 CODE=10000000+
int(
float(simdict[
"CHARGE"])*100)
227 simdict[
'InteractingPDGCodes'] =
str([CODE,-1*CODE])
229 assert "MASS" in simdict
230 assert "CHARGE" in simdict
232 pdgcodes = eval(simdict[
'InteractingPDGCodes'])
if 'InteractingPDGCodes' in simdict
else []
233 from ExtraParticles.PDGHelpers
import updateExtraParticleAcceptList
236 if flags.Common.ProductionStep == ProductionStep.Simulation:
238 result.getService(
"PhysicsListSvc").PhysOption += physicsOptions
244 if flags.Common.ProductionStep == ProductionStep.Simulation:
246 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg']
248 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.HIPKillerToolCfg']
249 flags.Sim.G4Stepper =
'ClassicalRK4'
250 flags.Sim.G4EquationOfMotion =
"G4mplEqMagElectricField"
251 flags.Sim.TightMuonStepping =
False
252 simdict = flags.Input.SpecialConfiguration
253 if "InteractingPDGCodes" not in simdict:
254 assert "CHARGE" in simdict
255 CODE=4110000+
int(
float(simdict[
"CHARGE"])*10)
256 CODE2=4120000+
int(
float(simdict[
"CHARGE"])*10)
257 simdict[
'InteractingPDGCodes'] =
str([CODE,-1*CODE,CODE2,-1*CODE2])
258 flags.Input.SpecialConfiguration = simdict
263 if flags.Common.ProductionStep == ProductionStep.Simulation:
264 from G4AtlasServices.G4AtlasServicesConfig
import PhysicsListSvcCfg
267 simdict = flags.Input.SpecialConfiguration
268 assert "MASS" in simdict
269 assert "CHARGE" in simdict
270 assert "GCHARGE" in simdict
272 pdgcodes = eval(simdict[
'InteractingPDGCodes'])
if 'InteractingPDGCodes' in simdict
else []
273 from ExtraParticles.PDGHelpers
import updateExtraParticleAcceptList
276 if flags.Common.ProductionStep == ProductionStep.Simulation:
277 from GaudiKernel.GaudiHandles
import PrivateToolHandleArray
279 result.getService(
"PhysicsListSvc").PhysOption = physicsOptions + result.getService(
"PhysicsListSvc").PhysOption
284 if flags.Common.ProductionStep == ProductionStep.Simulation:
286 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg']
288 flags.Sim.OptionalUserActionList += [
'G4UserActions.G4UserActionsConfig.HIPKillerToolCfg']
289 flags.Sim.G4Stepper =
'ClassicalRK4'
290 flags.Sim.G4EquationOfMotion =
"G4mplEqMagElectricField"
291 flags.Sim.TightMuonStepping =
False
292 simdict = flags.Input.SpecialConfiguration
293 if "InteractingPDGCodes" not in simdict:
294 simdict[
'InteractingPDGCodes'] =
str([4110000,-4110000])
295 flags.Input.SpecialConfiguration = simdict
300 if flags.Common.ProductionStep == ProductionStep.Simulation:
301 from G4AtlasServices.G4AtlasServicesConfig
import PhysicsListSvcCfg
304 simdict = flags.Input.SpecialConfiguration
305 assert "MASS" in simdict
306 assert "GCHARGE" in simdict
308 pdgcodes = eval(simdict[
'InteractingPDGCodes'])
if 'InteractingPDGCodes' in simdict
else []
309 from ExtraParticles.PDGHelpers
import updateExtraParticleAcceptList
312 if flags.Common.ProductionStep == ProductionStep.Simulation:
313 from GaudiKernel.GaudiHandles
import PrivateToolHandleArray
315 result.getService(
"PhysicsListSvc").PhysOption = physicsOptions + result.getService(
"PhysicsListSvc").PhysOption
320 kwargs.setdefault('TargetEvent',1)
321 kwargs.setdefault(
'VerboseLevel',1)
322 kwargs.setdefault(
'TargetPdgIDs',
326 from G4DebuggingTools.G4DebuggingToolsConfig
import VerboseSelectorToolCfg