3 """Functionality core of the Generate_tf transform"""
13 import os, re, string, subprocess
14 import AthenaCommon.AlgSequence
as acas
15 import AthenaCommon.AppMgr
as acam
16 from AthenaCommon.AthenaCommonFlags
import jobproperties
17 from AthenaCommon.AthenaCommonFlags
import athenaCommonFlags
18 from AthenaCommon.AthenaCommonFlags
import jobproperties
20 from xAODEventInfoCnv.xAODEventInfoCnvConf
import xAODMaker__EventInfoCnvAlg
21 acam.athMasterSeq += xAODMaker__EventInfoCnvAlg(xAODKey=
"TMPEvtInfo")
24 acam.athMasterSeq += acas.AlgSequence(
"EvgenGenSeq")
25 genSeq = acam.athMasterSeq.EvgenGenSeq
26 acam.athMasterSeq += acas.AlgSequence(
"EvgenFixSeq")
27 fixSeq = acam.athMasterSeq.EvgenFixSeq
28 acam.athMasterSeq += acas.AlgSequence(
"EvgenPreFilterSeq")
29 prefiltSeq = acam.athMasterSeq.EvgenPreFilterSeq
30 acam.athMasterSeq += acas.AlgSequence(
"EvgenTestSeq")
31 testSeq = acam.athMasterSeq.EvgenTestSeq
33 from EvgenProdTools.LogicalExpressionFilter
import LogicalExpressionFilter
35 filtSeq = acam.athMasterSeq.EvgenFilterSeq
36 topSeq = acas.AlgSequence()
38 topSeq += acas.AlgSequence(
"EvgenPostSeq")
39 postSeq = topSeq.EvgenPostSeq
45 include(
"AthenaCommon/Atlas_Gen.UnixStandardJob.py")
46 include(
"PartPropSvc/PartPropSvc.py")
49 from PerfMonComps.PerfMonFlags
import jobproperties
as perfmonjp
50 perfmonjp.PerfMonFlags.doMonitoring =
True
51 perfmonjp.PerfMonFlags.doSemiDetailedMonitoring =
True
53 from RngComps.RngCompsConf
import AthRNGSvc
57 jobproperties.AthenaCommonFlags.AllowIgnoreConfigError =
False
60 from AthenaCommon.Logging
import logging
61 evgenLog = logging.getLogger(
'Gen_tf')
68 evgenLog.debug(
"****************** CHECKING EVENT GENERATION ARGS *****************")
69 evgenLog.debug(
str(runArgs))
70 evgenLog.info (
"****************** CHECKING EVENT GENERATION ARGS *****************")
73 if not hasattr(runArgs,
"ecmEnergy"):
74 raise RuntimeError(
"No center of mass energy provided.")
76 evgenLog.info(
' ecmEnergy = ' +
str(runArgs.ecmEnergy) )
82 evgenLog.debug(
"****************** CONFIGURING MATRIX ELEMENT GENERATION *****************")
83 evgenLog.info(
"****************** CONFIGURING MATRIX ELEMENT GENERATION *****************")
87 from EvgenJobTransforms.EvgenConfig
import evgenConfig
88 from GeneratorConfig.GenConfigHelpers
import gens_known, gen_lhef, gens_lhef, gen_sortkey, gens_testhepmc, gens_notune, gen_require_steering
92 from EvgenProdTools.EvgenProdToolsConf
import CountHepMC
93 if (runArgs.firstEvent <= 0):
94 evgenLog.warning(
"Run argument firstEvent should be > 0")
96 svcMgr.EventSelector.FirstEvent = runArgs.firstEvent
100 if not hasattr(postSeq,
"CountHepMC"):
101 postSeq +=
CountHepMC(InputEventInfo=
"TMPEvtInfo",
102 OutputEventInfo=
"EventInfo",
103 mcEventWeightsKey=
"")
105 postSeq.CountHepMC.FirstEvent = runArgs.firstEvent
106 postSeq.CountHepMC.CorrectHepMC =
True
107 postSeq.CountHepMC.CorrectEventID =
True
115 evgenLog.debug(
"****************** LOADING PRE-INCLUDES AND JOB CONFIG *****************")
116 evgenLog.info(
"****************** LOADING PRE-INCLUDES AND JOB CONFIG *****************")
119 if hasattr(runArgs,
"preInclude"):
120 for fragment
in runArgs.preInclude:
124 if hasattr(runArgs,
"preExec"):
125 evgenLog.info(
"Transform pre-exec")
126 for cmd
in runArgs.preExec:
131 return [name
for name
in os.listdir(a_dir)
132 if os.path.isdir(os.path.join(a_dir, name))]
138 if hasattr(runArgs,
"outputTXTFile"): outputTXTFile=runArgs.outputTXTFile
144 if len(runArgs.jobConfig) != 1:
145 evgenLog.info(
"runArgs.jobConfig = " + runArgs.jobConfig)
146 evgenLog.error(
"You must supply one and only one jobConfig file argument. It has to start from mc. and end with .py")
149 print (
"Using JOBOPTSEARCHPATH (as seen in skeleton) = '%s'" % (os.environ[
"JOBOPTSEARCHPATH"]))
150 FIRST_DIR = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
152 dsid_param = runArgs.jobConfig[0]
153 evgenLog.info(
"dsid_param = " + dsid_param)
154 dsid = os.path.basename(dsid_param)
155 evgenLog.info(
"dsid = " + dsid)
156 jofiles = [f
for f
in os.listdir(FIRST_DIR)
if (f.startswith(
'mc')
and f.endswith(
'.py'))]
159 evgenLog.info(
"runArgs.jobConfig wrong " + runArgs.jobConfig)
160 evgenLog.error(
"You must supply one and only one jobOption file in DSID directory. It has to start with mc. and end with .py")
163 joparts = (os.path.basename(jofile)).
split(
".")
166 if joparts[0].startswith(
"mc")
and all(c
in string.digits
for c
in joparts[0][2:]):
169 if len(joparts) != 3:
170 evgenLog.error(jofile +
" name format is wrong: must be of the form MC<xx>.<physicsShort>.py: please rename.")
174 jo_physshortpart = joparts[1]
175 max_jo_physshort_length = 50
176 if len(jo_physshortpart) > max_jo_physshort_length:
177 evgenLog.error(f
"{jofile} contains a physicsShort field of more than {max_jo_physshort_length} characters: please rename.")
180 jo_physshortparts = jo_physshortpart.split(
"_")
181 if len(jo_physshortparts) < 2:
182 evgenLog.error(jofile +
" has too few physicsShort fields separated by '_': should contain <generators>(_<tune+PDF_if_available>)_<process>. Please rename.")
185 check_jofiles=
"/cvmfs/atlas.cern.ch/repo/sw/Generators/MC16JobOptions/scripts/check_jo_consistency.py"
186 if os.path.exists(check_jofiles):
187 evgenLog.info(
"Checking offical JO file name consistency")
189 check_naming(os.path.basename(jofile))
191 evgenLog.error(
"check_jo_consistency.py not found")
195 include(
"EvgenJobTransforms/LHEonly.py")
202 evgenLog.debug(
"****************** CHECKING EVGEN CONFIGURATION *****************")
203 evgenLog.info(
"****************** CHECKING EVGEN CONFIGURATION *****************")
206 for opt
in str(evgenConfig).
split(os.linesep):
208 evgenLog.info(
".transform = Gen_tf")
213 if evgenConfig.obsolete:
214 evgenLog.error(
"JOs or icludes are obsolete, please check them")
217 if not evgenConfig.generators:
218 evgenLog.error(
"No entries in evgenConfig.generators: invalid configuration, please check your JO")
221 if len(evgenConfig.generators) > len(
set(evgenConfig.generators)):
222 evgenLog.error(
"Duplicate entries in evgenConfig.generators: invalid configuration, please check your JO")
225 gennames =
sorted(evgenConfig.generators, key=gen_sortkey)
227 if joparts[0].startswith(
"MC"):
228 genpart = jo_physshortparts[0]
229 expectedgenpart =
''.
join(gennames)
231 expectedgenpart = expectedgenpart.replace(
"HerwigJimmy",
"Herwig")
236 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").
replace(
"Gva",
"Geneva")
239 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").
replace(
"Geneva",
"Gva")
242 if genpart !=
_norm(expectedgenpart)
and _norm2(genpart) !=
_norm(expectedgenpart):
243 evgenLog.error(
"Expected first part of JO name to be '%s' or '%s', but found '%s'" % (
_norm(expectedgenpart),
_norm(
_short2(expectedgenpart)), genpart))
244 evgenLog.error(
"gennames '%s' " %(expectedgenpart))
249 if not gens_notune(gennames)
and len(jo_physshortparts) < 3:
250 evgenLog.error(jofile +
" with generators " + expectedgenpart +
251 " has too few physicsShort fields separated by '_'." +
252 " It should contain <generators>_<tune+PDF_<process>. Please rename.")
258 if hasattr(runArgs,
"outputEVNTFile")
and not hasattr(runArgs,
"outputEVNT_PreFile"):
259 raise RuntimeError(
"'EvtGen' found in job options name, please set '--steering=afterburn'")
265 if hasattr(runArgs,
'inputGeneratorFile')
and ',' in runArgs.inputGeneratorFile: multiInput = runArgs.inputGeneratorFile.count(
',')+1
270 if not evgenConfig.nEventsPerJob:
271 evgenLog.info(
'#############################################################')
272 evgenLog.info(
' !!!! no nEventsPerJob set !!! The default 10000 used. !!! ')
273 evgenLog.info(
'#############################################################')
275 evgenLog.info(
' nEventsPerJob set to ' +
str(evgenConfig.nEventsPerJob) )
277 if evgenConfig.minevents > 0 :
278 raise RuntimeError(
"evgenConfig.minevents is obsolete and should be removed from the JOs")
280 if evgenConfig.nEventsPerJob < 1:
281 raise RunTimeError(
"evgenConfig.nEventsPerJob must be at least 1")
283 evgenLog.info(
"evgenConfig.nEventsPerJob = {}, but only {} (dummy) event(s) will be generated by Pythia8 for lhe-only production".
format(evgenConfig.nEventsPerJob, postSeq.CountHepMC.RequestedOutput))
287 if not evgenConfig.keywords:
288 evgenLog.warning(
"No entries in evgenConfig.keywords: invalid configuration, please check your JO !!")
291 if evgenConfig.keywords:
294 kwfile =
"evgenkeywords.txt"
296 for p
in os.environ[
"DATAPATH"].
split(
":"):
297 kwpath = os.path.join(p, kwfile)
298 if os.path.exists(kwpath):
302 allowed_keywords = []
304 evgenLog.info(
"evgenkeywords = "+kwpath)
305 kwf =
open(kwpath,
"r")
307 allowed_keywords += l.strip().lower().
split()
310 for k
in evgenConfig.keywords:
311 if k.lower()
not in allowed_keywords:
312 evil_keywords.append(k)
314 msg =
"evgenConfig.keywords contains non-standard keywords: %s. " %
", ".
join(evil_keywords)
315 msg +=
"Please check the allowed keywords list and fix."
320 evgenLog.warning(
"Could not find evgenkeywords.txt file %s in $JOBOPTSEARCHPATH" % kwfile)
323 if not evgenConfig.categories:
324 evgenLog.warning(
"No entries in evgenConfig.categories: invalid configuration, please check your JO !!")
327 if evgenConfig.categories:
330 lkwfile =
"CategoryList.txt"
332 for p
in os.environ[
"DATAPATH"].
split(
":"):
333 lkwpath = os.path.join(p, lkwfile)
334 if os.path.exists(lkwpath):
340 with open(lkwpath,
'r')
as catlist:
342 allowed_list = ast.literal_eval(line)
343 allowed_cat.append(allowed_list)
347 it = iter(evgenConfig.categories)
351 if "L1:" in l2
and "L2:" in l1:
353 print(
"first",l1,
"second",l2)
354 bad_cat.extend([l1, l2])
355 for a1,a2
in allowed_cat:
356 if l1.strip().lower()==a1.strip().lower()
and l2.strip().lower()==a2.strip().lower():
359 msg =
"evgenConfig.categories contains non-standard category: %s. " %
", ".
join(bad_cat)
360 msg +=
"Please check the allowed categories list and fix."
365 evgenLog.warning(
"Could not find CategoryList.txt file %s in DATAPATH" % lkwfile)
368 dsid = os.path.basename(runArgs.jobConfig[0])
369 if not dsid.isdigit():
371 svcMgr.EventSelector.RunNumber =
int(dsid)
374 from GeneratorConfig.Versioning
import generatorsGetInitialVersionedDictionary, generatorsVersionedStringList
378 import EventInfoMgt.EventInfoMgtInit
379 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"hepmc_version":
"HepMC" +
str(os.environ[
'HEPMCVER'])})
380 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"mc_channel_number":
str(dsid)})
381 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"lhefGenerator":
'+'.
join(
filter( gen_lhef, gennames ) ) })
382 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"generators":
'+'.
join(gennamesvers)})
383 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"evgenProcess": evgenConfig.process})
384 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"evgenTune": evgenConfig.tune})
385 if hasattr( evgenConfig,
"hardPDF" ) : svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"hardPDF": evgenConfig.hardPDF})
386 if hasattr( evgenConfig,
"softPDF" ) : svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"softPDF": evgenConfig.softPDF})
387 if hasattr( runArgs,
"randomSeed") : svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"randomSeed":
str(runArgs.randomSeed)})
388 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"keywords":
", ".
join(evgenConfig.keywords).lower()})
391 evgenLog.info(
"HepMC version " +
str(os.environ[
'HEPMCVER']))
394 from PyUtils
import AMITagHelper
395 AMITagHelper.SetAMITag(runArgs=runArgs)
398 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"beam_energy":
str(
int(runArgs.ecmEnergy*Units.GeV/2.0))})
399 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"beam_type":
'collisions'})
403 include(
"EvgenJobTransforms/Generate_ecmenergies.py")
406 include(
"EvgenJobTransforms/Generate_dsid_ranseed.py")
409 if (hasattr( runArgs,
"VERBOSE")
and runArgs.VERBOSE )
or (hasattr( runArgs,
"loglevel")
and runArgs.loglevel ==
"DEBUG")
or (hasattr( runArgs,
"loglevel")
and runArgs.loglevel ==
"VERBOSE"):
410 include(
"EvgenJobTransforms/Generate_debug_level.py")
418 with open(
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MC16JobOptions/common/BlackList_caches.txt')
as bfile:
419 for line
in bfile.readlines():
423 badRelFlav=line.split(
',')[0].strip()
425 badCache=line.split(
',')[1].strip()
427 badGens=line.split(
',')[2].strip()
429 used_gens =
','.
join(generatorName)
431 if relFlavour==badRelFlav
and cache==badCache
and re.search(badGens,used_gens)
is not None:
432 if badGens==
"": badGens=
"all generators"
433 isError=relFlavour+
","+cache+
" is blacklisted for " + badGens
439 with open(
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MC16JobOptions/common/PurpleList_generators.txt')
as bfile:
440 for line
in bfile.readlines():
444 purpleRelFlav=line.split(
',')[0].strip()
446 purpleCache=line.split(
',')[1].strip()
448 purpleGens=line.split(
',')[2].strip()
450 purpleProcess=line.split(
',')[3].strip()
452 used_gens =
','.
join(generatorName)
454 if relFlavour==purpleRelFlav
and cache==purpleCache
and re.search(purpleGens,used_gens)
is not None:
455 isError=relFlavour+
","+cache+
" is blacklisted for " + purpleGens +
" if it uses " + purpleProcess
460 evgenLog.debug(
"****************** CHECKING RELEASE IS NOT BLACKLISTED *****************")
461 rel = os.popen(
"echo $AtlasVersion").
read()
465 if (hasattr( runArgs,
"ignoreBlackList")
and runArgs.ignoreBlackList):
466 evgenLog.warning(
"This run is blacklisted for this generator, please use a different one for production !! "+ errorBL )
468 raise RuntimeError(
"This run is blacklisted for this generator, please use a different one !! "+ errorBL)
472 evgenLog.warning(
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
473 evgenLog.warning(
"!!! WARNING !!! "+ errorPL )
474 evgenLog.warning(
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
477 svcMgr.TagInfoMgr.ExtraTagValuePairs.update({
"specialConfiguration": evgenConfig.specialConfig})
488 if hasattr(runArgs,
"postInclude"):
489 for fragment
in runArgs.postInclude:
492 if hasattr(runArgs,
"postExec"):
493 evgenLog.info(
"Transform post-exec")
494 for cmd
in runArgs.postExec:
501 acas.dumpMasterSequence()
509 evgenLog.debug(
"****************** HANDLING EVGEN INPUT FILES *****************")
510 print(
"****************** HANDLING EVGEN INPUT FILES *****************")
513 if "McAtNlo" in evgenConfig.generators
and "Herwig" in evgenConfig.generators:
514 datFile =
"inparmMcAtNlo.dat"
515 elif "Alpgen" in evgenConfig.generators:
516 datFile =
"inparmAlpGen.dat"
517 elif "Protos" in evgenConfig.generators:
518 datFile =
"protos.dat"
519 elif "ProtosLHEF" in evgenConfig.generators:
520 datFile =
"protoslhef.dat"
521 elif "AcerMC" in evgenConfig.generators:
522 datFile =
"inparmAcerMC.dat"
523 elif "CompHep" in evgenConfig.generators:
524 datFile =
"inparmCompHep.dat"
527 if "Alpgen" in evgenConfig.generators:
528 eventsFile =
"alpgen.unw_events"
529 elif "Protos" in evgenConfig.generators:
530 eventsFile =
"protos.events"
531 elif "ProtosLHEF" in evgenConfig.generators:
532 eventsFile =
"protoslhef.events"
533 elif "BeamHaloGenerator" in evgenConfig.generators:
534 eventsFile =
"beamhalogen.events"
535 elif "HepMCAscii" in evgenConfig.generators:
536 eventsFile =
"events.hepmc"
537 elif "ReadMcAscii" in evgenConfig.generators:
538 eventsFile =
"events.hepmc"
541 eventsFile =
"events.lhe"
546 "Return a matching file, provided it is unique"
548 files = glob.glob(pattern)
551 raise RuntimeError(
"No '%s' file found" % pattern)
553 raise RuntimeError(
"More than one '%s' file found" % pattern)
559 if(os.path.exists(outputFile)):
560 print (
"outputFile ",outputFile,
" already exists. Will rename to ",outputFile,
".OLD")
561 os.rename(outputFile,outputFile+
".OLD")
562 output =
open(outputFile,
'w')
565 for file
in listOfFiles:
566 cmd =
"grep /event "+file+
" | wc -l"
567 nevents+=
int(subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=
True))
569 for file
in listOfFiles:
572 print (
"*** Starting file ",file)
573 for line
in open(file,
"r"):
579 if(
"<event" in line
and inHeader):
581 if(len(holdHeader)<1):
587 elif(
not inHeader
and not (
"</LesHouchesEvents>" in line)):
591 if(
"nevents" in line):
593 tmp = line.split(
"=")
594 line = line.replace(tmp[0],
str(nevents))
595 elif(
"numevts" in line):
597 tmp = line.split(
" ")
599 line = line.replace(tmp[1],nnn)
601 output.write(
"</LesHouchesEvents>\n")
605 "Make a symlink safely"
607 if os.path.exists(dstfile)
and not os.path.samefile(dstfile, srcfile):
609 if not os.path.exists(dstfile):
610 evgenLog.info(
"Symlinking %s to %s" % (srcfile, dstfile))
611 os.symlink(srcfile, dstfile)
613 evgenLog.debug(
"Symlinking: %s is already the same as %s" % (dstfile, srcfile))
616 if eventsFile
or datFile:
617 if not hasattr(runArgs,
"inputGeneratorFile")
or runArgs.inputGeneratorFile ==
"NONE":
618 raise RuntimeError(
"%s needs input file (argument inputGeneratorFile)" % runArgs.jobConfig)
619 if evgenConfig.inputfilecheck
and not re.search(evgenConfig.inputfilecheck, runArgs.inputGeneratorFile):
620 raise RuntimeError(
"inputGeneratorFile=%s is incompatible with inputfilecheck '%s' in %s" %
621 (runArgs.inputGeneratorFile, evgenConfig.inputfilecheck, runArgs.jobConfig))
623 if ".tar" in os.path.basename(runArgs.inputGeneratorFile):
624 inputroot = os.path.basename(runArgs.inputGeneratorFile).
split(
".tar.")[0]
626 inputroot = os.path.basename(runArgs.inputGeneratorFile).
split(
"._")[0]
631 myinputfiles = runArgs.inputGeneratorFile
632 genInputFiles = myinputfiles.split(
',')
633 numberOfFiles = len(genInputFiles)
636 if ".tar" in os.path.basename(runArgs.inputGeneratorFile):
637 inputroot = os.path.basename(runArgs.inputGeneratorFile).
split(
".tar.")[0]
639 inputroot = os.path.basename(runArgs.inputGeneratorFile).
split(
"._")[0]
641 if "events" in inputroot :
642 inputroot = inputroot.replace(
".events",
"")
647 for file
in genInputFiles:
650 if ".tar" in os.path.basename(runArgs.inputGeneratorFile):
651 inputroot = os.path.basename(runArgs.inputGeneratorFile).
split(
".tar.")[0]
653 input0 = os.path.basename(file).
split(
"._")[0]
654 input1 = (os.path.basename(file).
split(
"._")[1]).
split(
".")[0]
655 inputroot = input0+
"._"+input1
658 with open(realEventsFile,
'r')
as f:
659 first_line = f.readline()
660 if(
not (
"LesHouche" in first_line)):
661 raise RuntimeError(
"%s is NOT a LesHouche file" % realEventsFile)
662 allFiles.append(realEventsFile)
666 if hasattr(runArgs,
"inputGeneratorFile")
and runArgs.inputGeneratorFile !=
"NONE":
667 raise RuntimeError(
"inputGeneratorFile arg specified for %s, but generators %s do not require an input file" %
668 (runArgs.jobConfig,
str(gennames)))
674 if evgenConfig.auxfiles:
676 get_files(evgenConfig.auxfiles, keepDir=
False, errorIfNotFound=
True)
683 if not hasattr(evgenConfig, attr)
or not getattr(evgenConfig, attr):
684 msg =
"evgenConfig attribute '%s' not found." % attr
686 raise RuntimeError(
"Required " + msg)
691 with open(eventsFile)
as f:
693 count_ev += line.count(
'/event')
695 evgenLog.info(
'Requested output events = '+
str(count_ev))
696 print(
"MetaData: %s = %s" % (
"Number of produced LHE events ", count_ev))
699 msg = evgenConfig.description
701 msg +=
" " + evgenConfig.notes
702 print(
"MetaData: %s = %s" % (
"physicsComment", msg))
704 print (
"MetaData: %s = %s" % (
"generatorName",
"+".
join(gennamesvers)))
706 print (
"MetaData: %s = %s" % (
"physicsProcess", evgenConfig.process))
708 print (
"MetaData: %s = %s" % (
"generatorTune", evgenConfig.tune))
710 print (
"MetaData: %s = %s" % (
"hardPDF", evgenConfig.hardPDF))
712 print (
"MetaData: %s = %s" % (
"softPDF", evgenConfig.softPDF))
714 print (
"MetaData: %s = %s" % (
"nEventsPerJob", evgenConfig.nEventsPerJob))
716 print (
"MetaData: %s = %s" % (
"keywords",
", ".
join(evgenConfig.keywords).lower() ))
718 print (
", " +
", ".
join(evgenConfig.categories))
725 print (
"MetaData: %s = %s" % (
"specialConfig", evgenConfig.specialConfig))
728 print (
"MetaData: %s = %s" % (
"contactPhysicist",
", ".
join(evgenConfig.contact)))
730 print (
"MetaData: %s = %s" % (
"randomSeed",
str(runArgs.randomSeed)))
736 filterNames = [alg.getType()
for alg
in acas.iter_algseq(filtSeq)]
737 excludedNames = [
'AthSequencer',
'PyAthena::Alg',
'TestHepMC']
738 filterNames =
list(
set(filterNames) -
set(excludedNames))
739 print (
"MetaData: %s = %s" % (
"genFilterNames",
", ".
join(filterNames)))
746 from PyJobTransformsCore.runargs
import RunArguments
747 runPars = RunArguments()
748 runPars.nEventsPerJob = evgenConfig.nEventsPerJob
749 runPars.maxeventsstrategy = evgenConfig.maxeventsstrategy
750 with open(
"config.pickle",
"wb")
as f:
752 pickle.dump(runPars, f)
759 evgenLog.debug(
"****************** STARTING EVENT GENERATION *****************")
760 print (
"****************** STARTING EVENT GENERATION *****************")
761 print (
"**************************************************************")
762 print (
"****************** PLEASE IGNORE THE LOG FROM PYTHIA ************")
763 print (
"****************** GENERATION OF ONE PYTHIA EVENT ***************")
764 print (
"******************** IS NEEDED TO MAKE *************")
765 print (
"****************** THE TRANSFORM WORK ***************************")
766 print (
"**************************************************************")