ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/evaluateMVA.py
Revision: 1.23
Committed: Fri Feb 1 10:47:38 2013 UTC (12 years, 3 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.22: +9 -52 lines
Log Message:
Move MvaEvaluater in separate class

File Contents

# Content
1 #!/usr/bin/env python
2 from __future__ import print_function
3 import sys
4 import os
5 import ROOT
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 import pickle
14
15 #CONFIGURE
16 ROOT.gROOT.SetBatch(True)
17 print('hello')
18 #load config
19 argv = sys.argv
20 parser = OptionParser()
21 parser.add_option("-U", "--update", dest="update", default=0,
22 help="update infofile")
23 parser.add_option("-D", "--discr", dest="discr", default="",
24 help="discriminators to be added")
25 parser.add_option("-S", "--samples", dest="names", default="",
26 help="samples you want to run on")
27 parser.add_option("-C", "--config", dest="config", default=[], action="append",
28 help="configuration file")
29 (opts, args) = parser.parse_args(argv)
30
31 if opts.config =="":
32 opts.config = "config"
33
34 #Import after configure to get help message
35 from myutils import BetterConfigParser, progbar, printc, ParseInfo, MvaEvaluator
36
37 config = BetterConfigParser()
38 config.read(opts.config)
39 anaTag = config.get("Analysis","tag")
40
41 #get locations:
42 Wdir=config.get('Directories','Wdir')
43 samplesinfo=config.get('Directories','samplesinfo')
44
45 #systematics
46 INpath = config.get('Directories','MVAin')
47 OUTpath = config.get('Directories','MVAout')
48
49 info = ParseInfo(samplesinfo,INpath)
50
51 arglist=opts.discr #RTight_blavla,bsbsb
52
53 namelistIN=opts.names
54 namelist=namelistIN.split(',')
55
56 #doinfo=bool(int(opts.update))
57
58 MVAlist=arglist.split(',')
59
60 #CONFIG
61 #factory
62 factoryname=config.get('factory','factoryname')
63
64 #load the namespace
65 VHbbNameSpace=config.get('VHbbNameSpace','library')
66 ROOT.gSystem.Load(VHbbNameSpace)
67
68 #MVA
69 MVAinfos=[]
70 MVAdir=config.get('Directories','vhbbpath')
71 for MVAname in MVAlist:
72 MVAinfofile = open(MVAdir+'/data/'+factoryname+'_'+MVAname+'.info','r')
73 MVAinfos.append(pickle.load(MVAinfofile))
74 MVAinfofile.close()
75
76 longe=40
77 #Workdir
78 workdir=ROOT.gDirectory.GetPath()
79
80
81
82 theMVAs = []
83 for mva in MVAinfos:
84 theMVAs.append(MvaEvaluator(config,mva))
85
86
87 #eval
88
89 samples = info.get_samples(namelist)
90 for job in samples:
91 #get trees:
92 print(INpath+'/'+job.prefix+job.identifier+'.root')
93 input = ROOT.TFile.Open(INpath+'/'+job.prefix+job.identifier+'.root','read')
94 print(OUTpath+'/'+job.prefix+job.identifier+'.root')
95 outfile = ROOT.TFile.Open(OUTpath+'/'+job.prefix+job.identifier+'.root','recreate')
96 input.cd()
97 obj = ROOT.TObject
98 for key in ROOT.gDirectory.GetListOfKeys():
99 input.cd()
100 obj = key.ReadObj()
101 #print obj.GetName()
102 if obj.GetName() == job.tree:
103 continue
104 outfile.cd()
105 #print key.GetName()
106 obj.Write(key.GetName())
107 tree = input.Get(job.tree)
108 nEntries = tree.GetEntries()
109 outfile.cd()
110 newtree = tree.CloneTree(0)
111
112 #Set branch adress for all vars
113 for i in range(0,len(theMVAs)):
114 theMVAs[i].setVariables(tree,job)
115 outfile.cd()
116 #Setup Branches
117 mvaVals=[]
118 for i in range(0,len(theMVAs)):
119 if job.type == 'Data':
120 mvaVals.append(array('f',[0]))
121 newtree.Branch(MVAinfos[i].MVAname,mvaVals[i],'nominal/F')
122 else:
123 mvaVals.append(array('f',[0]*11))
124 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')
125 MVA_formulas_Nominal = []
126 print('\n--> ' + job.name +':')
127 #progbar setup
128 if nEntries >= longe:
129 step=long(nEntries/longe)
130 long=longe
131 else:
132 long=nEntries
133 step = 1
134 bar=progbar(long)
135 #Fill event by event:
136 for entry in range(0,nEntries):
137 if entry % step == 0:
138 bar.move()
139 #load entry
140 tree.GetEntry(entry)
141
142 for i in range(0,len(theMVAs)):
143 theMVAs[i].evaluate(mvaVals[i],job)
144 #Fill:
145 newtree.Fill()
146 newtree.AutoSave()
147 outfile.Close()
148
149 print('\n')