using namespace RooFit; using namespace RooStats; void CountingModel2() { RooWorkspace w("w"); w.factory("x[2500,45000]"); w.factory("Gaussian::G(x[2500,45000],mu[34005.1],sigma[500.004])"); w.factory("CBShape::CBall(x[2500,45000], mean[34005.9], sigma1[64.6261], alpha[3.92262],n[1.76925])"); w.factory("EXPR::bkg('exp(x*-a)/pow(x,3)',x[2500,45000],a[ 0.000324,0.000001,0.0004])") ; w.factory("SUM::signal(frac[0.699998]*CBall,G)"); w.factory("SUM::sum(s[0,30]*signal,b[0,100000]*bkg)"); w.defineSet("obs","x"); w.defineSet("poi","s"); w.defineSet("np1","b"); w.defineSet("np2","a"); RooAbsPdf * pdf = w.pdf("sum"); RooRealVar * x = w.var("x"); // the observable RooRandom::randomGenerator()->SetSeed(111); RooDataSet * data = pdf->generate( *x); data->SetName("data"); w.import(*data); data->Print(); ModelConfig mc("ModelConfig",&w); //mc.SetWorkspace(w); mc.SetPdf(*pdf); mc.SetObservables(*w.var("x")); mc.SetParametersOfInterest(*w.var("s")); mc.SetNuisanceParameters("b,a"); mc.SetSnapshot(*w.var("s")); mc.Print(); w.import(mc); TString fileName = "CountingModel2.root"; w.writeToFile(fileName, true); cout << "model written to file " << fileName << endl; pdf->fitTo(*data); RooFitResult * r = pdf->fitTo(*data, RooFit::Save(true), RooFit::Minimizer("Minuit2","Migrad")); r->Print(); RooPlot * pl = x->frame(); data->plotOn(pl); pdf->plotOn(pl); pl->Draw(); }