{ ROOT::Math::MinimizerOptions::SetDefaultMinimizer("Minuit2"); ROOT::Math::MinimizerOptions::SetDefaultStrategy(1); ROOT::Math::MinimizerOptions::SetDefaultPrintLevel(-1); bool doFit = false; RooWorkspace w("w","w"); w.factory("RooGaussian::fs(myy[125,105,160],mH[125],sH[2])"); w.factory("RooExponential::fb(myy,sl[-0.0178])"); w.factory("SUM::fsb(ns[0,-10,50]*fs,nb[700,0,5000]*fb)"); w.factory("SUM::fbCR1(nbCR1[200000,0,5000000]*fb)"); w.factory("SUM::fbCR2(nbCR2[900,0,4000]*fb)"); w.factory("SIMUL::simPdf(cat[SR,CR1,CR2],SR=fsb,CR1=fbCR1,CR2=fbCR2)"); auto dsSR = w.pdf("fsb")->generate(RooArgSet(*w.var("myy")),700); dsSR->Print(); auto dsCR1 = w.pdf("fbCR1")->generate(RooArgSet(*w.var("myy")),200000); dsCR1->Print(); auto dsCR2 = w.pdf("fbCR2")->generate(RooArgSet(*w.var("myy")),900); dsCR2->Print(); RooDataSet* combData = new RooDataSet("combData", "combined data", *w.var("myy"), RooFit::Index(*w.cat("cat")), RooFit::Import({{"CR1", dsCR1}, {"CR2", dsCR2}, {"SR", dsSR}})); combData->Print(); auto myy = w.var("myy"); auto cat = w.cat("cat"); auto simPdf = w.pdf("simPdf"); if (doFit) { auto fitR = simPdf->fitTo(*combData,RooFit::PrintLevel(-1),RooFit::Save()); fitR->Print("v"); delete fitR; } auto frSR = myy->frame(); auto frCR1 = myy->frame(); auto frCR2 = myy->frame(); combData->plotOn(frSR,RooFit::Binning(55),RooFit::Cut("cat == cat::SR")); combData->plotOn(frCR1,RooFit::Binning(55),RooFit::Cut("cat == cat::CR1")); combData->plotOn(frCR2,RooFit::Binning(55),RooFit::Cut("cat == cat::CR2")); simPdf->plotOn(frSR, RooFit::Slice(*cat, "SR"), RooFit::ProjWData(*cat, *combData)); simPdf->plotOn(frCR1, RooFit::Slice(*cat, "CR1"), RooFit::ProjWData(*cat, *combData)); simPdf->plotOn(frCR2, RooFit::Slice(*cat, "CR2"), RooFit::ProjWData(*cat, *combData)); TCanvas *cc = new TCanvas("cc","",1000,600); cc->Divide(3,1); cc->cd(1); frSR->Draw(); cc->cd(2); frCR1->Draw(); cc->cd(3); frCR2->Draw(); cc->SaveAs("r63800.pdf"); }