#include #include #include #include #include #include #include #include #include void multiDimensional () { RooWorkspace w("w", kTRUE); // Construct F(x|y) -- a Gaussian in x with a mean that depends on y w.factory("PolyVar::meanX(y[-5, 5], {a0[-0.5, -5, 5], a1[-0.5, -1, 1]})"); w.factory("Gaussian::gaussX(x[-5, 5], meanX, sigmaX[0.5])"); // Construct G(y) -- an Exponential in y w.factory("Exponential::gaussY(y, -0.2)"); // Construct M(x,y) = F(x|y)*G(y) w.factory("PROD::model(gaussX|meanX, gaussY)"); RooDataSet *data = w.pdf("model")->generate(RooArgSet(*w.var("x"), *w.var("y")), 10000); w.pdf("model")->fitTo(*data); RooPlot *frame = w.var("x")->frame(); data->plotOn(frame); w.pdf("model")->plotOn(frame); // Draw all frames on a canvas TCanvas *c = new TCanvas("multi-dimensional", "multi-dimensional", 800, 400); c->Divide(2); c->cd(1); gPad->SetLeftMargin(0.20); TH1 *hh_pdf = w.pdf("model")->createHistogram("x,y", *w.var("x"), RooFit::Binning(50), RooFit::YVar(*w.var("y"), RooFit::Binning(50))); hh_pdf->SetStats(kFALSE); hh_pdf->GetXaxis()->SetTitleOffset(1.5); hh_pdf->GetYaxis()->SetTitleOffset(1.6); hh_pdf->GetZaxis()->SetTitleOffset(2.5); hh_pdf->Draw("SURF"); c->cd(2); gPad->SetLeftMargin(0.15); frame->GetYaxis()->SetTitleOffset(1.6); frame->Draw(); } // multiDimensional