17 #include "TMultiGraph.h"
19 #include "TObjArray.h"
32 #include "TDataMember.h"
33 #include "TBaseClass.h"
36 #include "TGo4LockGuard.h"
97 #define fguSUBFOLDERMAXLEN 1024
100 TNamed(name,
"The Go4 Analysis Object Manager"),
101 fxGo4Dir(0),fxHistogramDir(0),fxConditionDir(0), fxParameterDir(0),
102 fxDynListDir(0),fxUserDir(0), fxTreeDir(0), fxPictureDir(0), fxCanvasDir(0),
103 fxStoreDir(0), fxSourceDir(0), fxProcessorDir(0), fxEventDir(0),
104 fxAnalysisDir(0), fxTempFolder(0),
105 fxMatchList(0), fxMatchIterator(0),
106 fiDynListCount(0), fiDynListInterval(0),
107 fbCreatedinMake(kFALSE), fbSuppressLoadHistograms(kFALSE), fbSortedOrder(kFALSE)
145 gROOT->GetListOfCleanups()->Add(
this);
150 fxGo4Dir(0),fxHistogramDir(0),fxConditionDir(0),
151 fxDynListDir(0), fxUserDir(0), fxTreeDir(0), fxPictureDir(0), fxCanvasDir(0),
152 fxStoreDir(0), fxSourceDir(0), fxProcessorDir(0), fxEventDir(0),
153 fxAnalysisDir(0), fxTempFolder(0),
154 fiDynListCount(0), fiDynListInterval(0),
155 fbCreatedinMake(kFALSE), fbSuppressLoadHistograms(kFALSE), fbSortedOrder(kFALSE)
159 gROOT->GetListOfCleanups()->Add(
this);
165 gROOT->GetListOfCleanups()->Remove(
this);
169 gROOT->GetListOfBrowsables()->Remove(
fxGo4Dir);
173 gROOT->GetRootFolder()->Remove(
fxGo4Dir);
204 if ((obj!=0) && (obj!=
this)) {
213 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddObject(TNamed *)",__LINE__, __FILE__));
226 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetAsTObject(const char*, const char*)",__LINE__, __FILE__));
235 if(ob && ob->InheritsFrom(TTree::Class())) ob=0;
236 if(ob && ob->InheritsFrom(TFolder::Class())) ob=0;
237 if(ob && ob->InheritsFrom(TGo4EventElement::Class())) ob=0;
238 if(ob && ob->InheritsFrom(TGo4EventSource::Class())) ob=0;
239 if(ob && ob->InheritsFrom(TGo4EventStore::Class())) ob=0;
240 if(ob && ob->InheritsFrom(TGo4EventProcessor::Class())) ob=0;
244 ob->GetName(), ob->ClassName());
256 return dynamic_cast<TNamed*
> (
GetAsTObject(name, folder));
262 GO4TRACE((11,
"TGo4AnalysisObjectManager::ClearObject(char *)",__LINE__, __FILE__));
265 TObject* ob =
fxGo4Dir->FindObjectAny(name);
268 if(ob->InheritsFrom(TFolder::Class()))
281 TObject* ob=
fxGo4Dir->FindObjectAny(name);
284 if(ob->InheritsFrom(TFolder::Class()))
296 TObject* ob=
fxGo4Dir->FindObjectAny(name);
299 if(ob->InheritsFrom(TFolder::Class()))
309 Int_t startindex, Int_t* skip,
310 const char* name,
const char* title)
312 GO4TRACE((11,
"TGo4AnalysisObjectManager::CreateCompositeBranchFolder(TObjArray*,...)",__LINE__, __FILE__));
313 if (branchlist==0)
return 0;
320 lastindex = startindex + branchlist->GetLast();
326 TList* nameslist =
new TList;
330 Int_t skippedentries=0;
332 for(Int_t i=startindex; i<lastindex;i++) {
335 TObject* entry=branchlist->At(i+offset);
336 if((entry!=0) && entry->InheritsFrom(TBranch::Class())) {
338 TBranch* currentbranch=
dynamic_cast<TBranch*
> (entry);
339 TObjArray* currentbranchlist=0;
340 if (currentbranch!=0) {
341 currentbranchlist=currentbranch->GetListOfBranches();
342 cl=gROOT->GetClass(currentbranch->GetClassName());
344 if((cl!=0) && cl->InheritsFrom(TGo4CompositeEvent::Class())) {
347 TString branchname(currentbranch->GetName());
348 Ssiz_t leng = branchname.Length();
349 branchname.Resize(leng-1);
352 subevent =
dynamic_cast<TGo4CompositeEvent *
>(csubevents->FindObject(branchname.Data()));
360 i+offset+1, &skippedentries,
362 subevent->GetTitle());
363 nameslist->AddLast(subnames);
364 offset+=skippedentries;
372 subnames->GetListOfFolders()->AddAll(temp->GetListOfFolders());
380 if(currentbranchlist!=0)
382 if(currentbranchlist->IsEmpty())
386 nameslist->AddLast(state);
391 currentbranch->GetName(),
392 currentbranch->GetTitle());
393 nameslist->AddLast(subnames);
403 if(currentbranchlist!=0)
405 if(currentbranchlist->IsEmpty())
409 nameslist->AddLast(state);
414 currentbranch->GetName(),
415 currentbranch->GetTitle());
416 nameslist->AddLast(subnames);
433 *skip=lastindex+offset-startindex;
434 TFolder* fold =
fxTempFolder->AddFolder(name,title,nameslist);
435 fold->SetOwner(kTRUE);
442 GO4TRACE((11,
"TGo4AnalysisObjectManager::CreateTreeStructure(TTree*)",__LINE__, __FILE__));
447 const char* treename=thetree->GetName();
448 const char* treetitle=thetree->GetTitle();
451 TObjArray* branchlist=thetree->GetListOfBranches();
461 GO4TRACE((11,
"TGo4AnalysisObjectManager::CreateTreeStructure(const char *)",__LINE__, __FILE__));
465 thetree=
dynamic_cast<TTree*
> (
fxTreeDir->FindObjectAny(treename));
478 TList* nameslist=
new TList;
481 TIter biter(cl->GetListOfBases());
483 while((bob=biter()) !=0) {
484 TBaseClass* baseclass =
dynamic_cast<TBaseClass*
>(bob);
485 if(baseclass==0)
continue;
488 TClass* bclass=baseclass->GetClassPointer();
489 if(bclass==0)
continue;
491 if(!strcmp(bclass->GetName(),
"TNamed"))
continue;
496 nameslist->AddLast(subfold);
499 TIter miter(cl->GetListOfDataMembers());
502 while((nob=miter()) !=0) {
503 TDataMember* mem =
dynamic_cast<TDataMember*
>(nob);
504 if((mem==0) || mem->IsaPointer())
continue;
509 switch(mem->GetArrayDim()) {
511 sbuf = TString::Format(
"%s[%d]", mem->GetName(), mem->GetMaxIndex(0));
515 sbuf = TString::Format(
"%s[%d][%d]", mem->GetName(), mem->GetMaxIndex(0), mem->GetMaxIndex(1));
519 sbuf = mem->GetName();
523 nameslist->AddLast(state);
527 if ((obj!=0) && (obj->InheritsFrom(TGo4CompositeEvent::Class()))) {
532 for (Int_t n=0;n<=arr->GetLast();n++) {
534 if (elem==0)
continue;
537 nameslist->AddLast(subfold);
541 TFolder* memberfolder =
fxTempFolder->AddFolder(membrfoldername, TString(
"Object of class ") + cl->GetName(), nameslist);
543 memberfolder->SetOwner(kTRUE);
549 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddHistogram(TH1*)",__LINE__, __FILE__));
553 if(rev && his) his->SetDirectory(gROOT);
558 const char* foldername,
559 const char* histoname,
565 const char* ytitle) {
567 TString htype(histotype);
569 if (htype.Length()==0) htype =
"I";
573 case 'C' : cl = TH1C::Class();
break;
574 case 'D' : cl = TH1D::Class();
break;
575 case 'F' : cl = TH1F::Class();
break;
576 case 'I' : cl = TH1I::Class();
break;
577 case 'S' : cl = TH1S::Class();
break;
578 default : cl = TH1I::Class();
583 if (histo)
return histo;
586 case 'C' : histo =
new TH1C(histoname, histoname, nbinsx, xlow, xup);
break;
587 case 'D' : histo =
new TH1D(histoname, histoname, nbinsx, xlow, xup);
break;
588 case 'F' : histo =
new TH1F(histoname, histoname, nbinsx, xlow, xup);
break;
589 case 'I' : histo =
new TH1I(histoname, histoname, nbinsx, xlow, xup);
break;
590 case 'S' : histo =
new TH1S(histoname, histoname, nbinsx, xlow, xup);
break;
591 default : histo =
new TH1I(histoname, histoname, nbinsx, xlow, xup);
594 if (title) histo->SetTitle(title);
595 if (xtitle) histo->SetXTitle(xtitle);
596 if (ytitle) histo->SetYTitle(ytitle);
602 const char* foldername,
603 const char* histoname,
612 const char* ytitle) {
613 TString htype(histotype);
615 if (htype.Length()==0) htype =
"I";
620 case 'C' : cl = TH2C::Class();
break;
621 case 'D' : cl = TH2D::Class();
break;
622 case 'F' : cl = TH2F::Class();
break;
623 case 'I' : cl = TH2I::Class();
break;
624 case 'S' : cl = TH2S::Class();
break;
625 default : cl = TH2I::Class();
630 if (histo)
return histo;
633 case 'C' : histo =
new TH2C(histoname, histoname, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
634 case 'D' : histo =
new TH2D(histoname, histoname, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
635 case 'F' : histo =
new TH2F(histoname, histoname, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
636 case 'I' : histo =
new TH2I(histoname, histoname, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
637 case 'S' : histo =
new TH2S(histoname, histoname, nbinsx, xlow, xup, nbinsy, ylow, yup);
break;
638 default : histo =
new TH2I(histoname, histoname, nbinsx, xlow, xup, nbinsy, ylow, yup);
641 if (title) histo->SetTitle(title);
642 if (xtitle) histo->SetXTitle(xtitle);
643 if (ytitle) histo->SetYTitle(ytitle);
653 GO4TRACE((11,
"TGo4AnalysisObjectManager::CreateBranchFolder(TObjArray*)",__LINE__, __FILE__));
654 if (branchlist==0)
return 0;
656 TList* nameslist=
new TList;
660 TIter iter(branchlist);
661 while((entry=iter()) !=0) {
662 if(entry->InheritsFrom(TBranch::Class())) {
664 TBranch* subbranch=
dynamic_cast<TBranch*
> (entry);
665 TObjArray* subbranchlist = subbranch->GetListOfBranches();
666 if(subbranchlist!=0) {
667 if(subbranchlist->IsEmpty()) {
670 nameslist->AddLast(state);
675 TFolder* subnames = 0;
677 TClass* cl = gROOT->GetClass(subbranch->GetClassName());
678 if((cl!=0) && cl->InheritsFrom(TGo4CompositeEvent::Class()) && istopbranch) {
681 TString branchname(subbranch->GetName());
682 Ssiz_t leng = branchname.Length();
683 branchname.Resize(leng-1);
688 Int_t skippedentries=0;
691 branchlist,cevent,cursor+1,
700 subnames->GetListOfFolders()->AddAll(temp->GetListOfFolders());
701 for(Int_t t=0;t<skippedentries;++t) {
708 subbranch->GetName(),
709 subbranch->GetTitle());
714 subbranch->GetName(), subbranch->GetTitle());
716 nameslist->AddLast(subnames);
722 nameslist->AddLast(state);
728 TFolder* fold =
fxTempFolder->AddFolder(name,title,nameslist);
729 fold->SetOwner(kTRUE);
736 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddTree(TTree*, char*)",__LINE__, __FILE__));
742 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveTree(TTree*, const char*)",__LINE__, __FILE__));
743 if (tree==0)
return kFALSE;
752 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetHistogram(char *)",__LINE__, __FILE__));
760 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetTree(char *)",__LINE__, __FILE__));
766 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveHistogram(char*)",__LINE__, __FILE__));
774 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddAnalysisCondition(TGo4Condition *)",__LINE__, __FILE__));
779 Bool_t counter, TFolder* parent)
781 GO4TRACE((11,
"TGo4AnalysisObjectManager::SetAnalysisCondition(char*, TGo4Condition*, Bool_t)",__LINE__, __FILE__));
783 if(con==0)
return kFALSE;
787 TFolder* topfolder=0;
793 TObject* searchresult=topfolder->FindObjectAny(name);
795 searchresult=
fxUserDir->FindObjectAny(name);
798 if(searchresult && searchresult->InheritsFrom(TGo4Condition::Class())) {
801 if (searchresult && searchresult->InheritsFrom(TFolder::Class())) {
803 TFolder* subf=
dynamic_cast<TFolder*
>(searchresult);
804 searchresult=subf->FindObjectAny(name);
818 const char* separ = strrchr(name,
'/');
820 TString fname(name, separ-name);
831 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetAnalysisCondition(char*)",__LINE__, __FILE__));
836 if ((cond!=0) && (cond_cl!=0))
837 if(!cond->InheritsFrom(cond_cl)) cond = 0;
843 const char* conditionname,
846 const char* bindhistogram,
852 if (wcond)
return wcond;
856 if (bindhistogram!=0)
858 if (invert) wcond->
Invert(invert);
864 const char* conditionname,
869 const char* bindhistogram,
875 if (wcond)
return wcond;
879 if (bindhistogram!=0)
881 if (invert) wcond->
Invert(invert);
887 const char* conditionname,
889 Float_t (*points)[2],
890 const char* bindhistogram,
896 if (pcond)
return pcond;
898 TArrayF fullx(size+1), fully(size+1);
899 int numpoints = size;
901 for (
int i=0;i<numpoints;i++) {
902 fullx[i] = points[i][0];
903 fully[i] = points[i][1];
907 if ((fullx[0]!=fullx[numpoints-1]) || (fully[0]!=fully[numpoints-1])) {
908 fullx[numpoints] = fullx[0];
909 fully[numpoints] = fully[0];
913 TCutG mycat(
"initialcut", numpoints, fullx.GetArray(), fully.GetArray());
915 pcond->SetValues(&mycat);
916 if (bindhistogram!=0)
917 pcond->SetHistogram(bindhistogram);
918 if (invert) pcond->Invert(invert);
926 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveAnalysisCondition(char*)",__LINE__, __FILE__));
940 if(obj->InheritsFrom(TH1::Class()))
943 if(obj->InheritsFrom(TGo4Parameter::Class()))
951 GO4TRACE((11,
"TGo4AnalysisObjectManager::CreateNamesList()",__LINE__, __FILE__));
956 if ((name==0) || (strlen(name)==0)) name =
"Go4NamesList";
965 GO4TRACE((11,
"TGo4AnalysisObjectManager::CreateNamesFolder(TFolder*)",__LINE__, __FILE__));
966 if (objectfolder==0)
return 0;
968 TList* nameslist=
new TList;
969 TIter listiter(objectfolder->GetListOfFolders());
971 while((entry=listiter())!=0) {
972 if(entry->InheritsFrom(TFolder::Class())) {
975 TFolder* subobj=
dynamic_cast<TFolder*
> (entry);
977 nameslist->AddLast(subnames);
980 if (entry->InheritsFrom(TTree::Class())) {
982 TTree* subobj=
dynamic_cast<TTree*
> (entry);
984 nameslist->AddLast(treestruct);
987 if(entry->InheritsFrom(TGo4EventElement::Class())) {
990 nameslist->AddLast(evfolder);
995 nameslist->AddLast(state);
999 TFolder* namesfolder =
fxTempFolder->AddFolder(objectfolder->GetName(),objectfolder->GetTitle(),nameslist);
1001 namesfolder->SetOwner(kTRUE);
1013 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddEventStore(TGo4EventStore*)",__LINE__, __FILE__));
1019 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveEventStore(TGo4EventStore*)",__LINE__, __FILE__));
1036 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddEventSource(TGo4EventSource*)",__LINE__, __FILE__));
1042 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveEventSource(TGo4EventSource*)",__LINE__, __FILE__));
1058 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddEventProcessor(TGo4EventProcessor*)",__LINE__, __FILE__));
1064 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveEventProcessor(TGo4EventProcessr*)",__LINE__, __FILE__));
1080 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddEventStructure(TGo4EventElement*)",__LINE__, __FILE__));
1086 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveEventStructure(TGo4EventElement*)",__LINE__, __FILE__));
1100 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetEvenStructure(char *)",__LINE__, __FILE__));
1102 if ((name==0) || (strlen(name)==0))
return 0;
1107 while (path.Length()>0) {
1108 Int_t pos = path.Index(
"/");
1109 if (pos==0) { path.Remove(0, 1);
continue; }
1112 if (pos>0) { sub.Resize(pos); path.Remove(0, pos+1); }
1113 else { path.Clear(); }
1123 if ((chld==0) && curr->InheritsFrom(sub.Data()))
return curr;
1127 if (curr==0)
return 0;
1135 if(entry) entry->
Reset();
1141 GO4TRACE((11,
"TGo4AnalysisObjectManager::ResetBackStores()",__LINE__, __FILE__));
1145 while((entry=iter()) !=0) {
1147 if(bs!=0) bs->
Reset(clearflag);
1154 GO4TRACE((14,
"TGo4AnalysisObjectManager::CloseAnalysis()",__LINE__, __FILE__));
1170 TDirectory* savdir=gDirectory;
1175 file->Write(0,TObject::kOverwrite);
1184 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddParameter(TGo4Parameter *)",__LINE__, __FILE__));
1190 GO4TRACE((11,
"TGo4AnalysisObjectManager::SetParameter(const char*, TGo4Parameter*)",__LINE__, __FILE__));
1192 if (par==0)
return kFALSE;
1200 TGo4Log::Info(
"Updated parameter %s from parameter %s", name, par->GetName());
1206 const char* separ = strrchr(name,
'/');
1208 TString fname(name, separ-name);
1210 TGo4Log::Info(
"Added new parameter %s to folder %s/%s", clonedpar->GetName(), topfolder->GetName(), fname.Data());
1219 GO4TRACE((11,
"TGo4AnalysisObjectManager::SetParameter(char*, TGo4Parameter*)",__LINE__, __FILE__));
1221 if (status==0)
return kFALSE;
1223 Bool_t rev (kFALSE);
1235 const char* separ = strrchr(name,
'/');
1237 TString fname(name, separ-name);
1248 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetParameter(char*)",__LINE__, __FILE__));
1251 if ((rev!=0) && (parameter_class!=0))
1252 if (!rev->InheritsFrom(parameter_class)) rev=0;
1258 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveParameter(char*)",__LINE__, __FILE__));
1264 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddPicture(TGo4Picture *)",__LINE__, __FILE__));
1265 if(!pic)
return kFALSE;
1273 GO4TRACE((11,
"TGo4AnalysisObjectManager::SetPicture(char*, TGo4Picture*)",__LINE__, __FILE__));
1275 if (pic==0)
return kFALSE;
1278 TFolder* topfolder=0;
1294 const char* separ = strrchr(name,
'/');
1296 TString fname(name, separ-name);
1306 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetPicture(char*)",__LINE__, __FILE__));
1314 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemovePicture(char*)",__LINE__, __FILE__));
1320 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddCanvas(TCanvas *)",__LINE__, __FILE__));
1324 if (rev && can) can->SetBit(kMustCleanup);
1334 GO4TRACE((11,
"TGo4AnalysisObjectManager::GetPicture(char*)",__LINE__, __FILE__));
1342 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemovePicture(char*)",__LINE__, __FILE__));
1349 GO4TRACE((11,
"TGo4AnalysisObjectManager::LoadObjects(TFile*)",__LINE__, __FILE__));
1354 TFolder* top=
dynamic_cast<TFolder*
>(ob);
1396 const char* hevx,
const char* hmemx,
1397 const char* hevy,
const char* hmemy,
1398 const char* hevz,
const char* hmemz,
1399 const char* condition,
1400 const char* cevx,
const char* cmemx,
1401 const char* cevy,
const char* cmemy)
1403 if(name==0 || histo==0 || hevx==0 || hmemx==0)
return kFALSE;
1408 if ((hevx!=0) && (hmemx!=0)) {
1413 if ((hevy!=0) && (hmemy!=0)) {
1418 if ((hevz!=0) && (hmemz!=0)) {
1423 if((condition!=0) && (cevx!=0) && (cmemx!=0)) {
1427 if((cevy!=0) && (cmemy!=0)) {
1438 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddTreeHistogram(char*,...)",__LINE__, __FILE__));
1462 GO4TRACE((11,
"TGo4AnalysisObjectManager::FindSubFolder(TFolder*, const char*, Bool_t)",__LINE__, __FILE__));
1464 TFolder* result = 0;
1465 if (parent==0)
return 0;
1466 if (subfolder==0)
return parent;
1467 const char* separ = strchr(subfolder,
'/');
1470 TString subname(subfolder, separ - subfolder);
1473 TFolder* nextsubfolder =
FindSubFolder(parent, subname.Data(), create);
1477 TIter listiter(parent->GetListOfFolders());
1478 TObject *entry, *bigger_entry = 0;
1479 while ((entry = listiter()) != 0) {
1480 if (entry->InheritsFrom(TFolder::Class())) {
1481 int cmp = strcmp(subfolder, entry->GetName());
1483 result =
dynamic_cast<TFolder *
>(entry);
1487 bigger_entry = entry;
1493 if(!result && create) {
1496 lst = dynamic_cast<TList *> (parent->GetListOfFolders());
1498 result =
new TFolder(subfolder,
"UserFolder");
1499 lst->AddBefore(bigger_entry, result);
1501 result = parent->AddFolder(subfolder,
"UserFolder");
1511 const char* subfolder,
1516 GO4TRACE((11,
"TGo4AnalysisObjectManager::AddObjectToFolder(TObject *, TFolder*, const char*, Bool_t)",__LINE__, __FILE__));
1519 if(fold==0)
return kFALSE;
1522 GO4TRACE((12,
"TGo4AnalysisObjectManager::AddObjectToFolder - zero object",__LINE__, __FILE__));
1532 if (subfolder && (strlen(subfolder)!=0)) {
1533 subname = subfolder;
1534 if (subname[subname.Length()-1] ==
'/')
1535 subname.Resize(subname.Length()-1);
1541 oldob=fold->FindObjectAny( ob->GetName() );
1545 if (subname.Length()>0)
1546 obname = subname +
"/" + ob->GetName();
1548 obname = ob->GetName();
1551 oldob = fold->FindObjectAny(obname.Data());
1557 if(replace && ob!=oldob) {
1559 fold->RecursiveRemove(oldob);
1573 TFolder* addDir = 0;
1576 if(!addDir) addDir = fold;
1586 GO4TRACE((11,
"TGo4AnalysisObjectManager::RemoveObjectFromFolder(const char*, TFolder*, Bool_t)",__LINE__, __FILE__));
1588 if(fold==0)
return kFALSE;
1594 strncpy(buffer,fullname,buflen-10);
1595 obj = fold->FindObjectAny(buffer);
1599 fold->RecursiveRemove(obj);
1601 if (isDel)
delete obj;
1612 if (source==0)
return kFALSE;
1613 GO4TRACE((11,
"TGo4AnalysisObjectManager::LoadFolder(TFolder*, TFolder*, Bool_t replace)",__LINE__, __FILE__));
1616 TIter folderiter(source->GetListOfFolders());
1618 while(( ob=folderiter() ) !=0)
1620 if(ob->InheritsFrom(TFolder::Class()))
1622 TFolder* subfolder =
dynamic_cast<TFolder*
> (ob);
1626 TFolder* subdest=
FindSubFolder(destination,subfolder->GetName(), kTRUE);
1640 GO4TRACE((11,
"TGo4AnalysisObjectManager::LoadFolder(TDirectory*, TFolder*, Bool_t replace)",__LINE__, __FILE__));
1641 if(!source || !destination)
return kFALSE;
1644 TDirectory* savdir=gDirectory;
1647 TIter keyiter(source->GetListOfKeys());
1650 while(( keyob=keyiter() ) !=0)
1652 key=
dynamic_cast<TKey*
>(keyob);
1660 TObject* ob = key->ReadObj();
1665 ob=source->Get(key->GetName());
1674 if(ob->InheritsFrom(TDirectory::Class()))
1676 TDirectory* subdir =
dynamic_cast<TDirectory*
> (ob);
1680 Bool_t inpicturefolder=kFALSE;
1681 if(!strcmp(subdir->GetName(),
fgcPICTFOLDER)) inpicturefolder=kTRUE;
1683 TFolder* subdest=
FindSubFolder(destination,subdir->GetName(), kTRUE);
1699 if(!ob || !destination)
return kFALSE;
1702 if (ob->InheritsFrom(TGo4DynamicEntry::Class())) {
1708 if(ob->InheritsFrom(TGo4Parameter::Class())) {
1713 if(ob->InheritsFrom(TGo4Picture::Class())) {
1719 if(ob->InheritsFrom(TGo4Condition::Class())) {
1724 if(ob->InheritsFrom(TH1::Class())) {
1727 TH1* his =
dynamic_cast<TH1*
>(ob);
1729 his->SetDirectory(gROOT);
1735 if(ob->InheritsFrom(TCanvas::Class())) {
1736 TObject* addob = ob->Clone();
1742 if (gPad==addob) gPad = 0;
1747 TObject* addob = ob->Clone();
1761 if (source==0)
return kFALSE;
1764 TIter folderiter(source->GetListOfFolders());
1766 while(( ob=folderiter() ) !=0) {
1767 if(ob->InheritsFrom(TFolder::Class())) {
1768 TFolder* subfolder =
dynamic_cast<TFolder*
> (ob);
1771 TDirectory* currentdir=gDirectory;
1772 const char* subfoldername=subfolder->GetName();
1773 TDirectory* subdir=
dynamic_cast<TDirectory*
>(currentdir->Get(subfoldername));
1776 subdir=currentdir->mkdir(subfoldername,
"subdir");
1805 if(!ob || !dir)
return;
1819 if((fold==0) || (dir==0))
return;
1821 TIter iter(fold->GetListOfFolders());
1823 while((ob = iter()) !=0) {
1824 if(ob->InheritsFrom(TFolder::Class())) {
1825 TFolder* subfolder =
dynamic_cast<TFolder*
> (ob);
1829 dir->RecursiveRemove(ob);
1835 if(fold==0)
return 0;
1837 GO4TRACE((11,
"TGo4AnalysisObjectManager::PrintFolder(TFolder*, Option_t*)",__LINE__, __FILE__));
1840 TROOT::IndentLevel();
1841 TROOT::IncreaseDirLevel();
1842 std::cout <<
"+Folder "<<fold->GetName()<<
" content:" << std::endl;
1843 TIter listiter(fold->GetListOfFolders());
1845 while((ob=listiter())!=0) {
1846 if(ob->InheritsFrom(TFolder::Class()))
1847 totalsize+=
PrintFolder(dynamic_cast<TFolder*>(ob),opt,expression);
1850 TROOT::IndentLevel();
1857 TROOT::DecreaseDirLevel();
1858 TROOT::IndentLevel();
1859 std::cout <<
"++++End "<<fold->GetName()<<
"++++++++++" << std::endl;
1865 GO4TRACE((11,
"TGo4AnalysisObjectManager::ClearFolder(TFolder*, Option_t*)",__LINE__, __FILE__));
1866 if(fold==0)
return kFALSE;
1868 TIter iter(fold->GetListOfFolders());
1870 while((ob=iter())!=0)
1871 if(ob->InheritsFrom(TFolder::Class()))
1880 GO4TRACE((11,
"TGo4AnalysisObjectManager::ClearObject(TObject*)",__LINE__, __FILE__));
1886 if(ob->InheritsFrom(TH1::Class()))
1888 TH1* his=
dynamic_cast<TH1*
>(ob);
1889 if (his) his->Reset();
1891 else if(ob->InheritsFrom(TGo4DynamicEntry::Class()))
1894 if (entry!=0) entry->
Reset();
1896 else if(ob->InheritsFrom(TGo4Picture::Class()))
1899 if (pic) pic->
Reset();
1901 else if(ob->InheritsFrom(TGraph::Class()))
1903 TGraph* gr=
dynamic_cast<TGraph*
>(ob);
1910 else if(ob->InheritsFrom(TMultiGraph::Class()))
1912 TMultiGraph* mg=
dynamic_cast<TMultiGraph*
>(ob);
1914 TIter liter(mg->GetListOfGraphs());
1916 while((gr=liter())!=0)
1920 else if(ob->InheritsFrom(TGo4EventElement::Class()))
1926 else if(ob->InheritsFrom(TTree::Class()))
1945 GO4TRACE((11,
"TGo4AnalysisObjectManager::DeleteFolder(TFolder*, Option_t*)",__LINE__, __FILE__));
1946 if (fold==0)
return kFALSE;
1949 TIter iter(fold->GetListOfFolders());
1951 while((ob=iter())!=0)
1952 if(ob->InheritsFrom(TFolder::Class()))
1961 GO4TRACE((11,
"TGo4AnalysisObjectManager::DeleteObject(TObject*)",__LINE__, __FILE__));
1971 if(fold==0)
return kFALSE;
1973 TIter listiter(fold->GetListOfFolders());
1975 while((ob=listiter.Next())!=0)
1976 if(ob->InheritsFrom(TFolder::Class()))
1985 if((ob==0) || (flags==0))
return kFALSE;
1996 GO4TRACE((11,
"TGo4AnalysisObjectManager::CleanupDynamicLists(TNamed*)",__LINE__, __FILE__));
1998 if (oldobject==0)
return;
2000 if(oldobject->InheritsFrom(TH1::Class()) ||
2001 oldobject->InheritsFrom(TGo4Condition::Class()) ||
2002 oldobject->InheritsFrom(TGo4EventElement::Class()))
2009 GO4TRACE((11,
"TGo4AnalysisObjectManager::PrintConditions(const char*)",__LINE__, __FILE__));
2011 std::cout <<
"___________________________________________________________" << std::endl;
2012 std::cout <<
"Total size of all conditions is: " << totalsize <<
" bytes." << std::endl;
2017 GO4TRACE((11,
"TGo4AnalysisObjectManager::PrintHistograms(const char*)",__LINE__, __FILE__));
2019 std::cout <<
"___________________________________________________________" << std::endl;
2020 std::cout <<
"Total size of all histograms is: " << totalsize <<
" bytes." << std::endl;
2025 GO4TRACE((11,
"TGo4AnalysisObjectManager::PrintParameters(const char*)",__LINE__, __FILE__));
2027 std::cout <<
"___________________________________________________________" << std::endl;
2028 std::cout <<
"Total size of all parameters is: " << totalsize <<
" bytes." << std::endl;
2048 TFolder* searchfold;
2059 TList* result =
new TList;
2061 TIter iter(fold->GetListOfFolders());
2063 while((entry = iter())!=0) {
2064 if(entry->InheritsFrom(TFolder::Class())) {
2065 TFolder* subfold=
dynamic_cast<TFolder*
>(entry);
2068 result->AddAll(sublist);
2070 if(entry->InheritsFrom(TTree::Class())) {
2072 if(entry->InheritsFrom(TGo4EventElement::Class())) {
2074 if(entry->InheritsFrom(TGo4EventSource::Class())) {
2076 if(entry->InheritsFrom(TGo4EventStore::Class())) {
2078 if(entry->InheritsFrom(TGo4EventProcessor::Class())) {
2081 result->AddLast(entry);
2090 if(expression==0)
return kTRUE;
2091 Bool_t ismatching=kFALSE;
2092 TString entrystring=string;
2093 TRegexp reg(expression,kTRUE);
2094 if(!strcmp(expression,
"*"))
2098 else if (entrystring.Index(reg,0)!=kNPOS)
2108 GO4TRACE((12,
"TGo4AnalysisObjectManager::FindObjectInFolder(TFolder*, const char*)",__LINE__, __FILE__));
2111 return folder ? folder->FindObjectAny(fullname) : 0;
2116 const char* &pathname,
2117 const char* objectname,
2121 if ((pathname!=0) && (strlen(pathname)==0)) pathname = 0;
2123 fullname = pathname;
2126 fullname += objectname;
2130 if ((obj!=0) && (!obj->InheritsFrom(cl))) {
2141 if (obj==0)
return kFALSE;
2145 if (fold->GetListOfFolders()->FindObject(obj)==obj) {
2150 TIter iter(fold->GetListOfFolders());
2153 while ((sub = iter())!=0) {
2154 if (!sub->InheritsFrom(TFolder::Class()))
continue;
2156 if (pathname.Length()==0)
2157 pathname = sub->GetName();
2159 pathname = TString(sub->GetName()) +
"/" + pathname;
Bool_t SetParameter(const char *name, TGo4Parameter *par, TFolder *parent=0)
TGo4PolyCond * MakePolyCond(const char *foldername, const char *conditionname, Int_t size, Float_t(*points)[2], const char *bindhistogram=0, Bool_t invert=kFALSE)
Bool_t DeleteObject(TObject *ob)
Bool_t SetAnalysisCondition(const char *name, TGo4Condition *con, Bool_t counter=kTRUE, TFolder *parent=0)
TFolder * CreateCompositeBranchFolder(TObjArray *branchlist, TGo4CompositeEvent *compevent, Int_t startindex, Int_t *skip, const char *name, const char *title)
static const char * fgcSTOREFOLDER
Bool_t ProtectObject(TObject *ob, const Option_t *flags)
Bool_t RemoveObjectFromFolder(const char *fullname, TFolder *fold, Bool_t isDel)
Bool_t RemoveEventProcessor(TGo4EventProcessor *pro)
Bool_t RemoveEventStructure(TGo4EventElement *ev)
static void CleanupPointerInEntries(TFolder *folder, TObject *obj)
virtual TGo4EventElement * GetChild(const char *name)
void UpdateFrom(TGo4Picture *source, TClass *selectedobjclass=0)
Bool_t AddObject(TNamed *anything, const char *subfolder=0, Bool_t replace=kTRUE)
virtual Bool_t UpdateFrom(TGo4Condition *cond, Bool_t counts)
void ResetCurrentDynList()
Bool_t AddDynamicEntry(TGo4DynamicEntry *entry)
TFolder * CreateBranchFolder(TObjArray *branchlist, const char *name, const char *title, Bool_t istopbranch=kFALSE)
Bool_t IsMatching(const char *string, const char *expression)
Bool_t SaveFolder(TFolder *source)
void Reset(Bool_t onlyclearflag=kFALSE)
Bool_t RemovePicture(const char *name)
static const char * GetHISTFOLDER()
static const char * GetTMPFOLDER()
void SetConditionName(const char *name)
static const char * GetTOPDYNAMICLIST()
void RemoveFromDir(TFolder *fold, TDirectory *dir)
Short_t getNElements() const
Bool_t ClearObjects(const char *name)
static const char * fgcSRCFOLDER
~TGo4AnalysisObjectManager()
Bool_t DeleteObjects(const char *name)
Bool_t RemoveObject(const char *name, Bool_t del=kTRUE)
TGo4Picture * GetPicture(const char *name)
Bool_t AddCanvas(TCanvas *can, const char *subfolder=0)
static const char * GetCONDFOLDER()
Bool_t ClearFolder(TFolder *fold)
Bool_t AddPicture(TGo4Picture *pic, const char *subfolder=0)
Bool_t RemoveDynamicEntry(const char *entryname)
TH1 * GetHistogram(const char *name)
void SetConEventName(Int_t ix, const char *name)
static void CleanupSpecials()
void SetHistogramName(const char *name)
static const char * GetCANVFOLDER()
static const char * fgcPARAFOLDER
TObjArray * getListOfComposites(Bool_t toplevel=kTRUE)
Bool_t FindObjectPathName(TObject *obj, TString &pathname, TFolder *fold=0)
static const char * GetDYNFOLDER()
TList * CreateObjectList(const char *expr, const char *folder=0)
static const char * GetUSRFOLDER()
void PrintConditions(const char *expression=0)
static const char * fgcCONDFOLDER
Bool_t UpdateParameterValues(TGo4Parameter *par)
Bool_t ProtectFolder(TFolder *fold, const Option_t *flags)
TGo4EventElement * GetEventStructure(const char *name)
Bool_t AddHistogram(TH1 *his, const char *subfolder=0, Bool_t replace=kTRUE)
Bool_t RemoveEventStore(TGo4EventStore *store)
static const char * fgcTREEFOLDER
Bool_t AddEventProcessor(TGo4EventProcessor *pro)
Bool_t AddEventSource(TGo4EventSource *source)
TGo4Parameter * CreateParameter()
Bool_t IsSortedOrder() const
TObject * FindObjectInFolder(TFolder *folder, const char *fullname)
Bool_t AddAnalysisCondition(TGo4Condition *con, const char *subfolder=0)
static void ResetEntries(TFolder *folder)
TObject * TestObject(TFolder *folder, const char *&pathname, const char *objectname, const TClass *cl)
static const char * fgcPROCFOLDER
Bool_t PutToFolder(TObject *ob, TFolder *destination, Bool_t replace=kFALSE)
void PrintHistograms(const char *expression=0)
TH1 * MakeTH1(const char *histotype, const char *foldername, const char *histoname, Int_t nbinsx, Axis_t xlow, Axis_t xup, const char *title=0, const char *xtitle=0, const char *ytitle=0)
TFolder * CreateNamesFolder(TFolder *objectfolder)
static const char * fgcUSRFOLDER
Bool_t RemoveEventSource(TGo4EventSource *source)
TObject * GetAsTObject(const char *name, const char *folder=0)
Bool_t ClearObject(TObject *ob)
void AppendToDir(TObject *ob, TDirectory *dir)
Bool_t RemoveCanvas(const char *name)
Bool_t AddEventStore(TGo4EventStore *store)
void Message(Int_t prio, const char *text,...)
Bool_t AddParameter(TGo4Parameter *par, const char *subfolder=0)
TFolder * FindSubFolder(TFolder *parent, const char *subfolder, Bool_t create=kTRUE)
Bool_t RemoveTree(TTree *tree, const char *stepname=0)
Bool_t ResetBackStores(Bool_t clearflag=kFALSE)
void SetHistogram(const char *name)
Bool_t AddTree(TTree *tree, const char *subfolder=0)
static const char * GetPARAFOLDER()
static const char * fgcTOPDYNAMICLIST
TGo4Parameter * GetParameter(const char *name, const char *parameter_class=0)
void SetHisEventName(Int_t ix, const char *name)
TGo4AnalysisObjectNames * CreateNamesList()
TObject * NextMatchingObject(const char *expr, const char *folder, Bool_t reset)
virtual void SetValues(Double_t low1, Double_t up1)
#define fguSUBFOLDERMAXLEN
virtual const char * GetName() const
TGo4Condition * GetAnalysisCondition(const char *name, const char *cond_cl=0)
static const char * GetPICTFOLDER()
Int_t GetDynListInterval() const
static const char * fgcEVENTFOLDER
static const char * fgcHISTFOLDER
Bool_t RemoveAnalysisCondition(const char *name)
void CleanupDynamicLists(TObject *oldobject)
Int_t PrintFolder(TFolder *fold, Option_t *opt, const char *expression=0)
static void PrintEntries(TFolder *folder)
TFolder * GetObjectFolder()
Bool_t RemoveHistogram(const char *name, Bool_t del=kTRUE)
void PrintParameters(const char *expression=0)
virtual Bool_t UpdateFrom(TGo4Parameter *rhs)
TFolder * CreateMembersFolder(TObject *obj, const char *membrfoldername, TClass *cl)
TGo4ObjectStatus * CreateObjectStatus(const char *name, const char *folder=0)
static const char * GetSRCFOLDER()
void ProcessDynamicList()
static const char * fgcTMPFOLDER
Bool_t ProtectObjects(const char *name, const Option_t *flags)
Bool_t AddTreeHistogram(const char *hisname, const char *treename, const char *varexp, const char *cutexp)
static const char * GetSTOREFOLDER()
void SetConVarName(Int_t ix, const char *name)
TGo4WinCond * MakeWindowCond(const char *foldername, const char *conditionname, Double_t xlow, Double_t xup, const char *bindhistogram=0, Bool_t invert=kFALSE)
Bool_t SetPicture(const char *name, TGo4Picture *pic, TFolder *parent=0)
static const char * GetTOPFOLDER()
TNamed * GetObject(const char *name, const char *folder=0)
Bool_t RemoveParameter(const char *name)
static const char * GetPROCFOLDER()
Bool_t SetParameterStatus(const char *name, TGo4ParameterStatus *par, TFolder *parent=0)
static const char * GetEVENTFOLDER()
static const char * GetANALYSISFOLDER()
Bool_t AddDynamicHistogram(const char *name, const char *histo, const char *hevx, const char *hmemx, const char *hevy=0, const char *hmemy=0, const char *hevz=0, const char *hmemz=0, const char *condition=0, const char *cevx=0, const char *cmemx=0, const char *cevy=0, const char *cmemy=0)
Bool_t DeleteFolder(TFolder *fold)
static const char * fgcANALYSISFOLDER
TH2 * MakeTH2(const char *histotype, const char *foldername, const char *histoname, Int_t nbinsx, Axis_t xlow, Axis_t xup, Int_t nbinsy, Axis_t ylow, Axis_t yup, const char *title=0, const char *xtitle=0, const char *ytitle=0)
Bool_t AddEventStructure(TGo4EventElement *ev)
Bool_t LoadObjects(TFile *statusfile)
void SaveObjects(TFile *file)
static const char * fgcCANVFOLDER
Int_t GetObjectSize() const
static TGo4Analysis * Instance()
TTree * GetTree(const char *name)
static const char * fgcDYNFOLDER
static const char * GetTREEFOLDER()
TGo4TreeStructure * CreateTreeStructure(TTree *thetree)
static void Info(const char *text,...)
Bool_t LoadFolder(TFolder *source, TFolder *destination, Bool_t replace=kFALSE)
Bool_t AddObjectToFolder(TObject *ob, TFolder *fold, const char *subfolder=0, Bool_t replace=kTRUE, Bool_t uniquename=kFALSE, Bool_t resetbits=kTRUE)
TCanvas * GetCanvas(const char *name)
virtual void Invert(Bool_t on)
TGo4AnalysisObjectManager()
virtual void RecursiveRemove(TObject *obj)
static const char * fgcTOPFOLDER
Bool_t fbSuppressLoadHistograms
void SetHisVarName(Int_t ix, const char *name)
static void ProcessEntries(TFolder *folder, Bool_t processtrees, Int_t interval)
TIterator * fxMatchIterator
static const char * fgcPICTFOLDER