using namespace RooStats; void test2(){ int nsb = 30; // number of observed events int nb = 28; // number of background events RooWorkspace w("w",true); // make Poisson model w.factory("sum:nexp(s[2,0,20],b[0,0,50])"); // Poisson of (nsb_obs | s+b) w.factory("Poisson:psb(nsb_obs[50,0,70],nexp)"); // Poisson of (nb_obs | b) w.factory("Poisson:pb(nb_obs[50,0,50],b)"); //The model w.factory("PROD:model(psb,pb)"); w.var("nb_obs")->setVal(nb); w.var("nb_obs")->setConstant(true); // needed for being treated as global observables //set value of observed events RooRealVar *nsb_obs = w.var("nsb_obs"); nsb_obs->setVal(nsb); // make data set with the namber of observed events RooDataSet data("data","",*nsb_obs); data.add(*nsb_obs); w.import(data); w.Print(); ModelConfig mc("Smodel",&w); mc.SetPdf(*w.pdf("model")); mc.SetParametersOfInterest(*w.var("s")); mc.SetObservables(*w.var("nsb_obs")); // these are needed for the hypothesis tests mc.SetSnapshot(*w.var("s")); mc.SetGlobalObservables(*w.var("nb_obs")); //construct the B hypo (s=0) RooStats::ModelConfig* bModel = (RooStats::ModelConfig*) mc.Clone("Bmodel") ; RooRealVar* poi = (RooRealVar*) bModel->GetParametersOfInterest()->first(); poi->setVal(0); bModel->SetSnapshot(*poi); mc.Print(); cout<<"---------"<Print(); // import model in the workspace w.import(mc); w.import(*bModel); TString fileName = "test2.out1.root"; // write workspace in the file (recreate file if already existing) w.writeToFile(fileName, true); }