// example of RooEffProdPdf vs RooProdPdf void prodTest() { RooRealVar X("X", "X", 0.0, 2.0); RooRealVar P("P", "Fit Parameter", -1.0, 1.0); RooPolynomial PDF("PDF", "Theory PDF", X, RooArgList(P)); RooGenericPdf A1("A1", "Acceptance PDF", "X <= 1.0 ? 1.0 : 0.5", RooArgSet(X)); RooFormulaVar A2("A2", "Acceptance Function", "X <= 1.0 ? 1.0 : 0.5", RooArgSet(X)); RooProdPdf PDFA1("PDFA1", "Theory * Acceptance PDF", RooArgSet(PDF, A1)); RooEffProd PDFA2("PDFA2", "Theory * Acceptance Function", PDF, A2); auto data = PDFA1.generate(X, 10000); auto plot = X.frame(); data->plotOn(plot); // when using the default the option RooFit::Optimize(2) the result is wrong! PDFA1.fitTo(*data, RooFit::Optimize(1), RooFit::Minimizer("Minuit2")); PDFA1.plotOn(plot); PDFA2.fitTo(*data, RooFit::Minimizer("Minuit2")); PDFA2.plotOn(plot, RooFit::LineColor(kRed)); plot->Draw(); }