142def fromRunArgs(runArgs):
143
144 d = release_metadata()
145 evgenLog.info("using release [%(project name)s-%(release)s] [%(platform)s] [%(nightly name)s/%(nightly release)s] -- built on [%(date)s]", d)
146 athenaRel = d["release"]
147
148 evgenLog.info("****************** STARTING EVENT GENERATION *****************")
149
150 evgenLog.info("**** Transformation run arguments")
151 evgenLog.info(runArgs)
152
153 evgenLog.info("**** Setting-up configuration flags")
154
155 from AthenaConfiguration.AllConfigFlags import initConfigFlags
156 flags = initConfigFlags()
157
158 from AthenaConfiguration.Enums import ProductionStep
159 flags.Common.ProductionStep = ProductionStep.Generation
160
161
162 from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
163 commonRunArgsToFlags(runArgs, flags)
164
165
166 from GeneratorConfig.GeneratorConfigFlags import generatorRunArgsToFlags
167 generatorRunArgsToFlags(runArgs, flags)
168
169
170 flags.fillFromArgs()
171
172
173 sample = setupSample(runArgs, flags)
174
175
176 from GeneratorConfig.GenConfigHelpers import gen_sortkey, gen_lhef
177 generatorNames = sorted(sample.generators, key=gen_sortkey)
178
179
180 blError = checkBlackList(athenaRel,generatorNames, "black")
181 plError = checkBlackList(athenaRel,generatorNames, "purple")
182 if blError is not None:
183 raise RuntimeError(blError)
184 if plError is not None:
185 evgenLog.warning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
186 evgenLog.warning(f"!!! WARNING {plError} !!!")
187 evgenLog.warning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
188
189
190 flags.Exec.FirstEvent = runArgs.firstEvent
191
192
193 flags.Exec.MaxEvents = -1
194
195 if hasattr(runArgs, "inputEVNT_PreFile"):
196 flags.Input.Files = runArgs.inputEVNT_PreFile
197 else:
198 flags.Input.Files = []
199 flags.Input.RunNumbers = [flags.Generator.DSID]
200 flags.Input.TimeStamps = [0]
201
202 flags.Output.EVNTFileName = runArgs.outputEVNTFile
203
204 flags.Beam.Energy = runArgs.ecmEnergy / 2 * GeV
205
206 flags.PerfMon.doFastMonMT = True
207 flags.PerfMon.doFullMonMT = True
208
209
210 processPreInclude(runArgs, flags)
211
212
213 processPreExec(runArgs, flags)
214
215
216 flags.lock()
217
218 evgenLog.info("**** Configuration flags")
219 if runArgs.VERBOSE:
220 flags.dump()
221 else:
222 flags.dump("Generator.*")
223
224
225 evgenLog.info(".transform = Gen_tf")
226 evgenLog.info(".platform = " + str(os.environ["BINARY_TAG"]))
227
228
229 evgenLog.info("**** Configuring event generation")
230
231
232 from AthenaConfiguration.MainServicesConfig import MainEvgenServicesCfg
233 cfg = MainEvgenServicesCfg(flags, withSequences=True)
234
235
236 if flags.Input.Files:
237 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
238 cfg.merge(PoolReadCfg(flags))
239
240
241 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
242 cfg.merge(EventInfoCnvAlgCfg(flags, disableBeamSpot=True, xAODKey="TMPEvtInfo"),
243 sequenceName=EvgenSequence.Generator.value)
244
245
246 cfg.merge(sample.setupProcess(flags))
247
248
249 if not flags.Input.Files:
250 from EvgenProdTools.EvgenProdToolsConfig import FixHepMCCfg
251 from GeneratorConfig.GenConfigHelpers import gens_purgenoendvtx
252 generatorsList = sample.generators.copy()
253 if "Pythia8" in generatorsList:
254 pythia8Alg = cfg.getEventAlgo("Pythia8_i")
255 if pythia8Alg.Beam1 != "PROTON" or pythia8Alg.Beam2 != "PROTON":
256
257 generatorsList.append("Pythia8-Angantyr")
258 cfg.merge(FixHepMCCfg(flags,
259 PurgeUnstableWithoutEndVtx=gens_purgenoendvtx(generatorsList)))
260
261
262 from GeneratorConfig.GenConfigHelpers import gens_testhepmc
263 if gens_testhepmc(sample.generators):
264 from EvgenProdTools.EvgenProdToolsConfig import TestHepMCCfg
265 cfg.merge(TestHepMCCfg(flags))
266
267
268 from EvgenProdTools.EvgenProdToolsConfig import CopyEventWeightCfg
269 cfg.merge(CopyEventWeightCfg(flags))
270
271 from EvgenProdTools.EvgenProdToolsConfig import FillFilterValuesCfg
272 cfg.merge(FillFilterValuesCfg(flags))
273
274
275 from EvgenProdTools.EvgenProdToolsConfig import CountHepMCCfg
276 cfg.merge(CountHepMCCfg(flags,
277 RequestedOutput=sample.nEventsPerJob if runArgs.maxEvents == -1
278 else runArgs.maxEvents))
279 evgenLog.info("Requested output events = %d", cfg.getEventAlgo("CountHepMC").RequestedOutput)
280
281
282 if hasattr(runArgs, "printEvts") and runArgs.printEvts > 0:
283 from TruthIO.TruthIOConfig import PrintMCCfg
284 cfg.merge(PrintMCCfg(flags,
285 LastEvent=runArgs.printEvts))
286
287
288 from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
289 cfg.merge(PerfMonMTSvcCfg(flags), sequenceName=EvgenSequence.Post.value)
290
291
292 from EvgenProdTools.EvgenProdToolsConfig import SimTimeEstimateCfg
293 cfg.merge(SimTimeEstimateCfg(flags))
294
295
296
297
298 from GeneratorConfig.Versioning import generatorsGetInitialVersionedDictionary, generatorsVersionedStringList
299 generatorDictionary = generatorsGetInitialVersionedDictionary(generatorNames)
300 generatorList = generatorsVersionedStringList(generatorDictionary)
301
302
303
304 from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg
305 metadata = {
306 "project_name": "IS_SIMULATION",
307 f"AtlasRelease_{runArgs.trfSubstepName}": flags.Input.Release or "n/a",
308 "beam_energy": str(int(flags.Beam.Energy)),
309 "beam_type": flags.Beam.Type.value,
310 "generators": '+'.join(generatorList),
311 "hepmc_version": f"HepMC{os.environ['HEPMCVER']}",
312 "keywords": ", ".join(sample.keywords).lower(),
313 "lhefGenerator": '+'.join(filter(gen_lhef, generatorNames)),
314 "mc_channel_number": str(flags.Generator.DSID),
315 }
316 if hasattr(sample, "process"): metadata.update({"evgenProcess": sample.process})
317 if hasattr(sample, "tune"): metadata.update({"evgenTune": sample.tune})
318 if hasattr(sample, "specialConfig"): metadata.update({"specialConfiguration": sample.specialConfig})
319 if hasattr(sample, "hardPDF"): metadata.update({"hardPDF": sample.hardPDF})
320 if hasattr(sample, "softPDF"): metadata.update({"softPDF": sample.softPDF})
321 if hasattr(sample, "randomSeed"): metadata.update({"randomSeed": str(runArgs.randomSeed)})
322 cfg.merge(TagInfoMgrCfg(flags, tagValuePairs=metadata))
323
324
325 evgenLog.info("HepMC version %s", os.environ["HEPMCVER"])
326
327
328 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
329 cfg.merge(OutputStreamCfg(flags, "EVNT", ["McEventCollection#*"]))
330
331
332 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
333 cfg.merge(SetupMetaDataForStreamCfg(flags, "EVNT"))
334
335
336 processPostInclude(runArgs, flags, cfg)
337
338
339 processPostExec(runArgs, flags, cfg)
340
341
342 from PyUtils.AMITagHelperConfig import AMITagCfg
343 cfg.merge(AMITagCfg(flags, runArgs))
344
345
346 cfg.printConfig(prefix="Gen_tf", printSequenceTreeOnly=not runArgs.VERBOSE)
347
348
349 sys.exit(not cfg.run().isSuccess())