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(); } data->ResetBranchAddresses(); return data; } void MinimalClassification() { TFile * outFile = new TFile("out.root", "RECREATE"); TTree * treeClass0 = genTree(1000, 0.0, 2.0, 100); TTree * treeClass1 = genTree(1000, 1.0, 2.0, 101); TTree * treeClass1_2 = genTree(1000, 1.0, 2.0, 102); TMVA::Factory factory {"", outFile, "AnalysisType=Classification"}; TMVA::DataLoader d {"dataset"}; d.AddVariable( "x" , 'D' ); d.AddVariable( "y" , 'D' ); d.AddSignalTree ( treeClass0, 1.0 ); d.AddBackgroundTree( treeClass1 , 2.0 ); d.AddBackgroundTree( treeClass1_2, 0.5 ); // d.PrepareTrainingAndTestTree("", "", "SplitMode=Random"); d.PrepareTrainingAndTestTree("", "(x<2.0) && (y<2.0)", "SplitMode=Random"); factory.BookMethod( &d, TMVA::Types::kBDT, "BDT", ""); factory.TrainAllMethods(); factory.TestAllMethods(); factory.EvaluateAllMethods(); outFile->Close(); }