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 import gzip
52 with gzip.open(filename, 'rb') as f_in:
53 lfilename=os.path.basename(filename)
54 with open(lfilename[:-3], 'wb') as f_out:
55 shutil.copyfileobj(f_in, f_out)
56 def get_immediate_subdirectories(a_dir):
57 return [name for name in os.listdir(a_dir)
58 if os.path.isdir(os.path.join(a_dir, name))]
59
60
62 os.environ[
'LOCAL_INSTALL_DIR'] = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
63 if os.path.exists('/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common'):
64 CommonCvmfsDir = '/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common'
65 os.environ["JOBOPTSEARCHPATH"] = CommonCvmfsDir+":"+os.environ["JOBOPTSEARCHPATH"]
66 if os.path.exists('/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common/MadGraphControl/dat/'):
67 datCvmfsDir = '/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common/MadGraphControl/dat/'
68 os.environ["DATAPATH"] = datCvmfsDir+":"+os.environ["DATAPATH"]
69
70 dsidpar = (self._trf.argdict["jobConfig"].value).values()
71 dsidparam = list(dsidpar)[0][0]
72
73 if os.path.exists('/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/'):
74 BaseCvmfsPath = "/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/"
75
76 if dsidparam.isdigit() and (len(dsidparam)==6 or len(dsidparam)==7):
77
78 Jodir = dsidparam[:3]+'xxx'
79 if len(dsidparam)==7:
80 Jodir = dsidparam[0] + '/' + dsidparam[:4]+'xxx'
81 cwdir = os.getcwd()
82 cwd_ful = os.path.join(cwdir, dsidparam)
83 if (os.path.isdir(cwd_ful)):
84 os.environ["JOBOPTSEARCHPATH"] = cwd_ful+":"+os.environ["JOBOPTSEARCHPATH"]
85 os.environ["DATAPATH"] = cwd_ful+":"+os.environ["DATAPATH"]
86 else:
87 cwd_Jodir = os.path.join(cwdir,Jodir)
88 cwd_Jodir_ful = os.path.join(cwd_Jodir,dsidparam)
89 if (os.path.isdir(cwd_Jodir_ful)):
90 os.environ["JOBOPTSEARCHPATH"] = cwd_Jodir_ful+":"+os.environ["JOBOPTSEARCHPATH"]
91 os.environ["DATAPATH"] = cwd_Jodir_ful+":"+os.environ["DATAPATH"]
92 else:
93 if (os.path.isdir(BaseCvmfsPath)):
94 JoCvmfsPath = os.path.join(BaseCvmfsPath, Jodir)
95 JoCvmfsPath_ful = os.path.join(JoCvmfsPath, dsidparam)
96 os.environ["JOBOPTSEARCHPATH"] = JoCvmfsPath_ful+":"+os.environ["JOBOPTSEARCHPATH"]
97 os.environ["DATAPATH"] = JoCvmfsPath_ful+":"+os.environ["DATAPATH"]
98 else:
99 msg.error("No access to JOs cvmfs location. JOs should be placed in working directory or full path should be given.")
100 raise RuntimeError("JOs not found - no cvmfs access")
101 else:
102 if dsidparam.startswith("Test"):
103 for token
in (os.environ[
'JOBOPTSEARCHPATH']).
split(
":"):
104 if "jobOptions" in token:
105 search_token = token
106 break
107 search_token += "/EvgenJobTransforms/EvgenTest/" + dsidparam.split("Test")[-1]
108 os.environ["JOBOPTSEARCHPATH"] = search_token+":"+os.environ["JOBOPTSEARCHPATH"]
109 os.environ["DATAPATH"] = search_token+":"+os.environ["DATAPATH"]
110 elif (os.path.isdir(dsidparam)):
111 os.environ["JOBOPTSEARCHPATH"] = dsidparam+":"+os.environ["JOBOPTSEARCHPATH"]
112 os.environ["DATAPATH"] = dsidparam+":"+os.environ["DATAPATH"]
113 else:
114 msg.error("JOs not found, please check = '%s'", dsidparam)
115 raise RuntimeError("JOs not found")
116
117 msg.info("Using JOBOPTSEARCHPATH = '%s'", os.environ["JOBOPTSEARCHPATH"])
118 msg.info("Using DATAPATH = '%s'", os.environ["DATAPATH"])
119
120 if "evgenJobOpts" in self._trf.argdict:
121 tarball = self._trf.argdict["evgenJobOpts"].value
122
124 if tarball.startswith("http"):
125 url = tarball
126 tarball = os.basename(tarball)
127 else:
128 url = "http://cern.ch/atlas-computing/links/kitsDirectory/EvgenJobOpts/" + tarball
129
130 if not os.path.exists(tarball):
131 from EvgenJobTransforms.download import downloadUsingProxy
132 status, output = downloadUsingProxy(url)
133 if status != 0:
134 raise EnvironmentError('Error downloading tarball %s. Downloader reports: %s' % (tarball, output))
135 msg.info('Evgen tarball download success: %s', output)
136
137 expand_if_archive(tarball)
138
140
141
142 FIRST_DIR = (os.environ[
'JOBOPTSEARCHPATH']).
split(
":")[0]
143 configFiles = [f for f in os.listdir(FIRST_DIR) if ( "GRID" in f)]
144 confFile=None
145 if len(configFiles) == 1:
146 msg.info("gridpack for only one energy available ")
147 elif len(configFiles) >1:
148 msg.info("more then one gridpack ! ")
149 if len(configFiles) >=1:
150 if "--ecmEnergy" in str(sys.argv[1:]):
151 split_args=str(sys.argv[1:]).
split(
"ecmEnergy",1)[1]
152 split_args=split_args.lstrip("\',=")
153 ener_GeV=split_args.split(
",")[0].
strip(
" ,\']")
154 energy=str(float(ener_GeV)/1000.0).
replace(
'.',
'p').
strip(
r"=0\p']")
155 msg.info("Should be used gridpack for energy "+energy)
156 else:
157 msg.info("no ecm energy given, assuming 13.6 TeV ")
158 energy="13p6"
159 for x in configFiles:
160 gridS="mc_"+energy+"TeV"
161 msg.info("Gridpack should start from "+gridS)
162 if x.startswith(gridS):
163 confFile = os.path.join(FIRST_DIR, x)
164 msg.info("using gridpack = "+confFile)
165 if confFile is None:
166 msg.error("No *GRID* config files, for requested energy = '%s' please check = '%s'", energy, dsidparam)
167 sys.exit(1)
168
169 if confFile is not None:
170 expand_if_archive(confFile)
171
172 msg.info("Configuration input gridpack found " + confFile)
173
174
175 loc_files = os.listdir(os.getcwd())
176 for loc_file in loc_files:
177 if "GRID" not in loc_file:
178 expand_if_archive(loc_file)
179
180
181 if "inputGeneratorFile" in self._trf.argdict:
182
183 myinputfiles = self._trf.argdict["inputGeneratorFile"].value
184 genInputFiles = myinputfiles.split(',')
185 for file in genInputFiles:
186 expand_if_archive(file)
187 if "inputGenConfFile" in self._trf.argdict:
188 expand_if_archive(self._trf.argdict["inputGenConfFile"].value)
189
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=":")