Using TMVA
Ostap hosts couple of classes, that simplifies the training and using of TMVA
.
Training TMVA
tSignal = ... ## signal TTree/TChain
tBkg = ... ## background TTree/TChain
## book TMVA trainer
from ostap.tools.tmva import Trainer
trainer = Trainer (
name = 'TestTMVA' ,
methods = [
# type name configuration
( ROOT.TMVA.Types.kMLP , 'MLP' , 'H:!V:EstimatorType=CE:VarTransform=N:NCycles=200:HiddenLayers=N+3:TestRate=5:!UseRegulator' ) ,
( ROOT.TMVA.Types.kBDT , 'BDTG' , 'H:!V:NTrees=100:MinNodeSize=2.5%:BoostType=Grad:Shrinkage=0.10:UseBaggedBoost:BaggedSampleFraction=0.5:nCuts=20:MaxDepth=2' ) ,
( ROOT.TMVA.Types.kCuts , 'Cuts' , 'H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart' ) ,
( ROOT.TMVA.Types.kFisher , 'Fisher' , 'H:!V:Fisher:VarTransform=None:CreateMVAPdfs:PDFInterpolMVAPdf=Spline2:NbinsMVAPdf=50:NsmoothMVAPdf=10' ),
( ROOT.TMVA.Types.kLikelihood , 'Likelihood' , 'H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50' )
] ,
variables = [ 'var1' , 'var2' , 'var3' ] , ## Variables to be used for training
signal = tSignal , ## ``Signal'' sample
background = tBkg , ## ``Background'' sample
verbose = False )
Optionally one can specify also signal_cuts
and background_cuts
.
Traing TMVA
itself is trivial, one needs to invoke the method train
:
weights_files = trainer.train ()
It returs the list/tuple of weight-XML
-files, the output of TMVA
trainer.
Optionally one can retrieve also the list of _C++-class
-files, using the proeprty class_files
or everything together in a form of tar
-file using the property
tar_file
:
weight_files = trainer.weight_files ## XML weights
class_files = trainer.class_files ## C++ classes
tar_file = trainer.tar_file ## everything together
Using TMVA
To use trained TMVA
one exploits TMVA
reader:
from ostap.tools.tmva import Reader
reader = Reader(
'MyMLP' ,
variables = [ ('var1' , lambda s : s.var1 ) ,
('var2' , lambda s : s.var2 ) ,
('var3' , lambda s : s.var3 ) ] ,
weights_files = tar_file )
What is lambda s : s.var1
here?Click to expand
As weight_files
arguments one can use either the list of weights-files from the trainer, or, much easier, use the single 'tar'-file from the trainer. The methods, available from the weight files can be checked as
print reader.methods
`
And the usage of the reader is rather trivial, e.g. one can explicitly request the responce for certain set of arguments:
v1, v2, v3 = ....
mlp = reader['MLP'] ## get one method
print 'MLP value is %s' % mlp ( v1 , v2 , v3 )
In practice, one practially always uses it with TTree
/TChain
/RooAbsData
/RooArgSet
, in this case one use 1-argument call, assuming then proper accessor functions are supplied:
tree = ... ## the tree
mlp = reader['MLP'] ## get one method
for i in tree : ## loop over the entries
print 'MLP value is %s' % mlp ( i ) ## get the value