28 def __init__(self, name="generate", skeleton=None, skeletonCA=None, substep=None, inData=set(), outData=
set()):
29 athenaExecutor.__init__(self, name=name, skeletonFile=skeleton, skeletonCA=skeletonCA,
30 substep=substep, inputEventTest=
False, tryDropAndReload=
False,
31 inData=inData, outData=outData)
34 "Get input tarball, unpack and set up env if an evgenJobOpts arg was provided."
37 super(EvgenExecutor, self).
preExecute(input, output)
39 def expand_if_archive(filename):
40 "Function to expand a file if it is a zip archive or tarball"
41 if ".tar" in filename
or ".tgz" in filename:
43 with tarfile.open(filename)
as tf:
45 elif filename.endswith(
".zip"):
47 zf = zipfile.ZipFile(filename)
50 elif ".gz" in filename:
52 if "avoidExtracting" in self._trf.argdict:
53 shouldExtract =
not self._trf.argdict[
"avoidExtracting"].value
56 with gzip.open(filename,
'rb')
as f_in:
57 lfilename=os.path.basename(filename)
58 with open(lfilename[:-3],
'wb')
as f_out:
59 shutil.copyfileobj(f_in, f_out)
61 msg.info(
"Avoid extracting gz input generator file.")
62 def get_immediate_subdirectories(a_dir):
63 return [name
for name
in os.listdir(a_dir)
64 if os.path.isdir(os.path.join(a_dir, name))]
68 os.environ[
'LOCAL_INSTALL_DIR'] = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
69 if os.path.exists(
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common'):
70 CommonCvmfsDir =
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common'
71 os.environ[
"JOBOPTSEARCHPATH"] = CommonCvmfsDir+
":"+os.environ[
"JOBOPTSEARCHPATH"]
72 if os.path.exists(
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common/MadGraphControl/dat/'):
73 datCvmfsDir =
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common/MadGraphControl/dat/'
74 os.environ[
"DATAPATH"] = datCvmfsDir+
":"+os.environ[
"DATAPATH"]
76 dsidpar = (self._trf.argdict[
"jobConfig"].value).values()
77 dsidparam = list(dsidpar)[0][0]
79 if os.path.exists(
'/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/'):
80 BaseCvmfsPath =
"/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/"
82 if dsidparam.isdigit()
and (len(dsidparam)==6
or len(dsidparam)==7):
84 Jodir = dsidparam[:3]+
'xxx'
86 Jodir = dsidparam[0] +
'/' + dsidparam[:4]+
'xxx'
88 cwd_ful = os.path.join(cwdir, dsidparam)
89 if (os.path.isdir(cwd_ful)):
90 os.environ[
"JOBOPTSEARCHPATH"] = cwd_ful+
":"+os.environ[
"JOBOPTSEARCHPATH"]
91 os.environ[
"DATAPATH"] = cwd_ful+
":"+os.environ[
"DATAPATH"]
93 cwd_Jodir = os.path.join(cwdir,Jodir)
94 cwd_Jodir_ful = os.path.join(cwd_Jodir,dsidparam)
95 if (os.path.isdir(cwd_Jodir_ful)):
96 os.environ[
"JOBOPTSEARCHPATH"] = cwd_Jodir_ful+
":"+os.environ[
"JOBOPTSEARCHPATH"]
97 os.environ[
"DATAPATH"] = cwd_Jodir_ful+
":"+os.environ[
"DATAPATH"]
99 if (os.path.isdir(BaseCvmfsPath)):
100 JoCvmfsPath = os.path.join(BaseCvmfsPath, Jodir)
101 JoCvmfsPath_ful = os.path.join(JoCvmfsPath, dsidparam)
102 os.environ[
"JOBOPTSEARCHPATH"] = JoCvmfsPath_ful+
":"+os.environ[
"JOBOPTSEARCHPATH"]
103 os.environ[
"DATAPATH"] = JoCvmfsPath_ful+
":"+os.environ[
"DATAPATH"]
105 msg.error(
"No access to JOs cvmfs location. JOs should be placed in working directory or full path should be given.")
106 raise RuntimeError(
"JOs not found - no cvmfs access")
108 if dsidparam.startswith(
"Test"):
109 for token
in (os.environ[
'JOBOPTSEARCHPATH']).
split(
":"):
110 if "jobOptions" in token:
113 search_token +=
"/EvgenJobTransforms/EvgenTest/" + dsidparam.split(
"Test")[-1]
114 os.environ[
"JOBOPTSEARCHPATH"] = search_token+
":"+os.environ[
"JOBOPTSEARCHPATH"]
115 os.environ[
"DATAPATH"] = search_token+
":"+os.environ[
"DATAPATH"]
116 elif (os.path.isdir(dsidparam)):
117 os.environ[
"JOBOPTSEARCHPATH"] = dsidparam+
":"+os.environ[
"JOBOPTSEARCHPATH"]
118 os.environ[
"DATAPATH"] = dsidparam+
":"+os.environ[
"DATAPATH"]
120 msg.error(
"JOs not found, please check = '%s'", dsidparam)
121 raise RuntimeError(
"JOs not found")
123 msg.info(
"Using JOBOPTSEARCHPATH = '%s'", os.environ[
"JOBOPTSEARCHPATH"])
124 msg.info(
"Using DATAPATH = '%s'", os.environ[
"DATAPATH"])
126 if "evgenJobOpts" in self._trf.argdict:
127 tarball = self._trf.argdict[
"evgenJobOpts"].value
130 if tarball.startswith(
"http"):
132 tarball = os.basename(tarball)
134 url =
"http://cern.ch/atlas-computing/links/kitsDirectory/EvgenJobOpts/" + tarball
136 if not os.path.exists(tarball):
137 from EvgenJobTransforms.download
import downloadUsingProxy
138 status, output = downloadUsingProxy(url)
140 raise EnvironmentError(
'Error downloading tarball %s. Downloader reports: %s' % (tarball, output))
141 msg.info(
'Evgen tarball download success: %s', output)
143 expand_if_archive(tarball)
148 FIRST_DIR = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
149 configFiles = [f
for f
in os.listdir(FIRST_DIR)
if (
"GRID" in f)]
151 if len(configFiles) == 1:
152 msg.info(
"gridpack for only one energy available ")
153 elif len(configFiles) >1:
154 msg.info(
"more then one gridpack ! ")
155 if len(configFiles) >=1:
156 if "--ecmEnergy" in str(sys.argv[1:]):
157 split_args=str(sys.argv[1:]).
split(
"ecmEnergy",1)[1]
158 split_args=split_args.lstrip(
"\',=")
159 ener_GeV=split_args.split(
",")[0].
strip(
" ,\']")
160 energy=str(float(ener_GeV)/1000.0).
replace(
'.',
'p').
strip(
r"=0\p']")
161 msg.info(
"Should be used gridpack for energy "+energy)
163 msg.info(
"no ecm energy given, assuming 13.6 TeV ")
165 for x
in configFiles:
166 gridS=
"mc_"+energy+
"TeV"
167 msg.info(
"Gridpack should start from "+gridS)
168 if x.startswith(gridS):
169 confFile = os.path.join(FIRST_DIR, x)
170 msg.info(
"using gridpack = "+confFile)
172 msg.error(
"No *GRID* config files, for requested energy = '%s' please check = '%s'", energy, dsidparam)
175 if confFile
is not None:
176 expand_if_archive(confFile)
178 msg.info(
"Configuration input gridpack found " + confFile)
181 loc_files = os.listdir(os.getcwd())
182 for loc_file
in loc_files:
183 if "GRID" not in loc_file:
184 expand_if_archive(loc_file)
187 if "inputGeneratorFile" in self._trf.argdict:
189 myinputfiles = self._trf.argdict[
"inputGeneratorFile"].value
190 genInputFiles = myinputfiles.split(
',')
191 for file
in genInputFiles:
192 expand_if_archive(file)
193 if "inputGenConfFile" in self._trf.argdict:
194 expand_if_archive(self._trf.argdict[
"inputGenConfFile"].value)