// make and test Poisson model using namespace RooFit; using namespace RooStats; void makeCountingModel(int nobs = 40, double b = 20, double berr = 3) { TString fname = TString::Format("countingmodel_n%d_b%d.root",nobs,int(b)); TFile f(fname,"RECREATE"); RooWorkspace* w = new RooWorkspace("w",true); w->factory("sum:nexp(s[1.,0,100],b[0,100])"); w->factory("Poisson:pdf(nobs[0,100],nexp)"); w->factory("Gaussian:constraint(b,b_glob[10],sigmab[1])"); w->factory("PROD:model(pdf,constraint)"); // set input variables w->var("b_glob")->setVal(b); w->var("sigmab")->setVal(berr); w->var("nobs")->setVal(nobs); // make data set RooDataSet data("data","", *(w->var("nobs")) ); data.add(*(w->var("nobs")) ); w->import(data); ModelConfig * mc = new ModelConfig("ModelConfig",w); mc->SetPdf(*w->pdf("model")); mc->SetParametersOfInterest(*w->var("s")); mc->SetObservables(*w->var("nobs")); mc->SetSnapshot(*w->var("s")); mc->SetNuisanceParameters( *w->var("b")); mc->SetGlobalObservables( *w->var("b_glob")); w->import(*mc); w->Write(); cout << "model written to file " << endl; f.Close(); }