{ using namespace RooFit; RooRealVar x("x","x",-5,5); RooRealVar y("y","y",-5,5); RooRealVar sx("sx","sx",0.1,0,5); RooRealVar sy("sy","sy",0.1,0,5); RooRealVar mx("mx","mx",0,-5,5); RooRealVar my("my","my",0,-5,5); RooGaussian gx("gx","gx",x,mx,sx); RooGaussian gy("gy","gy",y,my,sy); RooProdPdf gxy("gxy","gxy",gx,gy); RooDataSet *data = gxy.generate(RooArgSet(x,y), 2000); gxy.fitTo(*data); RooPlot *framex = x.frame(); RooPlot *framey = y.frame(); data->plotOn(framex); data->plotOn(framey); gxy.plotOn(framex); gxy.plotOn(framey); TCanvas *c = new TCanvas("c"); TCanvas *c2 = new TCanvas("c2"); c->Divide(2,2); c->cd(1); framex->Draw(); c->cd(2); framey->Draw(); RooRealVar dmx("dmx","dmx",0); RooRealVar smearx("smearx","smearx",1); RooGaussian g_smearx("g_smearx","",x,dmx,smearx); x.setBins(10000,"fft"); y.setBins(10000,"fft"); //RooNumConvPdf fftconv("fftconv","fftconv",x,gxy,g_smearx); RooFFTConvPdf fftconv("fftconv","fftconv",x,gxy,g_smearx); RooDataSet *data_fft = fftconv.generate(RooArgSet(x,y), 200); fftconv.fitTo(*data_fft); RooPlot *frame_fftx = x.frame(); RooPlot *frame_ffty = y.frame(); data_fft->plotOn(frame_fftx,Binning(20)); data_fft->plotOn(frame_ffty,Binning(20)); fftconv.plotOn(frame_fftx); fftconv.plotOn(frame_ffty); c->cd(3); frame_fftx->Draw(); c->cd(4); frame_ffty->Draw(); c2.cd(); TH1* h = fftconv.createHistogram("x,y",50,50); h->SetLineColor(kBlue); h->Draw("surf"); }