00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <cstdlib>
00031 #include <iostream>
00032 #include <map>
00033 #include <string>
00034
00035 #include "TChain.h"
00036 #include "TFile.h"
00037 #include "TTree.h"
00038 #include "TString.h"
00039 #include "TObjString.h"
00040 #include "TSystem.h"
00041 #include "TROOT.h"
00042
00043 #include "TMVAGui.C"
00044
00045 #if not defined(__CINT__) || defined(__MAKECINT__)
00046
00047 #include "TMVA/Factory.h"
00048 #include "TMVA/Tools.h"
00049 #endif
00050
00051 void TMVAClassification( TString myMethodList = "" )
00052 {
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 TMVA::Tools::Instance();
00071
00072
00073 std::map<std::string,int> Use;
00074
00075
00076 Use["Cuts"] = 1;
00077 Use["CutsD"] = 1;
00078 Use["CutsPCA"] = 0;
00079 Use["CutsGA"] = 0;
00080 Use["CutsSA"] = 0;
00081
00082
00083 Use["Likelihood"] = 1;
00084 Use["LikelihoodD"] = 0;
00085 Use["LikelihoodPCA"] = 1;
00086 Use["LikelihoodKDE"] = 0;
00087 Use["LikelihoodMIX"] = 0;
00088
00089
00090 Use["PDERS"] = 1;
00091 Use["PDERSD"] = 0;
00092 Use["PDERSPCA"] = 0;
00093 Use["PDEFoam"] = 1;
00094 Use["PDEFoamBoost"] = 0;
00095 Use["KNN"] = 1;
00096
00097
00098 Use["LD"] = 1;
00099 Use["Fisher"] = 0;
00100 Use["FisherG"] = 0;
00101 Use["BoostedFisher"] = 0;
00102 Use["HMatrix"] = 0;
00103
00104
00105 Use["FDA_GA"] = 1;
00106 Use["FDA_SA"] = 0;
00107 Use["FDA_MC"] = 0;
00108 Use["FDA_MT"] = 0;
00109 Use["FDA_GAMT"] = 0;
00110 Use["FDA_MCMT"] = 0;
00111
00112
00113 Use["MLP"] = 0;
00114 Use["MLPBFGS"] = 0;
00115 Use["MLPBNN"] = 1;
00116 Use["CFMlpANN"] = 0;
00117 Use["TMlpANN"] = 0;
00118
00119
00120 Use["SVM"] = 1;
00121
00122
00123 Use["BDT"] = 1;
00124 Use["BDTG"] = 0;
00125 Use["BDTB"] = 0;
00126 Use["BDTD"] = 0;
00127
00128
00129 Use["RuleFit"] = 1;
00130
00131
00132 std::cout << std::endl;
00133 std::cout << "==> Start TMVAClassification" << std::endl;
00134
00135
00136 if (myMethodList != "") {
00137 for (std::map<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) it->second = 0;
00138
00139 std::vector<TString> mlist = TMVA::gTools().SplitString( myMethodList, ',' );
00140 for (UInt_t i=0; i<mlist.size(); i++) {
00141 std::string regMethod(mlist[i]);
00142
00143 if (Use.find(regMethod) == Use.end()) {
00144 std::cout << "Method \"" << regMethod << "\" not known in TMVA under this name. Choose among the following:" << std::endl;
00145 for (std::map<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) std::cout << it->first << " ";
00146 std::cout << std::endl;
00147 return;
00148 }
00149 Use[regMethod] = 1;
00150 }
00151 }
00152
00153
00154
00155
00156
00157
00158 TString outfileName( "TMVA.root" );
00159 TFile* outputFile = TFile::Open( outfileName, "RECREATE" );
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 TMVA::Factory *factory = new TMVA::Factory( "TMVAClassification", outputFile,
00172 "!V:!Silent:Color:DrawProgressBar:Transformations=I;D;P;G,D:AnalysisType=Classification" );
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182 factory->AddVariable( "myvar1 := var1+var2", 'F' );
00183 factory->AddVariable( "myvar2 := var1-var2", "Expression 2", "", 'F' );
00184 factory->AddVariable( "var3", "Variable 3", "units", 'F' );
00185 factory->AddVariable( "var4", "Variable 4", "units", 'F' );
00186
00187
00188
00189
00190 factory->AddSpectator( "spec1 := var1*2", "Spectator 1", "units", 'F' );
00191 factory->AddSpectator( "spec2 := var1*3", "Spectator 2", "units", 'F' );
00192
00193
00194
00195 TString fname = "./tmva_class_example.root";
00196
00197 if (gSystem->AccessPathName( fname ))
00198 gSystem->Exec("wget http://root.cern.ch/files/tmva_class_example.root");
00199
00200 TFile *input = TFile::Open( fname );
00201
00202 std::cout << "--- TMVAClassification : Using input file: " << input->GetName() << std::endl;
00203
00204
00205
00206 TTree *signal = (TTree*)input->Get("TreeS");
00207 TTree *background = (TTree*)input->Get("TreeB");
00208
00209
00210 Double_t signalWeight = 1.0;
00211 Double_t backgroundWeight = 1.0;
00212
00213
00214 factory->AddSignalTree ( signal, signalWeight );
00215 factory->AddBackgroundTree( background, backgroundWeight );
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259 factory->SetBackgroundWeightExpression( "weight" );
00260
00261
00262 TCut mycuts = "";
00263 TCut mycutb = "";
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273 factory->PrepareTrainingAndTestTree( mycuts, mycutb,
00274 "nTrain_Signal=0:nTrain_Background=0:SplitMode=Random:NormMode=NumEvents:!V" );
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 if (Use["Cuts"])
00285 factory->BookMethod( TMVA::Types::kCuts, "Cuts",
00286 "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart" );
00287
00288 if (Use["CutsD"])
00289 factory->BookMethod( TMVA::Types::kCuts, "CutsD",
00290 "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=Decorrelate" );
00291
00292 if (Use["CutsPCA"])
00293 factory->BookMethod( TMVA::Types::kCuts, "CutsPCA",
00294 "!H:!V:FitMethod=MC:EffSel:SampleSize=200000:VarProp=FSmart:VarTransform=PCA" );
00295
00296 if (Use["CutsGA"])
00297 factory->BookMethod( TMVA::Types::kCuts, "CutsGA",
00298 "H:!V:FitMethod=GA:CutRangeMin[0]=-10:CutRangeMax[0]=10:VarProp[1]=FMax:EffSel:Steps=30:Cycles=3:PopSize=400:SC_steps=10:SC_rate=5:SC_factor=0.95" );
00299
00300 if (Use["CutsSA"])
00301 factory->BookMethod( TMVA::Types::kCuts, "CutsSA",
00302 "!H:!V:FitMethod=SA:EffSel:MaxCalls=150000:KernelTemp=IncAdaptive:InitialTemp=1e+6:MinTemp=1e-6:Eps=1e-10:UseDefaultScale" );
00303
00304
00305 if (Use["Likelihood"])
00306 factory->BookMethod( TMVA::Types::kLikelihood, "Likelihood",
00307 "H:!V:!TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50" );
00308
00309
00310 if (Use["LikelihoodD"])
00311 factory->BookMethod( TMVA::Types::kLikelihood, "LikelihoodD",
00312 "!H:!V:TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=Decorrelate" );
00313
00314
00315 if (Use["LikelihoodPCA"])
00316 factory->BookMethod( TMVA::Types::kLikelihood, "LikelihoodPCA",
00317 "!H:!V:!TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=PCA" );
00318
00319
00320 if (Use["LikelihoodKDE"])
00321 factory->BookMethod( TMVA::Types::kLikelihood, "LikelihoodKDE",
00322 "!H:!V:!TransformOutput:PDFInterpol=KDE:KDEtype=Gauss:KDEiter=Adaptive:KDEFineFactor=0.3:KDEborder=None:NAvEvtPerBin=50" );
00323
00324
00325 if (Use["LikelihoodMIX"])
00326 factory->BookMethod( TMVA::Types::kLikelihood, "LikelihoodMIX",
00327 "!H:!V:!TransformOutput:PDFInterpolSig[0]=KDE:PDFInterpolBkg[0]=KDE:PDFInterpolSig[1]=KDE:PDFInterpolBkg[1]=KDE:PDFInterpolSig[2]=Spline2:PDFInterpolBkg[2]=Spline2:PDFInterpolSig[3]=Spline2:PDFInterpolBkg[3]=Spline2:KDEtype=Gauss:KDEiter=Nonadaptive:KDEborder=None:NAvEvtPerBin=50" );
00328
00329
00330
00331
00332
00333 if (Use["PDERS"])
00334 factory->BookMethod( TMVA::Types::kPDERS, "PDERS",
00335 "!H:!V:NormTree=T:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=400:NEventsMax=600" );
00336
00337 if (Use["PDERSD"])
00338 factory->BookMethod( TMVA::Types::kPDERS, "PDERSD",
00339 "!H:!V:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=400:NEventsMax=600:VarTransform=Decorrelate" );
00340
00341 if (Use["PDERSPCA"])
00342 factory->BookMethod( TMVA::Types::kPDERS, "PDERSPCA",
00343 "!H:!V:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=400:NEventsMax=600:VarTransform=PCA" );
00344
00345
00346 if (Use["PDEFoam"])
00347 factory->BookMethod( TMVA::Types::kPDEFoam, "PDEFoam",
00348 "H:!V:SigBgSeparate=F:TailCut=0.001:VolFrac=0.0333:nActiveCells=500:nSampl=2000:nBin=5:Nmin=100:Kernel=None:Compress=T" );
00349
00350 if (Use["PDEFoamBoost"])
00351 factory->BookMethod( TMVA::Types::kPDEFoam, "PDEFoamBoost",
00352 "!H:!V:Boost_Num=30:Boost_Transform=linear:SigBgSeparate=F:MaxDepth=4:UseYesNoCell=T:DTLogic=MisClassificationError:FillFoamWithOrigWeights=F:TailCut=0:nActiveCells=500:nBin=20:Nmin=400:Kernel=None:Compress=T" );
00353
00354
00355 if (Use["KNN"])
00356 factory->BookMethod( TMVA::Types::kKNN, "KNN",
00357 "H:nkNN=20:ScaleFrac=0.8:SigmaFact=1.0:Kernel=Gaus:UseKernel=F:UseWeight=T:!Trim" );
00358
00359
00360 if (Use["HMatrix"])
00361 factory->BookMethod( TMVA::Types::kHMatrix, "HMatrix", "!H:!V" );
00362
00363
00364 if (Use["LD"])
00365 factory->BookMethod( TMVA::Types::kLD, "LD", "H:!V:VarTransform=None:CreateMVAPdfs:PDFInterpolMVAPdf=Spline2:NbinsMVAPdf=50:NsmoothMVAPdf=10" );
00366
00367
00368 if (Use["Fisher"])
00369 factory->BookMethod( TMVA::Types::kFisher, "Fisher", "H:!V:Fisher:CreateMVAPdfs:PDFInterpolMVAPdf=Spline2:NbinsMVAPdf=50:NsmoothMVAPdf=10" );
00370
00371
00372 if (Use["FisherG"])
00373 factory->BookMethod( TMVA::Types::kFisher, "FisherG", "H:!V:VarTransform=Gauss" );
00374
00375
00376 if (Use["BoostedFisher"])
00377 factory->BookMethod( TMVA::Types::kFisher, "BoostedFisher",
00378 "H:!V:Boost_Num=20:Boost_Transform=log:Boost_Type=AdaBoost:Boost_AdaBoostBeta=0.2" );
00379
00380
00381 if (Use["FDA_MC"])
00382 factory->BookMethod( TMVA::Types::kFDA, "FDA_MC",
00383 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=MC:SampleSize=100000:Sigma=0.1" );
00384
00385 if (Use["FDA_GA"])
00386 factory->BookMethod( TMVA::Types::kFDA, "FDA_GA",
00387 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=GA:PopSize=300:Cycles=3:Steps=20:Trim=True:SaveBestGen=1" );
00388
00389 if (Use["FDA_SA"])
00390 factory->BookMethod( TMVA::Types::kFDA, "FDA_SA",
00391 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=SA:MaxCalls=15000:KernelTemp=IncAdaptive:InitialTemp=1e+6:MinTemp=1e-6:Eps=1e-10:UseDefaultScale" );
00392
00393 if (Use["FDA_MT"])
00394 factory->BookMethod( TMVA::Types::kFDA, "FDA_MT",
00395 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=2:UseImprove:UseMinos:SetBatch" );
00396
00397 if (Use["FDA_GAMT"])
00398 factory->BookMethod( TMVA::Types::kFDA, "FDA_GAMT",
00399 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=GA:Converger=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=0:!UseImprove:!UseMinos:SetBatch:Cycles=1:PopSize=5:Steps=5:Trim" );
00400
00401 if (Use["FDA_MCMT"])
00402 factory->BookMethod( TMVA::Types::kFDA, "FDA_MCMT",
00403 "H:!V:Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):FitMethod=MC:Converger=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=0:!UseImprove:!UseMinos:SetBatch:SampleSize=20" );
00404
00405
00406 if (Use["MLP"])
00407 factory->BookMethod( TMVA::Types::kMLP, "MLP", "H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:!UseRegulator" );
00408
00409 if (Use["MLPBFGS"])
00410 factory->BookMethod( TMVA::Types::kMLP, "MLPBFGS", "H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:TrainingMethod=BFGS:!UseRegulator" );
00411
00412 if (Use["MLPBNN"])
00413 factory->BookMethod( TMVA::Types::kMLP, "MLPBNN", "H:!V:NeuronType=tanh:VarTransform=N:NCycles=600:HiddenLayers=N+5:TestRate=5:TrainingMethod=BFGS:UseRegulator" );
00414
00415
00416 if (Use["CFMlpANN"])
00417 factory->BookMethod( TMVA::Types::kCFMlpANN, "CFMlpANN", "!H:!V:NCycles=2000:HiddenLayers=N+1,N" );
00418
00419
00420 if (Use["TMlpANN"])
00421 factory->BookMethod( TMVA::Types::kTMlpANN, "TMlpANN", "!H:!V:NCycles=200:HiddenLayers=N+1,N:LearningMethod=BFGS:ValidationFraction=0.3" );
00422
00423
00424 if (Use["SVM"])
00425 factory->BookMethod( TMVA::Types::kSVM, "SVM", "Gamma=0.25:Tol=0.001:VarTransform=Norm" );
00426
00427
00428 if (Use["BDTG"])
00429 factory->BookMethod( TMVA::Types::kBDT, "BDTG",
00430 "!H:!V:NTrees=1000:BoostType=Grad:Shrinkage=0.10:UseBaggedGrad:GradBaggingFraction=0.5:nCuts=20:NNodesMax=5" );
00431
00432 if (Use["BDT"])
00433 factory->BookMethod( TMVA::Types::kBDT, "BDT",
00434 "!H:!V:NTrees=850:nEventsMin=150:MaxDepth=3:BoostType=AdaBoost:AdaBoostBeta=0.5:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
00435
00436 if (Use["BDTB"])
00437 factory->BookMethod( TMVA::Types::kBDT, "BDTB",
00438 "!H:!V:NTrees=400:BoostType=Bagging:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning" );
00439
00440 if (Use["BDTD"])
00441 factory->BookMethod( TMVA::Types::kBDT, "BDTD",
00442 "!H:!V:NTrees=400:nEventsMin=400:MaxDepth=3:BoostType=AdaBoost:SeparationType=GiniIndex:nCuts=20:PruneMethod=NoPruning:VarTransform=Decorrelate" );
00443
00444
00445 if (Use["RuleFit"])
00446 factory->BookMethod( TMVA::Types::kRuleFit, "RuleFit",
00447 "H:!V:RuleFitModule=RFTMVA:Model=ModRuleLinear:MinImp=0.001:RuleMinDist=0.001:NTrees=20:fEventsMin=0.01:fEventsMax=0.5:GDTau=-1.0:GDTauPrec=0.01:GDStep=0.01:GDNSteps=10000:GDErrScale=1.02" );
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463 factory->TrainAllMethods();
00464
00465
00466 factory->TestAllMethods();
00467
00468
00469 factory->EvaluateAllMethods();
00470
00471
00472
00473
00474 outputFile->Close();
00475
00476 std::cout << "==> Wrote root file: " << outputFile->GetName() << std::endl;
00477 std::cout << "==> TMVAClassification is done!" << std::endl;
00478
00479 delete factory;
00480
00481
00482 if (!gROOT->IsBatch()) TMVAGui( outfileName );
00483 }