#ifndef ROOSTATS_ModelConfig
#define ROOSTATS_ModelConfig
#ifndef ROO_ABS_PDF
#include "RooAbsPdf.h"
#endif
#ifndef ROO_ABS_DATA
#include "RooAbsData.h"
#endif
#ifndef ROO_ARG_SET
#include "RooArgSet.h"
#endif
#ifndef ROO_WORKSPACE
#include "RooWorkspace.h"
#endif
#include <string>
namespace RooStats {
class ModelConfig : public TNamed {
public:
ModelConfig() : TNamed(), fWS(0), fOwnsWorkspace(false) {
}
ModelConfig(const char* name) : TNamed(name, name), fWS(0), fOwnsWorkspace(false) {
}
ModelConfig(const char* name, const char* title) : TNamed(name, title), fWS(0), fOwnsWorkspace(false) {
fWS = 0;
fOwnsWorkspace = false;
}
virtual ~ModelConfig();
virtual void SetWorkspace(RooWorkspace & ws);
virtual void SetProtoData(RooAbsData & data) {
ImportDataInWS(data);
SetProtoData( data.GetName() );
}
virtual void SetPdf(RooAbsPdf& pdf) {
ImportPdfInWS(pdf);
SetPdf( pdf.GetName() );
}
virtual void SetPriorPdf(RooAbsPdf& pdf) {
ImportPdfInWS(pdf);
SetPriorPdf( pdf.GetName() );
}
virtual void SetParameters(RooArgSet& set) {
fPOIName=std::string(GetName()) + "_POI";
DefineSetInWS(fPOIName.c_str(), set);
}
virtual void SetNuisanceParameters(RooArgSet& set) {
fNuisParamsName=std::string(GetName()) + "_NuisParams";
DefineSetInWS(fNuisParamsName.c_str(), set);
}
virtual void SetSnapshot(RooArgSet& set) {
fSnapshotName=std::string(GetName()) + "_Snapshot";
DefineSetInWS(fSnapshotName.c_str(), set);
}
virtual void SetPdf(const char* name) {
if(!fWS){
coutE(ObjectHandling) << "workspace not set" << endl;
return;
}
if(fWS->pdf(name))
fPdfName = name;
else
coutE(ObjectHandling) << "pdf "<<name<< " does not exist in workspace"<<endl;
}
virtual void SetPriorPdf(const char* name) {
if(!fWS){
coutE(ObjectHandling) << "workspace not set" << endl;
return;
}
if(fWS->pdf(name))
fPriorPdfName = name;
else
coutE(ObjectHandling) << "pdf "<<name<< " does not exist in workspace"<<endl;
}
virtual void SetProtoData(const char* name){
if(!fWS){
coutE(ObjectHandling) << "workspace not set" << endl;
return;
}
if(fWS->data(name))
fProtoDataName = name;
else
coutE(ObjectHandling) << "dataset "<<name<< " does not exist in workspace"<<endl;
}
RooAbsPdf * GetPdf() const { return (fWS) ? fWS->pdf(fPdfName.c_str()) : 0; }
const RooArgSet * GetParametersOfInterest() const { return (fWS) ? fWS->set(fPOIName.c_str()) : 0; }
const RooArgSet * GetNuisanceParameters() const { return (fWS) ? fWS->set(fNuisParamsName.c_str()) : 0; }
const RooArgSet * GetConstraintParameters() const { return (fWS) ? fWS->set(fConstrainedParamName.c_str()) : 0; }
RooAbsPdf * GetPriorPdf() const { return (fWS) ? fWS->pdf(fPriorPdfName.c_str()) : 0; }
const RooArgSet * GetObservables() const { return (fWS) ? fWS->set(fObservablesName.c_str()) : 0; }
const RooArgSet * GetConditionalObservables() const { return (fWS) ? fWS->set(fConditionalObservablesName.c_str()) : 0; }
RooAbsData * GetProtoData() const { return (fWS) ? fWS->data(fProtoDataName.c_str()) : 0; }
const RooArgSet * GetSnapshot() const { return (fWS) ? fWS->set(fSnapshotName.c_str()) : 0; }
const RooWorkspace * GetWS() const { return fWS; }
protected:
void DefineSetInWS(const char* name, RooArgSet& set);
void ImportPdfInWS(RooAbsPdf & pdf);
void ImportDataInWS(RooAbsData & data);
RooWorkspace* fWS;
Bool_t fOwnsWorkspace;
std::string fPdfName;
std::string fDataName;
std::string fPOIName;
std::string fNuisParamsName;
std::string fConstrainedParamName;
std::string fPriorPdfName;
std::string fConditionalObservablesName;
std::string fProtoDataName;
std::string fSnapshotName;
std::string fObservablesName;
ClassDef(ModelConfig,1)
};
}
#endif