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.16 by nmohr, Thu Oct 18 14:02:33 2012 UTC vs.
Revision 1.25 by bortigno, Tue Feb 19 18:03: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()
40 #config.read('./config7TeV_ZZ')
39   config.read(opts.config)
40   anaTag = config.get("Analysis","tag")
41  
42   #get locations:
43   Wdir=config.get('Directories','Wdir')
46 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  
53 #TreeVar Array
54 #MVA_Vars={}
55 #for systematic in systematics:
56 #    MVA_Vars[systematic]=config.get('treeVars',systematic)
57 #    MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
58
59 ######################
60 #Evaluate multi: Must Have same treeVars!!!
61
62 Apath=opts.path
63 infofile = open(samplesinfo,'r')
64 info = pickle.load(infofile)
65 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(',')
74 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
80 #MVAnames=[]
81 #for MVA in MVAlist:
82 #    print MVA
83 #    MVAnames.append(config.get(MVA,'MVAname'))
84 #print Wdir+'/weights/'+factoryname+'_'+MVAname+'.info'
85 #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      
92 treeVarSet=MVAinfos[0].varset
93 #variables
94 #TreeVar Array
95 MVA_Vars={}
96 for systematic in systematics:
97    MVA_Vars[systematic]=config.get(treeVarSet,systematic)
98    MVA_Vars[systematic]=MVA_Vars[systematic].split(' ')
99 #Spectators:
100 #spectators=config.get(treeVarSet,'spectators')
101 #spectators=spectators.split(' ')
102 #progbar quatsch
77   longe=40
78   #Workdir
79   workdir=ROOT.gDirectory.GetPath()
106 #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
114 < MVA_var_buffer = []
115 < MVA_var_buffer4 = []
116 < for i in range(len( MVA_Vars['Nominal'])):
117 <    MVA_var_buffer.append(array( 'f', [ 0 ] ))
118 <    for reader in readers:
119 <        reader.AddVariable( MVA_Vars['Nominal'][i],MVA_var_buffer[i])
120 < #MVA_spectator_buffer = []
121 < #for i in range(len(spectators)):
122 < #    MVA_spectator_buffer.append(array( 'f', [ 0 ] ))
123 < #    for reader in readers:
124 < #        reader.AddSpectator(spectators[i],MVA_spectator_buffer[i])
125 < #Load raeder
126 < for i in range(0,len(readers)):
127 <    readers[i].BookMVA(MVAinfos[i].MVAname,MVAdir+'/data/'+MVAinfos[i].getweightfile())
128 < #--> Now the MVA is booked
129 <
130 < #Apply samples
131 < infofile = open(samplesinfo,'r')
132 < Ainfo = pickle.load(infofile)
133 < 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]*11))
129 <                    MVAbranches4.append(array('f',[0]*11))
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:beff1_up:beff1_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:beff1_up:beff1_down/F')
132 <                print '\n--> ' + job.name +':'
180 <                #progbar setup
181 <                if nEntries >= longe:
182 <                    step=int(nEntries/longe)
183 <                    long=longe
184 <                else:
185 <                    long=nEntries
186 <                    step = 1
187 <                bar=progbar(long)
188 <                #Fill event by event:
189 <                for entry in range(0,nEntries):
190 <                    if entry % step == 0:
191 <                        bar.move()
192 <                    #load entry
193 <                    tree.GetEntry(entry)
194 <                    for systematic in systematics:
195 <                        for j in range(len( MVA_Vars['Nominal'])):
196 <                            MVA_var_buffer[j][0] = MVA_formulas[systematic][j].EvalInstance()
197 <                            
198 <                        for j in range(0,len(readers)):
199 <                            MVAbranches[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
200 <                            
201 <                        for j in range(len( MVA_Vars['Nominal'])):
202 <                            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.CopyTree() #hard skim to get faster
113 >    input.Close()
114 >            
115 >    #Set branch adress for all vars
116 >    for i in range(0,len(theMVAs)):
117 >        theMVAs[i].setVariables(newtree,job)
118 >    outfile.cd()
119 >    #Setup Branches
120 >    mvaVals=[]
121 >    for i in range(0,len(theMVAs)):
122 >        if job.type == 'Data':
123 >            mvaVals.append(array('f',[0]))
124 >            newtree.Branch(MVAinfos[i].MVAname,mvaVals[i],'nominal/F')
125 >        else:
126 >            mvaVals.append(array('f',[0]*11))
127 >            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')
128 >        MVA_formulas_Nominal = []
129 >        print('\n--> ' + job.name +':')
130 >    #Fill event by event:
131 >    for entry in range(0,nEntries):
132 >        newtree.GetEntry(entry)
133                              
134 <                        for j in range(0,len(readers)):
135 <                            MVAbranches4[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname)
136 <                    #Fill:
137 <                    newtree.Fill()
138 <                newtree.AutoSave()
139 <                outfile.Close()
134 >        for i in range(0,len(theMVAs)):
135 >            theMVAs[i].evaluate(mvaVals[i],job)
136 >        #Fill:
137 >        newtree.Fill()
138 >    newtree.AutoSave()
139 >    outfile.Close()
140                  
141 <            #DATA:
212 <            if job.type == 'DATA':
213 <                #MVA Formulas
214 <                MVA_formulas_Nominal = []
215 <                #create TTreeFormulas
216 <                for j in range(len( MVA_Vars['Nominal'])):
217 <                    MVA_formulas_Nominal.append(ROOT.TTreeFormula("MVA_formula%s_Nominal"%j, MVA_Vars['Nominal'][j],tree))
218 <                outfile.cd()
219 <                MVAbranches=[]
220 <                for i in range(0,len(readers)):
221 <                    MVAbranches.append(array('f',[0]))
222 <                    newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal/F')
223 <                    newtree.Branch(MVAinfos[i].MVAname+'_4',MVAbranches[i],'nominal/F')
224 <                #progbar          
225 <                print '\n--> ' + job.name +':'
226 <                if nEntries >= longe:
227 <                    step=int(nEntries/longe)
228 <                    long=longe
229 <                else:
230 <                    long=nEntries
231 <                    step = 1
232 <                bar=progbar(long)
233 <                #Fill event by event:
234 <                for entry in range(0,nEntries):
235 <                    if entry % step == 0:
236 <                        bar.move()
237 <                    #load entry
238 <                    tree.GetEntry(entry)
239 <                    #nominal:
240 <                    for j in range(len( MVA_Vars['Nominal'])):
241 <                            MVA_var_buffer[j][0] = MVA_formulas_Nominal[j].EvalInstance()
242 <                            
243 <                    for j in range(0,len(readers)):
244 <                        MVAbranches[j][0]= readers[j].EvaluateMVA(MVAinfos[j].MVAname)
245 <                    newtree.Fill()
246 <                newtree.AutoSave()
247 <                outfile.Close()
248 <
249 < print '\n'
250 <
251 < #Update Info:
252 < if doinfo:
253 <    for job in Ainfo:        
254 <        for MVAinfo in MVAinfos:
255 <            job.addcomment('Added MVA %s'%MVAinfo.MVAname)
256 <        job.addpath(MVAdir)
257 <    infofile = open(samplesinfo,'w')
258 <    pickle.dump(Ainfo,infofile)
259 <    infofile.close()
260 <
261 <
141 > print('\n')

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines