%%cpp -d #include "RooRealVar.h" #include "RooDataSet.h" #include "RooGaussian.h" #include "RooGaussModel.h" #include "RooDecay.h" #include "RooLandau.h" #include "RooProdPdf.h" #include "RooHistPdf.h" #include "RooPlot.h" #include "TCanvas.h" #include "TAxis.h" #include "TH1.h" using namespace RooFit; RooRealVar dt("dt", "dt", -10, 10); RooRealVar dterr("dterr", "per-event error on dt", 0.01, 10); RooRealVar bias("bias", "bias", 0, -10, 10); RooRealVar sigma("sigma", "per-event error scale factor", 1, 0.1, 10); RooGaussModel gm("gm1", "gauss model scaled bt per-event error", dt, bias, sigma, dterr); RooRealVar tau("tau", "tau", 1.548); RooDecay decay_gm("decay_gm", "decay", dt, tau, gm, RooDecay::DoubleSided); RooLandau pdfDtErr("pdfDtErr", "pdfDtErr", dterr, 1.0, 0.25); std::unique_ptr expDataDterr{pdfDtErr.generate(dterr, 10000)}; std::unique_ptr expHistDterr{expDataDterr->binnedClone()}; RooHistPdf pdfErr("pdfErr", "pdfErr", dterr, *expHistDterr); RooProdPdf model("model", "model", pdfErr, Conditional(decay_gm, dt)); std::unique_ptr data{model.generate({dt, dterr}, 10000)}; model.fitTo(*data, PrintLevel(-1)); TH1 *hh_model = model.createHistogram("hh_model", dt, Binning(50), YVar(dterr, Binning(50))); hh_model->SetLineColor(kBlue); RooPlot *frame = dt.frame(Title("Projection of model(dt|dterr) on dt")); data->plotOn(frame); model.plotOn(frame); TCanvas *c = new TCanvas("rf307_fullpereventerrors", "rf307_fullperventerrors", 800, 400); c->Divide(2); c->cd(1); gPad->SetLeftMargin(0.20); hh_model->GetZaxis()->SetTitleOffset(2.5); hh_model->Draw("surf"); c->cd(2); gPad->SetLeftMargin(0.15); frame->GetYaxis()->SetTitleOffset(1.6); frame->Draw(); gROOT->GetListOfCanvases()->Draw()