2 |
|
import sys |
3 |
|
import os |
4 |
|
import ROOT |
5 |
– |
from ROOT import TFile |
5 |
|
from array import array |
6 |
|
from math import sqrt |
7 |
|
from copy import copy |
10 |
|
warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' ) |
11 |
|
from optparse import OptionParser |
12 |
|
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 |
|
|
15 |
|
#CONFIGURE |
16 |
+ |
ROOT.gROOT.SetBatch(True) |
17 |
|
print 'hello' |
18 |
|
#load config |
19 |
|
#os.mkdir(path+'/sys') |
32 |
|
parser.add_option("-C", "--config", dest="config", default=[], action="append", |
33 |
|
help="configuration file") |
34 |
|
(opts, args) = parser.parse_args(argv) |
35 |
+ |
|
36 |
+ |
from samplesclass import sample |
37 |
+ |
from mvainfos import mvainfo |
38 |
+ |
from progbar import progbar |
39 |
+ |
from printcolor import printc |
40 |
+ |
|
41 |
|
if opts.config =="": |
42 |
|
opts.config = "config" |
43 |
|
config = BetterConfigParser() |
51 |
|
samplesinfo=config.get('Directories','samplesinfo') |
52 |
|
|
53 |
|
#systematics |
52 |
– |
systematics=config.get('systematics','systematics') |
53 |
– |
systematics=systematics.split(' ') |
54 |
– |
|
55 |
– |
#TreeVar Array |
56 |
– |
#MVA_Vars={} |
57 |
– |
#for systematic in systematics: |
58 |
– |
# MVA_Vars[systematic]=config.get('treeVars',systematic) |
59 |
– |
# MVA_Vars[systematic]=MVA_Vars[systematic].split(' ') |
54 |
|
|
61 |
– |
###################### |
62 |
– |
#Evaluate multi: Must Have same treeVars!!! |
55 |
|
|
64 |
– |
#OUTpath=opts.outpath |
65 |
– |
#INpath=opts.inpath |
56 |
|
INpath = config.get('Directories','MVAin') |
57 |
|
OUTpath = config.get('Directories','MVAout') |
58 |
|
|
67 |
|
doinfo=bool(int(opts.update)) |
68 |
|
|
69 |
|
MVAlist=arglist.split(',') |
70 |
< |
MVAdir=config.get('Directories','vhbbpath') |
70 |
> |
|
71 |
|
|
72 |
|
#CONFIG |
73 |
|
#factory |
74 |
|
factoryname=config.get('factory','factoryname') |
75 |
+ |
|
76 |
+ |
#load the namespace |
77 |
+ |
VHbbNameSpace=config.get('VHbbNameSpace','library') |
78 |
+ |
ROOT.gSystem.Load(VHbbNameSpace) |
79 |
+ |
|
80 |
|
#MVA |
86 |
– |
#MVAnames=[] |
87 |
– |
#for MVA in MVAlist: |
88 |
– |
# print MVA |
89 |
– |
# MVAnames.append(config.get(MVA,'MVAname')) |
90 |
– |
#print Wdir+'/weights/'+factoryname+'_'+MVAname+'.info' |
91 |
– |
#MVAinfofiles=[] |
81 |
|
MVAinfos=[] |
82 |
+ |
MVAdir=config.get('Directories','vhbbpath') |
83 |
|
for MVAname in MVAlist: |
84 |
|
MVAinfofile = open(MVAdir+'/data/'+factoryname+'_'+MVAname+'.info','r') |
85 |
|
MVAinfos.append(pickle.load(MVAinfofile)) |
86 |
|
MVAinfofile.close() |
87 |
|
|
98 |
– |
treeVarSet=MVAinfos[0].varset |
99 |
– |
#variables |
100 |
– |
#TreeVar Array |
101 |
– |
MVA_Vars={} |
102 |
– |
for systematic in systematics: |
103 |
– |
MVA_Vars[systematic]=config.get(treeVarSet,systematic) |
104 |
– |
MVA_Vars[systematic]=MVA_Vars[systematic].split(' ') |
105 |
– |
#Spectators: |
106 |
– |
#spectators=config.get(treeVarSet,'spectators') |
107 |
– |
#spectators=spectators.split(' ') |
108 |
– |
#progbar quatsch |
88 |
|
longe=40 |
89 |
|
#Workdir |
90 |
|
workdir=ROOT.gDirectory.GetPath() |
112 |
– |
#os.mkdir(Apath+'/MVAout') |
91 |
|
|
114 |
– |
#Book TMVA readers: MVAlist=["MMCC_bla","CC5050_bla"] |
115 |
– |
readers=[] |
116 |
– |
for MVA in MVAlist: |
117 |
– |
readers.append(ROOT.TMVA.Reader("!Color:!Silent")) |
118 |
– |
|
119 |
– |
#define variables and specatators |
120 |
– |
MVA_var_buffer = [] |
121 |
– |
MVA_var_buffer4 = [] |
122 |
– |
for i in range(len( MVA_Vars['Nominal'])): |
123 |
– |
MVA_var_buffer.append(array( 'f', [ 0 ] )) |
124 |
– |
for reader in readers: |
125 |
– |
reader.AddVariable( MVA_Vars['Nominal'][i],MVA_var_buffer[i]) |
126 |
– |
#MVA_spectator_buffer = [] |
127 |
– |
#for i in range(len(spectators)): |
128 |
– |
# MVA_spectator_buffer.append(array( 'f', [ 0 ] )) |
129 |
– |
# for reader in readers: |
130 |
– |
# reader.AddSpectator(spectators[i],MVA_spectator_buffer[i]) |
131 |
– |
#Load raeder |
132 |
– |
for i in range(0,len(readers)): |
133 |
– |
readers[i].BookMVA(MVAinfos[i].MVAname,MVAdir+'/data/'+MVAinfos[i].getweightfile()) |
134 |
– |
#--> Now the MVA is booked |
92 |
|
|
93 |
|
#Apply samples |
94 |
|
infofile = open(samplesinfo,'r') |
95 |
|
Ainfo = pickle.load(infofile) |
96 |
|
infofile.close() |
97 |
|
|
98 |
+ |
|
99 |
+ |
class MvaEvaluater: |
100 |
+ |
def __init__(self, config, MVAinfo): |
101 |
+ |
self.varset = MVAinfo.varset |
102 |
+ |
#Define reader |
103 |
+ |
self.reader = ROOT.TMVA.Reader("!Color:!Silent") |
104 |
+ |
MVAdir=config.get('Directories','vhbbpath') |
105 |
+ |
self.systematics=config.get('systematics','systematics').split(' ') |
106 |
+ |
self.MVA_Vars={} |
107 |
+ |
self.MVAname = MVAinfo.MVAname |
108 |
+ |
for systematic in self.systematics: |
109 |
+ |
self.MVA_Vars[systematic]=config.get(self.varset,systematic) |
110 |
+ |
self.MVA_Vars[systematic]=self.MVA_Vars[systematic].split(' ') |
111 |
+ |
#define variables and specatators |
112 |
+ |
self.MVA_var_buffer = [] |
113 |
+ |
for i in range(len( self.MVA_Vars['Nominal'])): |
114 |
+ |
self.MVA_var_buffer.append(array( 'f', [ 0 ] )) |
115 |
+ |
self.reader.AddVariable( self.MVA_Vars['Nominal'][i],self.MVA_var_buffer[i]) |
116 |
+ |
self.reader.BookMVA(MVAinfo.MVAname,MVAdir+'/data/'+MVAinfo.getweightfile()) |
117 |
+ |
#--> Now the MVA is booked |
118 |
+ |
|
119 |
+ |
def setBranches(self,tree,job): |
120 |
+ |
#Set formulas for all vars |
121 |
+ |
self.MVA_formulas={} |
122 |
+ |
for systematic in self.systematics: |
123 |
+ |
if job.type == 'DATA' and not systematic == 'Nominal': continue |
124 |
+ |
self.MVA_formulas[systematic]=[] |
125 |
+ |
for j in range(len( self.MVA_Vars['Nominal'])): |
126 |
+ |
self.MVA_formulas[systematic].append(ROOT.TTreeFormula("MVA_formula%s_%s"%(j,systematic),self.MVA_Vars[systematic][j],tree)) |
127 |
+ |
|
128 |
+ |
def evaluate(self,MVAbranches,job): |
129 |
+ |
#Evaluate all vars and fill the branches |
130 |
+ |
for systematic in self.systematics: |
131 |
+ |
for j in range(len( self.MVA_Vars['Nominal'])): |
132 |
+ |
if job.type == 'DATA' and not systematic == 'Nominal': continue |
133 |
+ |
self.MVA_var_buffer[j][0] = self.MVA_formulas[systematic][j].EvalInstance() |
134 |
+ |
MVAbranches[self.systematics.index(systematic)] = self.reader.EvaluateMVA(self.MVAname) |
135 |
+ |
|
136 |
+ |
|
137 |
+ |
theMVAs = [] |
138 |
+ |
for mva in MVAinfos: |
139 |
+ |
theMVAs.append(MvaEvaluater(config,mva)) |
140 |
+ |
|
141 |
+ |
|
142 |
|
#eval |
143 |
|
for job in Ainfo: |
144 |
|
if eval(job.active): |
145 |
|
if job.name in namelist: |
146 |
|
#get trees: |
147 |
|
print INpath+'/'+job.prefix+job.identifier+'.root' |
148 |
< |
input = TFile.Open(INpath+'/'+job.prefix+job.identifier+'.root','read') |
148 |
> |
input = ROOT.TFile.Open(INpath+'/'+job.prefix+job.identifier+'.root','read') |
149 |
|
print OUTpath+'/'+job.prefix+job.identifier+'.root' |
150 |
< |
outfile = TFile.Open(OUTpath+'/'+job.prefix+job.identifier+'.root','recreate') |
150 |
> |
outfile = ROOT.TFile.Open(OUTpath+'/'+job.prefix+job.identifier+'.root','recreate') |
151 |
|
input.cd() |
152 |
|
obj = ROOT.TObject |
153 |
|
for key in ROOT.gDirectory.GetListOfKeys(): |
163 |
|
nEntries = tree.GetEntries() |
164 |
|
outfile.cd() |
165 |
|
newtree = tree.CloneTree(0) |
166 |
< |
#input.Close() |
166 |
> |
|
167 |
|
|
168 |
< |
#MCs: |
169 |
< |
if job.type != 'DATA': |
170 |
< |
MVA_formulas={} |
171 |
< |
MVA_formulas4={} |
172 |
< |
for systematic in systematics: |
173 |
< |
#print '\t\t - ' + systematic |
174 |
< |
MVA_formulas[systematic]=[] |
175 |
< |
MVA_formulas4[systematic]=[] |
175 |
< |
#create TTreeFormulas |
176 |
< |
for j in range(len( MVA_Vars['Nominal'])): |
177 |
< |
MVA_formulas[systematic].append(ROOT.TTreeFormula("MVA_formula%s_%s"%(j,systematic),MVA_Vars[systematic][j],tree)) |
178 |
< |
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 |
179 |
< |
outfile.cd() |
180 |
< |
#Setup Branches |
181 |
< |
MVAbranches=[] |
182 |
< |
MVAbranches4=[] |
183 |
< |
for i in range(0,len(readers)): |
184 |
< |
MVAbranches.append(array('f',[0]*11)) |
185 |
< |
MVAbranches4.append(array('f',[0]*11)) |
186 |
< |
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') |
187 |
< |
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') |
188 |
< |
print '\n--> ' + job.name +':' |
189 |
< |
#progbar setup |
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 |
< |
for systematic in systematics: |
204 |
< |
for j in range(len( MVA_Vars['Nominal'])): |
205 |
< |
MVA_var_buffer[j][0] = MVA_formulas[systematic][j].EvalInstance() |
206 |
< |
|
207 |
< |
for j in range(0,len(readers)): |
208 |
< |
MVAbranches[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname) |
209 |
< |
|
210 |
< |
for j in range(len( MVA_Vars['Nominal'])): |
211 |
< |
MVA_var_buffer[j][0] = MVA_formulas4[systematic][j].EvalInstance() |
212 |
< |
|
213 |
< |
for j in range(0,len(readers)): |
214 |
< |
MVAbranches4[j][systematics.index(systematic)] = readers[j].EvaluateMVA(MVAinfos[j].MVAname) |
215 |
< |
#Fill: |
216 |
< |
newtree.Fill() |
217 |
< |
newtree.AutoSave() |
218 |
< |
outfile.Close() |
219 |
< |
|
220 |
< |
#DATA: |
221 |
< |
if job.type == 'DATA': |
222 |
< |
#MVA Formulas |
223 |
< |
MVA_formulas_Nominal = [] |
224 |
< |
#create TTreeFormulas |
225 |
< |
for j in range(len( MVA_Vars['Nominal'])): |
226 |
< |
MVA_formulas_Nominal.append(ROOT.TTreeFormula("MVA_formula%s_Nominal"%j, MVA_Vars['Nominal'][j],tree)) |
227 |
< |
outfile.cd() |
228 |
< |
MVAbranches=[] |
229 |
< |
for i in range(0,len(readers)): |
168 |
> |
#Set branch adress for all vars |
169 |
> |
for i in range(0,len(theMVAs)): |
170 |
> |
theMVAs[i].setBranches(tree,job) |
171 |
> |
outfile.cd() |
172 |
> |
#Setup Branches |
173 |
> |
MVAbranches=[] |
174 |
> |
for i in range(0,len(theMVAs)): |
175 |
> |
if job.type == 'Data': |
176 |
|
MVAbranches.append(array('f',[0])) |
177 |
|
newtree.Branch(MVAinfos[i].MVAname,MVAbranches[i],'nominal/F') |
232 |
– |
newtree.Branch(MVAinfos[i].MVAname+'_4',MVAbranches[i],'nominal/F') |
233 |
– |
#progbar |
234 |
– |
print '\n--> ' + job.name +':' |
235 |
– |
if nEntries >= longe: |
236 |
– |
step=int(nEntries/longe) |
237 |
– |
long=longe |
178 |
|
else: |
179 |
< |
long=nEntries |
180 |
< |
step = 1 |
181 |
< |
bar=progbar(long) |
182 |
< |
#Fill event by event: |
183 |
< |
for entry in range(0,nEntries): |
184 |
< |
if entry % step == 0: |
185 |
< |
bar.move() |
186 |
< |
#load entry |
187 |
< |
tree.GetEntry(entry) |
188 |
< |
#nominal: |
189 |
< |
for j in range(len( MVA_Vars['Nominal'])): |
190 |
< |
MVA_var_buffer[j][0] = MVA_formulas_Nominal[j].EvalInstance() |
179 |
> |
MVAbranches.append(array('f',[0]*11)) |
180 |
> |
newtree.Branch(theMVAs[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') |
181 |
> |
MVA_formulas_Nominal = [] |
182 |
> |
print '\n--> ' + job.name +':' |
183 |
> |
#progbar setup |
184 |
> |
if nEntries >= longe: |
185 |
> |
step=int(nEntries/longe) |
186 |
> |
long=longe |
187 |
> |
else: |
188 |
> |
long=nEntries |
189 |
> |
step = 1 |
190 |
> |
bar=progbar(long) |
191 |
> |
#Fill event by event: |
192 |
> |
for entry in range(0,nEntries): |
193 |
> |
if entry % step == 0: |
194 |
> |
bar.move() |
195 |
> |
#load entry |
196 |
> |
tree.GetEntry(entry) |
197 |
|
|
198 |
< |
for j in range(0,len(readers)): |
199 |
< |
MVAbranches[j][0]= readers[j].EvaluateMVA(MVAinfos[j].MVAname) |
200 |
< |
newtree.Fill() |
201 |
< |
newtree.AutoSave() |
202 |
< |
outfile.Close() |
203 |
< |
|
198 |
> |
for i in range(0,len(theMVAs)): |
199 |
> |
theMVAs[i].evaluate(MVAbranches[i],job) |
200 |
> |
#Fill: |
201 |
> |
newtree.Fill() |
202 |
> |
newtree.AutoSave() |
203 |
> |
outfile.Close() |
204 |
> |
|
205 |
|
print '\n' |
206 |
|
|
207 |
|
#Update Info: |