ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/train.py
Revision: 1.20
Committed: Fri Feb 1 08:59:35 2013 UTC (12 years, 3 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
Changes since 1.19: +1 -1 lines
Log Message:
Persistent caching

File Contents

# User Rev Content
1 peller 1.1 #!/usr/bin/env python
2 nmohr 1.9 from optparse import OptionParser
3 peller 1.1 import sys
4 peller 1.16 import pickle
5     import ROOT
6 nmohr 1.19 ROOT.gROOT.SetBatch(True)
7 peller 1.16 from array import array
8 peller 1.1 #warnings.filterwarnings( action='ignore', category=RuntimeWarning, message='creating converter.*' )
9     #usage: ./train run gui
10    
11     #CONFIGURE
12 nmohr 1.9 argv = sys.argv
13     parser = OptionParser()
14     parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False,
15     help="Verbose mode.")
16     parser.add_option("-T", "--training", dest="training", default="",
17     help="Training")
18     parser.add_option("-C", "--config", dest="config", default=[], action="append",
19     help="configuration file")
20     (opts, args) = parser.parse_args(argv)
21     if opts.config =="":
22     opts.config = "config"
23 peller 1.1
24 nmohr 1.19 #Import after configure to get help message
25     from myutils import BetterConfigParser, mvainfo, ParseInfo, TreeCache
26    
27 peller 1.1 #load config
28 nmohr 1.6 config = BetterConfigParser()
29 nmohr 1.9 config.read(opts.config)
30     anaTag = config.get("Analysis","tag")
31     run=opts.training
32     gui=opts.verbose
33 peller 1.7
34     #GLOABAL rescale from Train/Test Spliiting:
35     global_rescale=2.
36 peller 1.1
37     #get locations:
38 nmohr 1.19 MVAdir=config.get('Directories','vhbbpath')+'/data/'
39 nmohr 1.13 samplesinfo=config.get('Directories','samplesinfo')
40 peller 1.1
41     #systematics
42     systematics=config.get('systematics','systematics')
43     systematics=systematics.split(' ')
44    
45     weightF=config.get('Weights','weightF')
46    
47 bortigno 1.14 VHbbNameSpace=config.get('VHbbNameSpace','library')
48     ROOT.gSystem.Load(VHbbNameSpace)
49 peller 1.7
50 peller 1.1 #CONFIG
51     #factory
52     factoryname=config.get('factory','factoryname')
53     factorysettings=config.get('factory','factorysettings')
54     #MVA
55     MVAtype=config.get(run,'MVAtype')
56     MVAname=run
57     MVAsettings=config.get(run,'MVAsettings')
58 nmohr 1.19 fnameOutput = MVAdir+factoryname+'_'+MVAname+'.root'
59 peller 1.1 #locations
60 nmohr 1.17 path=config.get('Directories','SYSout')
61 peller 1.1
62     TCutname=config.get(run, 'treeCut')
63     TCut=config.get('Cuts',TCutname)
64 peller 1.3 #print TCut
65 peller 1.1
66     #signals
67     signals=config.get(run,'signals')
68     signals=signals.split(' ')
69     #backgrounds
70     backgrounds=config.get(run,'backgrounds')
71     backgrounds=backgrounds.split(' ')
72    
73     treeVarSet=config.get(run,'treeVarSet')
74    
75     #variables
76     #TreeVar Array
77     MVA_Vars={}
78     MVA_Vars['Nominal']=config.get(treeVarSet,'Nominal')
79     MVA_Vars['Nominal']=MVA_Vars['Nominal'].split(' ')
80 bortigno 1.15
81 nmohr 1.19 #Infofile
82     info = ParseInfo(samplesinfo,path)
83 peller 1.1
84     #Workdir
85     workdir=ROOT.gDirectory.GetPath()
86    
87    
88 nmohr 1.9 TrainCut='%s & EventForTraining==1'%TCut
89     EvalCut='%s & EventForTraining==0'%TCut
90 nmohr 1.19 cuts = [TrainCut,EvalCut]
91 peller 1.1
92    
93 nmohr 1.19 samples = []
94     samples = info.get_samples(signals+backgrounds)
95 peller 1.7
96 nmohr 1.20 tc = TreeCache(cuts,samples,path,config)
97 peller 1.7
98     output = ROOT.TFile.Open(fnameOutput, "RECREATE")
99    
100 nmohr 1.19 print '\n\t>>> READING EVENTS <<<\n'
101    
102     signal_samples = info.get_samples(signals)
103     background_samples = info.get_samples(backgrounds)
104 peller 1.7
105 nmohr 1.19 #TRAIN trees
106     Tbackgrounds = []
107     TbScales = []
108     Tsignals = []
109     TsScales = []
110     #EVAL trees
111 peller 1.1 Ebackgrounds = []
112     EbScales = []
113     Esignals = []
114     EsScales = []
115    
116 nmohr 1.19 #load trees
117     for job in signal_samples:
118     print '\tREADING IN %s AS SIG'%job.name
119     Tsignal = tc.get_tree(job,TrainCut)
120     ROOT.gDirectory.Cd(workdir)
121     TsScale = tc.get_scale(job,config)*global_rescale
122     Tsignals.append(Tsignal)
123     TsScales.append(TsScale)
124     Esignal = tc.get_tree(job,EvalCut)
125     Esignals.append(Esignal)
126     EsScales.append(TsScale)
127     print '\t\t\tTraining %s events'%Tsignal.GetEntries()
128     print '\t\t\tEval %s events'%Esignal.GetEntries()
129     for job in background_samples:
130     print '\tREADING IN %s AS BKG'%job.name
131     Tbackground = tc.get_tree(job,TrainCut)
132     ROOT.gDirectory.Cd(workdir)
133     TbScale = tc.get_scale(job,config)*global_rescale
134     Tbackgrounds.append(Tbackground)
135     TbScales.append(TbScale)
136     Ebackground = tc.get_tree(job,EvalCut)
137     ROOT.gDirectory.Cd(workdir)
138     Ebackgrounds.append(Ebackground)
139     EbScales.append(TbScale)
140     print '\t\t\tTraining %s events'%Tbackground.GetEntries()
141     print '\t\t\tEval %s events'%Ebackground.GetEntries()
142    
143 peller 1.7
144 peller 1.1 factory = ROOT.TMVA.Factory(factoryname, output, factorysettings)
145    
146     #set input trees
147     for i in range(len(Tsignals)):
148     factory.AddSignalTree(Tsignals[i], TsScales[i], ROOT.TMVA.Types.kTraining)
149     factory.AddSignalTree(Esignals[i], EsScales[i], ROOT.TMVA.Types.kTesting)
150    
151     for i in range(len(Tbackgrounds)):
152     if (Tbackgrounds[i].GetEntries()>0):
153     factory.AddBackgroundTree(Tbackgrounds[i], TbScales[i], ROOT.TMVA.Types.kTraining)
154    
155     if (Ebackgrounds[i].GetEntries()>0):
156     factory.AddBackgroundTree(Ebackgrounds[i], EbScales[i], ROOT.TMVA.Types.kTesting)
157    
158     for var in MVA_Vars['Nominal']:
159     factory.AddVariable(var,'D') # add the variables
160    
161     #Execute TMVA
162     factory.SetSignalWeightExpression(weightF)
163 peller 1.12 factory.SetBackgroundWeightExpression(weightF)
164 peller 1.1 factory.Verbose()
165     factory.BookMethod(MVAtype,MVAname,MVAsettings)
166     factory.TrainAllMethods()
167     factory.TestAllMethods()
168     factory.EvaluateAllMethods()
169     output.Write()
170    
171     #WRITE INFOFILE
172 nmohr 1.19 infofile = open(MVAdir+factoryname+'_'+MVAname+'.info','w')
173 peller 1.1 info=mvainfo(MVAname)
174     info.factoryname=factoryname
175     info.factorysettings=factorysettings
176     info.MVAtype=MVAtype
177     info.MVAsettings=MVAsettings
178 nmohr 1.10 info.weightfilepath=MVAdir
179 peller 1.1 info.path=path
180     info.varset=treeVarSet
181     info.vars=MVA_Vars['Nominal']
182     pickle.dump(info,infofile)
183     infofile.close()
184    
185     # open the TMVA Gui
186 nmohr 1.9 if gui == True:
187 peller 1.16 ROOT.gROOT.ProcessLine( ".L myutils/TMVAGui.C")
188 peller 1.1 ROOT.gROOT.ProcessLine( "TMVAGui(\"%s\")" % fnameOutput )
189     ROOT.gApplication.Run()
190    
191