%%cpp -d #include "TMVA/DataLoader.h" #include "TMVA/Factory.h" #include "TFile.h" #include "TString.h" #include "TTree.h" %%cpp -d TTree *genTree(Int_t nPoints, Double_t offset, Double_t scale, UInt_t seed = 100) { TRandom rng(seed); Double_t x = 0; Double_t y = 0; TTree *data = new TTree(); data->Branch("x", &x, "x/D"); data->Branch("y", &y, "y/D"); for (Int_t n = 0; n < nPoints; ++n) { x = rng.Rndm() * scale; y = offset + rng.Rndm() * scale; data->Fill(); } Important: Disconnects the tree from the memory locations of x and y. data->ResetBranchAddresses(); return data; } TString outputFilename = "out.root"; TFile *outFile = new TFile(outputFilename, "RECREATE"); TTree *signalTree = genTree(1000, 0.0, 2.0, 100); TTree *backgroundTree = genTree(1000, 1.0, 2.0, 101); TString factoryOptions = "AnalysisType=Classification"; TMVA::Factory factory{"", outFile, factoryOptions}; TMVA::DataLoader dataloader{"dataset"}; dataloader.AddVariable("x", 'D'); dataloader.AddVariable("y", 'D'); dataloader.AddSignalTree(signalTree, 1.0); dataloader.AddBackgroundTree(backgroundTree, 1.0); TCut signalCut = ""; TCut backgroundCut = ""; TString datasetOptions = "SplitMode=Random"; dataloader.PrepareTrainingAndTestTree(signalCut, backgroundCut, datasetOptions); TString methodOptions = ""; factory.BookMethod(&dataloader, TMVA::Types::kBDT, "BDT", methodOptions); factory.TrainAllMethods(); factory.TestAllMethods(); factory.EvaluateAllMethods(); outFile->Close(); delete outFile; delete signalTree; delete backgroundTree;