48 ClassImp(RooStudyPackage);
55 RooStudyPackage::RooStudyPackage() : _ws(0)
63 RooStudyPackage::RooStudyPackage(RooWorkspace& w) : _ws(new RooWorkspace(w))
71 RooStudyPackage::RooStudyPackage(
const RooStudyPackage& other) : TNamed(other), _ws(new RooWorkspace(*other._ws))
73 list<RooAbsStudy*>::const_iterator iter = other._studies.begin() ;
74 for (;iter!=other._studies.end() ; ++iter) {
75 _studies.push_back((*iter)->clone()) ;
83 void RooStudyPackage::addStudy(RooAbsStudy& study)
85 _studies.push_back(&study) ;
92 void RooStudyPackage::driver(Int_t nExperiments)
104 void RooStudyPackage::initialize()
106 for (list<RooAbsStudy*>::iterator iter=_studies.begin() ; iter!=_studies.end() ; ++iter) {
107 (*iter)->attach(*_ws) ;
108 (*iter)->initialize() ;
116 void RooStudyPackage::run(Int_t nExperiments)
119 Int_t prescale = nExperiments>100 ? Int_t(nExperiments/100) : 1 ;
120 for (Int_t i=0 ; i<nExperiments ; i++) {
122 coutP(Generation) <<
"RooStudyPackage::run(" << GetName() <<
") processing experiment " << i <<
"/" << nExperiments << endl ;
132 void RooStudyPackage::runOne()
134 for (list<RooAbsStudy*>::iterator iter=_studies.begin() ; iter!=_studies.end() ; ++iter) {
145 void RooStudyPackage::finalize()
147 for (list<RooAbsStudy*>::iterator iter=_studies.begin() ; iter!=_studies.end() ; ++iter) {
148 (*iter)->finalize() ;
157 void RooStudyPackage::exportData(TList* olist, Int_t seqno)
159 for (list<RooAbsStudy*>::iterator iter=_studies.begin() ; iter!=_studies.end() ; ++iter) {
161 (*iter)->finalize() ;
163 RooDataSet* summaryData = (*iter)->summaryData() ;
165 summaryData->SetName(Form(
"%s_%d",summaryData->GetName(),seqno)) ;
166 cout <<
"registering summary dataset: " ; summaryData->Print() ;
167 olist->Add(summaryData) ;
170 RooLinkedList* detailedData = (*iter)->detailedData() ;
171 if (detailedData && detailedData->GetSize()>0) {
173 detailedData->SetName(Form(
"%s_%d",detailedData->GetName(),seqno)) ;
174 cout <<
"registering detailed dataset " << detailedData->IsA()->GetName() <<
"::"
175 << detailedData->GetName() <<
" with " << detailedData->GetSize() <<
" elements" << endl ;
176 TIterator* diter = detailedData->MakeIterator() ;
178 while((dobj=(TNamed*)diter->Next())) {
179 dobj->SetName(Form(
"%s_%d",dobj->GetName(),seqno)) ;
182 olist->Add(detailedData) ;
183 (*iter)->releaseDetailData() ;
195 Int_t RooStudyPackage::initRandom()
199 Int_t seed = random.Integer(TMath::Limits<Int_t>::Max()) ;
202 TString worknumber = gEnv->GetValue(
"ProofServ.Ordinal",
"undef");
204 if (worknumber !=
"undef")
205 iworker = int( worknumber.Atof()*10 + 0.1);
208 for (
int i = 0; i <= iworker; ++i )
209 seed = random.Integer( TMath::Limits<Int_t>::Max() );
212 RooRandom::randomGenerator()->SetSeed(seed) ;
213 gRandom->SetSeed(seed) ;
223 void RooStudyPackage::processFile(
const char* studyName, Int_t nexp)
225 string name_fin = Form(
"study_data_%s.root",studyName) ;
226 TFile fin(name_fin.c_str()) ;
227 RooStudyPackage* pkg =
dynamic_cast<RooStudyPackage*
>(fin.Get(
"studypack")) ;
229 cout <<
"RooStudyPackage::processFile() ERROR input file " << name_fin <<
" does not contain a RooStudyPackage named 'studypack'" << endl ;
234 Int_t seqno = pkg->initRandom() ;
235 cout <<
"RooStudyPackage::processFile() Initial random seed for this run is " << seqno << endl ;
242 pkg->exportData(&res,seqno) ;
243 TFile fout(Form(
"study_result_%s_%d.root",studyName,seqno),
"RECREATE") ;