11 #ifndef ROOSTATS_ModelConfig
12 #define ROOSTATS_ModelConfig
30 class ModelConfig final :
public TNamed,
public RooWorkspaceHandle {
34 ModelConfig(RooWorkspace * ws = 0) :
40 ModelConfig(
const char* name, RooWorkspace *ws = 0) :
46 ModelConfig(
const char* name,
const char* title, RooWorkspace *ws = 0) :
54 virtual ModelConfig * Clone(
const char * name =
"")
const override {
55 ModelConfig * mc =
new ModelConfig(*
this);
56 if(strcmp(name,
"")==0)
57 mc->SetName(this->GetName());
64 virtual void SetWS(RooWorkspace & ws)
override;
66 virtual void SetWorkspace(RooWorkspace & ws) { SetWS(ws); }
69 virtual void ReplaceWS(RooWorkspace *ws)
override {
75 virtual void SetProtoData(RooAbsData & data) {
77 SetProtoData( data.GetName() );
81 virtual void SetPdf(
const RooAbsPdf& pdf) {
83 SetPdf( pdf.GetName() );
87 virtual void SetPriorPdf(
const RooAbsPdf& pdf) {
89 SetPriorPdf( pdf.GetName() );
93 virtual void SetParameters(
const RooArgSet& set) {
94 if (!SetHasOnlyParameters(set,
"ModelConfig::SetParameters")) return ;
95 fPOIName=std::string(GetName()) +
"_POI";
96 DefineSetInWS(fPOIName.c_str(), set);
100 virtual void SetParametersOfInterest(
const RooArgSet& set) {
101 if (!SetHasOnlyParameters(set,
"ModelConfig::SetParametersOfInterest")) return ;
107 virtual void SetParameters(
const char *argList) {
109 SetParameters(GetWS()->argSet(argList));
114 virtual void SetParametersOfInterest(
const char *argList) {
115 SetParameters(argList);
119 virtual void SetNuisanceParameters(
const RooArgSet& set) {
120 if (!SetHasOnlyParameters(set,
"ModelConfig::SetNuisanceParameters")) return ;
121 fNuisParamsName=std::string(GetName()) +
"_NuisParams";
122 DefineSetInWS(fNuisParamsName.c_str(), set);
127 virtual void SetNuisanceParameters(
const char *argList) {
129 SetNuisanceParameters(GetWS()->argSet(argList));
133 virtual void SetConstraintParameters(
const RooArgSet& set) {
134 if (!SetHasOnlyParameters(set,
"ModelConfig::SetConstainedParameters")) return ;
135 fConstrParamsName=std::string(GetName()) +
"_ConstrainedParams";
136 DefineSetInWS(fConstrParamsName.c_str(), set);
140 virtual void SetConstraintParameters(
const char *argList) {
142 SetConstraintParameters(GetWS()->argSet(argList));
146 virtual void SetObservables(
const RooArgSet& set) {
147 if (!SetHasOnlyParameters(set,
"ModelConfig::SetObservables")) return ;
148 fObservablesName=std::string(GetName()) +
"_Observables";
149 DefineSetInWS(fObservablesName.c_str(), set);
153 virtual void SetObservables(
const char *argList) {
155 SetObservables(GetWS()->argSet(argList));
159 virtual void SetConditionalObservables(
const RooArgSet& set) {
160 if (!SetHasOnlyParameters(set,
"ModelConfig::SetConditionalObservables")) return ;
161 fConditionalObsName=std::string(GetName()) +
"_ConditionalObservables";
162 DefineSetInWS(fConditionalObsName.c_str(), set);
166 virtual void SetConditionalObservables(
const char *argList) {
168 SetConditionalObservables(GetWS()->argSet(argList));
172 virtual void SetGlobalObservables(
const RooArgSet& set) {
174 if (!SetHasOnlyParameters(set,
"ModelConfig::SetGlobalObservables")) return ;
177 RooFIter iter = set.fwdIterator();
178 RooAbsArg *arg = iter.next();
180 arg->setAttribute(
"Constant", kTRUE);
184 fGlobalObsName=std::string(GetName()) +
"_GlobalObservables";
185 DefineSetInWS(fGlobalObsName.c_str(), set);
189 virtual void SetGlobalObservables(
const char *argList) {
191 SetGlobalObservables(GetWS()->argSet(argList));
196 virtual void SetSnapshot(
const RooArgSet& set);
199 virtual void SetPdf(
const char* name) {
200 if (! GetWS() )
return;
202 if(GetWS()->pdf(name))
205 coutE(ObjectHandling) <<
"pdf "<<name<<
" does not exist in workspace"<<std::endl;
209 virtual void SetPriorPdf(
const char* name) {
210 if (! GetWS() )
return;
212 if(GetWS()->pdf(name))
213 fPriorPdfName = name;
215 coutE(ObjectHandling) <<
"pdf "<<name<<
" does not exist in workspace"<<std::endl;
220 virtual void SetProtoData(
const char* name){
221 if (! GetWS() )
return;
223 if(GetWS()->data(name))
224 fProtoDataName = name;
226 coutE(ObjectHandling) <<
"dataset "<<name<<
" does not exist in workspace"<<std::endl;
234 RooAbsPdf * GetPdf()
const {
return (GetWS()) ? GetWS()->pdf(fPdfName.c_str()) : 0; }
237 const RooArgSet * GetParametersOfInterest()
const {
return (GetWS()) ? GetWS()->set(fPOIName.c_str()) : 0; }
240 const RooArgSet * GetNuisanceParameters()
const {
return (GetWS()) ? GetWS()->set(fNuisParamsName.c_str()) : 0; }
243 const RooArgSet * GetConstraintParameters()
const {
return (GetWS()) ? GetWS()->set(fConstrParamsName.c_str()) : 0; }
246 RooAbsPdf * GetPriorPdf()
const {
return (GetWS()) ? GetWS()->pdf(fPriorPdfName.c_str()) : 0; }
249 const RooArgSet * GetObservables()
const {
return (GetWS()) ? GetWS()->set(fObservablesName.c_str()) : 0; }
252 const RooArgSet * GetConditionalObservables()
const {
return (GetWS()) ? GetWS()->set(fConditionalObsName.c_str()) : 0; }
255 const RooArgSet * GetGlobalObservables()
const {
return (GetWS()) ? GetWS()->set(fGlobalObsName.c_str()) : 0; }
258 RooAbsData * GetProtoData()
const {
return (GetWS()) ? GetWS()->data(fProtoDataName.c_str()) : 0; }
261 const RooArgSet * GetSnapshot()
const;
263 void LoadSnapshot()
const;
265 RooWorkspace * GetWS()
const override;
267 RooWorkspace * GetWorkspace()
const {
return GetWS(); }
269 void GuessObsAndNuisance(
const RooAbsData& data);
272 virtual void Print(Option_t* option =
"")
const override;
277 Bool_t SetHasOnlyParameters(
const RooArgSet& set,
const char* errorMsgPrefix=0) ;
280 void DefineSetInWS(
const char* name,
const RooArgSet& set);
283 void ImportPdfInWS(
const RooAbsPdf & pdf);
286 void ImportDataInWS(RooAbsData & data);
292 std::string fPdfName;
293 std::string fDataName;
294 std::string fPOIName;
296 std::string fNuisParamsName;
297 std::string fConstrParamsName;
298 std::string fPriorPdfName;
300 std::string fConditionalObsName;
301 std::string fGlobalObsName;
302 std::string fProtoDataName;
304 std::string fSnapshotName;
306 std::string fObservablesName;
308 ClassDefOverride(ModelConfig,5)