%%cpp -d #include "RooRealVar.h" #include "RooDataSet.h" #include "RooGaussian.h" #include "RooPolynomial.h" #include "RooAddPdf.h" #include "RooProdPdf.h" #include "TCanvas.h" #include "TAxis.h" #include "RooPlot.h" using namespace RooFit; RooRealVar x("x", "x", -5, 5); RooRealVar y("y", "y", -5, 5); RooRealVar z("z", "z", -5, 5); RooGaussian gx("gx", "gx", x, 0.0, 1.0); RooGaussian gy("gy", "gy", y, 0.0, 1.0); RooGaussian gz("gz", "gz", z, 0.0, 1.0); RooProdPdf sig("sig", "sig", RooArgSet(gx, gy, gz)); RooPolynomial px("px", "px", x, RooArgSet(-0.1, 0.004)); RooPolynomial py("py", "py", y, RooArgSet(0.1, -0.004)); RooPolynomial pz("pz", "pz", z); RooProdPdf bkg("bkg", "bkg", RooArgSet(px, py, pz)); RooRealVar fsig("fsig", "signal fraction", 0.1, 0., 1.); RooAddPdf model("model", "model", RooArgList(sig, bkg), fsig); std::unique_ptr data{model.generate({x, y, z}, 200000)}; model.fitTo(*data, NumCPU(4), Timer(true), PrintLevel(-1)); RooAbsPdf *sigyz = sig.createProjection(x); RooAbsPdf *totyz = model.createProjection(x); RooFormulaVar llratio_func("llratio", "log10(@0)-log10(@1)", RooArgList(*sigyz, *totyz)); data->addColumn(llratio_func); std::unique_ptr dataSel{data->reduce(Cut("llratio>0.7"))}; RooPlot *frame = x.frame(Title("Projection on X with LLratio(y,z)>0.7"), Bins(40)); dataSel->plotOn(frame); model.plotOn(frame, ProjWData(*dataSel), NumCPU(4)); new TCanvas("rf603_multicpu", "rf603_multicpu", 600, 600); gPad->SetLeftMargin(0.15); frame->GetYaxis()->SetTitleOffset(1.6); frame->Draw(); %jsroot on gROOT->GetListOfCanvases()->Draw()