ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/mjarvis/SweetBatchSub.py
Revision: 1.2
Committed: Thu Aug 26 22:39:02 2010 UTC (14 years, 8 months ago) by mjarvis
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
Log Message:
Bryn's changes, may fail....

File Contents

# User Rev Content
1 mjarvis 1.1 #!/usr/bin/env python
2     import errno
3    
4     import os
5     import os.path
6     import commands
7     import re
8     import sys
9     from copy import deepcopy
10    
11     header_eq="="*50
12     header_dash="-"*50
13    
14     def chunks(l, n):
15     for i in xrange(0, len(l), n):
16     yield l[i:i+n]
17    
18     # def ensure_dir(f):
19     # d = os.path.dirname(f)
20     # if not os.path.exists(d):
21     # os.makedirs(d)
22    
23     def ensure_dir(path):
24     try:
25     os.makedirs(path)
26     except OSError as exc: # Python >2.5
27     if exc.errno == errno.EEXIST:
28     pass
29     else: raise
30    
31    
32     YourSusyDir = commands.getoutput('echo $SUSY_WORKING_SW_DIR') #Get the susy working Dir
33     print YourSusyDir
34     YourScriptsDir = commands.getoutput('pwd')
35    
36    
37     def BatchRun(samples,analysis,config,outputDir,nFilesPerJob):
38    
39     print header_eq
40     print "Running Batch Analysis"
41     print header_eq
42     print "On %d sample(s):" % len(samples)
43     for sample in samples:
44     print "\t%s " % (sample.Name)
45     print header_eq
46    
47     #copy contents of file
48     folder = YourScriptsDir+"/tmp/"
49     ensure_dir(folder) # where we'll put all our files
50     filename = sys.argv[0]
51     file = open(filename,"r")
52     code = file.read()
53    
54     #re for things we need to change
55     p = re.compile('samples\s?=\s?\[*?.*?\]', re.DOTALL)
56     q = re.compile('BatchRun\(*?.*?\)')
57    
58     #loop over each suplied sample, then fragment in to subsamples each of 10 files
59     for sample in samples:
60     tmpSamplePset = deepcopy(sample)
61     filesList = list(chunks(sample.File,nFilesPerJob))
62    
63     #Loop over fragments of samples
64     for files,i in zip(filesList,range(len(filesList))) :
65     fragName = sample.Name +"_part"+str(i)
66     print "submitting " + folder + fragName + " to batch queue."
67    
68     #replace samples in copy of file to fragment samples
69     tmpSamplePset.Name = "\"" + fragName + "\""
70     tmpSamplePset.File = files
71     string = "sample = PSet("
72     for (k,v) in tmpSamplePset._flatten().iteritems() :
73     string += "\n\t%s = %s ,"% (k,v)
74     string +="\n)"
75     string += "\nsamples=[sample]"
76     newCode = p.sub(string, code)
77     ensure_dir(outputDir+"/"+sample.Name)
78     #replace batch run with normal "a.run()"
79 mjarvis 1.2 string = analysis+".Run( \""+outputDir +sample.Name +"/\"," +config +", samples)"
80 mjarvis 1.1 newCode = q.sub(string, newCode)
81    
82     #write .py
83     temp = open(folder+filename[:-3]+analysis+"_"+fragName+".py", 'w')
84     temp.write(newCode)
85     temp.close()
86    
87     #write .sh that we will submit to batch
88     temp = open(folder+filename[:-3]+analysis+"_"+fragName+".sh", 'w')
89     script = '\n'.join([
90     '#!/bin/sh',
91     'source '+YourSusyDir+'/setup.sh',#Need to be changed to be more portable
92     'cd '+ YourScriptsDir+"/tmp/",# There is a $SUSY_WORKING_DIR path, " how to make python expand this"
93     filename[:-3]+analysis+"_"+fragName+".py"
94     ])
95     temp.write(script)
96     temp.close()
97    
98     #make executable
99     os.chmod(folder+filename[:-3]+analysis+"_"+fragName+".py",0777)
100    
101     #Submit
102     output = commands.getstatusoutput("qsub -q hep.q " + folder+filename[:-3]+analysis+"_"+fragName+".sh")
103     #Succesful?
104     if output[0] != 0 :
105     print "\tError occured:"
106     print output
107     break
108     else :
109     print output[1]
110    
111    
112     #make clean up script that
113     #hadd root files
114     #deletes fragments of root files
115     #deletes .py and .sh
116