using namespace RooFit; void frac() { TCanvas* c1 = new TCanvas("c", "", 550, 450); TF1 f("f", "gaus(0)+pol2(3)", 0, 10); TF1 f1("f1", "gaus", 0, 10); TF1 f2("f2", "pol2", 0, 10); f.SetParameter(0, 100); f.SetParameter(1, 5); f.SetParameter(2, 1); f.SetParameter(3, 10); f.SetParameter(4, 1); f.SetParameter(5, 0.5); f1.SetParameter(0, 100); f1.SetParameter(1, 5); f1.SetParameter(2, 1); f2.SetParameter(0, 10); f2.SetParameter(1, 1); f2.SetParameter(2, 0.5); TH1D* h = new TH1D("h", "", 100, 0, 10); h->FillRandom("f"); h->Draw(); TH1D* h1 = new TH1D("h1", "", 100, 0, 10); h1->FillRandom("f1"); TH1D* h2 = new TH1D("h2", "", 100, 0, 10); h2->FillRandom("f2"); h1->Sumw2(); h2->Sumw2(); h->Sumw2(); h1->Scale(1./h1->Integral()); h2->Scale(1./h2->Integral()); h->Scale(1./h->Integral()); RooRealVar x("x", "x", 0, 10); RooRealVar frac1("frac1", "frac1", 0.5); RooDataHist hist1("hist1", "hist1", RooArgList(x), h1); RooDataHist hist2("hist2", "hist2", RooArgList(x), h2); RooDataHist hsum("hsum", "hsum", RooArgList(x), h); RooHistPdf f_1("f_1", "f_1", RooArgList(x), hist1, 0); RooHistPdf f_2("f_2", "f_2", RooArgList(x), hist2, 0); RooAddPdf sum("sum", "frac1+frac2", RooArgList(f_1, f_2), RooArgList(frac1), kTRUE); sum.fitTo(hsum, SumW2Error(kTRUE)); }