ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/train.py
Revision: 1.3
Committed: Wed May 9 15:25:28 2012 UTC (13 years ago) by peller
Content type: text/x-python
Branch: MAIN
Changes since 1.2: +4 -4 lines
Log Message:
added steps to run

File Contents

# User Rev Content
1 peller 1.1 #!/usr/bin/env python
2     from samplesinfo import sample
3     from printcolor import printc
4     import pickle
5     import ROOT
6     from ROOT import TFile, TTree
7     import ROOT
8     from array import array
9     from ConfigParser import SafeConfigParser
10     import sys
11     from mvainfos import mvainfo
12    
13     #warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' )
14    
15    
16     #usage: ./train run gui
17    
18    
19     #CONFIGURE
20    
21     #load config
22     config = SafeConfigParser()
23     config.read('./config')
24    
25     #get locations:
26     Wdir=config.get('Directories','Wdir')
27    
28    
29     #systematics
30     systematics=config.get('systematics','systematics')
31     systematics=systematics.split(' ')
32    
33     weightF=config.get('Weights','weightF')
34    
35    
36     def getTree(job,cut):
37     Tree = ROOT.TChain(job.tree)
38     Tree.Add(job.getpath())
39     #Tree.SetDirectory(0)
40     CuttedTree=Tree.CopyTree(cut)
41     CuttedTree.SetDirectory(0)
42     print '\t--> read in %s'%job.name
43     return CuttedTree
44    
45    
46    
47     def getScale(job):
48     input = TFile.Open(job.getpath())
49     CountWithPU = input.Get("CountWithPU")
50     CountWithPU2011B = input.Get("CountWithPU2011B")
51     #print lumi*xsecs[i]/hist.GetBinContent(1)
52 peller 1.2 return float(job.lumi)*float(job.xsec)*float(job.sf)/(0.46502*CountWithPU.GetBinContent(1)+0.53498*CountWithPU2011B.GetBinContent(1))*2/float(job.split)
53 peller 1.1
54    
55    
56    
57     run=sys.argv[1]
58     gui=sys.argv[2]
59    
60    
61     #CONFIG
62     #factory
63     factoryname=config.get('factory','factoryname')
64     factorysettings=config.get('factory','factorysettings')
65     #MVA
66     MVAtype=config.get(run,'MVAtype')
67     MVAname=run
68     MVAsettings=config.get(run,'MVAsettings')
69     fnameOutput = Wdir +'/weights/'+factoryname+'_'+MVAname+'.root'
70     #locations
71     path=config.get(run,'path')
72    
73     TCutname=config.get(run, 'treeCut')
74     TCut=config.get('Cuts',TCutname)
75 peller 1.3 #print TCut
76 peller 1.1
77     #signals
78     signals=config.get(run,'signals')
79     signals=signals.split(' ')
80     #backgrounds
81     backgrounds=config.get(run,'backgrounds')
82     backgrounds=backgrounds.split(' ')
83    
84     treeVarSet=config.get(run,'treeVarSet')
85    
86     #variables
87     #TreeVar Array
88     MVA_Vars={}
89     MVA_Vars['Nominal']=config.get(treeVarSet,'Nominal')
90     MVA_Vars['Nominal']=MVA_Vars['Nominal'].split(' ')
91     #Spectators:
92 peller 1.3 #spectators=config.get(treeVarSet,'spectators')
93     #spectators=spectators.split(' ')
94 peller 1.1
95     #TRAINING samples
96     infofile = open(path+'/samples.info','r')
97     info = pickle.load(infofile)
98     infofile.close()
99    
100     #Workdir
101     workdir=ROOT.gDirectory.GetPath()
102    
103    
104     TrainCut='%s && EventForTraining==1'%TCut
105     EvalCut='%s && EventForTraining==0'%TCut
106    
107     #load TRAIN trees
108     Tbackgrounds = []
109     TbScales = []
110     Tsignals = []
111     TsScales = []
112    
113     for job in info:
114     if job.name in signals:
115     Tsignal = getTree(job,TrainCut)
116     ROOT.gDirectory.Cd(workdir)
117     TsScale = getScale(job)
118     Tsignals.append(Tsignal)
119     TsScales.append(TsScale)
120    
121     if job.name in backgrounds:
122     Tbackground = getTree(job,TrainCut)
123     ROOT.gDirectory.Cd(workdir)
124     TbScale = getScale(job)
125     Tbackgrounds.append(Tbackground)
126     TbScales.append(TbScale)
127    
128     #load EVALUATE trees
129     Ebackgrounds = []
130     EbScales = []
131     Esignals = []
132     EsScales = []
133    
134     for job in info:
135     if job.name in signals:
136     Esignal = getTree(job,EvalCut)
137     ROOT.gDirectory.Cd(workdir)
138     EsScale = getScale(job)
139     Esignals.append(Esignal)
140     EsScales.append(EsScale)
141    
142     if job.name in backgrounds:
143     Ebackground = getTree(job,EvalCut)
144     ROOT.gDirectory.Cd(workdir)
145     EbScale = getScale(job)
146     Ebackgrounds.append(Ebackground)
147     EbScales.append(EbScale)
148    
149     output = ROOT.TFile.Open(fnameOutput, "RECREATE")
150     factory = ROOT.TMVA.Factory(factoryname, output, factorysettings)
151    
152     #set input trees
153     for i in range(len(Tsignals)):
154    
155     factory.AddSignalTree(Tsignals[i], TsScales[i], ROOT.TMVA.Types.kTraining)
156     factory.AddSignalTree(Esignals[i], EsScales[i], ROOT.TMVA.Types.kTesting)
157    
158     for i in range(len(Tbackgrounds)):
159     if (Tbackgrounds[i].GetEntries()>0):
160     factory.AddBackgroundTree(Tbackgrounds[i], TbScales[i], ROOT.TMVA.Types.kTraining)
161    
162     if (Ebackgrounds[i].GetEntries()>0):
163     factory.AddBackgroundTree(Ebackgrounds[i], EbScales[i], ROOT.TMVA.Types.kTesting)
164    
165    
166     for var in MVA_Vars['Nominal']:
167     factory.AddVariable(var,'D') # add the variables
168     #for var in spectators:
169     # factory.AddSpectator(var,'D') #add specators
170    
171     #Execute TMVA
172     factory.SetSignalWeightExpression(weightF)
173     factory.Verbose()
174     factory.BookMethod(MVAtype,MVAname,MVAsettings)
175     factory.TrainAllMethods()
176     factory.TestAllMethods()
177     factory.EvaluateAllMethods()
178     output.Write()
179    
180     #WRITE INFOFILE
181     infofile = open(Wdir+'/weights/'+factoryname+'_'+MVAname+'.info','w')
182     info=mvainfo(MVAname)
183     info.factoryname=factoryname
184     info.factorysettings=factorysettings
185     info.MVAtype=MVAtype
186     info.MVAsettings=MVAsettings
187     info.weightfilepath=Wdir+'/weights'
188     info.path=path
189     info.varset=treeVarSet
190     info.vars=MVA_Vars['Nominal']
191 peller 1.3 #info.spectators=spectators
192 peller 1.1 pickle.dump(info,infofile)
193     infofile.close()
194    
195     # open the TMVA Gui
196     if gui == 'gui':
197     ROOT.gROOT.ProcessLine( ".L TMVAGui.C")
198     ROOT.gROOT.ProcessLine( "TMVAGui(\"%s\")" % fnameOutput )
199     ROOT.gApplication.Run()
200    
201