15def fromRunArgs(runArgs):
16 from AthenaCommon.Logging import logging
17 logFastChain = logging.getLogger('FastChainSkeleton')
18 logFastChain.info('****************** STARTING FastChain Simulation *****************')
19
20 logFastChain.info('**** Transformation run arguments')
21 logFastChain.info(
str(runArgs))
22
23 logFastChain.info('**** Setting-up configuration flags')
24 from AthenaConfiguration.AllConfigFlags import initConfigFlags
25 flags = initConfigFlags()
26
27 from SimulationConfig.SimEnums import SimulationFlavour
28 commonRunArgsToFlags(runArgs, flags)
29
30
31 from AthenaConfiguration.Enums import ProductionStep
32 flags.Common.ProductionStep = ProductionStep.FastChain
33
34
35 if hasattr(runArgs, 'simulator'):
36 flags.Sim.ISF.Simulator = SimulationFlavour(runArgs.simulator)
37
38
39 flags.Sim.ISFRun = True
40
41
42 if hasattr(runArgs, 'inputRDO_BKGFile'):
43
44 from OverlayConfiguration.OverlaySkeleton import setOverlayInputFiles
45 setOverlayInputFiles(runArgs, flags, logFastChain)
46 flags.Common.isOverlay = True
47 flags.Digitization.PileUp = False
48
49 if flags.Overlay.DataOverlay:
50 from SimulationConfig.SimEnums import VertexSource
51 if flags.Sim.VertexSource is VertexSource.CondDB:
52 flags.Sim.VertexSource = VertexSource.MatchingBkg
53 else:
54
55 if hasattr(runArgs, 'inputEVNTFile'):
56 flags.Input.Files = runArgs.inputEVNTFile
57 else:
58 raise RuntimeError('No input EVNT file defined')
59
60
61 if hasattr(runArgs, 'outputHITSFile'):
62 flags.Output.HITSFileName = runArgs.outputHITSFile
63
64 if hasattr(runArgs, 'outputRDOFile'):
65 if runArgs.outputRDOFile == 'None':
66 flags.Output.RDOFileName = ''
67 else:
68 flags.Output.RDOFileName = runArgs.outputRDOFile
69 else:
70 raise RuntimeError('No outputRDOFile defined')
71
72 if flags.Common.isOverlay:
73 if hasattr(runArgs, 'outputRDO_SGNLFile'):
74 flags.Output.RDO_SGNLFileName = runArgs.outputRDO_SGNLFile
75
76 if hasattr(runArgs, 'conditionsTag'):
77 flags.IOVDb.GlobalTag = runArgs.conditionsTag
78
79
80 from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
81 detectors = getDetectorsFromRunArgs(flags, runArgs)
82
83
84 from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
85 setupDetectorFlags(flags, detectors, toggle_geometry=True)
86
87
88 from SimulationConfig.SimConfigFlags import simulationRunArgsToFlags
89 simulationRunArgsToFlags(runArgs, flags)
90
91
92 from DigitizationConfig.DigitizationConfigFlags import digitizationRunArgsToFlags
93 digitizationRunArgsToFlags(runArgs, flags)
94
95
96 if not flags.Common.isOverlay:
97
98 from DigitizationConfig.DigitizationConfigFlags import setupDigitizationFlags
99 setupDigitizationFlags(runArgs, flags)
100 logFastChain.info('Running with pile-up: %s', flags.Digitization.PileUp)
101
102
103 if hasattr(runArgs, 'triggerConfig') and runArgs.triggerConfig == 'NONE':
104 flags.Detector.EnableL1Calo = False
105
106
107 from PerfMonComps.PerfMonConfigHelpers import setPerfmonFlagsFromRunArgs
108 setPerfmonFlagsFromRunArgs(flags, runArgs)
109
110
111 processPreInclude(runArgs, flags)
112
113
114 specialConfigPreInclude(flags)
115
116
117 processPreExec(runArgs, flags)
118
119 if not flags.Common.isOverlay:
120
121 from DigitizationConfig.DigitizationConfigFlags import pileupRunArgsToFlags
122 pileupRunArgsToFlags(runArgs, flags)
123
124
125 if flags.Digitization.PileUp:
126 from RunDependentSimComps.PileUpUtils import setupPileUpProfile
127 setupPileUpProfile(flags)
128
129 flags.Sim.DoFullChain = True
130
131
132
133 if flags.Common.isOverlay:
134 flags.Input.OverrideRunNumber = False
135
136 if flags.Overlay.DataOverlay:
137 flags.Input.OverrideRunNumber = True
138 from CoolConvUtilities.MagFieldUtils import getTimeForLB
139 flags.Input.TimeStamps = [int(getTimeForLB(run=flags.Input.RunNumbers[0], LB=flags.Input.LumiBlockNumbers[0])/1e9)]
140
141
142
143 flags.fillFromArgs()
144
145
146
147
148 if flags.Common.isOverlay:
149 from OverlayConfiguration.OverlayMetadata import fastChainOverlayMetadataCheck
150 fastChainOverlayMetadataCheck(flags)
151
152
153 flags.lock()
154
155 if flags.Digitization.PileUp:
156 from DigitizationConfig.PileUpConfig import PileUpEventLoopMgrCfg
157 cfg = MainServicesCfg(flags, LoopMgr="PileUpEventLoopMgr")
158 cfg.merge(PileUpEventLoopMgrCfg(flags))
159 else:
160 cfg = MainServicesCfg(flags)
161
162 cfg.merge(PoolReadCfg(flags))
163
164 from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg
165 cfg.merge(BeamEffectsAlgCfg(flags))
166
167 if not flags.Digitization.PileUp and not flags.Common.isOverlay:
168
169
170 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoUpdateFromContextAlgCfg
171 cfg.merge(EventInfoUpdateFromContextAlgCfg(flags))
172
173 if flags.Common.isOverlay:
174 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoOverlayCfg
175 cfg.merge(EventInfoOverlayCfg(flags))
176
177 if not flags.Overlay.DataOverlay:
178 from OverlayCopyAlgs.OverlayCopyAlgsConfig import CopyMcEventCollectionCfg
179 cfg.merge(CopyMcEventCollectionCfg(flags))
180
181 from ISF_Config.ISF_MainConfig import ISF_KernelCfg
182 cfg.merge(ISF_KernelCfg(flags))
183
184
185 if flags.Common.isOverlay:
186 from OverlayConfiguration.OverlaySteering import OverlayMainContentCfg
187 cfg.merge(OverlayMainContentCfg(flags))
188 else:
189 from DigitizationConfig.DigitizationSteering import DigitizationMainContentCfg
190 cfg.merge(DigitizationMainContentCfg(flags))
191
192
193 if flags.Output.HITSFileName:
194 from AthenaConfiguration.Enums import MetadataCategory
195 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
196 from SimuJobTransforms.SimOutputConfig import getStreamHITS_ItemList
197 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
198 cfg.merge(OutputStreamCfg(flags, "HITS", ItemList=getStreamHITS_ItemList(flags)))
199 cfg.merge(SetupMetaDataForStreamCfg(flags, "HITS", createMetadata=[MetadataCategory.IOVMetaData]))
200
201
202 from DigitizationConfig.DigitizationSteering import DigitizationMessageSvcCfg
203 cfg.merge(DigitizationMessageSvcCfg(flags))
204
205
206 specialConfigPostInclude(flags, cfg)
207
208
209 processPostInclude(runArgs, flags, cfg)
210
211
212 processPostExec(runArgs, flags, cfg)
213
214 from AthenaConfiguration.Utils import setupLoggingLevels
215 setupLoggingLevels(flags, cfg)
216
217
218 sc = cfg.run()
219 sys.exit(not sc.isSuccess())