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