%%cpp -d #include #include #include #include #include #include "TFile.h" #include "TTree.h" #include "TString.h" #include "TSystem.h" #include "TROOT.h" #include "TStopwatch.h" #include "TH1F.h" #include "TMVA/Tools.h" #include "TMVA/Reader.h" using namespace TMVA; TString myMethodList = ""; TMVA::Tools::Instance(); std::map Use; Use["MLP"] = 1; Use["BDTG"] = 1; Use["DL_CPU"] = 1; Use["DL_GPU"] = 1; Use["FDA_GA"] = 1; Use["PDEFoam"] = 1; std::cout << std::endl; std::cout << "==> Start TMVAMulticlassApp" << std::endl; if (myMethodList != "") { for (std::map::iterator it = Use.begin(); it != Use.end(); it++) it->second = 0; std::vector mlist = gTools().SplitString( myMethodList, ',' ); for (UInt_t i=0; i::iterator it = Use.begin(); it != Use.end(); it++) std::cout << it->first << " " << std::endl; std::cout << std::endl; return; } Use[regMethod] = 1; } } TMVA::Reader *reader = new TMVA::Reader( "!Color:!Silent" ); Float_t var1, var2, var3, var4; reader->AddVariable( "var1", &var1 ); reader->AddVariable( "var2", &var2 ); reader->AddVariable( "var3", &var3 ); reader->AddVariable( "var4", &var4 ); TString dir = "dataset/weights/"; TString prefix = "TMVAMulticlass"; for (std::map::iterator it = Use.begin(); it != Use.end(); it++) { if (it->second) { TString methodName = TString(it->first) + TString(" method"); TString weightfile = dir + prefix + TString("_") + TString(it->first) + TString(".weights.xml"); // check if file existing (i.e. method has been trained) if (!gSystem->AccessPathName( weightfile )) // file exists reader->BookMVA( methodName, weightfile ); else { std::cout << "TMVAMultiClassApplication: Skip " << methodName << " since it has not been trained !" << std::endl; it->second = 0; } } } UInt_t nbin = 100; TH1F *histMLP_signal(0), *histBDTG_signal(0), *histFDAGA_signal(0), *histPDEFoam_signal(0); TH1F *histDLCPU_signal(0), *histDLGPU_signal(0); if (Use["MLP"]) histMLP_signal = new TH1F( "MVA_MLP_signal", "MVA_MLP_signal", nbin, 0., 1.1 ); if (Use["BDTG"]) histBDTG_signal = new TH1F( "MVA_BDTG_signal", "MVA_BDTG_signal", nbin, 0., 1.1 ); if (Use["DL_CPU"]) histDLCPU_signal = new TH1F("MVA_DLCPU_signal", "MVA_DLCPU_signal", nbin, 0., 1.1); if (Use["DL_GPU"]) histDLGPU_signal = new TH1F("MVA_DLGPU_signal", "MVA_DLGPU_signal", nbin, 0., 1.1); if (Use["FDA_GA"]) histFDAGA_signal = new TH1F( "MVA_FDA_GA_signal", "MVA_FDA_GA_signal", nbin, 0., 1.1 ); if (Use["PDEFoam"]) histPDEFoam_signal = new TH1F( "MVA_PDEFoam_signal", "MVA_PDEFoam_signal", nbin, 0., 1.1 ); TFile *input(0); TString fname = "./tmva_example_multiclass.root"; if (!gSystem->AccessPathName( fname )) { input = TFile::Open( fname ); // check if file in local directory exists } else { TFile::SetCacheFileDir("."); input = TFile::Open("http://root.cern/files/tmva_multiclass_example.root", "CACHEREAD"); } if (!input) { std::cout << "ERROR: could not open data file" << std::endl; exit(1); } std::cout << "--- TMVAMulticlassApp : Using input file: " << input->GetName() << std::endl; TTree* theTree = (TTree*)input->Get("TreeS"); std::cout << "--- Select signal sample" << std::endl; theTree->SetBranchAddress( "var1", &var1 ); theTree->SetBranchAddress( "var2", &var2 ); theTree->SetBranchAddress( "var3", &var3 ); theTree->SetBranchAddress( "var4", &var4 ); std::cout << "--- Processing: " << theTree->GetEntries() << " events" << std::endl; TStopwatch sw; sw.Start(); for (Long64_t ievt=0; ievtGetEntries();ievt++) { if (ievt%1000 == 0){ std::cout << "--- ... Processing event: " << ievt << std::endl; } theTree->GetEntry(ievt); if (Use["MLP"]) histMLP_signal->Fill((reader->EvaluateMulticlass( "MLP method" ))[0]); if (Use["BDTG"]) histBDTG_signal->Fill((reader->EvaluateMulticlass( "BDTG method" ))[0]); if (Use["DL_CPU"]) histDLCPU_signal->Fill((reader->EvaluateMulticlass("DL_CPU method"))[0]); if (Use["DL_GPU"]) histDLGPU_signal->Fill((reader->EvaluateMulticlass("DL_GPU method"))[0]); if (Use["FDA_GA"]) histFDAGA_signal->Fill((reader->EvaluateMulticlass( "FDA_GA method" ))[0]); if (Use["PDEFoam"]) histPDEFoam_signal->Fill((reader->EvaluateMulticlass( "PDEFoam method" ))[0]); } sw.Stop(); std::cout << "--- End of event loop: "; sw.Print(); TFile *target = new TFile( "TMVAMulticlassApp.root","RECREATE" ); if (Use["MLP"]) histMLP_signal->Write(); if (Use["BDTG"]) histBDTG_signal->Write(); if (Use["DL_CPU"]) histDLCPU_signal->Write(); if (Use["DL_GPU"]) histDLGPU_signal->Write(); if (Use["FDA_GA"]) histFDAGA_signal->Write(); if (Use["PDEFoam"]) histPDEFoam_signal->Write(); target->Close(); std::cout << "--- Created root file: \"TMVMulticlassApp.root\" containing the MVA output histograms" << std::endl; delete reader; std::cout << "==> TMVAMulticlassApp is done!" << std::endl << std::endl;