ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/evaluateMVA.py
Revision: 1.9
Committed: Thu Aug 9 13:03:29 2012 UTC (12 years, 9 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.8: +15 -1 lines
Log Message:
7TeV running

File Contents

# Content
1 #!/usr/bin/env python
2 import sys
3 import os
4 import ROOT
5 from ROOT import TFile
6 from array import array
7 from math import sqrt
8 from copy import copy
9 #suppres the EvalInstace conversion warning bug
10 import warnings
11 warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' )
12 from optparse import OptionParser
13 from BetterConfigParser import BetterConfigParser
14 from samplesclass import sample
15 from mvainfos import mvainfo
16 import pickle
17 from progbar import progbar
18 from printcolor import printc
19
20 #CONFIGURE
21
22 #load config
23 #os.mkdir(path+'/sys')
24 argv = sys.argv[5:]
25 parser = OptionParser()
26 parser.add_option("-C", "--config", dest="config", default=[], action="append",
27 help="configuration defining the plots to make")
28 (opts, args) = parser.parse_args(argv)
29 if opts.config ==[]:
30 opts.config = "config"
31 print opts.config
32 config = BetterConfigParser()
33 config.read(opts.config)
34 anaTag = config.get("Analysis","tag")
35
36 #get locations:
37 Wdir=config.get('Directories','Wdir')
38
39 MVAdir=config.get('Directories','MVAdir')
40
41 #systematics
42 systematics=config.get('systematics','systematics')
43 systematics=systematics.split(' ')
44
45 #TreeVar Array
46 #MVA_Vars={}
47 #for systematic in systematics:
48 # MVA_Vars[systematic]=config.get('treeVars',systematic)
49 # MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
50
51 ######################
52 #Evaluate multi: Must Have same treeVars!!!
53
54 Apath=sys.argv[1]
55 infofile = open(Apath+'/samples.info','r')
56 info = pickle.load(infofile)
57 infofile.close()
58 arglist=sys.argv[2] #RTight_blavla,bsbsb
59
60 namelistIN=sys.argv[3]
61 namelist=namelistIN.split(',')
62
63 doinfo=bool(int(sys.argv[4]))
64
65 MVAlist=arglist.split(',')
66
67 #CONFIG
68 #factory
69 factoryname=config.get('factory','factoryname')
70 #MVA
71 #MVAnames=[]
72 #for MVA in MVAlist:
73 # print MVA
74 # MVAnames.append(config.get(MVA,'MVAname'))
75 #print Wdir+'/weights/'+factoryname+'_'+MVAname+'.info'
76 #MVAinfofiles=[]
77 MVAinfos=[]
78 for MVAname in MVAlist:
79 MVAinfofile = open(Wdir+'/weights/'+factoryname+'_'+MVAname+'.info','r')
80 MVAinfos.append(pickle.load(MVAinfofile))
81 MVAinfofile.close()
82
83 treeVarSet=MVAinfos[0].varset
84 #variables
85 #TreeVar Array
86 MVA_Vars={}
87 for systematic in systematics:
88 MVA_Vars[systematic]=config.get(treeVarSet,systematic)
89 MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
90 #Spectators:
91 #spectators=config.get(treeVarSet,'spectators')
92 #spectators=spectators.split(' ')
93 #progbar quatsch
94 longe=40
95 #Workdir
96 workdir=ROOT.gDirectory.GetPath()
97 #os.mkdir(Apath+'/MVAout')
98
99 #Book TMVA readers: MVAlist=["MMCC_bla","CC5050_bla"]
100 readers=[]
101 for MVA in MVAlist:
102 readers.append(ROOT.TMVA.Reader("!Color:!Silent"))
103
104 #define variables and specatators
105 MVA_var_buffer = []
106 MVA_var_buffer4 = []
107 for i in range(len( MVA_Vars['Nominal'])):
108 MVA_var_buffer.append(array( 'f', [ 0 ] ))
109 for reader in readers:
110 reader.AddVariable( MVA_Vars['Nominal'][i],MVA_var_buffer[i])
111 #MVA_spectator_buffer = []
112 #for i in range(len(spectators)):
113 # MVA_spectator_buffer.append(array( 'f', [ 0 ] ))
114 # for reader in readers:
115 # reader.AddSpectator(spectators[i],MVA_spectator_buffer[i])
116 #Load raeder
117 for i in range(0,len(readers)):
118 readers[i].BookMVA(MVAinfos[i].MVAname,MVAinfos[i].getweightfile())
119 #--> Now the MVA is booked
120
121 #Apply samples
122 infofile = open(Apath+'/samples.info','r')
123 Ainfo = pickle.load(infofile)
124 infofile.close()
125
126 #eval
127 for job in Ainfo:
128 if eval(job.active):
129 if job.name in namelist:
130 #get trees:
131 input = TFile.Open(job.getpath(),'read')
132 outfile = TFile.Open(job.path+'/'+MVAdir+job.prefix+job.identifier+'.root','recreate')
133 input.cd()
134 obj = ROOT.TObject
135 for key in ROOT.gDirectory.GetListOfKeys():
136 input.cd()
137 obj = key.ReadObj()
138 #print obj.GetName()
139 if obj.GetName() == job.tree:
140 continue
141 outfile.cd()
142 #print key.GetName()
143 obj.Write(key.GetName())
144 tree = input.Get(job.tree)
145 nEntries = tree.GetEntries()
146 outfile.cd()
147 newtree = tree.CloneTree(0)
148
149 #MCs:
150 if job.type != 'DATA':
151 MVA_formulas={}
152 MVA_formulas4={}
153 for systematic in systematics:
154 #print '\t\t - ' + systematic
155 MVA_formulas[systematic]=[]
156 MVA_formulas4[systematic]=[]
157 #create TTreeFormulas
158 for j in range(len( MVA_Vars['Nominal'])):
159 MVA_formulas[systematic].append(ROOT.TTreeFormula("MVA_formula%s_%s"%(j,systematic),MVA_Vars[systematic][j],tree))
160 MVA_formulas4[systematic].append(ROOT.TTreeFormula("MVA_formula4%s_%s"%(j,systematic),MVA_Vars['Nominal'][j]+'+('+MVA_Vars[systematic][j]+'-'+MVA_Vars['Nominal'][j]+')*4',tree))#HERE change
161 outfile.cd()
162 #Setup Branches
163 MVAbranches=[]
164 MVAbranches4=[]
165 for i in range(0,len(readers)):
166 MVAbranches.append(array('f',[0]*9))
167 MVAbranches4.append(array('f',[0]*9))
168 newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal:JER_up:JER_down:JES_up:JES_down:beff_up:beff_down:bmis_up:bmis_down/F')
169 newtree.Branch(MVAinfos[i].MVAname+'_4',MVAbranches4[i],'nominal:JER_up:JER_down:JES_up:JES_down:beff_up:beff_down:bmis_up:bmis_down/F')
170 print '\n--> ' + job.name +':'
171 #progbar setup
172 if nEntries >= longe:
173 step=int(nEntries/longe)
174 long=longe
175 else:
176 long=nEntries
177 step = 1
178 bar=progbar(long)
179 #Fill event by event:
180 for entry in range(0,nEntries):
181 if entry % step == 0:
182 bar.move()
183 #load entry
184 tree.GetEntry(entry)
185 for systematic in systematics:
186 for j in range(len( MVA_Vars['Nominal'])):
187 MVA_var_buffer[j][0] = MVA_formulas[systematic][j].EvalInstance()
188
189 for j in range(0,len(readers)):
190 MVAbranches[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
191
192 for j in range(len( MVA_Vars['Nominal'])):
193 MVA_var_buffer[j][0] = MVA_formulas4[systematic][j].EvalInstance()
194
195 for j in range(0,len(readers)):
196 MVAbranches4[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
197 #Fill:
198 newtree.Fill()
199 newtree.AutoSave()
200 outfile.Close()
201
202 #DATA:
203 if job.type == 'DATA':
204 #MVA Formulas
205 MVA_formulas_Nominal = []
206 #create TTreeFormulas
207 for j in range(len( MVA_Vars['Nominal'])):
208 MVA_formulas_Nominal.append(ROOT.TTreeFormula("MVA_formula%s_Nominal"%j, MVA_Vars['Nominal'][j],tree))
209 outfile.cd()
210 MVAbranches=[]
211 for i in range(0,len(readers)):
212 MVAbranches.append(array('f',[0]))
213 newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal/F')
214 newtree.Branch(MVAinfos[i].MVAname+'_4',MVAbranches[i],'nominal/F')
215 #progbar
216 print '\n--> ' + job.name +':'
217 if nEntries >= longe:
218 step=int(nEntries/longe)
219 long=longe
220 else:
221 long=nEntries
222 step = 1
223 bar=progbar(long)
224 #Fill event by event:
225 for entry in range(0,nEntries):
226 if entry % step == 0:
227 bar.move()
228 #load entry
229 tree.GetEntry(entry)
230 #nominal:
231 for j in range(len( MVA_Vars['Nominal'])):
232 MVA_var_buffer[j][0] = MVA_formulas_Nominal[j].EvalInstance()
233
234 for j in range(0,len(readers)):
235 MVAbranches[j][0]= readers[j].EvaluateMVA(MVAinfos[j].MVAname)
236 newtree.Fill()
237 newtree.AutoSave()
238 outfile.Close()
239
240 print '\n'
241
242 #Update Info:
243 if doinfo:
244 for job in Ainfo:
245 for MVAinfo in MVAinfos:
246 job.addcomment('Added MVA %s'%MVAinfo.MVAname)
247 job.addpath(MVAdir)
248 infofile = open(Apath+MVAdir+'/samples.info','w')
249 pickle.dump(Ainfo,infofile)
250 infofile.close()
251
252