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 flags.Input.OverrideRunNumber = not flags.Common.isOverlay
134
135
136 flags.fillFromArgs()
137
138
139
140
141 if flags.Common.isOverlay:
142 from OverlayConfiguration.OverlayMetadata import fastChainOverlayMetadataCheck
143 fastChainOverlayMetadataCheck(flags)
144
145
146 flags.lock()
147
148 if flags.Digitization.PileUp:
149 from DigitizationConfig.PileUpConfig import PileUpEventLoopMgrCfg
150 cfg = MainServicesCfg(flags, LoopMgr="PileUpEventLoopMgr")
151 cfg.merge(PileUpEventLoopMgrCfg(flags))
152 else:
153 cfg = MainServicesCfg(flags)
154
155 cfg.merge(PoolReadCfg(flags))
156
157 from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg
158 cfg.merge(BeamEffectsAlgCfg(flags))
159
160 if not flags.Digitization.PileUp and not flags.Common.isOverlay:
161
162
163 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoUpdateFromContextAlgCfg
164 cfg.merge(EventInfoUpdateFromContextAlgCfg(flags))
165
166 if flags.Common.isOverlay:
167 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoOverlayCfg
168 cfg.merge(EventInfoOverlayCfg(flags))
169
170 if not flags.Overlay.DataOverlay:
171 from OverlayCopyAlgs.OverlayCopyAlgsConfig import CopyMcEventCollectionCfg
172 cfg.merge(CopyMcEventCollectionCfg(flags))
173
174 from ISF_Config.ISF_MainConfig import ISF_KernelCfg
175 cfg.merge(ISF_KernelCfg(flags))
176
177
178 if flags.Common.isOverlay:
179 from OverlayConfiguration.OverlaySteering import OverlayMainContentCfg
180 cfg.merge(OverlayMainContentCfg(flags))
181 else:
182 from DigitizationConfig.DigitizationSteering import DigitizationMainContentCfg
183 cfg.merge(DigitizationMainContentCfg(flags))
184
185
186 if flags.Output.HITSFileName:
187 from AthenaConfiguration.Enums import MetadataCategory
188 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
189 from SimuJobTransforms.SimOutputConfig import getStreamHITS_ItemList
190 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
191 cfg.merge(OutputStreamCfg(flags, "HITS", ItemList=getStreamHITS_ItemList(flags)))
192 cfg.merge(SetupMetaDataForStreamCfg(flags, "HITS", createMetadata=[MetadataCategory.IOVMetaData]))
193
194
195 from DigitizationConfig.DigitizationSteering import DigitizationMessageSvcCfg
196 cfg.merge(DigitizationMessageSvcCfg(flags))
197
198
199 specialConfigPostInclude(flags, cfg)
200
201
202 processPostInclude(runArgs, flags, cfg)
203
204
205 processPostExec(runArgs, flags, cfg)
206
207 from AthenaConfiguration.Utils import setupLoggingLevels
208 setupLoggingLevels(flags, cfg)
209
210
211 sc = cfg.run()
212 sys.exit(not sc.isSuccess())