ATLAS Offline Software
skel.ABtoEVGEN.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 #
3 """Functionality core of the Gen_tf transform"""
4 
5 
8 
9 
11 
12 import os, re, string
13 import AthenaCommon.AlgSequence as acas
14 import AthenaCommon.AppMgr as acam
15 from AthenaCommon.AthenaCommonFlags import jobproperties
16 
17 from xAODEventInfoCnv.xAODEventInfoCnvConf import xAODMaker__EventInfoCnvAlg
18 acam.athMasterSeq += xAODMaker__EventInfoCnvAlg(xAODKey="TMPEvtInfo")
19 
20 theApp = acam.theApp
21 acam.athMasterSeq += acas.AlgSequence("EvgenGenSeq")
22 genSeq = acam.athMasterSeq.EvgenGenSeq
23 acam.athMasterSeq += acas.AlgSequence("EvgenPreFilterSeq")
24 prefiltSeq = acam.athMasterSeq.EvgenPreFilterSeq
25 acam.athMasterSeq += acas.AlgSequence("EvgenTestSeq")
26 testSeq = acam.athMasterSeq.EvgenTestSeq
27 
28 from EvgenProdTools.LogicalExpressionFilter import LogicalExpressionFilter
29 acam.athMasterSeq += LogicalExpressionFilter("EvgenFilterSeq")
30 filtSeq = acam.athMasterSeq.EvgenFilterSeq
31 topSeq = acas.AlgSequence()
32 anaSeq = topSeq
33 topSeq += acas.AlgSequence("EvgenPostSeq")
34 postSeq = topSeq.EvgenPostSeq
35 #topAlg = topSeq #< alias commented out for now, so that accidental use throws an error
36 
37 
38 
41 
42 
43 import AthenaCommon.AtlasUnixStandardJob
44 include("PartPropSvc/PartPropSvc.py")
45 
46 
47 from PerfMonComps.PerfMonFlags import jobproperties as perfmonjp
48 perfmonjp.PerfMonFlags.doFastMonMT = True
49 
50 
51 from RngComps.RngCompsConf import AthRNGSvc
52 svcMgr += AthRNGSvc()
53 
54 
55 jobproperties.AthenaCommonFlags.AllowIgnoreConfigError = False
56 
57 
60 
61 
62 from AthenaCommon.Logging import logging
63 evgenLog = logging.getLogger('Generate_ab')
64 
65 
66 
69 
70 
71 evgenLog.debug("****************** CHECKING EVENT GENERATION ARGS *****************")
72 evgenLog.debug(str(runArgs))
73 
74 
76 if not hasattr(runArgs, "outputEVNTFile") and not hasattr(runArgs, "outputEVNT_PreFile"):
77  raise RuntimeError("No output evgen EVNT or EVNT_Pre file provided.")
78 
79 
80 if not hasattr(runArgs, "ecmEnergy"):
81  raise RuntimeError("No center of mass energy provided.")
82 else:
83  evgenLog.info('ecmEnergy = ' + str(runArgs.ecmEnergy) )
84 if not hasattr(runArgs, "randomSeed"):
85  raise RuntimeError("No random seed provided.")
86 if not hasattr(runArgs, "firstEvent"):
87  raise RuntimeError("No first number provided.")
88 if (runArgs.firstEvent <= 0):
89  evgenLog.warning("Run argument firstEvent should be > 0")
90 
91 if hasattr(runArgs, "inputEVNT_PreFile"):
92  evgenLog.info("inputEVNT_PreFile = " + ','.join(runArgs.inputEVNT_PreFile))
93 
94 
97 
98 
99 evgenLog.debug("****************** CONFIGURING EVENT GENERATION *****************")
100 
101 
103 from EvgenJobTransforms.EvgenConfig import evgenConfig
104 from GeneratorConfig.GenConfigHelpers import gens_known, gens_lhef, gen_sortkey, gens_testhepmc, gens_notune
105 
106 
107 from EvgenProdTools.EvgenProdToolsConf import TestHepMC
108 testSeq += TestHepMC(CmEnergy=runArgs.ecmEnergy*Units.GeV)
109 if not hasattr(svcMgr, 'THistSvc'):
110  from GaudiSvc.GaudiSvcConf import THistSvc
111  svcMgr += THistSvc()
112 svcMgr.THistSvc.Output = ["TestHepMCname DATAFILE='TestHepMC.root' OPT='RECREATE'"]
113 
114 
116 from EvgenProdTools.EvgenProdToolsConf import CountHepMC
117 
118 import AthenaPoolCnvSvc.ReadAthenaPool
119 svcMgr.EventSelector.FirstEvent = runArgs.firstEvent
120 theApp.EvtMax = -1
121 if not hasattr(postSeq, "CountHepMC"):
122  postSeq += CountHepMC(InputEventInfo="TMPEvtInfo",
123  OutputEventInfo="EventInfo",
124  mcEventWeightsKey="")
125 
126 #postSeq.CountHepMC.RequestedOutput = evgenConfig.nEventsPerJob if runArgs.maxEvents == -1 else runArgs.maxEvents
127 postSeq.CountHepMC.FirstEvent = runArgs.firstEvent
128 postSeq.CountHepMC.CorrectHepMC = True
129 postSeq.CountHepMC.CorrectEventID = True
130 postSeq.CountHepMC.CorrectRunNumber = False
131 
132 if hasattr(runArgs,"inputEVNT_PreFile"):
133  from AthenaCommon.AppMgr import ServiceMgr
134  #fix iov metadata
135  if not hasattr(ServiceMgr.ToolSvc, 'IOVDbMetaDataTool'):
136  ServiceMgr.ToolSvc += CfgMgr.IOVDbMetaDataTool()
137  runNum = int((runArgs.jobConfig[0])[-6:])
138  ServiceMgr.ToolSvc.IOVDbMetaDataTool.MinMaxRunNumbers = [runNum, runNum+1]
139 
140 
142 if hasattr(runArgs, "printEvts") and runArgs.printEvts > 0:
143  from TruthIO.TruthIOConf import PrintMC
144  postSeq += PrintMC()
145  postSeq.PrintMC.McEventKey = "GEN_EVENT"
146  postSeq.PrintMC.VerboseOutput = True
147  postSeq.PrintMC.PrintStyle = "Barcode"
148  postSeq.PrintMC.FirstEvent = 1
149  postSeq.PrintMC.LastEvent = runArgs.printEvts
150 
151 
153 if hasattr(runArgs, "rivetAnas"):
154  from Rivet_i.Rivet_iConf import Rivet_i
155  anaSeq += Rivet_i()
156  anaSeq.Rivet_i.Analyses = runArgs.rivetAnas
157  anaSeq.Rivet_i.AnalysisPath = os.environ['PWD']
158  if hasattr(runArgs, "outputYODAFile"):
159  anaSeq.Rivet_i.HistoFile = runArgs.outputYODAFile
160 
161 
164 
165 
166 evgenLog.debug("****************** LOADING PRE-INCLUDES AND JOB CONFIG *****************")
167 
168 
169 if hasattr(runArgs, "preInclude"):
170  for fragment in runArgs.preInclude:
171  include(fragment)
172 
173 
174 if hasattr(runArgs, "preExec"):
175  evgenLog.info("Transform pre-exec")
176  for cmd in runArgs.preExec:
177  evgenLog.info(cmd)
178  exec(cmd)
179 
180 # TODO: Explain!!!
182  outputTXTFile = None
183  if hasattr(runArgs,"outputTXTFile"): outputTXTFile=runArgs.outputTXTFile
184  return outputTXTFile
185 
186 
188 if len(runArgs.jobConfig) != 1:
189  evgenLog.error("You must supply one and only one jobConfig file argument")
190  sys.exit(1)
191 evgenLog.info("Using JOBOPTSEARCHPATH!! = '%s'" % os.environ["JOBOPTSEARCHPATH"])
192 FIRST_DIR = (os.environ['JOBOPTSEARCHPATH']).split(":")[0]
193 
194 jofiles = [f for f in os.listdir(FIRST_DIR) if (f.startswith('mc') and f.endswith('.py'))]
195 
196 if len(jofiles) !=1:
197  evgenLog.error("You must supply one and only one jobOption file in DSID directory")
198  sys.exit(1)
199 
200 jofile = jofiles[0]
201 joparts = (os.path.basename(jofile)).split(".")
202 
203 if joparts[0].startswith("mc"): #and all(c in string.digits for c in joparts[0][2:]):
204  officialJO = True
205 
206  if len(joparts) != 3:
207  evgenLog.error(jofile + " name format is wrong: must be of the form mc.<physicsShort>.py: please rename.")
208  sys.exit(1)
209 
210  jo_physshortpart = joparts[1]
211  max_jo_physshort_length = 50
212  if len(jo_physshortpart) > max_jo_physshort_length:
213  evgenLog.error(f"{jofile} contains a physicsShort field of more than {max_jo_physshort_length} characters: please rename.")
214  sys.exit(1)
215 
216  jo_physshortparts = jo_physshortpart.split("_")
217  if len(jo_physshortparts) < 2:
218  evgenLog.error(jofile + " has too few physicsShort fields separated by '_': should contain <generators>(_<tune+PDF_if_available>)_<process>. Please rename.")
219  sys.exit(1)
220 
221  check_jofiles="/cvmfs/atlas.cern.ch/repo/sw/Generators/MC16JobOptions/scripts/check_jo_consistency.py"
222  if os.path.exists(check_jofiles):
223  include(check_jofiles)
224  check_naming(os.path.basename(jofile))
225  else:
226  evgenLog.error("check_jo_consistency.py not found")
227  sys.exit(1)
228 
229 
230 include(jofile)
231 
232 
235 
236 
237 evgenLog.debug("****************** CHECKING EVGEN CONFIGURATION *****************")
238 
239 
240 for opt in str(evgenConfig).split(os.linesep):
241  evgenLog.info(opt)
242 
243 evgenLog.info(".transform = Gen_tf")
244 
247 if evgenConfig.obsolete:
248  evgenLog.error("JOs or icludes are obsolete, please check them")
249  sys.exit(1)
250 
251 if not evgenConfig.generators:
252  evgenLog.error("No entries in evgenConfig.generators: invalid configuration, please check your JO")
253  sys.exit(1)
254 
255 if len(evgenConfig.generators) > len(set(evgenConfig.generators)):
256  evgenLog.error("Duplicate entries in evgenConfig.generators: invalid configuration, please check your JO")
257  sys.exit(1)
258 
259 gennames = sorted(evgenConfig.generators, key=gen_sortkey)
260 
261 if joparts[0].startswith("MC"): #< if this is an "official" JO
262  genpart = jo_physshortparts[0]
263  expectedgenpart = ''.join(gennames)
264 
265  expectedgenpart = expectedgenpart.replace("HerwigJimmy", "Herwig")
266  def _norm(s):
267  # TODO: add EvtGen to this normalization for MC14?
268  return s.replace("Photospp", "").replace("Photos", "").replace("TauolaPP", "").replace("Tauolapp", "").replace("Tauola", "")
269  def _norm2(s):
270  return s.replace("Py", "Pythia").replace("MG","MadGraph").replace("Ph","Powheg").replace("Hpp","Herwigpp").replace("H7","Herwig7").replace("Sh","Sherpa").replace("Ag","Alpgen").replace("EG","EvtGen").replace("PG","ParticleGun")
271 
272  def _short2(s):
273  return s.replace("Pythia","Py").replace("MadGraph","MG").replace("Powheg","Ph").replace("Herwigpp","Hpp").replace("Herwig7","H7").replace("Sherpa","Sh").replace("Alpgen","Ag").replace("EvtGen","EG").replace("PG","ParticleGun")
274 
275  if genpart != _norm(expectedgenpart) and _norm2(genpart) != _norm(expectedgenpart):
276  evgenLog.error("Expected first part of JO name to be '%s' or '%s', but found '%s'" % (_norm(expectedgenpart), _norm(_short2(expectedgenpart)), genpart))
277  evgenLog.error("gennames '%s' " %(expectedgenpart))
278  sys.exit(1)
279 
280 
281  del _norm
282 
283  if not gens_notune(gennames) and len(jo_physshortparts) < 3:
284  evgenLog.error(jofile + " with generators " + expectedgenpart +
285  " has too few physicsShort fields separated by '_'." +
286  " It should contain <generators>_<tune+PDF_<process>. Please rename.")
287  sys.exit(1)
288 
289 
291 rounding = 0
292 if hasattr(runArgs,'inputGeneratorFile') and ',' in runArgs.inputGeneratorFile:
293  multiInput = runArgs.inputGeneratorFile.count(',')+1
294 else:
295  multiInput = 0
296 # check if default nEventsPErJob used
297 if not evgenConfig.nEventsPerJob:
298  evgenLog.info('#############################################################')
299  evgenLog.info(' !!!! no nEventsPerJob set !!! The default 10000 used. !!! ')
300  evgenLog.info('#############################################################')
301 else:
302  evgenLog.info(' nEventsPerJob = ' + str(evgenConfig.nEventsPerJob) )
303 
304 
305 if evgenConfig.minevents > 0 :
306  raise RuntimeError("evgenConfig.minevents is obsolete and should be removed from the JOs")
307 
308 if evgenConfig.nEventsPerJob < 1:
309  raise RuntimeError("evgenConfig.nEventsPerJob must be at least 1")
310 elif evgenConfig.nEventsPerJob > 100000:
311  raise RuntimeError("evgenConfig.nEventsPerJob can be max. 100000")
312 else:
313  allowed_nEventsPerJob_lt1000 = [1, 2, 5, 10, 20, 25, 50, 100, 200, 500, 1000]
314  msg = "evgenConfig.nEventsPerJob = %d: " % evgenConfig.nEventsPerJob
315 
316  if evgenConfig.nEventsPerJob >= 1000 and evgenConfig.nEventsPerJob <=10000 and (evgenConfig.nEventsPerJob % 1000 != 0 or 10000 % evgenConfig.nEventsPerJob != 0) :
317  msg += "nEventsPerJob in range [1K, 10K] must be a multiple of 1K and a divisor of 10K"
318  raise RuntimeError(msg)
319  elif evgenConfig.nEventsPerJob > 10000 and evgenConfig.nEventsPerJob % 10000 != 0:
320  msg += "nEventsPerJob >10K must be a multiple of 10K"
321  raise RuntimeError(msg)
322  elif evgenConfig.nEventsPerJob < 1000 and evgenConfig.nEventsPerJob not in allowed_nEventsPerJob_lt1000:
323  msg += "nEventsPerJob in range <= 1000 must be one of %s" % allowed_nEventsPerJob_lt1000
324  raise RuntimeError(msg)
325  postSeq.CountHepMC.RequestedOutput = evgenConfig.nEventsPerJob if runArgs.maxEvents == -1 else runArgs.maxEvents
326  evgenLog.info('Requested output events = '+str(postSeq.CountHepMC.RequestedOutput))
327 
328  # Special case of N<100: adjust TestHepMC. We will allow _one_ event to fail the checks.
329  # This means the minimum efficiency is N/N+1 for N generated events. Note that if N<100,
330  # each failed event costs us more than 1% of efficiency.
331  if hasattr(testSeq, "TestHepMC") and postSeq.CountHepMC.RequestedOutput<100:
332  testSeq.TestHepMC.EffFailThreshold = postSeq.CountHepMC.RequestedOutput/(postSeq.CountHepMC.RequestedOutput+1) - 0.01
333 
334 
335 if evgenConfig.keywords:
336  from GeneratorConfig.GenConfigHelpers import checkKeywords
337  checkKeywords(evgenConfig, evgenLog, officialJO)
338 
339 
341 if evgenConfig.findJets:
342  include("EvgenJobTransforms/Generate_TruthJets.py")
343 
344 
345 from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
346 from AthenaPoolCnvSvc.AthenaPoolCnvSvcConf import AthenaPoolCnvSvc
347 # remove because it was removed from Database/AthenaPOOL/AthenaPoolCnvSvc
348 #svcMgr.AthenaPoolCnvSvc.CommitInterval = 10 #< tweak for MC needs
349 if hasattr(runArgs, "outputEVNTFile"):
350  poolFile = runArgs.outputEVNTFile
351 elif hasattr(runArgs, "outputEVNT_PreFile"):
352  poolFile = runArgs.outputEVNT_PreFile
353 else:
354  raise RuntimeError("Output pool file, either EVNT or EVNT_Pre, is not known.")
355 
356 
357 StreamEVGEN = AthenaPoolOutputStream("StreamEVGEN", poolFile, asAlg=True, noTag=True , eventInfoKey="EventInfo")
358 if hasattr(runArgs, "inputEVNT_PreFile") :
359  svcMgr.EventSelector.InputCollections = runArgs.inputEVNT_PreFile
360  StreamEVGEN.TakeItemsFromInput = True
361  postSeq.CountHepMC.CorrectRunNumber = True
362 
363 StreamEVGEN.ForceRead = True
364 StreamEVGEN.ItemList += ["EventInfo#*", "xAOD::EventInfo#EventInfo*", "xAOD::EventAuxInfo#EventInfoAux.*", "McEventCollection#*"]
365 StreamEVGEN.RequireAlgs += ["EvgenFilterSeq"]
366 
367 if evgenConfig.saveJets:
368  StreamEVGEN.ItemList += ["xAOD::JetContainer_v1#*"]
369  StreamEVGEN.ItemList += ["xAOD::JetAuxContainer_v1#*.TruthLabelID.PartonTruthLabelID"]
370 if evgenConfig.savePileupTruthParticles:
371  StreamEVGEN.ItemList += ["xAOD::TruthParticleContainer#TruthPileupParticles*"]
372  StreamEVGEN.ItemList += ["xAOD::TruthParticleAuxContainer#TruthPileupParticlesAux.*"]
373 
374 
375 
376 dsid = os.path.basename(runArgs.jobConfig[0])
377 if not dsid.isdigit():
378  dsid = "999999"
379 svcMgr.EventSelector.RunNumber = int(dsid)
380 
381 if postSeq.CountHepMC.CorrectRunNumber == True:
382  postSeq.CountHepMC.NewRunNumber = int(dsid)
383  evgenLog.info("Set new run number in skel NewRunNumber = " + str(postSeq.CountHepMC.NewRunNumber))
384 else:
385  evgenLog.info("No new run number set in skel RunNumber = " + dsid)
386 
387 
388 import EventInfoMgt.EventInfoMgtInit
389 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"beam_energy": str(int(runArgs.ecmEnergy*Units.GeV/2.0))})
390 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"beam_type": 'collisions'})
391 if len(evgenConfig.keywords)>0:
392  # Assume that this is the correct list of keywords we should keep
393  svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"keywords": ", ".join(evgenConfig.keywords).lower()})
394 
395 # Set AMITag in in-file metadata
396 from PyUtils import AMITagHelper
397 AMITagHelper.SetAMITag(runArgs=runArgs)
398 
399 
400 from OutputStreamAthenaPool.OutputStreamAthenaPoolConf import CopyEventStreamInfo
401 streamInfoTool = CopyEventStreamInfo( "StreamEVGEN_CopyEventStreamInfo" )
402 ToolSvc += streamInfoTool
403 svcMgr.MetaDataSvc.MetaDataTools += [ streamInfoTool ]
404 
405 
407 include("EvgenJobTransforms/Generate_ecmenergies.py")
408 
409 
410 include("EvgenJobTransforms/Generate_dsid_ranseed.py")
411 
412 
413 if (hasattr( runArgs, "VERBOSE") and runArgs.VERBOSE ) or (hasattr( runArgs, "loglevel") and runArgs.loglevel == "DEBUG") or (hasattr( runArgs, "loglevel")and runArgs.loglevel == "VERBOSE"):
414  include("EvgenJobTransforms/Generate_debug_level.py")
415 
416 
417 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"specialConfiguration": evgenConfig.specialConfig})
418 
419 
421 if hasattr(testSeq, "TestHepMC") and not gens_testhepmc(evgenConfig.generators):
422  evgenLog.info("Removing TestHepMC sanity checker")
423  del testSeq.TestHepMC
424 
425 
426 
429 
430 if hasattr(runArgs, "postInclude"):
431  for fragment in runArgs.postInclude:
432  include(fragment)
433 
434 if hasattr(runArgs, "postExec"):
435  evgenLog.info("Transform post-exec")
436  for cmd in runArgs.postExec:
437  evgenLog.info(cmd)
438  exec(cmd)
439 
440 
441 
444 acas.dumpMasterSequence()
445 
446 
447 
450 
451 
452 evgenLog.debug("****************** HANDLING EVGEN INPUT FILES *****************")
453 
454 
455 datFile = None
456 if "McAtNlo" in evgenConfig.generators and "Herwig" in evgenConfig.generators:
457  datFile = "inparmMcAtNlo.dat"
458 elif "Alpgen" in evgenConfig.generators:
459  datFile = "inparmAlpGen.dat"
460 elif "Protos" in evgenConfig.generators:
461  datFile = "protos.dat"
462 elif "ProtosLHEF" in evgenConfig.generators:
463  datFile = "protoslhef.dat"
464 elif "AcerMC" in evgenConfig.generators:
465  datFile = "inparmAcerMC.dat"
466 elif "CompHep" in evgenConfig.generators:
467  datFile = "inparmCompHep.dat"
468 
469 
470 eventsFile = None
471 
472 
473 def find_unique_file(pattern):
474  "Return a matching file, provided it is unique"
475  import glob
476  files = glob.glob(pattern)
477 
478  if not files:
479  raise RuntimeError("No '%s' file found" % pattern)
480  elif len(files) > 1:
481  raise RuntimeError("More than one '%s' file found" % pattern)
482  return files[0]
483 
484 def mk_symlink(srcfile, dstfile):
485  "Make a symlink safely"
486  if dstfile:
487  if os.path.exists(dstfile) and not os.path.samefile(dstfile, srcfile):
488  os.remove(dstfile)
489  if not os.path.exists(dstfile):
490  evgenLog.info("Symlinking %s to %s" % (srcfile, dstfile))
491  os.symlink(srcfile, dstfile)
492  else:
493  evgenLog.debug("Symlinking: %s is already the same as %s" % (dstfile, srcfile))
494 
495 
496 
497 if evgenConfig.auxfiles:
498  from PyJobTransformsCore.trfutil import get_files
499  get_files(evgenConfig.auxfiles, keepDir=False, errorIfNotFound=True)
500 
501 
502 
505 
506 def _checkattr(attr, required=False):
507  if not hasattr(evgenConfig, attr) or not getattr(evgenConfig, attr):
508  msg = "evgenConfig attribute '%s' not found." % attr
509  if required:
510  raise RuntimeError("Required " + msg)
511  return False
512  return True
513 
514 if _checkattr("description", required=True):
515  msg = evgenConfig.description
516  if _checkattr("notes"):
517  msg += " " + evgenConfig.notes
518  print ("MetaData: %s = %s" % ("physicsComment", msg))
519 if _checkattr("generators", required=True):
520  print ("MetaData: %s = %s" % ("generatorName", "+".join(gennames)))
521 if _checkattr("process"):
522  print ("MetaData: %s = %s" % ("physicsProcess", evgenConfig.process))
523 if _checkattr("tune"):
524  print ("MetaData: %s = %s" % ("generatorTune", evgenConfig.tune))
525 if _checkattr("hardPDF"):
526  print ("MetaData: %s = %s" % ("hardPDF", evgenConfig.hardPDF))
527 if _checkattr("softPDF"):
528  print ("MetaData: %s = %s" % ("softPDF", evgenConfig.softPDF))
529 if _checkattr("nEventsPerJob"):
530  print ("MetaData: %s = %s" % ("nEventsPerJob", evgenConfig.nEventsPerJob))
531 if _checkattr("keywords"):
532  print ("MetaData: %s = %s" % ("keywords", ", ".join(evgenConfig.keywords).lower()))
533 if _checkattr("specialConfig"):
534  print ("MetaData: %s = %s" % ("specialConfig", evgenConfig.specialConfig))
535 # TODO: Require that a contact / JO author is always set
536 if _checkattr("contact"):
537  print ("MetaData: %s = %s" % ("contactPhysicist", ", ".join(evgenConfig.contact)))
538 
539 # Output list of generator filters used
540 filterNames = [alg.getType() for alg in acas.iter_algseq(filtSeq)]
541 excludedNames = ['AthSequencer', 'PyAthena::Alg', 'TestHepMC']
542 filterNames = list(set(filterNames) - set(excludedNames))
543 print ("MetaData: %s = %s" % ("genFilterNames", ", ".join(filterNames)))
544 
545 
546 
549 
550 from PyJobTransformsCore.runargs import RunArguments
551 runPars = RunArguments()
552 runPars.nEventsPerJob = evgenConfig.nEventsPerJob
553 runPars.maxeventsstrategy = evgenConfig.maxeventsstrategy
554 with open("config.pickle", "wb") as f:
555  import pickle
556  pickle.dump(runPars, f)
557 
558 
559 
562 evgenLog.info("****************** STARTING EVENT GENERATION *****************")
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
python.GenConfigHelpers.gens_testhepmc
def gens_testhepmc(gennames)
Definition: GenConfigHelpers.py:77
skel.find_unique_file
def find_unique_file(pattern)
Helper functions for input file handling.
Definition: skel.ABtoEVGEN.py:473
trfutil
skel.OutputTXTFile
def OutputTXTFile()
==============================================================
Definition: skel.ABtoEVGEN.py:181
LArG4FSStartPointFilter.exec
exec
Definition: LArG4FSStartPointFilter.py:103
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
LogicalExpressionFilter
Definition: LogicalExpressionFilter.py:1
python.GenConfigHelpers.gens_notune
def gens_notune(gennames)
Definition: GenConfigHelpers.py:85
skel._short2
def _short2(s)
Definition: skel.ABtoEVGEN.py:272
RngCompsConfig.AthRNGSvc
AthRNGSvc
Definition: RngCompsConfig.py:9
python.Include.include
include
Definition: Include.py:318
python.GenConfigHelpers.checkKeywords
def checkKeywords(sample, evgenLog, officialJO)
Definition: GenConfigHelpers.py:151
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
skel._norm
def _norm(s)
Definition: skel.ABtoEVGEN.py:266
Lb2Lll.THistSvc
THistSvc
Definition: Lb2Lll.py:216
Trk::open
@ open
Definition: BinningType.h:40
skel._checkattr
def _checkattr(attr, required=False)
==============================================================
Definition: skel.ABtoEVGEN.py:506
skel.mk_symlink
def mk_symlink(srcfile, dstfile)
Definition: skel.ABtoEVGEN.py:484
skel._norm2
def _norm2(s)
Definition: skel.ABtoEVGEN.py:269
str
Definition: BTagTrackIpAccessor.cxx:11
python.CreateOutputStreams.AthenaPoolOutputStream
def AthenaPoolOutputStream
backward compat
Definition: CreateOutputStreams.py:144
python.trfutil.get_files
def get_files(listOfFiles, fromWhere='data', doCopy='ifNotLocal', errorIfNotFound=True, keepDir=True, depth=0, sep=os.pathsep)
Definition: trfutil.py:40
Trk::split
@ split
Definition: LayerMaterialProperties.h:38