using namespace RooFit; void rvtest(int nsgn=8000, int nbkg=40000) { // Variables RooRealVar x("x","x",0,1); RooRealVar y("y","y",-1,1); // Build 2D bkg model RooRealVar bkgA("bkgA","bkgA",-.2,-1,0); RooExponential bkgPdfX("bkgPdfX","bkgPdfX",x,bkgA); RooUniform bkgPdfY("bkgPdfY","bkgPdfY",y); RooProdPdf bkgPdf("bkgPdf","bkgPdf",RooArgSet(bkgPdfX,bkgPdfY)); // Build 1st signal model RooRealVar dmA0("dmA0","dmA0",.5,-.2,.2); RooRealVar dmA1("dmA1","dmA1",.2,-1,1); RooPolyVar meanA("meanA","meanA",y,RooArgList(dmA0,dmA1)); RooRealVar sigmaA("sigmaA","sigmaA",.1,.05,.2); RooGaussian sgnPdfA("sgnPdfA","sgnPdfA",x,meanA,sigmaA); // Build 2nd signal model RooRealVar dmB0("dmB0","dmB0",.5,-.2,.2); RooRealVar dmB1("dmB1","dmB1",-.2,-1,1); RooPolyVar meanB("meanB","meanB",y,RooArgList(dmB0,dmB1)); RooRealVar sigmaB("sigmaB","sigmaB",.08,.05,.2); RooGaussian sgnPdfB("sgnPdfB","sgnPdfB",x,meanB,sigmaB); // Define the yields RooRealVar bkgN("bkgN","bkgN",nbkg,.5*nbkg,1.5*nbkg); RooRealVar sgnAN("sgnAN","sgnAN",nsgn,.5*nsgn,1.5*nsgn); RooRealVar sgnBN("sgnBN","sgnBN",.9*nsgn,.9*.5*nsgn,.9*1.5*nsgn); // Define the fractions RooRealVar fracA("fracA","fracA",.20,.1,.3); RooRealVar fracB("fracB","fracB",.18,.1,.3); // Compose the global model RooAddPdf model("model","Model", RooArgList(sgnPdfA,sgnPdfB,bkgPdf), //RooArgSet(sgnAN,sgnBN,bkgN)); RooArgList(fracA,fracB)); // genera dei dati *verosimili* RooDataSet *data = model.generate(RooArgSet(x,y),nsgn+nbkg); model.fitTo(*data); TCanvas *canvas = new TCanvas("canvas","canvas",750,250); canvas->Divide(3); canvas->cd(1); Info("rvtest","Plot X projection"); RooPlot *frameX = x.frame(); model.plotOn(frameX); data->plotOn(frameX); frameX->Draw(); canvas->cd(2); Info("rvtest","Plot Y projection"); RooPlot *frameY = y.frame(); model.plotOn(frameY); data->plotOn(frameY); frameY->Draw(); canvas->cd(3); Info("rvtest","Plot 2D projection"); TH1 *hh_model = model.createHistogram("hh_model",x,Binning(50), YVar(y,Binning(50))); hh_model->Draw("surf"); }