diff --git a/roofit/roofitcore/inc/RooFit/ModelConfig.h b/roofit/roofitcore/inc/RooFit/ModelConfig.h index b5dbfd70abb4f98ae6fb82ffab88cdb86255d9b2..8c8404feac29d2a4d97e44ca2591beb9c0bd7098 100644 --- a/roofit/roofitcore/inc/RooFit/ModelConfig.h +++ b/roofit/roofitcore/inc/RooFit/ModelConfig.h @@ -17,7 +17,6 @@ #ifndef RooFit_ModelConfig_h #define RooFit_ModelConfig_h - #include "RooAbsPdf.h" #include "RooAbsData.h" @@ -30,37 +29,35 @@ #include <string> - // ModelConfig kept in the RooStats namespace for backwards compatibility. namespace RooStats { class ModelConfig final : public TNamed, public RooWorkspaceHandle { public: - - ModelConfig(RooWorkspace * ws = nullptr) : - TNamed() + ModelConfig(RooWorkspace *ws = nullptr) : TNamed() { - if(ws) SetWS(*ws); + if (ws) + SetWS(*ws); } - ModelConfig(const char* name, RooWorkspace *ws = nullptr) : - TNamed(name, name) + ModelConfig(const char *name, RooWorkspace *ws = nullptr) : TNamed(name, name) { - if(ws) SetWS(*ws); + if (ws) + SetWS(*ws); } - ModelConfig(const char* name, const char* title, RooWorkspace *ws = nullptr) : - TNamed(name, title) + ModelConfig(const char *name, const char *title, RooWorkspace *ws = nullptr) : TNamed(name, title) { - if(ws) SetWS(*ws); + if (ws) + SetWS(*ws); } - /// clone - ModelConfig * Clone(const char * name = "") const override { - ModelConfig * mc = new ModelConfig(*this); - if(strcmp(name,"")==0) + ModelConfig *Clone(const char *name = "") const override + { + ModelConfig *mc = new ModelConfig(*this); + if (strcmp(name, "") == 0) mc->SetName(this->GetName()); else mc->SetName(name); @@ -68,256 +65,294 @@ public: } /// Set a workspace that owns all the necessary components for the analysis. - void SetWS(RooWorkspace & ws) override; + void SetWS(RooWorkspace &ws) override; //// alias for SetWS(...) - virtual void SetWorkspace(RooWorkspace & ws) { SetWS(ws); } + virtual void SetWorkspace(RooWorkspace &ws) { SetWS(ws); } /// Remove the existing reference to a workspace and replace it with this new one. - void ReplaceWS(RooWorkspace *ws) override { - fRefWS = nullptr; - SetWS(*ws); + void ReplaceWS(RooWorkspace *ws) override + { + fRefWS = nullptr; + SetWS(*ws); } /// Set the proto DataSet, add to the workspace if not already there - virtual void SetProtoData(RooAbsData & data) { + virtual void SetProtoData(RooAbsData &data) + { ImportDataInWS(data); - SetProtoData( data.GetName() ); + SetProtoData(data.GetName()); } /// Set the Pdf, add to the workspace if not already there - virtual void SetPdf(const RooAbsPdf& pdf) { + virtual void SetPdf(const RooAbsPdf &pdf) + { ImportPdfInWS(pdf); - SetPdf( pdf.GetName() ); + SetPdf(pdf.GetName()); } /// Set the Prior Pdf, add to the workspace if not already there - virtual void SetPriorPdf(const RooAbsPdf& pdf) { + virtual void SetPriorPdf(const RooAbsPdf &pdf) + { ImportPdfInWS(pdf); - SetPriorPdf( pdf.GetName() ); + SetPriorPdf(pdf.GetName()); } /// Specify parameters of the PDF. - virtual void SetParameters(const RooArgSet& set) { - if (!SetHasOnlyParameters(set,"ModelConfig::SetParameters")) return ; - fPOIName=std::string(GetName()) + "_POI"; - DefineSetInWS(fPOIName.c_str(), set); + virtual void SetParameters(const RooArgSet &set) + { + if (!SetHasOnlyParameters(set, "ModelConfig::SetParameters")) + return; + fPOIName = std::string(GetName()) + "_POI"; + DefineSetInWS(fPOIName.c_str(), set); } /// Specify parameters of interest. - virtual void SetParametersOfInterest(const RooArgSet& set) { - if (!SetHasOnlyParameters(set,"ModelConfig::SetParametersOfInterest")) return ; + virtual void SetParametersOfInterest(const RooArgSet &set) + { + if (!SetHasOnlyParameters(set, "ModelConfig::SetParametersOfInterest")) + return; SetParameters(set); } /// Specify parameters /// using a list of comma-separated list of arguments already in the workspace. - virtual void SetParameters(const char *argList) { - if(!GetWS()) return; + virtual void SetParameters(const char *argList) + { + if (!GetWS()) + return; SetParameters(GetWS()->argSet(argList)); } /// Specify parameters of interest /// using a comma-separated list of arguments already in the workspace. - virtual void SetParametersOfInterest(const char *argList) { - SetParameters(argList); - } + virtual void SetParametersOfInterest(const char *argList) { SetParameters(argList); } /// Specify the nuisance parameters (parameters that are not POI). - virtual void SetNuisanceParameters(const RooArgSet& set) { - if (!SetHasOnlyParameters(set,"ModelConfig::SetNuisanceParameters")) return ; - fNuisParamsName=std::string(GetName()) + "_NuisParams"; + virtual void SetNuisanceParameters(const RooArgSet &set) + { + if (!SetHasOnlyParameters(set, "ModelConfig::SetNuisanceParameters")) + return; + fNuisParamsName = std::string(GetName()) + "_NuisParams"; DefineSetInWS(fNuisParamsName.c_str(), set); } /// Specify the nuisance parameters /// using a comma-separated list of arguments already in the workspace. - virtual void SetNuisanceParameters(const char *argList) { - if(!GetWS()) return; + virtual void SetNuisanceParameters(const char *argList) + { + if (!GetWS()) + return; SetNuisanceParameters(GetWS()->argSet(argList)); } /// Specify the constraint parameters - virtual void SetConstraintParameters(const RooArgSet& set) { - if (!SetHasOnlyParameters(set,"ModelConfig::SetConstainedParameters")) return ; - fConstrParamsName=std::string(GetName()) + "_ConstrainedParams"; + virtual void SetConstraintParameters(const RooArgSet &set) + { + if (!SetHasOnlyParameters(set, "ModelConfig::SetConstainedParameters")) + return; + fConstrParamsName = std::string(GetName()) + "_ConstrainedParams"; DefineSetInWS(fConstrParamsName.c_str(), set); } /// Specify the constraint parameters /// through a comma-separated list of arguments already in the workspace. - virtual void SetConstraintParameters(const char *argList) { - if(!GetWS()) return; + virtual void SetConstraintParameters(const char *argList) + { + if (!GetWS()) + return; SetConstraintParameters(GetWS()->argSet(argList)); } /// Specify the observables. - virtual void SetObservables(const RooArgSet& set) { - if (!SetHasOnlyParameters(set,"ModelConfig::SetObservables")) return ; - fObservablesName=std::string(GetName()) + "_Observables"; + virtual void SetObservables(const RooArgSet &set) + { + if (!SetHasOnlyParameters(set, "ModelConfig::SetObservables")) + return; + fObservablesName = std::string(GetName()) + "_Observables"; DefineSetInWS(fObservablesName.c_str(), set); } /// specify the observables /// through a comma-separated list of arguments already in the workspace. - virtual void SetObservables(const char *argList) { - if(!GetWS()) return; + virtual void SetObservables(const char *argList) + { + if (!GetWS()) + return; SetObservables(GetWS()->argSet(argList)); } /// Specify the conditional observables. - virtual void SetConditionalObservables(const RooArgSet& set) { - if (!SetHasOnlyParameters(set,"ModelConfig::SetConditionalObservables")) return ; - fConditionalObsName=std::string(GetName()) + "_ConditionalObservables"; + virtual void SetConditionalObservables(const RooArgSet &set) + { + if (!SetHasOnlyParameters(set, "ModelConfig::SetConditionalObservables")) + return; + fConditionalObsName = std::string(GetName()) + "_ConditionalObservables"; DefineSetInWS(fConditionalObsName.c_str(), set); } /// Specify the conditional observables /// through a comma-separated list of arguments already in the workspace. - virtual void SetConditionalObservables(const char *argList) { - if(!GetWS()) return; + virtual void SetConditionalObservables(const char *argList) + { + if (!GetWS()) + return; SetConditionalObservables(GetWS()->argSet(argList)); } /// Specify the global observables. - virtual void SetGlobalObservables(const RooArgSet& set) { + virtual void SetGlobalObservables(const RooArgSet &set) + { - if (!SetHasOnlyParameters(set,"ModelConfig::SetGlobalObservables")) return ; + if (!SetHasOnlyParameters(set, "ModelConfig::SetGlobalObservables")) + return; // make global observables constant - for (auto *arg : set){ + for (auto *arg : set) { arg->setAttribute("Constant", true); - } + } - fGlobalObsName=std::string(GetName()) + "_GlobalObservables"; + fGlobalObsName = std::string(GetName()) + "_GlobalObservables"; DefineSetInWS(fGlobalObsName.c_str(), set); } /// Specify the global observables /// through a comma-separated list of arguments already in the workspace. - virtual void SetGlobalObservables(const char *argList) { - if(!GetWS()) return; + virtual void SetGlobalObservables(const char *argList) + { + if (!GetWS()) + return; SetGlobalObservables(GetWS()->argSet(argList)); } /// Set parameter values for a particular hypothesis if using a common PDF /// by saving a snapshot in the workspace. - virtual void SetSnapshot(const RooArgSet& set); + virtual void SetSnapshot(const RooArgSet &set); /// Specify the name of the PDF in the workspace to be used. - virtual void SetPdf(const char* name) { - if (! GetWS() ) return; + virtual void SetPdf(const char *name) + { + if (!GetWS()) + return; - if(GetWS()->pdf(name)) + if (GetWS()->pdf(name)) fPdfName = name; else - coutE(ObjectHandling) << "pdf "<<name<< " does not exist in workspace"<<std::endl; + coutE(ObjectHandling) << "pdf " << name << " does not exist in workspace" << std::endl; } /// Specify the name of the PDF in the workspace to be used. - virtual void SetPriorPdf(const char* name) { - if (! GetWS() ) return; + virtual void SetPriorPdf(const char *name) + { + if (!GetWS()) + return; - if(GetWS()->pdf(name)) + if (GetWS()->pdf(name)) fPriorPdfName = name; else - coutE(ObjectHandling) << "pdf "<<name<< " does not exist in workspace"<<std::endl; + coutE(ObjectHandling) << "pdf " << name << " does not exist in workspace" << std::endl; } - /// Specify the name of the dataset in the workspace to be used. - virtual void SetProtoData(const char* name){ - if (! GetWS() ) return; + virtual void SetProtoData(const char *name) + { + if (!GetWS()) + return; - if(GetWS()->data(name)) + if (GetWS()->data(name)) fProtoDataName = name; else - coutE(ObjectHandling) << "dataset "<<name<< " does not exist in workspace"<<std::endl; + coutE(ObjectHandling) << "dataset " << name << " does not exist in workspace" << std::endl; } - /* getter methods */ - /// get model PDF (return nullptr if pdf has not been specified or does not exist) - RooAbsPdf * GetPdf() const { return (GetWS()) ? GetWS()->pdf(fPdfName.c_str()) : nullptr; } + RooAbsPdf *GetPdf() const { return (GetWS()) ? GetWS()->pdf(fPdfName.c_str()) : nullptr; } /// get RooArgSet containing the parameter of interest (return nullptr if not existing) - const RooArgSet * GetParametersOfInterest() const { return (GetWS()) ? GetWS()->set(fPOIName.c_str()) : nullptr; } + const RooArgSet *GetParametersOfInterest() const { return (GetWS()) ? GetWS()->set(fPOIName.c_str()) : nullptr; } /// get RooArgSet containing the nuisance parameters (return nullptr if not existing) - const RooArgSet * GetNuisanceParameters() const { return (GetWS()) ? GetWS()->set(fNuisParamsName.c_str()) : nullptr; } + const RooArgSet *GetNuisanceParameters() const + { + return (GetWS()) ? GetWS()->set(fNuisParamsName.c_str()) : nullptr; + } /// get RooArgSet containing the constraint parameters (return nullptr if not existing) - const RooArgSet * GetConstraintParameters() const { return (GetWS()) ? GetWS()->set(fConstrParamsName.c_str()) : nullptr; } + const RooArgSet *GetConstraintParameters() const + { + return (GetWS()) ? GetWS()->set(fConstrParamsName.c_str()) : nullptr; + } /// get parameters prior pdf (return nullptr if not existing) - RooAbsPdf * GetPriorPdf() const { return (GetWS()) ? GetWS()->pdf(fPriorPdfName.c_str()) : nullptr; } + RooAbsPdf *GetPriorPdf() const { return (GetWS()) ? GetWS()->pdf(fPriorPdfName.c_str()) : nullptr; } /// get RooArgSet for observables (return nullptr if not existing) - const RooArgSet * GetObservables() const { return (GetWS()) ? GetWS()->set(fObservablesName.c_str()) : nullptr; } + const RooArgSet *GetObservables() const { return (GetWS()) ? GetWS()->set(fObservablesName.c_str()) : nullptr; } /// get RooArgSet for conditional observables (return nullptr if not existing) - const RooArgSet * GetConditionalObservables() const { return (GetWS()) ? GetWS()->set(fConditionalObsName.c_str()) : nullptr; } + const RooArgSet *GetConditionalObservables() const + { + return (GetWS()) ? GetWS()->set(fConditionalObsName.c_str()) : nullptr; + } /// get RooArgSet for global observables (return nullptr if not existing) - const RooArgSet * GetGlobalObservables() const { return (GetWS()) ? GetWS()->set(fGlobalObsName.c_str()) : nullptr; } + const RooArgSet *GetGlobalObservables() const { return (GetWS()) ? GetWS()->set(fGlobalObsName.c_str()) : nullptr; } /// get Proto data set (return nullptr if not existing) - RooAbsData * GetProtoData() const { return (GetWS()) ? GetWS()->data(fProtoDataName.c_str()) : nullptr; } + RooAbsData *GetProtoData() const { return (GetWS()) ? GetWS()->data(fProtoDataName.c_str()) : nullptr; } /// get RooArgSet for parameters for a particular hypothesis (return nullptr if not existing) - const RooArgSet * GetSnapshot() const; + const RooArgSet *GetSnapshot() const; void LoadSnapshot() const; - RooWorkspace * GetWS() const override; + RooWorkspace *GetWS() const override; /// alias for GetWS() - RooWorkspace * GetWorkspace() const { return GetWS(); } + RooWorkspace *GetWorkspace() const { return GetWS(); } - void GuessObsAndNuisance(const RooAbsData& data, bool printModelConfig = true); + void GuessObsAndNuisance(const RooAbsData &data, bool printModelConfig = true); /// overload the print method - void Print(Option_t* option = "") const override; + void Print(Option_t *option = "") const override; protected: - /// helper function to check that content of a given set is exclusively parameters - bool SetHasOnlyParameters(const RooArgSet& set, const char* errorMsgPrefix=nullptr) ; + bool SetHasOnlyParameters(const RooArgSet &set, const char *errorMsgPrefix = nullptr); /// helper functions to define a set in the WS - void DefineSetInWS(const char* name, const RooArgSet& set); + void DefineSetInWS(const char *name, const RooArgSet &set); /// internal function to import Pdf in WS - void ImportPdfInWS(const RooAbsPdf & pdf); + void ImportPdfInWS(const RooAbsPdf &pdf); /// internal function to import data in WS - void ImportDataInWS(RooAbsData & data); + void ImportDataInWS(RooAbsData &data); - TRef fRefWS; ///< WS reference used in the file + TRef fRefWS; ///< WS reference used in the file - std::string fWSName; ///< name of the WS + std::string fWSName; ///< name of the WS - std::string fPdfName; ///< name of PDF in workspace - std::string fDataName; ///< name of data set in workspace - std::string fPOIName; ///< name for RooArgSet specifying parameters of interest + std::string fPdfName; ///< name of PDF in workspace + std::string fDataName; ///< name of data set in workspace + std::string fPOIName; ///< name for RooArgSet specifying parameters of interest - std::string fNuisParamsName; ///< name for RooArgSet specifying nuisance parameters - std::string fConstrParamsName; ///< name for RooArgSet specifying constrained parameters - std::string fPriorPdfName; ///< name for RooAbsPdf specifying a prior on the parameters + std::string fNuisParamsName; ///< name for RooArgSet specifying nuisance parameters + std::string fConstrParamsName; ///< name for RooArgSet specifying constrained parameters + std::string fPriorPdfName; ///< name for RooAbsPdf specifying a prior on the parameters std::string fConditionalObsName; ///< name for RooArgSet specifying conditional observables std::string fGlobalObsName; ///< name for RooArgSet specifying global observables std::string fProtoDataName; ///< name for RooArgSet specifying dataset that should be used as proto-data - std::string fSnapshotName; ///< name for RooArgSet that specifies a particular hypothesis + std::string fSnapshotName; ///< name for RooArgSet that specifies a particular hypothesis - std::string fObservablesName; ///< name for RooArgSet specifying observable parameters. - - ClassDefOverride(ModelConfig,5) ///< A class that holds configuration information for a model using a workspace as a store + std::string fObservablesName; ///< name for RooArgSet specifying observable parameters. + ClassDefOverride(ModelConfig, + 5) ///< A class that holds configuration information for a model using a workspace as a store }; -} // end namespace RooStats +} // end namespace RooStats namespace RooFit { using ModelConfig = RooStats::ModelConfig; } - #endif diff --git a/roofit/roofitcore/src/ModelConfig.cxx b/roofit/roofitcore/src/ModelConfig.cxx index 11197ee377dddc8c34635d68584011cc2fc1d159..2e94fdc04b2968a10cc353ee93651fbb3c92df2f 100644 --- a/roofit/roofitcore/src/ModelConfig.cxx +++ b/roofit/roofitcore/src/ModelConfig.cxx @@ -48,15 +48,16 @@ specific value. Examples: #include <sstream> - ClassImp(RooStats::ModelConfig); namespace { -void removeConstantParameters(RooAbsCollection& coll){ +void removeConstantParameters(RooAbsCollection &coll) +{ RooArgSet constSet; for (auto const *myarg : static_range_cast<RooRealVar *>(coll)) { - if(myarg->isConstant()) constSet.add(*myarg); + if (myarg->isConstant()) + constSet.add(*myarg); } coll.remove(constSet); } @@ -80,22 +81,23 @@ namespace RooStats { /// We use nullptr to mean not set, so we don't want to fill /// with empty RooArgSets. -void ModelConfig::GuessObsAndNuisance(const RooAbsData& data, bool printModelConfig) { +void ModelConfig::GuessObsAndNuisance(const RooAbsData &data, bool printModelConfig) +{ // observables - if (!GetObservables()) { - const RooArgSet * obs = GetPdf()->getObservables(data); - SetObservables(*obs); - delete obs; + if (!GetObservables()) { + const RooArgSet *obs = GetPdf()->getObservables(data); + SetObservables(*obs); + delete obs; } - // global observables + // global observables if (!GetGlobalObservables()) { RooArgSet co(*GetObservables()); - const RooArgSet * obs = GetPdf()->getObservables(data); + const RooArgSet *obs = GetPdf()->getObservables(data); co.remove(*obs); removeConstantParameters(co); - if(co.getSize()>0) - SetGlobalObservables(co); + if (co.getSize() > 0) + SetGlobalObservables(co); // TODO BUG This does not work as observables with the same name are already in the workspace. /* @@ -111,21 +113,21 @@ void ModelConfig::GuessObsAndNuisance(const RooAbsData& data, bool printModelCon // SetParametersOfInterest(RooArgSet()); // } if (!GetNuisanceParameters()) { - const RooArgSet * params = GetPdf()->getParameters(data); + const RooArgSet *params = GetPdf()->getParameters(data); RooArgSet p(*params); p.remove(*GetParametersOfInterest()); removeConstantParameters(p); - if(p.getSize()>0) - SetNuisanceParameters(p); + if (p.getSize() > 0) + SetNuisanceParameters(p); delete params; } // print Modelconfig as an info message if (printModelConfig) { - std::ostream& oldstream = RooPrintable::defaultPrintStream(&ccoutI(InputArguments)); - Print(); - RooPrintable::defaultPrintStream(&oldstream); + std::ostream &oldstream = RooPrintable::defaultPrintStream(&ccoutI(InputArguments)); + Print(); + RooPrintable::defaultPrintStream(&oldstream); } } @@ -133,55 +135,55 @@ void ModelConfig::GuessObsAndNuisance(const RooAbsData& data, bool printModelCon /// print contents of Model on the default print stream /// It can be changed using RooPrintable -void ModelConfig::Print(Option_t*) const { - ostream& os = RooPrintable::defaultPrintStream(); +void ModelConfig::Print(Option_t *) const +{ + ostream &os = RooPrintable::defaultPrintStream(); os << endl << "=== Using the following for " << GetName() << " ===" << endl; - // args - if(GetObservables()){ + if (GetObservables()) { os << "Observables: "; GetObservables()->Print(""); } - if(GetParametersOfInterest()) { + if (GetParametersOfInterest()) { os << "Parameters of Interest: "; GetParametersOfInterest()->Print(""); } - if(GetNuisanceParameters()){ + if (GetNuisanceParameters()) { os << "Nuisance Parameters: "; GetNuisanceParameters()->Print(""); } - if(GetGlobalObservables()){ + if (GetGlobalObservables()) { os << "Global Observables: "; GetGlobalObservables()->Print(""); } - if(GetConstraintParameters()){ + if (GetConstraintParameters()) { os << "Constraint Parameters: "; GetConstraintParameters()->Print(""); } - if(GetConditionalObservables()){ + if (GetConditionalObservables()) { os << "Conditional Observables: "; GetConditionalObservables()->Print(""); } - if(GetProtoData()){ + if (GetProtoData()) { os << "Proto Data: "; GetProtoData()->Print(""); } // pdfs - if(GetPdf()) { + if (GetPdf()) { os << "PDF: "; GetPdf()->Print(""); } - if(GetPriorPdf()) { + if (GetPriorPdf()) { os << "Prior PDF: "; GetPriorPdf()->Print(""); } // snapshot - const RooArgSet * snapshot = GetSnapshot(); - if(snapshot) { + const RooArgSet *snapshot = GetSnapshot(); + if (snapshot) { os << "Snapshot: " << endl; snapshot->Print("v"); delete snapshot; @@ -194,25 +196,26 @@ void ModelConfig::Print(Option_t*) const { /// If a workspace already exists in this ModelConfig, RooWorkspace::merge(ws) will be called /// on the existing workspace. -void ModelConfig::SetWS(RooWorkspace & ws) { - if( !fRefWS.GetObject() ) { +void ModelConfig::SetWS(RooWorkspace &ws) +{ + if (!fRefWS.GetObject()) { fRefWS = &ws; fWSName = ws.GetName(); - } - else{ + } else { RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow(); - RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ; + RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); GetWS()->merge(ws); - RooMsgService::instance().setGlobalKillBelow(level) ; + RooMsgService::instance().setGlobalKillBelow(level); } } //////////////////////////////////////////////////////////////////////////////// /// get from TRef -RooWorkspace * ModelConfig::GetWS() const { - RooWorkspace *ws = dynamic_cast<RooWorkspace *>(fRefWS.GetObject() ); - if(!ws) { +RooWorkspace *ModelConfig::GetWS() const +{ + RooWorkspace *ws = dynamic_cast<RooWorkspace *>(fRefWS.GetObject()); + if (!ws) { coutE(ObjectHandling) << "workspace not set" << endl; return nullptr; } @@ -223,15 +226,19 @@ RooWorkspace * ModelConfig::GetWS() const { /// save snapshot in the workspace /// and use values passed with the set -void ModelConfig::SetSnapshot(const RooArgSet& set) { - if ( !GetWS() ) return; +void ModelConfig::SetSnapshot(const RooArgSet &set) +{ + if (!GetWS()) + return; fSnapshotName = GetName(); - if (fSnapshotName.size() > 0) fSnapshotName += "_"; + if (fSnapshotName.size() > 0) + fSnapshotName += "_"; fSnapshotName += set.GetName(); - if (fSnapshotName.size() > 0) fSnapshotName += "_"; + if (fSnapshotName.size() > 0) + fSnapshotName += "_"; fSnapshotName += "snapshot"; - GetWS()->saveSnapshot(fSnapshotName.c_str(), set, true); // import also the given parameter values + GetWS()->saveSnapshot(fSnapshotName.c_str(), set, true); // import also the given parameter values DefineSetInWS(fSnapshotName.c_str(), set); } @@ -239,21 +246,27 @@ void ModelConfig::SetSnapshot(const RooArgSet& set) { /// Load the snapshot from ws and return the corresponding set with the snapshot values. /// User must delete returned RooArgSet. -const RooArgSet * ModelConfig::GetSnapshot() const{ - if ( !GetWS() ) return 0; - if (!fSnapshotName.length()) return 0; +const RooArgSet *ModelConfig::GetSnapshot() const +{ + if (!GetWS()) + return 0; + if (!fSnapshotName.length()) + return 0; // calling loadSnapshot will also copy the current parameter values in the workspaces // since we do not want to change the model parameters - we restore the previous ones - if (! GetWS()->set(fSnapshotName.c_str() ) )return 0; - RooArgSet snapshotVars(*GetWS()->set(fSnapshotName.c_str() ) ); - if (snapshotVars.empty()) return 0; + if (!GetWS()->set(fSnapshotName.c_str())) + return 0; + RooArgSet snapshotVars(*GetWS()->set(fSnapshotName.c_str())); + if (snapshotVars.empty()) + return 0; // make my snapshot which will contain a copy of the snapshot variables RooArgSet tempSnapshot; snapshotVars.snapshot(tempSnapshot); // load snapshot value from the workspace - if (!(GetWS()->loadSnapshot(fSnapshotName.c_str())) ) return 0; + if (!(GetWS()->loadSnapshot(fSnapshotName.c_str()))) + return 0; // by doing this snapshotVars will have the snapshot values - make the snapshot to return - const RooArgSet * modelSnapshot = dynamic_cast<const RooArgSet*>( snapshotVars.snapshot()); + const RooArgSet *modelSnapshot = dynamic_cast<const RooArgSet *>(snapshotVars.snapshot()); // restore now the variables of snapshot in ws to their original values // need to const cast since assign is not const (but in reality in just assign values and does not change the set) // and anyway the set is const @@ -264,20 +277,24 @@ const RooArgSet * ModelConfig::GetSnapshot() const{ //////////////////////////////////////////////////////////////////////////////// /// load the snapshot from ws if it exists -void ModelConfig::LoadSnapshot() const{ - if ( !GetWS() ) return; +void ModelConfig::LoadSnapshot() const +{ + if (!GetWS()) + return; GetWS()->loadSnapshot(fSnapshotName.c_str()); } //////////////////////////////////////////////////////////////////////////////// /// helper functions to avoid code duplication -void ModelConfig::DefineSetInWS(const char* name, const RooArgSet& set) { - if ( !GetWS() ) return; +void ModelConfig::DefineSetInWS(const char *name, const RooArgSet &set) +{ + if (!GetWS()) + return; - const RooArgSet * prevSet = GetWS()->set(name); - if ( prevSet ) { - //be careful not to remove passed set in case it is the same updated + const RooArgSet *prevSet = GetWS()->set(name); + if (prevSet) { + // be careful not to remove passed set in case it is the same updated if (prevSet != &set) GetWS()->removeSet(name); } @@ -285,58 +302,61 @@ void ModelConfig::DefineSetInWS(const char* name, const RooArgSet& set) { // suppress warning when we re-define a previously defined set (when set == prevSet ) // and set is not removed in that case RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow(); - RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ; - + RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); - GetWS()->defineSet(name, set,true); - - RooMsgService::instance().setGlobalKillBelow(level) ; + GetWS()->defineSet(name, set, true); + RooMsgService::instance().setGlobalKillBelow(level); } //////////////////////////////////////////////////////////////////////////////// /// internal function to import Pdf in WS -void ModelConfig::ImportPdfInWS(const RooAbsPdf & pdf) { - if ( !GetWS() ) return; +void ModelConfig::ImportPdfInWS(const RooAbsPdf &pdf) +{ + if (!GetWS()) + return; - if (! GetWS()->pdf( pdf.GetName() ) ){ + if (!GetWS()->pdf(pdf.GetName())) { RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow(); - RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ; + RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); GetWS()->import(pdf, RooFit::RecycleConflictNodes()); - RooMsgService::instance().setGlobalKillBelow(level) ; + RooMsgService::instance().setGlobalKillBelow(level); } } //////////////////////////////////////////////////////////////////////////////// /// internal function to import data in WS -void ModelConfig::ImportDataInWS(RooAbsData & data) { - if ( !GetWS() ) return; +void ModelConfig::ImportDataInWS(RooAbsData &data) +{ + if (!GetWS()) + return; - if (! GetWS()->data( data.GetName() ) ){ + if (!GetWS()->data(data.GetName())) { RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow(); - RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ; + RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); GetWS()->import(data); - RooMsgService::instance().setGlobalKillBelow(level) ; + RooMsgService::instance().setGlobalKillBelow(level); } } //////////////////////////////////////////////////////////////////////////////// -bool ModelConfig::SetHasOnlyParameters(const RooArgSet& set, const char* errorMsgPrefix) { +bool ModelConfig::SetHasOnlyParameters(const RooArgSet &set, const char *errorMsgPrefix) +{ - RooArgSet nonparams ; - for (auto const *arg : set) { + RooArgSet nonparams; + for (auto const *arg : set) { if (!arg->isFundamental()) { - nonparams.add(*arg) ; + nonparams.add(*arg); } - } + } - if (errorMsgPrefix && nonparams.getSize()>0) { - cout << errorMsgPrefix << " ERROR: specified set contains non-parameters: " << nonparams << endl ; - } - return (nonparams.empty()) ; - } + if (errorMsgPrefix && nonparams.getSize() > 0) { + cout << errorMsgPrefix << " ERROR: specified set contains non-parameters: " << nonparams << endl; + } + return (nonparams.empty()); +} } // end namespace RooStats