using namespace RooFit; using namespace RooStats; void CountingModel2() { RooWorkspace w("w"); w.factory("x[5000,45000]"); w.factory("Gaussian::G(x,mu[13869.7],sigma[1100])"); w.factory("CBShape::CBall(x, mean[14003.8], sigma1[60.6772], alpha[1.18963],n[2.12786])"); w.factory("EXPR::bkg('exp(x*-a)/pow(x,3)',x,a[ 0.000324,0.00001,0.0004])") ; w.factory("SUM::signal(frac[0.91691]*CBall,G)"); //w.factory("EXPR::muss('mus*nsig',mus[0.01,0.,5.],nsig[2506])") ; //w.factory("EXPR::mubb('mub*nbkg',mub[1.,0.,2.],nbkg[5340])") ; w.factory("SUM::sum(s[0.,2000]*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 w.var("s")->setVal( 352.426); // i set this equal to my signal yield? w.var("b")->setVal(5308.15); // i set this equal to my background yield 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(); }