1 |
#!/usr/bin/env python
|
2 |
|
3 |
#Generates psets
|
4 |
#Uses 'lcg-ls' which requires grid to be sourced and a valid grid proxy (voms-proxy-init)
|
5 |
#Does not add the correct crosssections, this will need to be done by hand.
|
6 |
|
7 |
import commands
|
8 |
|
9 |
import configuration_SCBooks as conf,sys,os,readline,getpass,string,fileinput,socket,datetime,re
|
10 |
|
11 |
user = getpass.getuser()
|
12 |
db = conf.lockedDB()
|
13 |
db.connect()
|
14 |
|
15 |
paths=[]
|
16 |
shortNames=[]
|
17 |
xsecs=[]
|
18 |
|
19 |
rows = db.execute('''select job.rowid,state,path,dataset,rpath,node
|
20 |
from job join tag on tag.rowid=job.tagid join dset on dset.rowid=job.dsetid
|
21 |
where user="'''+user+'''" order by state,path''').fetchall()
|
22 |
for row in rows:
|
23 |
print ('\t'.join([str(item) for item in row]))[0:90]+"..."
|
24 |
jobnumber = raw_input("\n\n\tWhich job? ")
|
25 |
|
26 |
for row in rows:
|
27 |
if jobnumber == str(row['rowid']):
|
28 |
datasets = (row['dataset']).split(',')
|
29 |
if len(datasets) > 1 :
|
30 |
for dset in datasets :
|
31 |
path = (row['rpath'])+'/'+string.replace(dset[1:], '/', '.')
|
32 |
paths.append(path)
|
33 |
shortName = (string.split(dset, '/'))[1] + "_" + (string.split(dset, '/'))[2]
|
34 |
shortName = string.replace(shortName,'-','_')
|
35 |
shortNames.append(shortName)
|
36 |
xsecs.append(0.0)
|
37 |
#Would be nice if this information was in the database.
|
38 |
else :
|
39 |
dset = datasets[0]
|
40 |
path = (row['rpath'])
|
41 |
paths.append(path)
|
42 |
shortName = (string.split(dset, '/'))[1] + "_" + (string.split(dset, '/'))[2]
|
43 |
shortName = string.replace(shortName,'-','_')
|
44 |
shortNames.append(shortName)
|
45 |
xsecs.append(0.0)
|
46 |
break
|
47 |
db.disconnect()
|
48 |
|
49 |
for path, shortName, xsec in zip(paths, shortNames, xsecs) :
|
50 |
# print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
51 |
print "Generating " + shortName + '.py'
|
52 |
# print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
53 |
# print "\tPath: " + path
|
54 |
|
55 |
prefix = '\n' + '\t' + "\"dcap://gfe02.grid.hep.ph.ic.ac.uk:22128/"# + path + '/'
|
56 |
suffix = '\" ,'
|
57 |
|
58 |
temp = commands.getstatusoutput("lcg-ls srm://gfe02.grid.hep.ph.ic.ac.uk:8443/srm/managerv2?SFN=" + path + "/")# | grep -E SusyCAF_Tree_[0-9]\{1\}[0-9]\{0,1\}[0-9]\{0,1\}_[0-9] -o")
|
59 |
|
60 |
if temp[0] != 0 :
|
61 |
print "\tError occured:"
|
62 |
print temp
|
63 |
break
|
64 |
|
65 |
infile = temp[1].split('\n')
|
66 |
infile.sort()
|
67 |
|
68 |
toRemove = []
|
69 |
for i,line1 in enumerate(infile[:-1]) :
|
70 |
if (((line1.split('/'))[-1]).split('_'))[2] == (((infile[i+1].split('/'))[-1]).split('_'))[2] :
|
71 |
#print "\tDuplicates: " + line1
|
72 |
toRemove.append(i)
|
73 |
# for line2 in infile[i+1:] :
|
74 |
# if line1[:-1] == line2[:-1] :
|
75 |
|
76 |
|
77 |
toRemove.sort()
|
78 |
toRemove.reverse()
|
79 |
for i in toRemove :
|
80 |
del infile[i]
|
81 |
|
82 |
outfile = open(shortName+'.py','w')
|
83 |
|
84 |
filenames = []
|
85 |
for line in infile :
|
86 |
line = line.rstrip()
|
87 |
line = prefix + line + suffix
|
88 |
filenames.append(line)
|
89 |
|
90 |
#header
|
91 |
header = '\n'.join([
|
92 |
'from icf.core import PSet',
|
93 |
'',
|
94 |
'%s=PSet(' % shortName,
|
95 |
'\tName=\"%s\",' % shortName,
|
96 |
'\tFormat=(\"ICF\",2),',
|
97 |
'\tFile=['
|
98 |
])
|
99 |
outfile.write(header)
|
100 |
|
101 |
#body
|
102 |
for line in filenames :
|
103 |
outfile.write(line)
|
104 |
|
105 |
#footer
|
106 |
footer = '\n'.join([
|
107 |
'',
|
108 |
'\t],',
|
109 |
'\tCrossSection=%d,' % xsec,
|
110 |
')'
|
111 |
])
|
112 |
outfile.write(footer) |