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.13 by nmohr, Thu Sep 20 15:57:22 2012 UTC vs.
Revision 1.28 by bortigno, Tue Feb 26 13:10:41 2013 UTC

# Line 1 | Line 1
1   #!/usr/bin/env python
2 + from __future__ import print_function
3   import sys
4   import os
5   import ROOT
5 from ROOT import TFile
6   from array import array
7   from math import sqrt
8   from copy import copy
# Line 10 | Line 10 | from copy import copy
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
13   import pickle
17 from progbar import progbar
18 from printcolor import printc
14  
20 #CONFIGURE
15  
16 + #CONFIGURE
17 + ROOT.gROOT.SetBatch(True)
18 + print('hello')
19   #load config
23 #os.mkdir(path+'/sys')
20   argv = sys.argv
21   parser = OptionParser()
22   parser.add_option("-U", "--update", dest="update", default=0,
23                        help="update infofile")
24   parser.add_option("-D", "--discr", dest="discr", default="",
25                        help="discriminators to be added")
30 parser.add_option("-P", "--path", dest="path", default="",
31                      help="path to samples")
26   parser.add_option("-S", "--samples", dest="names", default="",
27                        help="samples you want to run on")
28   parser.add_option("-C", "--config", dest="config", default=[], action="append",
29                        help="configuration file")
30   (opts, args) = parser.parse_args(argv)
31 +
32   if opts.config =="":
33          opts.config = "config"
34 +
35 + #Import after configure to get help message
36 + from myutils import BetterConfigParser, progbar, printc, ParseInfo, MvaEvaluator
37 +
38   config = BetterConfigParser()
39   config.read(opts.config)
40   anaTag = config.get("Analysis","tag")
41  
42   #get locations:
43   Wdir=config.get('Directories','Wdir')
44 < MVASubdir=config.get('Directories','MVAdir')
44 > samplesinfo=config.get('Directories','samplesinfo')
45  
46   #systematics
47 < systematics=config.get('systematics','systematics')
48 < systematics=systematics.split(' ')
47 > INpath = config.get('Directories','MVAin')
48 > OUTpath = config.get('Directories','MVAout')
49 >
50 > info = ParseInfo(samplesinfo,INpath)
51  
51 #TreeVar Array
52 #MVA_Vars={}
53 #for systematic in systematics:
54 #    MVA_Vars[systematic]=config.get('treeVars',systematic)
55 #    MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
56
57 ######################
58 #Evaluate multi: Must Have same treeVars!!!
59
60 Apath=opts.path
61 infofile = open(Apath+'/samples.info','r')
62 info = pickle.load(infofile)
63 infofile.close()
52   arglist=opts.discr #RTight_blavla,bsbsb
53  
54   namelistIN=opts.names
55   namelist=namelistIN.split(',')
56  
57 < doinfo=bool(int(opts.update))
57 > #doinfo=bool(int(opts.update))
58  
59   MVAlist=arglist.split(',')
72 MVAdir=config.get('Directories','vhbbpath')
60  
61   #CONFIG
62   #factory
63   factoryname=config.get('factory','factoryname')
64 +
65 + #load the namespace
66 + VHbbNameSpace=config.get('VHbbNameSpace','library')
67 + ROOT.gSystem.Load(VHbbNameSpace)
68 +
69   #MVA
78 #MVAnames=[]
79 #for MVA in MVAlist:
80 #    print MVA
81 #    MVAnames.append(config.get(MVA,'MVAname'))
82 #print Wdir+'/weights/'+factoryname+'_'+MVAname+'.info'
83 #MVAinfofiles=[]
70   MVAinfos=[]
71 + MVAdir=config.get('Directories','vhbbpath')
72   for MVAname in MVAlist:
73      MVAinfofile = open(MVAdir+'/data/'+factoryname+'_'+MVAname+'.info','r')
74      MVAinfos.append(pickle.load(MVAinfofile))
75      MVAinfofile.close()
76      
90 treeVarSet=MVAinfos[0].varset
91 #variables
92 #TreeVar Array
93 MVA_Vars={}
94 for systematic in systematics:
95    MVA_Vars[systematic]=config.get(treeVarSet,systematic)
96    MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
97 #Spectators:
98 #spectators=config.get(treeVarSet,'spectators')
99 #spectators=spectators.split(' ')
100 #progbar quatsch
77   longe=40
78   #Workdir
79   workdir=ROOT.gDirectory.GetPath()
104 #os.mkdir(Apath+'/MVAout')
80  
81 < #Book TMVA readers: MVAlist=["MMCC_bla","CC5050_bla"]
82 < readers=[]
83 < for MVA in MVAlist:
84 <    readers.append(ROOT.TMVA.Reader("!Color:!Silent"))
85 <
86 < #define variables and specatators
112 < MVA_var_buffer = []
113 < MVA_var_buffer4 = []
114 < for i in range(len( MVA_Vars['Nominal'])):
115 <    MVA_var_buffer.append(array( 'f', [ 0 ] ))
116 <    for reader in readers:
117 <        reader.AddVariable( MVA_Vars['Nominal'][i],MVA_var_buffer[i])
118 < #MVA_spectator_buffer = []
119 < #for i in range(len(spectators)):
120 < #    MVA_spectator_buffer.append(array( 'f', [ 0 ] ))
121 < #    for reader in readers:
122 < #        reader.AddSpectator(spectators[i],MVA_spectator_buffer[i])
123 < #Load raeder
124 < for i in range(0,len(readers)):
125 <    readers[i].BookMVA(MVAinfos[i].MVAname,MVAdir+'/data/'+MVAinfos[i].getweightfile())
126 < #--> Now the MVA is booked
127 <
128 < #Apply samples
129 < infofile = open(Apath+'/samples.info','r')
130 < Ainfo = pickle.load(infofile)
131 < infofile.close()
81 >
82 >
83 > theMVAs = []
84 > for mva in MVAinfos:
85 >    theMVAs.append(MvaEvaluator(config,mva))
86 >
87  
88   #eval
89 < for job in Ainfo:
90 <    if eval(job.active):
91 <        if job.name in namelist:
92 <            #get trees:
93 <            input = TFile.Open(Apath+'/'+job.getpath(),'read')
94 <            outfile = TFile.Open(Apath+'/'+MVASubdir+job.prefix+job.identifier+'.root','recreate')
95 <            input.cd()
96 <            obj = ROOT.TObject
97 <            for key in ROOT.gDirectory.GetListOfKeys():
98 <                input.cd()
99 <                obj = key.ReadObj()
100 <                #print obj.GetName()
101 <                if obj.GetName() == job.tree:
102 <                    continue
103 <                outfile.cd()
104 <                #print key.GetName()
105 <                obj.Write(key.GetName())
106 <            tree = input.Get(job.tree)
107 <            nEntries = tree.GetEntries()
108 <            outfile.cd()
109 <            newtree = tree.CloneTree(0)
110 <
111 <            #MCs:
112 <            if job.type != 'DATA':
113 <                MVA_formulas={}
114 <                MVA_formulas4={}
115 <                for systematic in systematics:
116 <                    #print '\t\t - ' + systematic
117 <                    MVA_formulas[systematic]=[]
118 <                    MVA_formulas4[systematic]=[]
119 <                    #create TTreeFormulas
120 <                    for j in range(len( MVA_Vars['Nominal'])):
121 <                        MVA_formulas[systematic].append(ROOT.TTreeFormula("MVA_formula%s_%s"%(j,systematic),MVA_Vars[systematic][j],tree))
122 <                        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
123 <                outfile.cd()
124 <                #Setup Branches
125 <                MVAbranches=[]
126 <                MVAbranches4=[]
127 <                for i in range(0,len(readers)):
128 <                    MVAbranches.append(array('f',[0]*9))
129 <                    MVAbranches4.append(array('f',[0]*9))
130 <                    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')
131 <                    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')
177 <                print '\n--> ' + job.name +':'
178 <                #progbar setup
179 <                if nEntries >= longe:
180 <                    step=int(nEntries/longe)
181 <                    long=longe
182 <                else:
183 <                    long=nEntries
184 <                    step = 1
185 <                bar=progbar(long)
186 <                #Fill event by event:
187 <                for entry in range(0,nEntries):
188 <                    if entry % step == 0:
189 <                        bar.move()
190 <                    #load entry
191 <                    tree.GetEntry(entry)
192 <                    for systematic in systematics:
193 <                        for j in range(len( MVA_Vars['Nominal'])):
194 <                            MVA_var_buffer[j][0] = MVA_formulas[systematic][j].EvalInstance()
195 <                            
196 <                        for j in range(0,len(readers)):
197 <                            MVAbranches[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
198 <                            
199 <                        for j in range(len( MVA_Vars['Nominal'])):
200 <                            MVA_var_buffer[j][0] = MVA_formulas4[systematic][j].EvalInstance()
89 >
90 > samples = info.get_samples(namelist)
91 > print(samples)
92 > for job in samples:
93 >    #get trees:
94 >    print(INpath+'/'+job.prefix+job.identifier+'.root')
95 >    input = ROOT.TFile.Open(INpath+'/'+job.prefix+job.identifier+'.root','read')
96 >    print(OUTpath+'/'+job.prefix+job.identifier+'.root')
97 >    outfile = ROOT.TFile.Open(OUTpath+'/'+job.prefix+job.identifier+'.root','recreate')
98 >    input.cd()
99 >    obj = ROOT.TObject
100 >    for key in ROOT.gDirectory.GetListOfKeys():
101 >        input.cd()
102 >        obj = key.ReadObj()
103 >        #print obj.GetName()
104 >        if obj.GetName() == job.tree:
105 >            continue
106 >        outfile.cd()
107 >        #print key.GetName()
108 >        obj.Write(key.GetName())
109 >    tree = input.Get(job.tree)
110 >    nEntries = tree.GetEntries()
111 >    outfile.cd()
112 >    newtree = tree.CloneTree(0)
113 >            
114 >    #Set branch adress for all vars
115 >    for i in range(0,len(theMVAs)):
116 >        theMVAs[i].setVariables(tree,job)
117 >    outfile.cd()
118 >    #Setup Branches
119 >    mvaVals=[]
120 >    for i in range(0,len(theMVAs)):
121 >        if job.type == 'Data':
122 >            mvaVals.append(array('f',[0]))
123 >            newtree.Branch(MVAinfos[i].MVAname,mvaVals[i],'nominal/F')
124 >        else:
125 >            mvaVals.append(array('f',[0]*11))
126 >            newtree.Branch(theMVAs[i].MVAname,mvaVals[i],'nominal:JER_up:JER_down:JES_up:JES_down:beff_up:beff_down:bmis_up:bmis_down:beff1_up:beff1_down/F')
127 >        MVA_formulas_Nominal = []
128 >        print('\n--> ' + job.name +':')
129 >    #Fill event by event:
130 >    for entry in range(0,nEntries):
131 >        tree.GetEntry(entry)
132                              
133 <                        for j in range(0,len(readers)):
134 <                            MVAbranches4[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
135 <                    #Fill:
136 <                    newtree.Fill()
137 <                newtree.AutoSave()
138 <                outfile.Close()
133 >        for i in range(0,len(theMVAs)):
134 >            theMVAs[i].evaluate(mvaVals[i],job)
135 >        #Fill:
136 >        newtree.Fill()
137 >    newtree.AutoSave()
138 >    outfile.Close()
139                  
140 <            #DATA:
210 <            if job.type == 'DATA':
211 <                #MVA Formulas
212 <                MVA_formulas_Nominal = []
213 <                #create TTreeFormulas
214 <                for j in range(len( MVA_Vars['Nominal'])):
215 <                    MVA_formulas_Nominal.append(ROOT.TTreeFormula("MVA_formula%s_Nominal"%j, MVA_Vars['Nominal'][j],tree))
216 <                outfile.cd()
217 <                MVAbranches=[]
218 <                for i in range(0,len(readers)):
219 <                    MVAbranches.append(array('f',[0]))
220 <                    newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal/F')
221 <                    newtree.Branch(MVAinfos[i].MVAname+'_4',MVAbranches[i],'nominal/F')
222 <                #progbar          
223 <                print '\n--> ' + job.name +':'
224 <                if nEntries >= longe:
225 <                    step=int(nEntries/longe)
226 <                    long=longe
227 <                else:
228 <                    long=nEntries
229 <                    step = 1
230 <                bar=progbar(long)
231 <                #Fill event by event:
232 <                for entry in range(0,nEntries):
233 <                    if entry % step == 0:
234 <                        bar.move()
235 <                    #load entry
236 <                    tree.GetEntry(entry)
237 <                    #nominal:
238 <                    for j in range(len( MVA_Vars['Nominal'])):
239 <                            MVA_var_buffer[j][0] = MVA_formulas_Nominal[j].EvalInstance()
240 <                            
241 <                    for j in range(0,len(readers)):
242 <                        MVAbranches[j][0]= readers[j].EvaluateMVA(MVAinfos[j].MVAname)
243 <                    newtree.Fill()
244 <                newtree.AutoSave()
245 <                outfile.Close()
246 <
247 < print '\n'
248 <
249 < #Update Info:
250 < if doinfo:
251 <    for job in Ainfo:        
252 <        for MVAinfo in MVAinfos:
253 <            job.addcomment('Added MVA %s'%MVAinfo.MVAname)
254 <        job.addpath(MVAdir)
255 <    infofile = open(Apath+MVAdir+'/samples.info','w')
256 <    pickle.dump(Ainfo,infofile)
257 <    infofile.close()
258 <
259 <
140 > print('\n')

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines