using namespace std; using namespace RooFit; using namespace RooStats; void CreateWorkspace(TString fileName) { RooWorkspace* wksp = new RooWorkspace("wksp"); wksp->factory("x[0.,1.]"); TFile* outFile = new TFile(fileName,"recreate"); wksp->Write(); outFile->Close(); } void CreatePdf(TString fileName) { TFile* inFile = new TFile(fileName,"read"); RooWorkspace* wksp = (RooWorkspace*)inFile->Get("wksp")->Clone(); inFile->Close(); wksp->factory("SUM::bkgPlusSigModel(prod::bkgSize(bu[1.,0.,2.],bkgN[100000])*Exponential::bkgModel(x,k[-8,-14,-3]), prod::sigSize(mu[0.2,-5.,5.],sigN[1000])*BreitWigner::sigModel(x,m[0.25,0.1,0.9],w[0.03]))"); TFile* outFile = new TFile(fileName,"recreate"); wksp->Write(); outFile->Close(); } void CreateModel(TString fileName) { TFile* inFile = new TFile(fileName,"read"); RooWorkspace* wksp = (RooWorkspace*)inFile->Get("wksp")->Clone(); inFile->Close(); ModelConfig* model = new ModelConfig("model",wksp); if(wksp->var("x")) model->SetObservables("x"); if(wksp->pdf("bkgPlusSigModel")) model->SetPdf("bkgPlusSigModel"); wksp->import(*model); TFile* outFile = new TFile(fileName,"recreate"); outFile->cd(); wksp->Write(); outFile->Close(); } void PrintModel(TString fileName) { TFile* inFile = new TFile(fileName,"read"); RooWorkspace* wksp = (RooWorkspace*)inFile->Get("wksp")->Clone(); if(wksp->obj("model")) wksp->obj("model")->Print(); inFile->Close(); } void createThings(std::string arg) { TString mode = TString(arg); //wksp, pdf, model, any combination TString fileName = "workspace.root"; if(mode.Contains("workspace")) CreateWorkspace(fileName); if(mode.Contains("pdf")) CreatePdf(fileName); if(mode.Contains("model")) CreateModel(fileName); PrintModel(fileName); exit(0); }