17 parser = ArgumentParser(description='create gridpackage from job option')
18 parser.add_argument("jobOptionDir",type=str, nargs='+',help="Path to job option directory. If multiple are given only the calculation of MinEvents is performed for the additional setups (meant e.g. for different filters).")
19 parser.add_argument('-b', '--batchSystem', type=str, dest='batchSystem', default='htcondor_lxplus', help='Batch system to use (default = %(default)s, alternatives: htcondor_naf, slurm_taurus, slurm_barnard, sge_grace)')
20 parser.add_argument('-a', '--account', type=str, dest='account', default='ATLAS-HEP-GROUP', help='Account to charge. This only is needed for PBS.')
21 parser.add_argument('-q', '--queue', type=str, dest='queue', default='compute', help='What queue to use. This only is needed for PBS.')
22 parser.add_argument('-c', '--ecm', type=float, dest='ecm', nargs="+", default=[13.6], help='center of mass energy in TeV')
23 parser.add_argument('--mounts', type=str, dest='mounts', nargs="+", default=[], help='Directories to mount when using Apptainer')
24 parser.add_argument('-o', '--only', type=str, dest='performOnly', nargs="+", default=["all"], help='steps which can be performed, default:all, there are: getOpenLoops, createLibs, makelibs, integrate, makeTarball, evgen')
25 parser.add_argument('-n', '--maxCores', type=int, dest='maxCores', default="100000", help='maximal number of cores for the integration')
26 parser.add_argument('-r', '--RAM', type=int, dest='RAM', default="-1", help='reserved RAM in MB for the integration')
27 parser.add_argument('-l', '--createLibsRAM', type=int, dest='createLibsRAM', default="2", help='reserved RAM in MB for createLibs, values 1 and 2 are translated into normal RAM usage and extended RAM usage respectively')
28 parser.add_argument('-m', '--ncoresMakelibs', type=int, dest='ncoresMakelibs', default="4", help='maximal number of cores for Makelibs')
29 parser.add_argument('-s', '--ncoresScons', type=int, dest='ncoresScons', default="4", help='maximal number of cores for OpenLoops installation')
30 parser.add_argument('-e', '--nEvts', type=int, dest='nEvts', default="100", help='number of events which get generated in the test run')
31 parser.add_argument('-t', '--tarballVersion', type=str, dest='tarballVersion', default="1", help='version of tarball on grid')
32 parser.add_argument('-p', '--local-sherpa', dest='sherpaInstallPath', default=None, help="Path to custom-built local Sherpa installation. If None, use cvmfs version.")
33 parser.add_argument('-v', '--athenaVersion', type=str, dest='athenaVersion', default=None, help='Overwrite Athena version to be used.')
34 parser.add_argument('--OLskipcvmfs', dest='OLskipcvmfs', default=False, action='store_true', help="Skip precompiled OpenLoops libraries from cvmfs.")
35 parser.add_argument('--OLbranch', dest='OLbranch', type=str, default=None, help="OpenLoops branch to use from https://gitlab.com/openloops/OpenLoops (e.g. OpenLoops-2.1.2 or public_beta)")
36 parser.add_argument('--OLprocessrepos', dest='OLprocessrepos', type=str, default="ATLAS,public_beta,public", help="OpenLoops process repositories to use with ./openloops libinstall")
37 parser.add_argument('-d', '--dryRun', action='store_true', default=False, dest='dryRun', help="Do not actually submit jobs to cluster but just print them.")
38 options = parser.parse_args()
39
40 import importlib
41 options.batchSystemModule = importlib.import_module("Sherpa_i.sherpaTarCreator."+options.batchSystem)
42
43 for i in range(len(options.jobOptionDir)):
44 if not os.path.isdir(options.jobOptionDir[i]):
45 print ("ERROR: JO folder \"" + options.jobOptionDir[i] + "\" not found.")
46 sys.exit(2)
47 options.jobOptionDir[i] = os.path.abspath(options.jobOptionDir[i])
48 os.chdir(options.jobOptionDir[0])
49
50 if not options.athenaVersion:
51 if "stable" in os.environ['AtlasReleaseType']:
52 options.athenaVersion = os.environ['AtlasVersion']+","+os.environ['AtlasProject']
53 elif "nightly" in os.environ['AtlasReleaseType']:
54 options.athenaVersion = os.environ['AtlasBuildBranch']+","+os.environ['AtlasProject']+",r"+os.environ['AtlasBuildStamp']
55 else:
56 print ("ERROR: Did not find Athena environment. Did you run asetup?")
57 sys.exit(1)
58
59
60 from . import readjo
61 readjo.readJO(options)
62
63 from . import jobDefinitions
64
65 for jodir in options.jobOptionDir:
66 if not os.path.isdir(jodir):
67 print ("ERROR: JO folder not found.")
68 sys.exit(2)
69 for ecm in options.ecm:
70 folder = jodir+
"/ecm"+(
'{0:g}'.format(ecm)).
replace(
".",
"p")+
"TeV"
71
72 if not os.path.isdir(folder):
73 os.makedirs(folder)
74
75 if not os.path.islink(os.path.join(folder,"Process")):
76 os.symlink(os.path.join("..","Process"), os.path.join(folder,"Process"))
77
78 for f in options.Sherpa_i.ExtraFiles:
79 fi = os.path.basename(os.path.normpath(os.path.abspath(f)))
80 if not os.path.exists(fi):
81 print ("ERROR: The extraFile '"+f+"' does not exist, but is required according to the joboption file")
82 sys.exit(3)
83 if not os.path.islink(os.path.join(folder,fi)):
84 os.symlink(os.path.join(options.jobOptionDir[0],fi), os.path.join(folder,fi))
85
86 if not os.path.islink(os.path.join(folder,"libSherpa_iPlugin.so")):
87 if options.Sherpa_i.PluginCode != "":
88 os.symlink(os.path.join(options.jobOptionDir[0],"libSherpa_iPlugin.so"), os.path.join(folder,"libSherpa_iPlugin.so"))
89
90 prevJob = None
91 getOpenLoopsJob = jobDefinitions.mkGetOpenLoopsJob(options)
92 if getOpenLoopsJob:
93 prevJob = getOpenLoopsJob
94
95 createLibsJob = jobDefinitions.mkCreateLibsJob(options, prevJob)
96 if createLibsJob:
97 prevJob = createLibsJob
98
99 makelibsJob = jobDefinitions.mkMakelibsJob(options, prevJob)
100 if makelibsJob:
101 prevJob = makelibsJob
102
103 for ecm in options.ecm:
104
105 ecmPrevJob = prevJob
106 integrationJob = jobDefinitions.mkIntegrateJob(options, ecm, ecmPrevJob)
107 if integrationJob:
108 ecmPrevJob = integrationJob
109
110 tarballmakerJob = jobDefinitions.mkTarballmakerJob(options, ecm, ecmPrevJob)
111 if tarballmakerJob:
112 ecmPrevJob = tarballmakerJob
113
114 for jodir in options.jobOptionDir:
115 jobDefinitions.mkEvntGenTestJob(options, ecm, jodir, ecmPrevJob)
116
117 options.batchSystemModule.finalizeJobs(options.dryRun)
118
std::string replace(std::string s, const std::string &s2, const std::string &s3)