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

Comparing UserCode/VHbb/python/evaluateMVA.py (file contents):
Revision 1.3 by peller, Wed May 9 15:25:27 2012 UTC vs.
Revision 1.7 by nmohr, Tue Jun 19 22:55:47 2012 UTC

# Line 9 | Line 9 | 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 ConfigParser import SafeConfigParser
13 < from samplesinfo import sample
12 > from BetterConfigParser import BetterConfigParser
13 > from samplesclass import sample
14   from mvainfos import mvainfo
15   import pickle
16   from progbar import progbar
# Line 19 | Line 19 | from printcolor import printc
19   #CONFIGURE
20  
21   #load config
22 < config = SafeConfigParser()
22 > config = BetterConfigParser()
23   config.read('./config')
24  
25   #get locations:
26   Wdir=config.get('Directories','Wdir')
27  
28 + MVAdir=config.get('Directories','MVAdir')
29  
30   #systematics
31   systematics=config.get('systematics','systematics')
32   systematics=systematics.split(' ')
33  
34   #TreeVar Array
35 < MVA_Vars={}
36 < for systematic in systematics:
37 <    MVA_Vars[systematic]=config.get('treeVars',systematic)
38 <    MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
35 > #MVA_Vars={}
36 > #for systematic in systematics:
37 > #    MVA_Vars[systematic]=config.get('treeVars',systematic)
38 > #    MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
39  
40   ######################
41   #Evaluate multi: Must Have same treeVars!!!
# Line 42 | Line 43 | for systematic in systematics:
43   Apath=sys.argv[1]
44   arglist=sys.argv[2] #RTight_blavla,bsbsb
45  
46 < #for axample
47 < #0 5 0
48 < #and
49 < #5 -1 1
49 <
50 < start=int(sys.argv[3])
51 < stop=int(sys.argv[4])
52 < doinfo=bool(int(sys.argv[5]))
46 > namelistIN=sys.argv[3]
47 > namelist=namelistIN.split(',')
48 >
49 > doinfo=bool(int(sys.argv[4]))
50  
51   MVAlist=arglist.split(',')
52  
# Line 92 | Line 89 | for MVA in MVAlist:
89  
90   #define variables and specatators
91   MVA_var_buffer = []
92 + MVA_var_buffer4 = []
93   for i in range(len( MVA_Vars['Nominal'])):
94      MVA_var_buffer.append(array( 'f', [ 0 ] ))
95      for reader in readers:
# Line 112 | Line 110 | Ainfo = pickle.load(infofile)
110   infofile.close()
111  
112   #eval
113 < for job in Ainfo[start:stop]:
114 <    #get trees:
115 <    input = TFile.Open(job.getpath(),'read')
116 <    outfile = TFile.Open(job.path+'/MVAout/'+job.prefix+job.identifier+'.root','recreate')
117 <    input.cd()
118 <    obj = ROOT.TObject
121 <    for key in ROOT.gDirectory.GetListOfKeys():
113 > for job in Ainfo:
114 >
115 >    if job.name in namelist:
116 >        #get trees:
117 >        input = TFile.Open(job.getpath(),'read')
118 >        outfile = TFile.Open(job.path+'/'+MVAdir+job.prefix+job.identifier+'.root','recreate')
119          input.cd()
120 <        obj = key.ReadObj()
121 <        #print obj.GetName()
122 <        if obj.GetName() == job.tree:
123 <            continue
120 >        obj = ROOT.TObject
121 >        for key in ROOT.gDirectory.GetListOfKeys():
122 >            input.cd()
123 >            obj = key.ReadObj()
124 >            #print obj.GetName()
125 >            if obj.GetName() == job.tree:
126 >                continue
127 >            outfile.cd()
128 >            #print key.GetName()
129 >            obj.Write(key.GetName())
130 >        tree = input.Get(job.tree)
131 >        nEntries = tree.GetEntries()
132          outfile.cd()
133 <        #print key.GetName()
134 <        obj.Write(key.GetName())
135 <    tree = input.Get(job.tree)
136 <    nEntries = tree.GetEntries()
137 <    outfile.cd()
138 <    newtree = tree.CloneTree(0)
139 <
140 <    #MCs:
141 <    if job.type != 'DATA':
142 <        MVA_formulas={}
143 <        for systematic in systematics:
144 <            #print '\t\t - ' + systematic
145 <            MVA_formulas[systematic]=[]
133 >        newtree = tree.CloneTree(0)
134 >
135 >        #MCs:
136 >        if job.type != 'DATA':
137 >            MVA_formulas={}
138 >            MVA_formulas4={}
139 >            for systematic in systematics:
140 >                #print '\t\t - ' + systematic
141 >                MVA_formulas[systematic]=[]
142 >                MVA_formulas4[systematic]=[]
143 >                #create TTreeFormulas
144 >                for j in range(len( MVA_Vars['Nominal'])):
145 >                    MVA_formulas[systematic].append(ROOT.TTreeFormula("MVA_formula%s_%s"%(j,systematic),MVA_Vars[systematic][j],tree))
146 >                    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
147 >            outfile.cd()
148 >            #Setup Branches
149 >            MVAbranches=[]
150 >            MVAbranches4=[]
151 >            for i in range(0,len(readers)):
152 >                MVAbranches.append(array('f',[0]*9))
153 >                MVAbranches4.append(array('f',[0]*9))
154 >                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')
155 >                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')
156 >            print '\n--> ' + job.name +':'
157 >            #progbar setup
158 >            if nEntries >= longe:
159 >                step=int(nEntries/longe)
160 >                long=longe
161 >            else:
162 >                long=nEntries
163 >                step = 1
164 >            bar=progbar(long)
165 >            #Fill event by event:
166 >            for entry in range(0,nEntries):
167 >                if entry % step == 0:
168 >                    bar.move()
169 >                #load entry
170 >                tree.GetEntry(entry)
171 >                for systematic in systematics:
172 >                    for j in range(len( MVA_Vars['Nominal'])):
173 >                        MVA_var_buffer[j][0] = MVA_formulas[systematic][j].EvalInstance()
174 >                        
175 >                    for j in range(0,len(readers)):
176 >                        MVAbranches[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
177 >                        
178 >                    for j in range(len( MVA_Vars['Nominal'])):
179 >                        MVA_var_buffer[j][0] = MVA_formulas4[systematic][j].EvalInstance()
180 >                        
181 >                    for j in range(0,len(readers)):
182 >                        MVAbranches4[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
183 >                #Fill:
184 >                newtree.Fill()
185 >            newtree.AutoSave()
186 >            outfile.Close()
187 >            
188 >        #DATA:
189 >        if job.type == 'DATA':
190 >            #MVA Formulas
191 >            MVA_formulas_Nominal = []
192              #create TTreeFormulas
193              for j in range(len( MVA_Vars['Nominal'])):
194 <                MVA_formulas[systematic].append(ROOT.TTreeFormula("MVA_formula%s_%s"%(j,systematic),MVA_Vars[systematic][j],tree))
195 <        outfile.cd()
196 <        #Setup Branches
197 <        MVAbranches=[]
198 <        for i in range(0,len(readers)):
199 <            MVAbranches.append(array('f',[0]*9))
200 <            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')
201 <        print '\n--> ' + job.name +':'
202 <        #progbar setup
203 <        if nEntries >= longe:
204 <            step=int(nEntries/longe)
205 <            long=longe
206 <        else:
207 <            long=nEntries
208 <            step = 1
209 <        bar=progbar(long)
210 <        #Fill event by event:
211 <        for entry in range(0,nEntries):
212 <            if entry % step == 0:
213 <                bar.move()
214 <            #load entry
215 <            tree.GetEntry(entry)
216 <            for systematic in systematics:
194 >                MVA_formulas_Nominal.append(ROOT.TTreeFormula("MVA_formula%s_Nominal"%j, MVA_Vars['Nominal'][j],tree))
195 >            outfile.cd()
196 >            MVAbranches=[]
197 >            for i in range(0,len(readers)):
198 >                MVAbranches.append(array('f',[0]))
199 >                newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal/F')
200 >                newtree.Branch(MVAinfos[i].MVAname+'_4',MVAbranches[i],'nominal/F')
201 >            #progbar          
202 >            print '\n--> ' + job.name +':'
203 >            if nEntries >= longe:
204 >                step=int(nEntries/longe)
205 >                long=longe
206 >            else:
207 >                long=nEntries
208 >                step = 1
209 >            bar=progbar(long)
210 >            #Fill event by event:
211 >            for entry in range(0,nEntries):
212 >                if entry % step == 0:
213 >                    bar.move()
214 >                #load entry
215 >                tree.GetEntry(entry)
216 >                #nominal:
217                  for j in range(len( MVA_Vars['Nominal'])):
218 <                    MVA_var_buffer[j][0] = MVA_formulas[systematic][j].EvalInstance()
219 <                    
218 >                        MVA_var_buffer[j][0] = MVA_formulas_Nominal[j].EvalInstance()
219 >                        
220                  for j in range(0,len(readers)):
221 <                    MVAbranches[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
222 <            #Fill:
223 <            newtree.Fill()
224 <        newtree.AutoSave()
174 <        outfile.Close()
175 <        
176 <    #DATA:
177 <    if job.type == 'DATA':
178 <        #MVA Formulas
179 <        MVA_formulas_Nominal = []
180 <        #create TTreeFormulas
181 <        for j in range(len( MVA_Vars['Nominal'])):
182 <            MVA_formulas_Nominal.append(ROOT.TTreeFormula("MVA_formula%s_Nominal"%j, MVA_Vars['Nominal'][j],tree))
183 <        outfile.cd()
184 <        MVAbranches=[]
185 <        for i in range(0,len(readers)):
186 <            MVAbranches.append(array('f',[0]))
187 <            newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal/F')
188 <        #progbar          
189 <        print '\n--> ' + job.name +':'
190 <        if nEntries >= longe:
191 <            step=int(nEntries/longe)
192 <            long=longe
193 <        else:
194 <            long=nEntries
195 <            step = 1
196 <        bar=progbar(long)
197 <        #Fill event by event:
198 <        for entry in range(0,nEntries):
199 <            if entry % step == 0:
200 <                bar.move()
201 <            #load entry
202 <            tree.GetEntry(entry)
203 <            #nominal:
204 <            for j in range(len( MVA_Vars['Nominal'])):
205 <                    MVA_var_buffer[j][0] = MVA_formulas_Nominal[j].EvalInstance()
206 <                    
207 <            for j in range(0,len(readers)):
208 <                MVAbranches[j][0]= readers[j].EvaluateMVA(MVAinfos[j].MVAname)
209 <            newtree.Fill()
210 <        newtree.AutoSave()
211 <        outfile.Close()
212 <
213 <
214 <
221 >                    MVAbranches[j][0]= readers[j].EvaluateMVA(MVAinfos[j].MVAname)
222 >                newtree.Fill()
223 >            newtree.AutoSave()
224 >            outfile.Close()
225  
226 + print '\n'
227  
228   #Update Info:
229   if doinfo:
230      for job in Ainfo:        
231          for MVAinfo in MVAinfos:
232              job.addcomment('Added MVA %s'%MVAinfo.MVAname)
233 <        job.addpath('/MVAout')
234 <    infofile = open(Apath+'/MVAout/samples.info','w')
233 >        job.addpath(MVAdir)
234 >    infofile = open(Apath+MVAdir+'/samples.info','w')
235      pickle.dump(Ainfo,infofile)
236      infofile.close()
237  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines