33 def preExecute(self, input=set(), output=
set()):
34 "Get input tarball, unpack and set up env if an evgenJobOpts arg was provided."
35
36
37 super(EvgenExecutor, self).preExecute(input, output)
38
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:
42 import tarfile
43 with tarfile.open(filename) as tf:
44 tf.extractall()
45 elif filename.endswith(".zip"):
46 import zipfile
47 zf = zipfile.ZipFile(filename)
48 zf.extractall()
49 zf.close()
50 elif ".gz" in filename:
51 shouldExtract = True
52 if "avoidExtracting" in self._trf.argdict:
53 shouldExtract = not self._trf.argdict["avoidExtracting"].value
54 if shouldExtract:
55 import gzip
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)
60 else:
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))]
65
66
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"]
75
76 dsidpar = (self._trf.argdict["jobConfig"].value).values()
77 dsidparam = list(dsidpar)[0][0]
78
79 if os.path.exists('/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/'):
80 BaseCvmfsPath = "/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/"
81
82 if dsidparam.isdigit() and (len(dsidparam)==6 or len(dsidparam)==7):
83
84 Jodir = dsidparam[:3]+'xxx'
85 if len(dsidparam)==7:
86 Jodir = dsidparam[0] + '/' + dsidparam[:4]+'xxx'
87 cwdir = os.getcwd()
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"]
92 else:
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"]
98 else:
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"]
104 else:
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")
107 else:
108 if dsidparam.startswith("Test"):
109 for token
in (os.environ[
'JOBOPTSEARCHPATH']).
split(
":"):
110 if "jobOptions" in token:
111 search_token = token
112 break
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"]
119 else:
120 msg.error("JOs not found, please check = '%s'", dsidparam)
121 raise RuntimeError("JOs not found")
122
123 msg.info("Using JOBOPTSEARCHPATH = '%s'", os.environ["JOBOPTSEARCHPATH"])
124 msg.info("Using DATAPATH = '%s'", os.environ["DATAPATH"])
125
126 if "evgenJobOpts" in self._trf.argdict:
127 tarball = self._trf.argdict["evgenJobOpts"].value
128
130 if tarball.startswith("http"):
131 url = tarball
132 tarball = os.basename(tarball)
133 else:
134 url = "http://cern.ch/atlas-computing/links/kitsDirectory/EvgenJobOpts/" + tarball
135
136 if not os.path.exists(tarball):
137 from EvgenJobTransforms.download import downloadUsingProxy
138 status, output = downloadUsingProxy(url)
139 if status != 0:
140 raise EnvironmentError('Error downloading tarball %s. Downloader reports: %s' % (tarball, output))
141 msg.info('Evgen tarball download success: %s', output)
142
143 expand_if_archive(tarball)
144
146
147
148 FIRST_DIR = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
149 configFiles = [f for f in os.listdir(FIRST_DIR) if ( "GRID" in f)]
150 confFile=None
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)
162 else:
163 msg.info("no ecm energy given, assuming 13.6 TeV ")
164 energy="13p6"
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)
171 if confFile is None:
172 msg.error("No *GRID* config files, for requested energy = '%s' please check = '%s'", energy, dsidparam)
173 sys.exit(1)
174
175 if confFile is not None:
176 expand_if_archive(confFile)
177
178 msg.info("Configuration input gridpack found " + confFile)
179
180
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)
185
186
187 if "inputGeneratorFile" in self._trf.argdict:
188
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)
195
std::string replace(std::string s, const std::string &s2, const std::string &s3)
std::vector< std::string > split(const std::string &s, const std::string &t=":")