49 ClassImp(RooStats::ModelConfig);
68 void ModelConfig::GuessObsAndNuisance(
const RooAbsData& data) {
71 if (!GetObservables()) {
72 const RooArgSet * obs = GetPdf()->getObservables(data);
77 if (!GetGlobalObservables()) {
78 RooArgSet co(*GetObservables());
79 const RooArgSet * obs = GetPdf()->getObservables(data);
81 RemoveConstantParameters(&co);
83 SetGlobalObservables(co);
98 if (!GetNuisanceParameters()) {
99 const RooArgSet * params = GetPdf()->getParameters(data);
100 RooArgSet p(*params);
101 p.remove(*GetParametersOfInterest());
102 RemoveConstantParameters(&p);
104 SetNuisanceParameters(p);
110 std::ostream& oldstream = RooPrintable::defaultPrintStream(&ccoutI(InputArguments));
112 RooPrintable::defaultPrintStream(&oldstream);
119 void ModelConfig::Print(Option_t*)
const {
120 ostream& os = RooPrintable::defaultPrintStream();
122 os << endl <<
"=== Using the following for " << GetName() <<
" ===" << endl;
126 if(GetObservables()){
127 os <<
"Observables: ";
128 GetObservables()->Print(
"");
130 if(GetParametersOfInterest()) {
131 os <<
"Parameters of Interest: ";
132 GetParametersOfInterest()->Print(
"");
134 if(GetNuisanceParameters()){
135 os <<
"Nuisance Parameters: ";
136 GetNuisanceParameters()->Print(
"");
138 if(GetGlobalObservables()){
139 os <<
"Global Observables: ";
140 GetGlobalObservables()->Print(
"");
142 if(GetConstraintParameters()){
143 os <<
"Constraint Parameters: ";
144 GetConstraintParameters()->Print(
"");
146 if(GetConditionalObservables()){
147 os <<
"Conditional Observables: ";
148 GetConditionalObservables()->Print(
"");
151 os <<
"Proto Data: ";
152 GetProtoData()->Print(
"");
162 GetPriorPdf()->Print(
"");
166 const RooArgSet * snapshot = GetSnapshot();
168 os <<
"Snapshot: " << endl;
169 snapshot->Print(
"v");
180 void ModelConfig::SetWS(RooWorkspace & ws) {
181 if( !fRefWS.GetObject() ) {
183 fWSName = ws.GetName();
186 RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow();
187 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ;
189 RooMsgService::instance().setGlobalKillBelow(level) ;
196 RooWorkspace * ModelConfig::GetWS()
const {
197 RooWorkspace *ws =
dynamic_cast<RooWorkspace *
>(fRefWS.GetObject() );
199 coutE(ObjectHandling) <<
"workspace not set" << endl;
209 void ModelConfig::SetSnapshot(
const RooArgSet& set) {
210 if ( !GetWS() )
return;
212 fSnapshotName = GetName();
213 if (fSnapshotName.size() > 0) fSnapshotName +=
"_";
214 fSnapshotName += set.GetName();
215 if (fSnapshotName.size() > 0) fSnapshotName +=
"_";
216 fSnapshotName +=
"snapshot";
217 GetWS()->saveSnapshot(fSnapshotName.c_str(), set,
true);
218 DefineSetInWS(fSnapshotName.c_str(), set);
225 const RooArgSet * ModelConfig::GetSnapshot()
const{
226 if ( !GetWS() )
return 0;
227 if (!fSnapshotName.length())
return 0;
230 if (! GetWS()->set(fSnapshotName.c_str() ) )
return 0;
231 RooArgSet snapshotVars(*GetWS()->set(fSnapshotName.c_str() ) );
232 if (snapshotVars.getSize() == 0)
return 0;
234 RooArgSet tempSnapshot;
235 snapshotVars.snapshot(tempSnapshot);
237 if (!(GetWS()->loadSnapshot(fSnapshotName.c_str())) )
return 0;
239 const RooArgSet * modelSnapshot =
dynamic_cast<const RooArgSet*
>( snapshotVars.snapshot());
243 snapshotVars.assignFast(tempSnapshot);
244 return modelSnapshot;
250 void ModelConfig::LoadSnapshot()
const{
251 if ( !GetWS() )
return;
252 GetWS()->loadSnapshot(fSnapshotName.c_str());
258 void ModelConfig::DefineSetInWS(
const char* name,
const RooArgSet& set) {
259 if ( !GetWS() )
return;
261 const RooArgSet * prevSet = GetWS()->set(name);
265 GetWS()->removeSet(name);
270 RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow();
271 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ;
274 GetWS()->defineSet(name, set,
true);
276 RooMsgService::instance().setGlobalKillBelow(level) ;
283 void ModelConfig::ImportPdfInWS(
const RooAbsPdf & pdf) {
284 if ( !GetWS() )
return;
286 if (! GetWS()->pdf( pdf.GetName() ) ){
287 RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow();
288 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ;
289 GetWS()->import(pdf, RooFit::RecycleConflictNodes());
290 RooMsgService::instance().setGlobalKillBelow(level) ;
297 void ModelConfig::ImportDataInWS(RooAbsData & data) {
298 if ( !GetWS() )
return;
300 if (! GetWS()->data( data.GetName() ) ){
301 RooFit::MsgLevel level = RooMsgService::instance().globalKillBelow();
302 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR) ;
303 GetWS()->import(data);
304 RooMsgService::instance().setGlobalKillBelow(level) ;
310 Bool_t ModelConfig::SetHasOnlyParameters(
const RooArgSet& set,
const char* errorMsgPrefix) {
312 RooArgSet nonparams ;
313 RooFIter iter = set.fwdIterator() ;
315 while ((arg=iter.next())) {
316 if (!arg->isFundamental()) {
317 nonparams.add(*arg) ;
321 if (errorMsgPrefix && nonparams.getSize()>0) {
322 cout << errorMsgPrefix <<
" ERROR: specified set contains non-parameters: " << nonparams << endl ;
324 return (nonparams.getSize()==0) ;