ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/submitThem.py
(Generate patch)

Comparing UserCode/VHbb/python/submitThem.py (file contents):
Revision 1.22 by peller, Sun Oct 14 09:53:49 2012 UTC vs.
Revision 1.32 by bortigno, Tue Feb 19 17:23:59 2013 UTC

# Line 1 | Line 1
1   #! /usr/bin/env python
2 import os,shutil,sys,pickle,subprocess,ROOT
2   from optparse import OptionParser
3 < from BetterConfigParser import BetterConfigParser
4 < from samplesclass import sample
5 < import getpass
3 > import sys
4 > import time
5 > import os
6 > import shutil
7  
8   parser = OptionParser()
9   parser.add_option("-T", "--tag", dest="tag", default="",
# Line 14 | Line 14 | parser.add_option("-M", "--mass", dest="
14                        help="Mass for DC or Plots, 110...135")
15   parser.add_option("-S","--samples",dest="samples",default="",
16                        help="samples you want to run on")
17 <
17 > parser.add_option("-F", "--folderTag", dest="ftag", default="",
18 >                      help="Creats a new folder structure for outputs or uses an existing one with the given name")
19 > parser.add_option("-N", "--number-of-events", dest="nevents_split", default=100000,
20 >                      help="Number of events per file when splitting.")
21 > parser.add_option("-P", "--philipp-love-progress-bars", dest="philipp_love_progress_bars", default=False,
22 >                      help="If you share the love of Philipp...")
23  
24   (opts, args) = parser.parse_args(sys.argv)
25 +
26 + import os,shutil,pickle,subprocess,ROOT,re
27 + ROOT.gROOT.SetBatch(True)
28 + from myutils import BetterConfigParser, Sample, ParseInfo, sample_parser
29 + import getpass
30 +
31   if opts.tag == "":
32          print "Please provide tag to run the analysis with, example '-T 8TeV' uses config8TeV and pathConfig8TeV to run the analysis."
33          sys.exit(123)
# Line 25 | Line 36 | if opts.task == "":
36      print "Please provide a task.\n-J prep:\tpreparation of Trees\n-J sys:\t\twrite regression and systematics\n-J eval:\tcreate MVA output\n-J plot:\tproduce Plots\n-J dc:\t\twrite workspaces and datacards"
37      sys.exit(123)
38  
39 +
40 + en = opts.tag
41 +
42   #create the list with the samples to run over
43   samplesList=opts.samples.split(",")
44  
45 < en = opts.tag
46 < configs = ['config%s'%(en),'pathConfig%s'%(en)]
47 <        
45 > timestamp = time.asctime().replace(' ','_').replace(':','-')
46 >
47 > configs = ['%sconfig/general'%(en),'%sconfig/paths'%(en),'%sconfig/plots'%(en),'%sconfig/training'%(en),'%sconfig/datacards'%(en),'%sconfig/cuts'%(en)]
48 >
49 > pathconfig = BetterConfigParser()
50 > pathconfig.read('%sconfig/paths'%(en))
51 >
52 > if not opts.ftag == '':
53 >    tagDir = pathconfig.get('Directories','tagDir')
54 >    DirStruct={'tagDir':tagDir,'ftagdir':'%s/%s/'%(tagDir,opts.ftag),'logpath':'%s/%s/%s/'%(tagDir,opts.ftag,'Logs'),'plotpath':'%s/%s/%s/'%(tagDir,opts.ftag,'Plots'),'limitpath':'%s/%s/%s/'%(tagDir,opts.ftag,'Limits'),'confpath':'%s/%s/%s/'%(tagDir,opts.ftag,'config') }
55 >
56 >    for keys in ['tagDir','ftagdir','logpath','plotpath','limitpath','confpath']:
57 >        try:
58 >            os.stat(DirStruct[keys])
59 >        except:
60 >            os.mkdir(DirStruct[keys])
61 >
62 >    pathfile = open('%sconfig/paths'%(en))
63 >    buffer = pathfile.readlines()
64 >    pathfile.close()
65 >    os.rename('%sconfig/paths'%(en),'%sconfig/paths.bkp'%(en))
66 >    pathfile = open('%sconfig/paths'%(en),'w')
67 >    for line in buffer:
68 >        if line.startswith('plotpath'):
69 >            line = 'plotpath: %s\n'%DirStruct['plotpath']
70 >        elif line.startswith('logpath'):
71 >            line = 'logpath: %s\n'%DirStruct['logpath']
72 >        elif line.startswith('limits'):
73 >            line = 'limits: %s\n'%DirStruct['limitpath']
74 >        pathfile.write(line)
75 >    pathfile.close()
76 >
77 >    #copy config files
78 >    for item in configs:
79 >        shutil.copyfile(item,'%s/%s/%s'%(tagDir,opts.ftag,item.strip(en)))
80 >
81 >
82   print configs
83   config = BetterConfigParser()
84   config.read(configs)
85 +
86   btagLibrary = config.get('BTagReshaping','library')
87   submitDir = os.getcwd()
88   os.chdir(os.path.dirname(btagLibrary))
# Line 50 | Line 99 | if( not os.path.isdir(logPath) ):
99          print 'Exit'
100          sys.exit(-1)
101  
102 < repDict = {'en':en,'logpath':logPath,'job':'','task':opts.task,'queue': 'all.q'}
102 > repDict = {'en':en,'logpath':logPath,'job':'','task':opts.task,'queue': 'all.q','timestamp':timestamp,'additional':'','job_id':''}
103   def submit(job,repDict):
104          repDict['job'] = job
105 <        command = 'qsub -V -cwd -q %(queue)s -N %(job)s_%(en)s%(task)s -o %(logpath)s/%(job)s_%(en)s_%(task)s.out -e %(logpath)s/%(job)s_%(en)s_%(task)s.err runAll.sh %(job)s %(en)s ' %(repDict) + opts.task
105 >        command = 'qsub -V -cwd -q %(queue)s -l h_vmem=6G -N %(job)s_%(en)s%(task)s -o %(logpath)s/%(timestamp)s_%(job)s_%(en)s_%(task)s.out -e %(logpath)s/%(timestamp)s_%(job)s_%(en)s_%(task)s.err runAll.sh %(job)s %(en)s ' %(repDict) + opts.task + ' ' + repDict['job_id'] + ' ' + repDict['additional']
106          print command
107          subprocess.call([command], shell=True)
108  
109 + if opts.task == 'train':
110 +    train_list = (config.get('MVALists','List_for_submitscript')).split(',')
111 +    print train_list
112 +    for item in train_list:
113 +        submit(item,repDict)
114 +
115 +
116   if opts.task == 'dc':
117      #DC_vars = config.items('Limit')
118      DC_vars= (config.get('LimitGeneral','List')).split(',')
# Line 68 | Line 124 | if opts.task == 'plot':
124   if not opts.task == 'prep':
125      path = config.get("Directories","samplepath")
126      samplesinfo = config.get("Directories","samplesinfo")
127 <    infofile = open(samplesinfo,'r')
72 <    info = pickle.load(infofile)
73 <    infofile.close()
74 <
127 >    info = ParseInfo(samplesinfo,path)
128  
129   if opts.task == 'plot':
130 <    repDict['queue'] = 'short.q'
130 >    repDict['queue'] = 'all.q'
131      for item in Plot_vars:
132          submit(item,repDict)
133  
134 +
135   elif opts.task == 'dc':
136      repDict['queue'] = 'short.q'
137      for item in DC_vars:
# Line 89 | Line 143 | elif opts.task == 'dc':
143   elif opts.task == 'prep':
144      submit('prepare',repDict)
145  
146 < elif opts.task == 'eval' or opts.task == 'sys' or opts.task == 'syseval':
146 > elif opts.task == 'sys' or opts.task == 'syseval':
147 >    path = config.get("Directories","SYSin")
148 >    samplesinfo = config.get("Directories","samplesinfo")
149 >    info = ParseInfo(samplesinfo,path)
150      if ( opts.samples == ""):
151          for job in info:
152 +            if (job.subsample): continue #avoid multiple submissions form subsamples
153 +            # TO FIX FOR SPLITTED SAMPLE
154              submit(job.name,repDict)
155      else:
156          for sample in samplesList:
157              submit(sample,repDict)
158  
159 < os.system('qstat')
159 > elif opts.task == 'eval':
160 >    path = config.get("Directories","MVAin")
161 >    samplesinfo = config.get("Directories","samplesinfo")
162 >    info = ParseInfo(samplesinfo,path)
163 >    if ( opts.samples == ""):
164 >        for job in info:
165 >            if (job.subsample): continue #avoid multiple submissions from subsamples
166 >            if(info.checkSplittedSampleName(job.identifier)): # if multiple entries for one name  (splitted samples) use the identifier to submit
167 >                    print '@INFO: Splitted samples: submit through identifier'
168 >                    submit(job.identifier,repDict)
169 >            else: submit(job.name,repDict)
170 >    else:
171 >        for sample in samplesList:
172 >            submit(sample,repDict)
173 >
174 >
175 > elif( opts.task == 'split' ):
176 >        path = config.get("Directories","SPLITin")
177 >        samplesinfo = config.get("Directories","samplesinfo")
178 >        repDict['job_id']=opts.nevents_split
179 >        info = ParseInfo(samplesinfo,path)
180 >        if ( opts.samples == "" ):
181 >                for job in info:
182 >                        if (job.subsample): continue #avoid multiple submissions from subsamples
183 >                        submit(job.name,repDict)
184 >        else:
185 >                for sample in samplesList:
186 >                        submit(sample,repDict)
187 >
188 > #BDT optimisation
189 > elif opts.task == 'mva_opt':
190 >        total_number_of_steps=1
191 >        setting = ''
192 >        for par in (config.get('Optimisation','parameters').split(',')):
193 >                scan_par=eval(config.get('Optimisation',par))
194 >                setting+=par+'='+str(scan_par[0])+':'
195 >                if len(scan_par) > 1 and scan_par[2] != 0:
196 >                        total_number_of_steps+=scan_par[2]
197 >        setting=setting[:-1] # eliminate last column at the end of the setting string
198 >        print setting
199 >        repDict['additional']=setting
200 >        repDict['job_id']=config.get('Optimisation','training')
201 >        submit('OPT_main_set',repDict)
202 >        main_setting=setting
203 >
204 >        #Scanning all the parameters found in the training config in the Optimisation sector
205 >        for par in (config.get('Optimisation','parameters').split(',')):
206 >                scan_par=eval(config.get('Optimisation',par))
207 >                print par
208 >                if len(scan_par) > 1 and scan_par[2] != 0:
209 >                        for step in range(scan_par[2]):
210 >                                value = (scan_par[0])+((1+step)*(scan_par[1]-scan_par[0])/scan_par[2])
211 >                                print value
212 >                                setting=re.sub(par+'.*?:',par+'='+str(value)+':',main_setting)
213 >                                repDict['additional']=setting
214 > #                               repDict['job_id']=config.get('Optimisation','training')
215 >                                submit('OPT_'+par+str(value),repDict)
216 > #                               submit(config.get('Optimisation','training'),repDict)
217 >                                print setting
218 >
219 >
220 > os.system('qstat')
221 > if (opts.philipp_love_progress_bars):
222 >        os.system('./qstat.py')

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines