ATLAS Offline Software
Loading...
Searching...
No Matches
Gen_tf.EvgenExecutor Class Reference
Inheritance diagram for Gen_tf.EvgenExecutor:
Collaboration diagram for Gen_tf.EvgenExecutor:

Public Member Functions

 __init__ (self, name="generate", skeleton=None, skeletonCA=None, substep=None, inData=set(), outData=set())
 preExecute (self, input=set(), output=set())

Detailed Description

Definition at line 26 of file Gen_tf.py.

Constructor & Destructor Documentation

◆ __init__()

Gen_tf.EvgenExecutor.__init__ ( self,
name = "generate",
skeleton = None,
skeletonCA = None,
substep = None,
inData = set(),
outData = set() )

Definition at line 28 of file Gen_tf.py.

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)
32
STL class.

Member Function Documentation

◆ preExecute()

Gen_tf.EvgenExecutor.preExecute ( self,
input = set(),
output = set() )

Definition at line 33 of file Gen_tf.py.

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# dsidparam = (self._trf.argdict["jobConfig"].value).values()[0][0]
76 dsidpar = (self._trf.argdict["jobConfig"].value).values()
77 dsidparam = list(dsidpar)[0][0]
78 # Adding cvmfs path to JOBOPTSEARCHPATH
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 #only dsid is provided, add cvmfs folder like 123xxx to JOBOPTSEARCHPATH
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: #Suppose full path of dsid folder is provided(/afs/.../123xxx/123456), add cvmfs floder and local path(/afs/.../123xxx) to JOBOPTSEARCHPATH
108 if dsidparam.startswith("Test"): # for testing
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 # copy config files to cwd
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# os.system("cp %s ." % confFile)
178 msg.info("Configuration input gridpack found " + confFile)
179
180 #Expand if a tarball is found in local directory
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# expand_if_archive(self._trf.argdict["inputGeneratorFile"].value)
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)
Definition hcg.cxx:312
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:179

The documentation for this class was generated from the following file: