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') or hasattr(runArgs, 'inputBS_SKIMFile'):
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 and not flags.Overlay.ByteStream:
50 from SimulationConfig.SimEnums import VertexSource
51 flags.Sim.VertexSource = VertexSource.MatchingBkg
52 else:
53
54 if hasattr(runArgs, 'inputEVNTFile'):
55 flags.Input.Files = runArgs.inputEVNTFile
56 else:
57 raise RuntimeError('No input EVNT file defined')
58
59
60 if hasattr(runArgs, 'outputHITSFile'):
61 flags.Output.HITSFileName = runArgs.outputHITSFile
62
63 if hasattr(runArgs, 'outputRDOFile'):
64 if runArgs.outputRDOFile == 'None':
65 flags.Output.RDOFileName = ''
66 else:
67 flags.Output.RDOFileName = runArgs.outputRDOFile
68 else:
69 raise RuntimeError('No outputRDOFile defined')
70
71 if flags.Common.isOverlay:
72 if hasattr(runArgs, 'outputRDO_SGNLFile'):
73 flags.Output.RDO_SGNLFileName = runArgs.outputRDO_SGNLFile
74
75 if hasattr(runArgs, 'conditionsTag'):
76 flags.IOVDb.GlobalTag = runArgs.conditionsTag
77
78
79 from SimuJobTransforms.SimulationHelpers import getDetectorsFromRunArgs
80 detectors = getDetectorsFromRunArgs(flags, runArgs)
81
82
83 from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
84 setupDetectorFlags(flags, detectors, toggle_geometry=True)
85
86
87 from SimulationConfig.SimConfigFlags import simulationRunArgsToFlags
88 simulationRunArgsToFlags(runArgs, flags)
89
90
91 from DigitizationConfig.DigitizationConfigFlags import digitizationRunArgsToFlags
92 digitizationRunArgsToFlags(runArgs, flags)
93
94
95 if not flags.Common.isOverlay:
96
97 from DigitizationConfig.DigitizationConfigFlags import setupDigitizationFlags
98 setupDigitizationFlags(runArgs, flags)
99 logFastChain.info('Running with pile-up: %s', flags.Digitization.PileUp)
100
101
102 if hasattr(runArgs, 'triggerConfig') and runArgs.triggerConfig == 'NONE':
103 flags.Detector.EnableL1Calo = False
104
105
106 from PerfMonComps.PerfMonConfigHelpers import setPerfmonFlagsFromRunArgs
107 setPerfmonFlagsFromRunArgs(flags, runArgs)
108
109
110 processPreInclude(runArgs, flags)
111
112
113 specialConfigPreInclude(flags)
114
115
116 processPreExec(runArgs, flags)
117
118 if not flags.Common.isOverlay:
119
120 from DigitizationConfig.DigitizationConfigFlags import pileupRunArgsToFlags
121 pileupRunArgsToFlags(runArgs, flags)
122
123
124 if flags.Digitization.PileUp:
125 from RunDependentSimComps.PileUpUtils import setupPileUpProfile
126 setupPileUpProfile(flags)
127
128 flags.Sim.DoFullChain = True
129
130
131
132 flags.Input.OverrideRunNumber = not flags.Common.isOverlay
133
134
135 flags.fillFromArgs()
136
137
138
139
140 if flags.Common.isOverlay:
141 from OverlayConfiguration.OverlayMetadata import fastChainOverlayMetadataCheck
142 fastChainOverlayMetadataCheck(flags)
143
144
145 flags.lock()
146
147 if flags.Digitization.PileUp:
148 from DigitizationConfig.PileUpConfig import PileUpEventLoopMgrCfg
149 cfg = MainServicesCfg(flags, LoopMgr="PileUpEventLoopMgr")
150 cfg.merge(PileUpEventLoopMgrCfg(flags))
151 else:
152 cfg = MainServicesCfg(flags)
153
154 cfg.merge(PoolReadCfg(flags))
155
156 from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg
157 cfg.merge(BeamEffectsAlgCfg(flags))
158
159 if not flags.Digitization.PileUp and not flags.Common.isOverlay:
160
161
162 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoUpdateFromContextAlgCfg
163 cfg.merge(EventInfoUpdateFromContextAlgCfg(flags))
164
165 if flags.Common.isOverlay:
166 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoOverlayCfg
167 cfg.merge(EventInfoOverlayCfg(flags))
168
169 if not flags.Overlay.DataOverlay:
170 from OverlayCopyAlgs.OverlayCopyAlgsConfig import CopyMcEventCollectionCfg
171 cfg.merge(CopyMcEventCollectionCfg(flags))
172
173 from ISF_Config.ISF_MainConfig import ISF_KernelCfg
174 cfg.merge(ISF_KernelCfg(flags))
175
176
177 if flags.Common.isOverlay:
178 from OverlayConfiguration.OverlaySteering import OverlayMainContentCfg
179 cfg.merge(OverlayMainContentCfg(flags))
180 else:
181 from DigitizationConfig.DigitizationSteering import DigitizationMainContentCfg
182 cfg.merge(DigitizationMainContentCfg(flags))
183
184
185 if flags.Output.HITSFileName:
186 from AthenaConfiguration.Enums import MetadataCategory
187 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
188 from SimuJobTransforms.SimOutputConfig import getStreamHITS_ItemList
189 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
190 cfg.merge(OutputStreamCfg(flags, "HITS", ItemList=getStreamHITS_ItemList(flags)))
191 cfg.merge(SetupMetaDataForStreamCfg(flags, "HITS", createMetadata=[MetadataCategory.IOVMetaData]))
192
193
194 from DigitizationConfig.DigitizationSteering import DigitizationMessageSvcCfg
195 cfg.merge(DigitizationMessageSvcCfg(flags))
196
197
198 specialConfigPostInclude(flags, cfg)
199
200
201 processPostInclude(runArgs, flags, cfg)
202
203
204 processPostExec(runArgs, flags, cfg)
205
206 from AthenaConfiguration.Utils import setupLoggingLevels
207 setupLoggingLevels(flags, cfg)
208
209
210 sc = cfg.run()
211 sys.exit(not sc.isSuccess())