using namespace RooFit; void test_uneven_binning(RooWorkspace my_ws, TH1D* myHist){ RooAbsPdf *pdf = my_ws.pdf("myPdf"); RooRealVar *obs = my_ws.var("myObs"); TH1D* h_bkg = dynamic_cast(myHist->Clone("h_bkg")); //myHist is defined with uneven binning const Double_t area = h_bkg->Integral(); const Double_t xmin = h_bkg->GetXaxis()->GetXmin(); const Double_t xmax = h_bkg->GetXaxis()->GetXmax(); TAxis *xaxis= h_bkg->GetXaxis(); const TArrayD * xarray = xaxis->GetXbins(); const Double_t* bins = xarray->GetArray(); RooBinning edges_bins(xaxis->GetNbins(), bins, "edges_bins"); obs->setRange(xmin, xmax); obs->setBinning(edges_bins); RooDataHist dh_bkg("dh_bkg", "dh_bkg", *obs, Import(*h_bkg, kTRUE)); pdf->fitTo(dh_bkg, RooFit::Minos(), RooFit::Save()); my_ws.saveSnapshot("nominal", *pdf->getParameters(dh_bkg)); TH1D *h_nominal = dynamic_cast(pdf->createHistogram("htmp_nominal", *obs, RooFit::Binning(edges_bins))); if (h_nominal->Integral()) h_nominal->Scale(area / h_nominal->Integral()); }