ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/DistributedModelCalculations/ShapeLimits/RunScanLimits.py
Revision: 1.1
Committed: Wed Apr 18 14:03:42 2012 UTC (13 years ago) by buchmann
Content type: text/x-python
Branch: MAIN
Log Message:
Added rudimentary script to parallelize limit computation with shapes

File Contents

# Content
1 #!/usr/bin/python
2
3 # System libraries to interact with the shell
4 import sys
5 import os
6 from os import popen
7 import commands
8 import time
9
10
11 jobnumbers=[]
12 totaljobnumber=0
13 totjobs=0;
14
15 def checklist(joblist,currlist):
16 jobfinished=[]
17 for i in joblist:
18 if i in currlist: ## if the job is still active
19 currlist.remove(int(i))## we don't need this anymore on the list of currently running jobs (we already know it's running)
20 else:#job is finished
21 jobfinished.append(int(i))
22 for job in jobfinished:
23 joblist.remove(int(job))
24 print "Jobs left:"+str(len(joblist))+" / "+str(totjobs)
25
26 def create_config():
27 command="../../Plotting/Create_All_Plots.exec 1" #this is the command to give us the configuration file :-)
28 print "Creating the configuration"
29 pipe=popen(command)
30 print "Everything is sent up. Your jobs will be submitted in a minute!"
31
32 def lay_out_groundwork():
33 if os.path.isfile("../last_configuration.C"):
34 result="fff"
35 while(result!="" and result!="new"):
36 result=""
37 # result=raw_input("Configuration file exists - would you like to use this one or create a new one? if you want to create a new one, please write new, if you want to use the existing one please either hit enter\n new = generate a new file \n [ENTER] = use existing file: \n")
38 if result=="":
39 print "You've hit enter! Using the existing version ... ";
40 else:
41 print "You've written \"new\" - creating a new file!";
42 create_config()
43 else:
44 create_config()
45
46 def do_simple_submit():
47 print "Going to submit "+str(sys.argv[1])+" jobs : "
48 fusecommand="hadd -f output/Asymptotic_Limits.root"
49 path=str(os.path.abspath(os.curdir))
50 path=path.replace("/","\/");
51 savearg=(sys.argv[2]).replace("/","\/")
52 confcommand="cat Source/ShapeLimWorker.sh_template | sed 's/SETJZBCUT/"+str(sys.argv[1])+"/' | sed 's/SETNJOBS/"+str(sys.argv[1])+"/' | sed 's/THISDIR/"+str(path)+"/' > output/ShapeLimWorker.sh"
53 print confcommand
54 commands.getoutput(confcommand)
55 # sys.exit(-1)
56 for ijob in range(0,int(sys.argv[1])):
57 pipe=popen("qsub -q short.q -e /tmp/ -o /tmp/ -N " + "ShaLimA"+str(ijob)+ " " + os.curdir + "/output/ShapeLimWorker.sh"+ " "+str(ijob))
58 for l in pipe.readlines():
59 if l.find("Your job")>-1:
60 thisjobnumber=int(l[l.index('job ')+4:l.index(' (')])
61 print ": Submitted job "+str(ijob)+" with job number: "+str(thisjobnumber)
62 jobnumbers.append(thisjobnumber)
63 fusecommand=fusecommand+" output/DistributedLimits_job"+str(ijob)+"_of_"+str(sys.argv[1])+".root"
64 counter=0
65 totjobs=sys.argv[1]
66 while(len(jobnumbers)>0) :
67 counter+=1
68 currlist=[]
69 pipe=popen("qstat | grep `whoami` | awk '{print $1}'")
70 for line in pipe.readlines():
71 currlist.append(int(line))
72 checklist(jobnumbers,currlist)
73 time.sleep(60)
74 print "All jobs have finished - going to merge them, and pick points to do full fledged limit setting"
75 Asymptotic_Limits
76 commands.getoutput("python Utilities/DoFullLimits.py "+str(os.path.abspath(os.curdir))+"/output/Asymptotic_Limits.root")
77 print "All done!"
78
79 def do_advanced_submit():
80 counter=-2;
81 for argument in sys.argv:
82 counter+=1
83 if counter < 1: continue
84 confcommand="cat basic_sender.py | sed 's/nPEOPLE/"+str(int(len(sys.argv)-2))+"/' | sed 's/nJOBS/"+str(sys.argv[1])+"/' | sed 's/iPEOPLE/"+str(counter)+"/' > distributed_"+argument+".py"
85 print confcommand
86 commands.getoutput(confcommand)
87
88 def printUsage():
89 print "Please provide the following argument: (total number of jobs) (abs path to syst file)"
90 # print "You can also, on top of the number of jobs, provide a list of names (e.g. Adam Barbara Carl Debra ... ) to share the computational load"
91
92 if(len(sys.argv) < 3 or sys.argv[1] == "-h"):
93 printUsage()
94 sys.exit(-1)
95 else:
96 lay_out_groundwork()
97 print "Will now recompile to account for any possible changes in the configuration (or setup)"
98 # commands.getoutput("make")
99 if(len(sys.argv) ==3):
100 do_simple_submit()
101 else:
102 printUsage()
103 # Note: advanced submitting has not been implemented yet for limit calculations
104 # do_advanced_submit()
105