%%cpp -d #include "RooRealVar.h" #include "RooDataSet.h" #include "RooGaussian.h" #include "RooChebychev.h" #include "RooAddPdf.h" #include "RooMCStudy.h" #include "RooChi2MCSModule.h" #include "RooPlot.h" #include "TCanvas.h" #include "TAxis.h" #include "TH1.h" #include "TDirectory.h" #include "TLegend.h" using namespace RooFit; RooRealVar x("x", "x", -10, 10); x.setBins(10); RooRealVar mean("mean", "mean of gaussian", 0, -2., 1.8); RooRealVar sigma("sigma", "width of gaussian", 5, 1, 10); RooGaussian gauss("gauss", "gaussian PDF", x, mean, sigma); RooMCStudy *mcs = new RooMCStudy(gauss, x, Silence(), Binned()); RooChi2MCSModule chi2mod; mcs->addModule(chi2mod); mcs->generateAndFit(2000, 1000); int nBins = 100; TH1 *hist_chi2 = mcs->fitParDataSet().createHistogram("chi2", AutoBinning(nBins)); hist_chi2->SetTitle("#chi^{2} values of all toy runs;#chi^{2}"); TH1 *hist_prob = mcs->fitParDataSet().createHistogram("prob", AutoBinning(nBins)); hist_prob->SetTitle("Corresponding #chi^{2} probability;Prob(#chi^{2},ndof)"); RooRealVar mean2("mean2", "mean of gaussian 2", 2.); RooGaussian gauss2("gauss2", "gaussian PDF2", x, mean2, sigma); RooMCStudy *mcs2 = new RooMCStudy(gauss2, x, FitModel(gauss), Silence(), Binned()); RooChi2MCSModule chi2mod2; mcs2->addModule(chi2mod2); mcs2->generateAndFit(2000, 1000); auto pullMeanFrame = mcs2->plotPull(mean); TH1 *hist2_chi2 = mcs2->fitParDataSet().createHistogram("chi2", AutoBinning(nBins)); TH1 *hist2_prob = mcs2->fitParDataSet().createHistogram("prob", AutoBinning(nBins)); hist2_chi2->SetLineColor(kRed); hist2_prob->SetLineColor(kRed); TLegend leg; leg.AddEntry(hist_chi2, "Optimal fit", "L"); leg.AddEntry(hist2_chi2, "Biased fit", "L"); leg.SetBorderSize(0); leg.SetFillStyle(0); TCanvas *c = new TCanvas("rf802_mcstudy_addons", "rf802_mcstudy_addons", 800, 400); c->Divide(3); c->cd(1); gPad->SetLeftMargin(0.15); hist_chi2->GetYaxis()->SetTitleOffset(1.4); hist_chi2->Draw(); hist2_chi2->Draw("esame"); leg.DrawClone(); c->cd(2); gPad->SetLeftMargin(0.15); hist_prob->GetYaxis()->SetTitleOffset(1.4); hist_prob->Draw(); hist2_prob->Draw("esame"); c->cd(3); pullMeanFrame->Draw(); gDirectory->Add(mcs); %jsroot on gROOT->GetListOfCanvases()->Draw()