#include "TFile.h" #include "RooRealVar.h" #include "RooGaussian.h" #include "RooDataSet.h" #include "RooExponential.h" #include "RooProdPdf.h" #include "TTree.h" int main() { RooRealVar x("x", "x", -10, 10); RooRealVar y("y", "y", -10, 10); RooRealVar mux("mux", "average-x'", 0, -1, 1); RooRealVar sigmax("sigmax", "sigma-x'", 0.5, 0, 5); RooGaussian gaussx("gaussx","gaussian PDF x'", x, mux, sigmax); RooRealVar muy("muy", "average-y'", 0, -1, 1); RooRealVar sigmay("sigmay", "sigma-y'", 1.5, 0, 5); RooGaussian gaussy("gaussy","gaussian PDF y'", y, muy, sigmay); RooProdPdf gaussxy("gaussxy", "gaussxy", RooArgSet(gaussx, gaussy)); RooRealVar lambdax("lambdax", "log-slope x", -0.1, -5., 0.); RooExponential expox("expox", "exponential PDF x", x, lambdax); RooRealVar lambday("lambday", "log-slope y", -0.1, -5., 0.); RooExponential expoy("expoy", "exponential PDF y", y, lambday); RooProdPdf expoxy("expoxy", "expoxy", RooArgSet(expox, expoy)); TFile training("tmva-in.root", "RECREATE"); RooDataSet * sigSample = gaussxy.generate(RooArgSet(x,y), 200000); RooDataSet * bkgSample = expoxy.generate(RooArgSet(x,y), 200000); TTree sampleTree("sampleTree","Sample tree"); double xv, yv, isSignal; sampleTree.Branch("x", &xv, "x/D"); sampleTree.Branch("y", &yv, "y/D"); sampleTree.Branch("isSignal", &isSignal, "signal/D"); isSignal = 1; for(int i = 0; i != sigSample->numEntries(); ++i) { const RooArgSet * tuple = sigSample->get(i); xv = tuple->getRealValue("x"); yv = tuple->getRealValue("y"); sampleTree.Fill(); } isSignal = 0; for(int i = 0; i != bkgSample->numEntries(); ++i) { const RooArgSet * tuple = bkgSample->get(i); xv = tuple->getRealValue("x"); yv = tuple->getRealValue("y"); sampleTree.Fill(); } sampleTree.Write(); training.Close(); return 0; }