13def fromRunArgs(runArgs):
14 from AthenaCommon.Logging import logging
15 log = logging.getLogger('AtlasG4_tf')
16 log.info('****************** STARTING Simulation *****************')
17
18 log.info('**** Transformation run arguments')
19 log.info(str(runArgs))
20
21 log.info('**** Setting-up configuration flags')
22 from AthenaConfiguration.AllConfigFlags import initConfigFlags
23 from AthenaConfiguration.Enums import BeamType
24 from SimulationConfig.SimEnums import CalibrationRun, CavernBackground, SimulationFlavour
25 flags = initConfigFlags()
26 commonRunArgsToFlags(runArgs, flags)
27
28
29 from AthenaConfiguration.Enums import ProductionStep
30 flags.Common.ProductionStep = ProductionStep.Simulation
31
32
33 if hasattr(runArgs, 'simulator'):
34 flags.Sim.ISF.Simulator = SimulationFlavour(runArgs.simulator)
35 allowedSimulators = [SimulationFlavour.AtlasG4, SimulationFlavour.AtlasG4_QS]
36 if flags.Sim.ISF.Simulator not in allowedSimulators:
37 raise RuntimeError("simulator argument not in allowed list of simulators")
38 else:
39 flags.Sim.ISF.Simulator = SimulationFlavour.AtlasG4
40
41
42 flags.Sim.ISFRun = False
43
44
45 from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
46 detectors = getDetectorsFromRunArgs(flags, runArgs)
47
48
49 if hasattr(runArgs,'beamType'):
50 if runArgs.beamType == 'cosmics':
51 flags.Beam.Type = BeamType.Cosmics
52 flags.Sim.CavernBackground = CavernBackground.Off
53
54
55
56
57
58
59
60 if hasattr(runArgs, 'inputEVNTFile'):
61 flags.Input.Files = runArgs.inputEVNTFile
62 elif hasattr(runArgs, 'inputEVNT_TRFile'):
63 flags.Input.Files = runArgs.inputEVNT_TRFile
64
65
66
67
68 if flags.Beam.Type is BeamType.Cosmics:
69 flags.Sim.ReadTR = True
70 flags.Sim.CosmicFilterVolumeNames = ['Muon']
71 detectors.add('Cavern')
72 elif hasattr(runArgs,"trackRecordType") and runArgs.trackRecordType=="stopped":
73 flags.Sim.ReadTR = True
74 log.error('Stopped Particle simulation is not supported yet')
75 else:
76 detectors.add('Cavern')
77 flags.Sim.CavernBackground = CavernBackground.Read
78 else:
79
80
81
82 flags.Input.Files = []
83 flags.Input.isMC = True
84 log.info('No inputEVNTFile provided. Assuming that you are running a generator on the fly.')
85 if flags.Beam.Type is BeamType.Cosmics:
86 flags.Sim.CosmicFilterVolumeNames = [getattr(runArgs, "CosmicFilterVolume", "InnerDetector")]
87 flags.Sim.CosmicFilterVolumeNames += [getattr(runArgs, "CosmicFilterVolume2", "NONE")]
88 flags.Sim.CosmicPtSlice = getattr(runArgs, "CosmicPtSlice", 'NONE')
89 detectors.add('Cavern')
90 log.debug('No inputEVNTFile provided. OK, as performing cosmics simulation.')
91
92 if hasattr(runArgs, 'outputHITSFile'):
93 if runArgs.outputHITSFile == 'None':
94 flags.Output.HITSFileName = ''
95 else:
96 flags.Output.HITSFileName = runArgs.outputHITSFile
97 if hasattr(runArgs, "outputEVNT_TRFile"):
98
99
100
101
102 flags.Output.EVNT_TRFileName = runArgs.outputEVNT_TRFile
103 if hasattr(runArgs,"trackRecordType") and runArgs.trackRecordType=="stopped":
104
105 log.error('Stopped Particle simulation not supported yet!')
106 elif flags.Beam.Type is BeamType.Cosmics:
107
108 pass
109 else:
110
111 detectors.add('Cavern')
112 flags.Sim.CalibrationRun = CalibrationRun.Off
113 flags.Sim.CavernBackground = CavernBackground.Write
114 if not (hasattr(runArgs, 'outputHITSFile') or hasattr(runArgs, "outputEVNT_TRFile")):
115 log.warning('No outputHITSFile or outputEVNT_TRFile defined')
116
117 if hasattr(runArgs, 'conditionsTag'):
118 flags.IOVDb.GlobalTag = runArgs.conditionsTag
119
120
121 from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
122 setupDetectorFlags(flags, detectors, toggle_geometry=True)
123
124
125 from PerfMonComps.PerfMonConfigHelpers import setPerfmonFlagsFromRunArgs
126 setPerfmonFlagsFromRunArgs(flags, runArgs)
127
128
129 processPreInclude(runArgs, flags)
130
131
132 specialConfigPreInclude(flags)
133
134
135 processPreExec(runArgs, flags)
136
137
138 from SimulationConfig.SimConfigFlags import simulationRunArgsToFlags
139 simulationRunArgsToFlags(runArgs, flags)
140
141
142 flags.fillFromArgs()
143
144
145 flags.lock()
146
147 cfg = CommonSimulationCfg(flags, log)
148
149
150 specialConfigPostInclude(flags, cfg)
151
152
153 processPostInclude(runArgs, flags, cfg)
154
155
156 processPostExec(runArgs, flags, cfg)
157
158
159 from PyUtils.AMITagHelperConfig import AMITagCfg
160 cfg.merge(AMITagCfg(flags, runArgs))
161
162 import time
163 tic = time.time()
164
165 sc = cfg.run()
166 log.info("Run G4AtlasAlg in " + str(time.time()-tic) + " seconds")
167
168 sys.exit(not sc.isSuccess())