#include "RooRealVar.h" #include "RooGaussian.h" #include "RooPolynomial.h" #include "RooAddPdf.h" #include "RooProdPdf.h" #include "RooDataSet.h" #include "RooPlot.h" #include "RooLandau.h" #include "TCanvas.h" #include "RooNumIntConfig.h" using namespace RooFit; void script_error (){ Int_t EventGen = 4000; // signal pdf == gaussian RooRealVar x ("x","x",5.0,0.0,10.0); RooRealVar m ("m" ,"m",5.0,2.0,8.0); RooRealVar s ("s","s",1.0,0.1,10.1); RooGaussian sig ("sig","sig",x,m,s); // bkgd pdf == flat RooRealVar slopex ("slopex","slopex",0.0); RooPolynomial bkg1 ("bkg1","bkg1",x,RooArgList(slopex)); RooRealVar slopes ("slopes","slopes",0.0); RooPolynomial bkg2 ("bkg2","bkg2",s,RooArgList(slopes)); RooProdPdf bkg ("bkg","bkg",RooArgList(bkg1,bkg2)); // build pdf RooRealVar frac ("frac" ,"frac",0.1); RooAddPdf pdf ("pdf","pdf",RooArgList(bkg,sig),RooArgList(frac)); // generate sigma first, its pdf is a sharp landau peaked at 1 RooRealVar landau_mode ("landau_mode","landau_mode",1); RooRealVar landau_sgma ("landau_sgma","landau_sgma",0.0001); RooLandau pdfS ("pdfS","pdfS",s,landau_mode,landau_sgma); RooDataSet *expS = pdfS.generate(s,EventGen); RooDataSet *data = pdf.generate(x,ProtoData(*expS)); RooPlot *frame = s.frame(Bins(3),Range(0.94,1.06)); data->plotOn(frame); // plot x and pdf RooPlot *frame2 = x.frame(Bins(10)); data->plotOn(frame2,LineColor(kRed)); pdf.plotOn(frame2,ProjWData(s,*data)); pdf.plotOn(frame2,Components(sig),ProjWData(s,*data)); pdf.plotOn(frame2,Components(bkg),ProjWData(s,*data)); TCanvas *c2 = new TCanvas ("c2","c2",1000,700); c2->Divide(2); c2->cd(1); frame->Draw(); c2->cd(2); frame2->Draw(); }