39 ClassImp(RooAbsStudy);
46 RooAbsStudy::RooAbsStudy(
const char* name,
const char* title) : TNamed(name,title), _storeDetails(0), _summaryData(0), _detailData(0), _ownDetailData(kTRUE)
55 RooAbsStudy::RooAbsStudy(
const RooAbsStudy& other) : TNamed(other), _storeDetails(other._storeDetails), _summaryData(other._summaryData),
56 _detailData(0), _ownDetailData(other._ownDetailData)
65 RooAbsStudy::~RooAbsStudy()
67 if (_summaryData)
delete _summaryData ;
68 if (_ownDetailData && _detailData) {
69 _detailData->Delete() ;
79 void RooAbsStudy::registerSummaryOutput(
const RooArgSet& allVars,
const RooArgSet& varsWithError,
const RooArgSet& varsWithAsymError)
82 coutW(ObjectHandling) <<
"RooAbsStudy::registerSummaryOutput(" << GetName() <<
") WARNING summary output already registered" << endl ;
86 string name = Form(
"%s_summary_data",GetName()) ;
87 string title = Form(
"%s Summary Data",GetTitle()) ;
88 _summaryData =
new RooDataSet(name.c_str(),title.c_str(),allVars,RooFit::StoreError(varsWithError),RooFit::StoreAsymError(varsWithAsymError)) ;
94 void RooAbsStudy::storeSummaryOutput(
const RooArgSet& vars)
97 coutE(ObjectHandling) <<
"RooAbsStudy::storeSummaryOutput(" << GetName() <<
") ERROR: no summary output data configuration registered" << endl ;
100 _summaryData->add(vars) ;
107 void RooAbsStudy::storeDetailedOutput(TNamed&
object)
112 _detailData =
new RooLinkedList ;
113 _detailData->SetName(TString::Format(
"%s_detailed_data_list",GetName())) ;
117 object.SetName(TString::Format(
"%s_detailed_data_%d",GetName(),_detailData->GetSize())) ;
119 _detailData->Add(&
object) ;
129 void RooAbsStudy::aggregateSummaryOutput(TList* chunkList)
131 if (!chunkList) return ;
133 TIterator* iter = chunkList->MakeIterator() ;
135 while((obj=iter->Next())) {
139 RooDataSet* data =
dynamic_cast<RooDataSet*
>(obj) ;
141 if (TString(data->GetName()).BeginsWith(Form(
"%s_summary_data",GetName()))) {
144 _summaryData = (RooDataSet*) data->Clone(Form(
"%s_summary_data",GetName())) ;
146 _summaryData->append(*data) ;
151 RooLinkedList* dlist =
dynamic_cast<RooLinkedList*
>(obj) ;
153 if (TString(dlist->GetName()).BeginsWith(Form(
"%s_detailed_data",GetName()))) {
155 TIterator* diter = dlist->MakeIterator() ;
157 while((dobj=(TNamed*)diter->Next())) {
158 storeDetailedOutput(*dobj) ;