RooAbsStudy.cxx

Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Project: RooFit                                                           *
00003  * Package: RooFitCore                                                       *
00004  * @(#)root/roofitcore:$Id: RooAbsStudy.cxx 30333 2009-09-21 15:39:17Z wouter $
00005  * Authors:                                                                  *
00006  *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
00007  *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
00008  *                                                                           *
00009  * Copyright (c) 2000-2005, Regents of the University of California          *
00010  *                          and Stanford University. All rights reserved.    *
00011  *                                                                           *
00012  * Redistribution and use in source and binary forms,                        *
00013  * with or without modification, are permitted according to the terms        *
00014  * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
00015  *****************************************************************************/
00016 
00017 //////////////////////////////////////////////////////////////////////////////
00018 //
00019 // BEGIN_HTML
00020 // RooAbsStudy is an abstract base class for RooStudyManager modules
00021 //
00022 // END_HTML
00023 //
00024 
00025 
00026 
00027 #include "RooFit.h"
00028 #include "Riostream.h"
00029 
00030 #include "RooAbsStudy.h"
00031 #include "RooMsgService.h"
00032 #include "RooDataSet.h"
00033 #include "TList.h"
00034 #include "TClass.h"
00035 
00036 using namespace std ;
00037 
00038 ClassImp(RooAbsStudy)
00039   ;
00040 
00041 
00042 //_____________________________________________________________________________
00043 RooAbsStudy::RooAbsStudy(const char* name, const char* title) : TNamed(name,title), _storeDetails(0), _summaryData(0), _detailData(0), _ownDetailData(kTRUE)
00044 {  
00045   // Constructor
00046 }
00047 
00048 
00049 
00050 //_____________________________________________________________________________
00051 RooAbsStudy::RooAbsStudy(const RooAbsStudy& other) : TNamed(other), _storeDetails(other._storeDetails), _summaryData(other._summaryData), 
00052                                                      _detailData(0), _ownDetailData(other._ownDetailData)
00053 {  
00054   // Copy constructor
00055 }
00056 
00057 
00058 
00059 //_____________________________________________________________________________
00060 RooAbsStudy::~RooAbsStudy() 
00061 {
00062   // Destructor
00063   if (_summaryData) delete _summaryData ;
00064   if (_ownDetailData && _detailData) {
00065     _detailData->Delete() ;
00066     delete _detailData ;
00067   }
00068 }
00069 
00070 
00071 
00072 
00073 //_____________________________________________________________________________
00074 void RooAbsStudy::registerSummaryOutput(const RooArgSet& allVars, const RooArgSet& varsWithError, const RooArgSet& varsWithAsymError) 
00075 {
00076   if (_summaryData) {
00077     coutW(ObjectHandling) << "RooAbsStudy::registerSummaryOutput(" << GetName() << ") WARNING summary output already registered" << endl ;
00078     return ;
00079   }
00080 
00081   string name = Form("%s_summary_data",GetName()) ;
00082   string title = Form("%s Summary Data",GetTitle()) ;
00083   _summaryData = new RooDataSet(name.c_str(),title.c_str(),allVars,RooFit::StoreError(varsWithError),RooFit::StoreAsymError(varsWithAsymError)) ;  
00084 }
00085 
00086 
00087 //_____________________________________________________________________________
00088 void RooAbsStudy::storeSummaryOutput(const RooArgSet& vars) 
00089 {
00090   if (!_summaryData) {
00091     coutE(ObjectHandling) << "RooAbsStudy::storeSummaryOutput(" << GetName() << ") ERROR: no summary output data configuration registered" << endl ;
00092     return ;
00093   }
00094   _summaryData->add(vars) ;
00095 }
00096 
00097 
00098 
00099 //_____________________________________________________________________________
00100 void RooAbsStudy::storeDetailedOutput(TNamed& object) 
00101 {
00102   if (_storeDetails) {
00103 
00104     if (!_detailData) {
00105       _detailData = new RooLinkedList ;
00106       _detailData->SetName(Form("%s_detailed_data",GetName())) ;
00107       //cout << "RooAbsStudy::ctor() detailData name = " << _detailData->GetName() << endl ;
00108     }
00109 
00110     object.SetName(Form("%s_detailed_data_%d",GetName(),_detailData->GetSize())) ;    
00111     //cout << "storing detailed data with name " << object.GetName() << endl ;
00112     _detailData->Add(&object) ;
00113   } else {
00114     delete &object ;
00115   }
00116 }
00117 
00118 
00119 
00120 //_____________________________________________________________________________
00121 void RooAbsStudy::aggregateSummaryOutput(TList* chunkList)
00122 {
00123   if (!chunkList) return ;
00124 
00125   TIterator* iter = chunkList->MakeIterator() ;
00126   TObject* obj ;
00127   while((obj=iter->Next())) {
00128 
00129     //cout << "RooAbsStudy::aggregateSummaryOutput(" << GetName() << ") processing object " << obj->GetName() << endl ;
00130 
00131     RooDataSet* data = dynamic_cast<RooDataSet*>(obj) ;
00132     if (data) {
00133       if (TString(data->GetName()).BeginsWith(Form("%s_summary_data",GetName()))) {
00134         //cout << "RooAbsStudy::aggregateSummaryOutput(" << GetName() << ") found summary block " << data->GetName() << endl ;
00135         if (!_summaryData) {
00136           _summaryData = (RooDataSet*) data->Clone(Form("%s_summary_data",GetName())) ;
00137         } else {
00138           _summaryData->append(*data) ;
00139         }
00140       }
00141     }
00142 
00143     RooLinkedList* dlist = dynamic_cast<RooLinkedList*>(obj) ;
00144     if (dlist) {
00145       if (TString(dlist->GetName()).BeginsWith(Form("%s_detailed_data",GetName()))) {
00146         //cout << "RooAbsStudy::aggregateSummaryOutput(" << GetName() << ") found detail block " <<dlist->GetName() << " with " << dlist->GetSize() << " entries" << endl ;
00147         TIterator* diter = dlist->MakeIterator() ;
00148         TNamed* dobj ;
00149         while((dobj=(TNamed*)diter->Next())) {    
00150           storeDetailedOutput(*dobj) ;
00151         }
00152         delete diter ;
00153       }
00154     }
00155   }
00156 }

Generated on Tue Jul 5 15:05:55 2011 for ROOT_528-00b_version by  doxygen 1.5.1