22 #include "TProfile2D.h" 24 #include "TGraphErrors.h" 25 #include "TGraphAsymmErrors.h" 26 #include "TMultiGraph.h" 29 #include "TDirectory.h" 36 #include "TObjString.h" 39 #include "TVirtualTreePlayer.h" 42 #include "TGo4LockGuard.h" 84 Bool_t
Use()
const override {
return kFALSE; }
88 if (
fObject == obj)
return kTRUE;
90 Bool_t updatedone =
false;
93 if ((
fObject->IsA() == obj->IsA()) &&
94 (strcmp(
fObject->GetName(), obj->GetName()) == 0))
102 if (owner)
delete obj;
112 if (!
fObject && !strong)
return;
130 const char *viewpath,
131 Bool_t withRootBrowser)
133 fxDataPath = datapath;
134 fxViewPath = viewpath;
135 fbWithRootBrowser = withRootBrowser;
136 fxMemoryPath =
"Workspace";
142 Info(
"~TGo4BrowserProxy",
"Called");
144 if (fDummyTreePlayer) {
145 delete fDummyTreePlayer;
146 fDummyTreePlayer =
nullptr;
150 fxWaitingList->Delete();
151 delete fxWaitingList;
152 fxWaitingList =
nullptr;
159 fxSyncTimer =
nullptr;
162 if (fxMonitorTimer) {
163 delete fxMonitorTimer;
164 fxMonitorTimer =
nullptr;
168 Info(
"~TGo4BrowserProxy",
"Finished");
173 fxOM = slot->
GetOM();
174 fxBrowserSlot = slot;
178 gROOT->GetClass(
"TH1");
179 gROOT->GetClass(
"TH1C");
180 gROOT->GetClass(
"TH1D");
181 gROOT->GetClass(
"TH1F");
182 gROOT->GetClass(
"TH1I");
183 gROOT->GetClass(
"TH1S");
184 gROOT->GetClass(
"TH2");
185 gROOT->GetClass(
"TH2C");
186 gROOT->GetClass(
"TH2D");
187 gROOT->GetClass(
"TH2F");
188 gROOT->GetClass(
"TH2I");
189 gROOT->GetClass(
"TH2S");
190 gROOT->GetClass(
"TH3");
191 gROOT->GetClass(
"TH3C");
192 gROOT->GetClass(
"TH3D");
193 gROOT->GetClass(
"TH3F");
194 gROOT->GetClass(
"TH3I");
195 gROOT->GetClass(
"TH3S");
197 gROOT->GetClass(
"TGo4WinCond");
198 gROOT->GetClass(
"TGo4PolyCond");
199 gROOT->GetClass(
"TGo4ShapedCond");
200 gROOT->GetClass(
"TGo4CondArray");
202 gROOT->GetClass(
"TGo4Fitter");
203 gROOT->GetClass(
"TGo4Parameter");
204 gROOT->GetClass(
"TGo4Picture");
206 gROOT->GetClass(
"TGo4DynamicEntry");
207 gROOT->GetClass(
"TGo4HistogramEntry");
208 gROOT->GetClass(
"TGo4TreeHistogramEntry");
209 gROOT->GetClass(
"TLatex");
210 gROOT->GetClass(
"TF1");
211 gROOT->GetClass(
"TGo4AnalysisStatus");
214 fxOM->RegisterLink(fxOM->GetSlot(fxDataPath.Data()), slot, kTRUE);
216 fiMonitoringPeriod = 0;
222 fxOM->UnregisterLink(slot);
224 fxBrowserSlot =
nullptr;
230 bool ischildevent = source->
IsParent(slot);
234 if ((source!=slot) && !ischildevent) {
241 if (!fxSyncTimer) fxSyncTimer =
new TTimer(
this, 10, kTRUE);
243 fxSyncTimer->Start(10, kTRUE);
247 }
else if ((source != slot) && ischildevent) {
249 CheckWaitingList(source);
251 CheckPictureMonitor(source);
275 BrowserSlotName(item, slotname);
276 return fxOM->GetSlot(slotname.Data());
282 DataSlotName(item, slotname);
283 return fxOM->GetSlot(slotname.Data());
288 return BrowserSlot(fxMemoryPath.Data());
293 if (!itemslot || !fxBrowserSlot || !itemslot->
IsParent(fxBrowserSlot))
return kFALSE;
300 fxBrowserSlot->Update(kFALSE);
302 TGo4Iter iter(fxOM->GetSlot(fxDataPath), kTRUE);
312 if (!name || !fxBrowserSlot || !fxOM)
return 0;
314 Int_t kind = ItemKind(name);
316 TClass *cl = ItemClass(name);
317 if (!cl || !cl->IsLoaded())
return 0;
322 DataSlotName(name, src);
323 BrowserSlotName(name, tgt);
325 return fxOM->RequestObject(src.Data(), tgt.Data(), wait_time);
330 if (!slot || !slot->
IsParent(fxBrowserSlot))
return 0;
333 return RequestBrowserObject(name.Data(), wait_time);
338 return ProduceExplicitCopy(BrowserSlot(itemname), tgtpath, forcerequest);
345 if (!itemslot)
return kFALSE;
347 TGo4Slot *memslot = BrowserMemorySlot();
348 if (itemslot->
IsParent(memslot) && !tgtpath)
return kFALSE;
350 TGo4Slot *tgtslot = BrowserSlot(tgtpath);
351 if (!tgtslot)
return kFALSE;
352 if ((tgtslot == itemslot) || tgtslot->
IsParent(itemslot))
return kFALSE;
358 for (Int_t n = 0; n < itemslot->
NumChilds(); n++)
364 TGo4Slot *tgtslot = DataSlot(tgtpath);
365 if (!tgtslot)
return kFALSE;
366 if (!tgtslot->
GetSlot(itemslot->GetName(), kTRUE))
return kFALSE;
373 subpath += itemslot->GetName();
375 tgtpath = subpath.Data();
378 for (Int_t n = 0; n <= childs.GetLast(); n++) {
379 Bool_t res1 = ProduceExplicitCopy((
TGo4Slot *)childs.At(n), tgtpath, forcerequest);
390 TGo4Slot *tgtslot = ItemSlot(tgtpath);
391 if (!tgtslot)
return kFALSE;
392 if (!tgtslot->
IsParent(memslot) && (tgtslot!=memslot))
return kFALSE;
393 if (itemslot->
GetParent() == tgtslot)
return kFALSE;
394 if (memslot!=tgtslot)
397 if (!BrowserItemName(itemslot->
GetParent(), pathname))
return kFALSE;
402 if (!obj || forcerequest) {
403 Int_t res = RequestBrowserObject(itemslot);
404 if (res == 0)
return kFALSE;
406 if ((res == 1) || !forcerequest)
411 TString res = SaveToMemory(pathname, obj->Clone(), kTRUE);
412 return res.Length() > 0;
415 AddWaitingList(itemslot, tgtpath);
423 fxClipboard->Delete();
425 fxClipboard =
nullptr;
431 if (!fxClipboard) fxClipboard =
new TObjArray;
433 if (fxClipboard->FindObject(itemname))
return;
435 TGo4Slot *itemslot = BrowserSlot(itemname);
436 if (!itemslot)
return;
439 for (Int_t n = 0; n <= fxClipboard->GetLast(); n++) {
440 TNamed *nm = (TNamed *)fxClipboard->At(n);
441 TGo4Slot *slot = ItemSlot(nm->GetName());
448 fxClipboard->Add(
new TNamed(itemname,
"clipboard item"));
453 return fxClipboard !=
nullptr;
458 if (!fxClipboard)
return;
460 for (Int_t n = 0; n <= fxClipboard->GetLast(); n++)
461 ProduceExplicitCopy(fxClipboard->At(n)->GetName(), tgtpath, forcerequest);
466 if (!fname || (*fname == 0))
return;
468 fxOM->AddFile(fxDataPath.Data(), fname);
475 fxOM->AddProxy(fxDataPath.Data(), serv, slotname, info);
482 if (!nodename || (*nodename == 0))
return kFALSE;
485 if (!proxy->
Connect(nodename)) {
490 const char *slotname = nodename;
491 if (strncmp(slotname,
"dabc://",7) == 0) slotname+=7;
493 AddServerProxy(proxy, slotname,
"Connection to DABC server");
501 const char *basename,
502 const char *userpass,
516 TString capt =
"HServ_";
519 AddServerProxy(hserv, capt.Data(),
"Connection to histogram server");
534 for (Int_t n = 0; n < slot->
NumChilds(); n++) {
549 for (Int_t n = 0; n < slot->
NumChilds(); n++) {
552 if (pr) arr->Add(pr);
563 for (Int_t n = 0; n < slot->
NumChilds(); n++) {
566 if (pr) arr->Add(pr);
577 for (Int_t n = 0; n < slot->
NumChilds(); n++) {
583 (strncmp(pr->
GetServerName(),
"https://",8) == 0)) arr->Add(pr);
600 TString &createdhistoname)
602 if (!Xexp || strlen(Xexp) == 0)
return;
604 TString varexp(Xexp);
606 if(Yexp && strlen(Yexp) > 0) {
607 varexp = TString(Yexp) + TString(
":") + varexp;
609 varexp = TString(Zexp) + TString(
":") + varexp;
612 int drawdim = varexp.CountChar(
':') + 1;
613 if (drawdim > 3) drawdim = 3;
615 if (IsItemRemote(treename)) {
619 TString analhname(hname);
622 TString anitem =
"abcdef";
623 if (analhname.IsNull())
624 while (anitem.Length() > 0) {
625 analhname =
"hTreeDraw";
626 if (cnt > 0) { analhname+=
"_"; analhname+=cnt; }
628 anitem = FindItemInAnalysis(analhname.Data());
631 an->
RemoteTreeDraw(objname.Data(), varexp.Data(), cutcond, analhname.Data());
635 createdhistoname =
"";
642 TString treeslotname;
643 DataSlotName(treename, treeslotname);
644 TTree *SelectedTree =
dynamic_cast<TTree *
> (fxOM->GetObject(treeslotname.Data()));
645 if (!SelectedTree)
return;
647 TString histoname(hname), hslotname;
648 BrowserSlotName(hname, hslotname);
651 TH1 *histo =
nullptr;
653 if (hslot && !IsItemRemote(hslot)) {
654 histo =
dynamic_cast<TH1 *
> (GetBrowserObject(hname, 1));
655 if (histo && (drawdim != histo->GetDimension())) {
663 if (!histo && histoname.IsNull())
665 histoname = fxMemoryPath;
666 histoname +=
"/hTreeDraw_";
668 BrowserSlotName(histoname, hslotname);
669 hslot = fxOM->
GetSlot(hslotname.Data());
672 TString hfoldername, hobjectname;
676 hobjectname = histo->GetName();
679 varexp += hobjectname;
681 TDirectory *oldhisdir = histo ? histo->GetDirectory() :
nullptr;
682 TDirectory *savdir = gDirectory;
683 gDirectory =
nullptr;
684 TDirectory dummydir(
"DummyTreeDraw",
"Dummy directory to call tree draw");
687 histo->SetDirectory(&dummydir);
689 SelectedTree->Draw(varexp, cutcond,
"goff", 10000000, 0);
692 histo =
dynamic_cast<TH1 *
> (dummydir.FindObject(hobjectname));
694 histo->SetDirectory(
nullptr);
695 createdhistoname = SaveToMemory(
nullptr, histo, kTRUE);
700 histo->SetDirectory(oldhisdir);
701 TGo4Slot *brslot = BrowserSlot(hname);
720 while (iter.
next()) {
727 if (!serv || ((kind == 1) && !serv->
IsGo4Analysis()))
continue;
729 if (!dynamic_cast<TGo4AnalysisProxy *>(slot->
GetProxy()))
continue;
736 if (res && !databranch) {
739 res = BrowserSlot(itemname.Data());
748 DataSlotName(itemname, slotname);
751 if (!slot || !itemname)
752 slot = FindServerSlot(kTRUE);
762 DataSlotName(itemname, slotname);
765 if (!slot || !itemname)
766 slot = FindServerSlot(kTRUE, asanalysis ? 1 : 2);
773 TGo4Slot *analslot = FindServerSlot(kTRUE, 1);
774 if (!analslot || !objname)
return TString(
"");
777 while (iter.
next()) {
778 if (strcmp(iter.
getname(), objname) != 0)
continue;
791 TGo4Slot *topslot = BrowserTopSlot();
792 if (!topslot || !objname)
return TString(
"");
796 if (strcmp(iter.
getname(), objname) == 0)
804 TGo4Slot *slot = DataSlot(itemname);
805 if (!slot)
return nullptr;
819 DataSlotName(itemname, slotname);
820 const char *objectname =
nullptr;
826 if (!serv)
return nullptr;
828 if (objname) *objname = objectname;
834 return DefineServerObject(itemname, &analysisname, kTRUE);
839 TGo4Slot *slot = BrowserSlot(itemname);
840 if (!slot)
return kFALSE;
842 if (!obj) obj = GetBrowserObject(itemname, 0);
843 if (!obj)
return kFALSE;
845 const char *analysisname =
nullptr;
849 if (IsItemRemote(itemname)) {
850 DataSlotName(itemname, slotname);
851 anslot = fxOM->
FindSlot(slotname.Data(), &analysisname);
855 analysisname =
nullptr;
856 anslot = FindServerSlot(kTRUE, 1);
865 TGo4Slot *itemslot = ItemSlot(itemname);
866 if (!itemslot)
return;
869 RequestBrowserObject(itemslot, wait_time);
872 while (iter.
next()) {
875 RequestBrowserObject(subslot, wait_time);
878 if (wait_time == 0)
return;
883 TGo4Slot *slot = BrowserSlot(itemname);
886 SetItemTimeDate(slot);
896 if (!name || !fxBrowserSlot || !fxOM)
return nullptr;
899 BrowserSlotName(name, tgt);
902 if (!guislot)
return nullptr;
906 if ((update == 0) || ((update == 1) && obj))
return obj;
908 if (guislot->
IsParent(BrowserMemorySlot()))
return obj;
910 DataSlotName(name, src);
912 fxOM->RequestObject(src.Data(), tgt.Data(), (update < 10) ? 0 : update);
919 fiFilterIndex = filter;
920 InformBrowserUpdate();
931 if (!itemslot || !fxBrowserSlot || !fxOM)
return kFALSE;
933 Int_t cando = ItemCanDo(itemslot);
935 Bool_t ismemoryitem = itemslot->
IsParent(BrowserMemorySlot());
937 if (!ismemoryitem && !CanCloseItem(cando) && !IsCanDelete(itemslot))
return kFALSE;
939 if (itemslot->
GetPar(
"::CopyObject") !=
nullptr) {
941 InformBrowserUpdate();
943 TString name = itemslot->
GetFullName(fxBrowserSlot);
945 DataSlotName(name.Data(), src);
946 fxOM->DeleteSlot(src.Data());
953 if (!slot || !slot->
IsParent(fxBrowserSlot))
return;
960 return fxBrowserSlot;
966 BrowserSlotName(itemname, slotname);
967 return fxOM->GetSlot(slotname.Data());
973 BrowserSlotName(itemname, slotname);
975 if (!slot)
return kFALSE;
979 TClass *cl = ItemClass(treeslot);
980 if (cl && cl->InheritsFrom(TTree::Class()))
break;
983 if (!treeslot)
return kFALSE;
992 if (!itemname || !treename)
return kFALSE;
995 BrowserSlotName(itemname, slotname);
997 if (!slot)
return kFALSE;
1001 int ilen = strlen(itemname);
1002 int tlen = strlen(treename);
1003 if ((ilen < tlen) || (strncmp(itemname, treename, tlen) != 0))
1006 leafname = slot->GetName();
1012 if (!objname || (*objname == 0))
return kFALSE;
1014 if (BrowserSlot(objname)) {
1015 objectitem = objname;
1019 TGo4Slot *picslot = BrowserSlot(itemname);
1024 while (searchslot && (searchslot != fxBrowserSlot)) {
1027 if (*objname!=
'/') searchname+=
"/";
1028 searchname+=objname;
1031 BrowserSlotName(searchname.Data(), fullname);
1035 searchname.Append(
";1");
1036 slot = fxOM->
GetSlot(searchname.Data());
1040 objectitem = searchname;
1048 if (strchr(objname,
'/')) {
1050 if ((mask & 2) == 0)
return kFALSE;
1056 const char *slash = strchr(objname,
'/');
1059 slash = strchr(slash+1,
'/');
1063 if (!DefineRelatedObject(itemname, TString(objname, slash-objname).Data(), diritem, 0))
break;
1065 int kind = ItemKind(diritem.Data());
1068 GetBrowserObject(diritem.Data(), 1000);
1073 return DefineRelatedObject(itemname, objname, objectitem, 0);
1077 if ((mask & 1) == 0)
return kFALSE;
1083 size_t len = strlen(objname);
1084 while (iter.
next()) {
1085 const char *name = iter.
getname();
1087 if (strncmp(objname, name, len) != 0)
continue;
1089 if ((strlen(name) == len) ||
1090 ((strlen(name)==(len+2)) && (strcmp(name+len,
";1") == 0))) {
1096 if (searchslot == fxBrowserSlot)
break;
1098 }
while (searchslot);
1105 TGo4Slot *slot = BrowserSlot(itemname);
1106 if (!slot)
return kFALSE;
1110 while (slot!=fxBrowserSlot) {
1111 TClass *cl = ItemClass(slot);
1112 if (cl && cl->InheritsFrom(TFile::Class()))
break;
1115 if (slot==fxBrowserSlot)
return kFALSE;
1120 *filepath = itemname + fitemname.Length();
1121 if (**filepath==
'/') (*filepath)++;
1131 TGo4Slot *slot = BrowserSlot(itemname);
1132 if (!slot)
return kFALSE;
1135 if (!obj)
return kFALSE;
1137 TGo4Slot *fileslot = DataSlot(fileitemname);
1138 if (!fileslot)
return kFALSE;
1141 if (!dircont)
return kFALSE;
1153 TGo4Slot *slot = BrowserSlot(itemname);
1154 if (!slot)
return kFALSE;
1157 if (!obj)
return kFALSE;
1159 TFile *f = TFile::Open(filename,
"UPDATE");
1160 if (!f)
return kFALSE;
1162 TDirectory *dir = f;
1164 if (subfolder && *subfolder) {
1165 dir =
dynamic_cast<TDirectory *
> (f->Get(subfolder));
1170 bool res = dir->WriteTObject(obj, obj->GetName(),
"Overwrite") > 0;
1172 if (obj->InheritsFrom(TH1::Class()))
1173 ((TH1 *) obj)->SetDirectory(
nullptr);
1182 const char *filename,
1183 const char *filedir,
1185 const char *description)
1187 if (!items || (items->GetSize() == 0))
return;
1196 if (convert.Contains(
"ASCII")) {
1199 }
else if (convert.Contains(
"Radware")) {
1202 }
else if (convert.Contains(
"ROOT XML")) {
1205 }
else if (convert.Contains(
"ROOT")) {
1215 TObjString* str =
dynamic_cast<TObjString*
> (items->At(0));
1217 TGo4Slot *itemslot = !str ? nullptr : ItemSlot(str->GetName());
1219 TString fname = filename;
1222 if(!fname.Contains(
".xml")) fname.Append(
".xml");
1224 if(!fname.Contains(
".root")) fname.Append(
".root");
1227 if (itemslot && (itemslot->
NumChilds() > 0)) {
1228 SaveBrowserToFile(fname.Data(), fetchitems, str->GetName(), description);
1239 TGo4Log::Message(1,
"Exporting selected browser objects to %s", convert.Data());
1242 for (
int n = 0; n <= items->GetLast(); n++) {
1243 TObjString *str =
dynamic_cast<TObjString *
>(items->At(n));
1246 TObject *obj = GetBrowserObject(str->GetName(), 0);
1248 obj = GetBrowserObject(str->GetName(), 2000);
1254 exman.
Export(&objs, filter);
1259 const char *selectedpath,
1260 const char *description)
1262 TGo4Slot *toppath = BrowserSlot(selectedpath);
1264 if (!toppath)
return kFALSE;
1267 FetchItem(selectedpath, 2000);
1269 TFile *f = TFile::Open(filename,
"recreate", description);
1270 if (!f)
return kFALSE;
1272 fxOM->SaveDataToFile(f, kTRUE, toppath);
1281 return IsItemRemote(ItemSlot(name));
1286 if (!slot)
return kFALSE;
1288 if (!slot->
GetIntPar(
"GUI::Remote", remote))
return kFALSE;
1294 TString analysisname;
1295 return DefineAnalysisObject(name, analysisname) !=
nullptr;
1300 if (stime && sdate) {
1301 slot->
SetPar(
"GUI::Time", stime);
1302 slot->
SetPar(
"GUI::Date", sdate);
1307 const char *datetime = t.AsSQLString();
1308 char *time = (
char *) strchr(datetime,
' ');
1310 slot->
SetPar(
"GUI::Time", datetime);
1311 slot->
SetPar(
"GUI::Date", datetime);
1313 slot->
SetPar(
"GUI::Time", time+1);
1315 slot->
SetPar(
"GUI::Date", datetime);
1321 return !slot ? nullptr : slot->
GetPar(
"GUI::Time");
1326 return !slot ? nullptr : slot->
GetPar(
"GUI::Date");
1332 slot->
SetPar(
"::LinkedItem", itemname);
1337 return !slot ? nullptr : slot->
GetPar(
"::LinkedItem");
1342 return ItemKind(ItemSlot(name));
1356 if (kind >= 0) slot->
SetIntPar(
"GUI::Kind", kind);
1358 slot->
SetPar(
"GUI::Class", classname);
1359 slot->
SetPar(
"GUI::Info", info);
1360 slot->
SetIntPar(
"GUI::SizeInfo", sizeinfo);
1365 return !slot ? nullptr : slot->
GetPar(
"GUI::Info");
1370 if (!slot)
return -1;
1372 if (!slot->
GetIntPar(
"GUI::SizeInfo", sizeinfo))
return -1;
1384 if (!slot)
return 0;
1386 if (!slot->
GetIntPar(
"GUI::CalcSize", size))
return 0;
1397 return ItemClass(ItemSlot(name));
1402 return !slot ? nullptr : slot->
GetPar(
"GUI::Class");
1407 return ItemClassName(ItemSlot(name));
1412 return ItemCanDo(ItemSlot(name));
1417 if (!slot)
return 0;
1420 if (!slot->
GetIntPar(
"GUI::CanDo", cando))
return 0;
1426 if (slot) slot->
SetIntPar(
"GUI::CanDo", cando);
1431 return !slot ? kTRUE : !slot->
GetPar(
"GUI::NotMonitored");
1440 while (iter.
next()) {
1443 SetItemMonitored(subslot, on);
1448 CheckPictureMonitor(slot);
1450 slot->
SetPar(
"GUI::NotMonitored",
"1");
1457 return (cando % 1000000000) / 100000000 > 0;
1462 return (cando % 100000000) / 10000000 > 0;
1467 return (cando % 10000000) / 1000000 > 0;
1472 return (cando % 1000000) / 100000 > 0;
1477 return (cando % 100000) / 10000 > 0;
1482 return (cando % 10000) / 1000 > 0;
1487 return (cando % 1000) / 100 > 0;
1492 return (cando % 100) / 10 > 0;
1497 return (cando % 10 > 0);
1502 if (foldername && *foldername)
1503 fxMemoryPath = foldername;
1505 TString fullpathname;
1506 DataSlotName(fxMemoryPath, fullpathname);
1508 fxOM->MakeFolder(fullpathname);
1513 TGo4Slot *itemslot = BrowserSlot(itemname);
1515 if (!itemslot || !newfoldername || (strlen(newfoldername) == 0))
return;
1517 TGo4Slot *memslot = BrowserMemorySlot();
1518 if (!itemslot->
IsParent(memslot) && (memslot!=itemslot))
return;
1520 TGo4Slot *slot = DataSlot(itemname);
1526 InformBrowserUpdate();
1531 TGo4Slot *itemslot = BrowserSlot(itemname);
1532 if (!itemslot || !newname || (strlen(newname) == 0))
return;
1534 if (strchr(newname,
'/') || strchr(newname,
'\\'))
return;
1536 TGo4Slot *memslot = BrowserMemorySlot();
1537 if (!itemslot->
IsParent(memslot))
return;
1539 TGo4Slot *slot = DataSlot(itemname);
1545 slot->SetName(newname);
1547 if (n) n->SetName(newname);
1556 TGo4Slot *itemslot = BrowserSlot(itemname);
1557 if (!itemslot)
return;
1559 TGo4Slot *memslot = BrowserMemorySlot();
1560 if (!itemslot->
IsParent(memslot))
return;
1562 TGo4Slot *slot = DataSlot(itemname);
1568 if(ob->InheritsFrom(TH1::Class())) {
1569 TH1 *his =
dynamic_cast<TH1 *
>(ob);
1570 if (his) his->Reset();
1572 if(ob->InheritsFrom(TGo4DynamicEntry::Class())) {
1574 if (entry) entry->
Reset();
1576 if(ob->InheritsFrom(TGo4Picture::Class())) {
1578 if (pic) pic->
Reset();
1580 if(ob->InheritsFrom(TGraph::Class())) {
1581 TGraph *gr =
dynamic_cast<TGraph *
>(ob);
1583 Int_t pn = gr->GetN();
1588 if(ob->InheritsFrom(TMultiGraph::Class())) {
1589 TMultiGraph *mg =
dynamic_cast<TMultiGraph *
>(ob);
1591 TIter liter(mg->GetListOfGraphs());
1592 while(
auto gr = (TGraph *) liter()) {
1593 Int_t pn = gr->GetN();
1609 if (!obj)
return TString(
"");
1611 TString path = fxMemoryPath;
1612 if (pathname && (*pathname != 0)) {
1619 TString itemname = path;
1621 itemname+=obj->GetName();
1622 TGo4Slot *slot = DataSlot(itemname);
1629 TString fullpathname;
1630 DataSlotName(path.Data(), fullpathname);
1632 TGo4Slot *slot = fxOM->Add(fullpathname.Data(), obj, ownership, kTRUE);
1634 return !slot ? TString(
"") : slot->GetFullName(fxOM->GetSlot(fxDataPath));
1647 if (!IsItemMonitored(slot))
return;
1649 TString picitemname;
1650 if (!BrowserItemName(slot, picitemname))
return;
1652 CheckPictureMonitor(pic, picitemname.Data());
1660 for (Int_t posy = 0; posy < pic->
GetDivY(); posy++)
1661 for (Int_t posx = 0; posx < pic->
GetDivX(); posx++)
1662 CheckPictureMonitor(pic->
FindPic(posy, posx), picitemname);
1668 if (DefineRelatedObject(picitemname, pic->
GetObjName(n), drawname))
1669 SetItemMonitored(BrowserSlot(drawname), kTRUE);
1675 TIter iter(gROOT->GetList());
1676 while (
auto obj = iter()) {
1677 SaveToMemory(
"gROOT", obj, kTRUE);
1680 gROOT->GetList()->Clear();
1686 if(on) slot->
SetPar(
"GUI::CanDelete",
"1");
1693 return !slot ? kFALSE : slot->
GetPar(
"GUI::CanDelete") !=
nullptr;
1698 fiMonitoringPeriod = rate;
1700 fbBlockMonitoring = kFALSE;
1702 if (fiMonitoringPeriod > 0) {
1703 if (!fxMonitorTimer)
1704 fxMonitorTimer =
new TTimer(
this, 10, kTRUE);
1705 fxMonitorTimer->Start(10, kTRUE);
1707 if (fxMonitorTimer) fxMonitorTimer->Reset();
1708 delete fxMonitorTimer;
1709 fxMonitorTimer =
nullptr;
1712 InformBrowserUpdate();
1718 if (!viewslot)
return 0;
1722 TObjArray UniqueItems;
1726 while (iter.
next()) {
1732 if (srcslot && srcslot->
IsParent(brslot) && !UniqueItems.FindObject(srcslot))
1733 UniqueItems.Add(srcslot);
1737 Int_t nrequests = 0;
1738 for (
int n = 0; n <= UniqueItems.GetLast(); n++) {
1740 if (!checkmonitor || IsItemMonitored(srcslot)) {
1750 Int_t nrequests = 0;
1752 TGo4Iter iter(BrowserSlot(),kTRUE);
1754 while (iter.
next()) {
1756 if (IsItemMonitored(subslot)) {
1767 if (timer==fxSyncTimer) {
1770 }
else if (timer == fxMonitorTimer) {
1772 if (fiMonitoringPeriod <= 0)
return kTRUE;
1776 Bool_t anready = kTRUE;
1780 if (anready && !fbBlockMonitoring) {
1781 if (fbWithRootBrowser) {
1782 UpdateAllMonitoredObjects();
1783 UpdateAllCanvases();
1785 UpdateVisibleAnalysisObjects(
true);
1789 Int_t period = fiMonitoringPeriod;
1792 if (fbBlockMonitoring) period = 1000;
1794 fxMonitorTimer->Start(period, kTRUE);
1806 slot->
SetIntPar(
"GUI::DeleteProtect", delprot);
1810 slot->
SetIntPar(
"GUI::ResetProtect", clearprot);
1817 delprot = -1; clearprot = -1;
1819 if (!slot->
GetIntPar(
"GUI::DeleteProtect", delprot)) delprot = -1;
1820 if (!slot->
GetIntPar(
"GUI::ResetProtect", clearprot)) clearprot = -1;
1827 TGo4Slot *targetslot = BrowserTopSlot();
1830 if (!source)
return;
1833 if (!curfold)
return;
1839 const char *EventsFolder =
"EventObjects/Events/";
1844 Bool_t res = iter.
next();
1849 while (levelchange++ < 0) {
1858 if (!curfold)
break;
1865 while (find && (strcmp(iter.
getname(), find->GetName()) != 0))
1871 if (find!=curslot) {
1879 const char *ppp = strstr(fullname, EventsFolder);
1881 ppp += strlen(EventsFolder);
1882 if ((strlen(ppp) != 0) && !strchr(ppp,
'/')) {
1884 classname =
nullptr;
1890 SetProtectionBits(curslot, iter.
getflag(
"IsDeleteProtect"), iter.
getflag(
"IsResetProtect"));
1893 SetCanDelete(curslot, IsCanDelete(iter.
getslot()));
1895 TObject *assobj =
nullptr;
1916 if (curslot && curslot->
IsParent(targetslot))
1923 CalculateFolderSizes(targetslot);
1928 if (fxSyncTimer) fxSyncTimer->Reset();
1930 fbBlockSync = kFALSE;
1935 if (!topslot)
return 0;
1936 Int_t sizeinfo = ItemSizeInfo(topslot);
1937 bool verytop = fxBrowserSlot==topslot;
1941 for (Int_t n = 0; n < topslot->
NumChilds(); n++)
1942 sum += CalculateFolderSizes(topslot->
GetChild(n));
1943 if (!verytop) SetCalcSize(topslot, sum);
1966 if (cl->InheritsFrom(TProfile::Class())) { cando = 1110; pixmap =
"profile_t.png"; }
else 1967 if (cl->InheritsFrom(TProfile2D::Class())) { cando = 1110; pixmap =
"col.png"; }
else 1968 if (cl->InheritsFrom(TGo4Picture::Class())) { cando = 110; pixmap =
"picture.png"; }
else 1969 if (cl->InheritsFrom(TGo4Parameter::Class())) { cando = 1011; pixmap =
"parameter.png"; }
else 1970 if (cl->InheritsFrom(TMultiGraph::Class())) { cando = 1110; pixmap =
"superimpose.png"; }
else 1971 if (cl->InheritsFrom(THStack::Class())) { cando = 1110; pixmap =
"superimpose.png"; }
else 1972 if (cl->InheritsFrom(TGraph::Class())) { cando = 1001110; pixmap =
"tgraph.png"; }
else 1973 if (cl->InheritsFrom(TGo4Fitter::Class())) { cando = 11; pixmap =
"fitter.png"; }
else 1974 if (cl->InheritsFrom(TCanvas::Class())) { cando = 110; pixmap =
"canvas.png"; }
else 1975 if (cl->InheritsFrom(TFile::Class())) { pixmap =
"rootdb_t.png"; }
else 1976 if (cl->InheritsFrom(TTree::Class())) { pixmap =
"tree_t.png"; }
else 1977 if (cl->InheritsFrom(TFolder::Class())) { pixmap =
"folder_t.png"; }
else 1978 if (cl->InheritsFrom(TDirectory::Class())) { pixmap =
"folder_t.png"; }
else 1979 if (cl->InheritsFrom(TH3::Class())) { cando = 1101110; pixmap =
"h3_t.png"; }
else 1980 if (cl->InheritsFrom(TH2::Class())) { cando = 1101110; pixmap =
"h2_t.png"; }
else 1981 if (cl->InheritsFrom(TH1::Class())) { cando = 1101110; pixmap =
"h1_t.png"; }
else 1982 if (cl->InheritsFrom(TGo4WinCond::Class())) { cando = 101011; pixmap =
"windcond.png"; }
else 1983 if (cl->InheritsFrom(TGo4PolyCond::Class())) { cando = 101011; pixmap =
"polycond.png"; }
else 1984 if (cl->InheritsFrom(TGo4ShapedCond::Class())) { cando = 101011; pixmap =
"polycond.png"; }
else 1985 if (cl->InheritsFrom(TGo4ListCond::Class())) { cando = 101011; pixmap =
"windcond.png"; }
else 1986 if (cl->InheritsFrom(TGo4CondArray::Class())) { cando = 101011; pixmap =
"windcondarray.png"; }
else 1987 if (cl->InheritsFrom(TGo4TreeHistogramEntry::Class())) { cando = 1011; pixmap =
"dynentryx.png"; }
else 1988 if (cl->InheritsFrom(TGo4HistogramEntry::Class())) { cando = 1011; pixmap =
"dynentryx.png"; }
else 1989 if (cl->InheritsFrom(TLatex::Class())) { cando = 110; pixmap =
"canvas.png"; }
else 1990 if (cl->InheritsFrom(TF1::Class())) { cando = 110; pixmap =
"draw1dline.png"; }
else 1991 if (cl->InheritsFrom(TLeaf::Class())) { cando = 11; pixmap =
"leaf_t.png"; }
else 1992 if (cl->InheritsFrom(TGo4AnalysisStatus::Class())) { cando = 1; pixmap =
"control.png"; }
1995 pixmap =
"folder_t.png";
1996 if (cl && cl->InheritsFrom(TTree::Class())) { cando = 10; pixmap =
"tree_t.png"; }
else 1997 if (cl && cl->InheritsFrom(TCanvas::Class())) { cando = 110; pixmap =
"canvas.png"; }
else 1998 if (cl && cl->InheritsFrom(THStack::Class())) { cando = 110; pixmap =
"superimpose.png"; }
else 1999 if (cl && cl->InheritsFrom(TFile::Class())) { cando = 10000; pixmap =
"rootdb_t.png"; }
else 2000 if (cl && cl->InheritsFrom(TGo4HServProxy::Class())) { cando = 10000; pixmap =
"histserv.png"; }
else 2001 if (cl && cl->InheritsFrom(TGo4DabcProxy::Class())) { cando = 10000; pixmap =
"dabc.png"; }
else 2002 if (cl && cl->InheritsFrom(TGo4AnalysisProxy::Class())) { pixmap =
"analysiswin.png"; }
else 2003 if (cl && cl->InheritsFrom(TGo4ServerProxy::Class())) { cando = 10000; pixmap =
"http.png"; }
2006 pixmap =
"branch_t.png";
2008 cando = 11; pixmap =
"leaf_t.png";
2010 cando = 1011; pixmap =
"parameter.png";
2012 cando = 10; pixmap =
"eventitem.png";
2014 cando = 100010; pixmap =
"eventobj.png";
2016 cando = 100000000; pixmap =
"eventobj.png";
2024 if (v1==v2)
return kTRUE;
2026 return (fabs(v1-v2) <= scale);
2036 if (!ax1 || !ax2)
return 0;
2038 Int_t num1 = ax1->GetNbins();
2039 Int_t num2 = ax2->GetNbins();
2041 Double_t scale = fabs(ax1->GetXmax() - ax1->GetXmin()) / (num1+1.) * 1e-3;
2043 if ((num1 != num2)) {
2045 if ((num1 > num2/2) || (num1 < 2))
return 0;
2047 Int_t rebin = num2/num1;
2048 if (rebin == 0)
return 0;
2051 if ((ax1->GetXbins()->GetSize() != 0) || (ax2->GetXbins()->GetSize() != 0))
return 0;
2054 if (!CompareAxisValues(ax1->GetXmin(), ax2->GetXmin(), scale))
return 0;
2058 if (num1*rebin!=num2) xmax = ax2->GetBinUpEdge(num1*rebin);
2059 else xmax = ax2->GetXmax();
2062 if (!CompareAxisValues(ax1->GetXmax(), xmax, scale))
return 0;
2067 if ((ax1->GetXbins()->GetSize() == 0) && (ax2->GetXbins()->GetSize() == 0)) {
2068 if (!CompareAxisValues(ax1->GetXmin(), ax2->GetXmin(), scale))
return 0;
2069 if (!CompareAxisValues(ax1->GetXmax(), ax2->GetXmax(), scale))
return 0;
2071 for (Int_t n=1;n<=num1;n++)
2072 if (!CompareAxisValues(ax1->GetBinCenter(n),
2073 ax2->GetBinCenter(n), scale))
return 0;
2081 Bool_t tdisp = kFALSE;
2084 if (obj->InheritsFrom(TProfile::Class())) {
2085 auto profile =
dynamic_cast<TProfile *
>(obj);
2086 auto profile2 =
dynamic_cast<TProfile *
>(newobj);
2087 if (!profile || !profile2)
return kFALSE;
2088 if (profile->GetNbinsX() != profile2->GetNbinsX())
return kFALSE;
2089 profile2->Copy(*profile);
2091 }
else if (obj->InheritsFrom(TProfile2D::Class())) {
2092 auto profile =
dynamic_cast<TProfile2D *
>(obj);
2093 auto profile2 =
dynamic_cast<TProfile2D *
>(newobj);
2094 if (!profile || !profile2)
return kFALSE;
2095 if ((profile->GetNbinsX() != profile2->GetNbinsX()) || (profile->GetNbinsY() != profile2->GetNbinsY()))
return kFALSE;
2096 profile2->Copy(*profile);
2098 }
else if (obj->InheritsFrom(TH1::Class())) {
2099 auto histo =
dynamic_cast<TH1 *
>(obj);
2100 auto histo2 =
dynamic_cast<TH1 *
>(newobj);
2101 if (!histo || !histo2)
return kFALSE;
2103 if (dynamic_cast<TProfile *>(obj) ||
dynamic_cast<TProfile2D *
>(obj))
return kFALSE;
2105 if (histo->GetDimension() != histo2->GetDimension())
return kFALSE;
2107 histo->SetTitle(histo2->GetTitle());
2109 Int_t rebinx = 1, rebiny = 1;
2111 rebinx = CompareAxis(histo->GetXaxis(), histo2->GetXaxis());
2112 if (histo->GetDimension()>1)
2113 rebiny = CompareAxis(histo->GetYaxis(), histo2->GetYaxis());
2114 if (histo->GetDimension()>2)
2115 if (CompareAxis(histo->GetZaxis(), histo2->GetZaxis())!=1)
return kFALSE;
2117 if ((rebinx == 0) || (rebiny == 0))
return kFALSE;
2121 if ((rebinx>1) || (rebiny>1)) {
2122 if (!hasrebinx || !hasrebiny)
return kFALSE;
2124 TH1 *clon = (TH1 *) histo2->Clone(
"____dummyhisto____");
2125 if (!clon)
return kFALSE;
2126 clon->SetDirectory(
nullptr);
2127 Bool_t rebinres = kFALSE;
2129 if (histo->GetDimension() == 1) {
2130 clon->Rebin(rebinx);
2131 rebinres = UpdateObjectContent(histo, clon);
2132 }
else if (histo->GetDimension() == 2) {
2133 TH2 *h2 =
dynamic_cast<TH2 *
>(clon);
2135 h2->Rebin2D(rebinx, rebiny);
2136 rebinres = UpdateObjectContent(histo, h2);
2141 *hasrebinx = rebinx;
2142 *hasrebiny = rebiny;
2148 Int_t sz = histo->GetNbinsX()+2;
2149 if (histo->GetDimension()>1)
2150 sz = sz*(histo->GetNbinsY()+2);
2151 if (histo->GetDimension()>2)
2152 sz = sz*(histo->GetNbinsZ()+2);
2153 Bool_t canrebin = histo->CanExtendAllAxes();
2154 histo->SetCanExtend(TH1::kNoAxis);
2156 for (
int n = 0; n < sz; n++) {
2157 Stat_t value = histo2->GetBinContent(n);
2159 histo->SetBinContent(n, value);
2162 if (canrebin) histo->SetCanExtend(TH1::kAllAxes);
2164 histo->SetEntries(sum);
2166 TArrayD *sumw_tgt =
nullptr, *sumw_src =
nullptr;
2168 if (histo2->GetSumw2N() > 0)
2169 sumw_src = histo2->GetSumw2();
2173 histo->GetSumw2()->Set(0);
2175 if(histo->GetSumw2N() == 0)
2177 sumw_tgt = histo->GetSumw2();
2180 if (sumw_src && sumw_tgt)
2181 sumw_tgt->Set(sz, sumw_src->GetArray());
2184 }
else if (obj->InheritsFrom(TGo4Condition::Class())) {
2187 if (!cond || !newcond)
return kFALSE;
2193 }
else if (obj->InheritsFrom(TGraphAsymmErrors::Class())) {
2194 TGraphAsymmErrors* gr =
dynamic_cast<TGraphAsymmErrors*
> (obj);
2195 TGraph *newgr =
dynamic_cast<TGraph *
> (newobj);
2196 if (!gr || !newgr)
return kFALSE;
2197 SaveAxisTimeProperties(gr,tdisp,tform);
2198 gr->SetTitle(newgr->GetTitle());
2200 Int_t npoints = newgr->GetN();
2202 Double_t xp, yp, exh, exl, eyh, eyl;
2203 for (Int_t n = 0; n < npoints; n++) {
2204 newgr->GetPoint(n, xp, yp);
2205 gr->SetPoint(n, xp, yp);
2206 exh = newgr->GetErrorXhigh(n);
2207 exl = newgr->GetErrorXlow(n);
2208 eyh = newgr->GetErrorYhigh(n);
2209 eyl = newgr->GetErrorYlow(n);
2210 gr->SetPointError(n, exl, exh, eyl, eyh);
2213 UpdateListOfFunctions(gr,newgr);
2214 RestoreAxisTimeProperties(gr,tdisp,tform);
2216 }
else if (obj->InheritsFrom(TGraphErrors::Class())) {
2217 TGraphErrors* gr =
dynamic_cast<TGraphErrors*
> (obj);
2218 TGraph *newgr =
dynamic_cast<TGraph *
> (newobj);
2219 if (!gr || !newgr)
return kFALSE;
2220 SaveAxisTimeProperties(gr,tdisp,tform);
2221 gr->SetTitle(newgr->GetTitle());
2223 Int_t npoints = newgr->GetN();
2225 Double_t xp, yp, ex, ey;
2226 for (Int_t n = 0; n < npoints; n++) {
2227 newgr->GetPoint(n, xp, yp);
2228 gr->SetPoint(n, xp, yp);
2229 ex = newgr->GetErrorX(n);
2230 ey = newgr->GetErrorY(n);
2231 gr->SetPointError(n, ex, ey);
2234 UpdateListOfFunctions(gr,newgr);
2235 RestoreAxisTimeProperties(gr,tdisp,tform);
2238 }
else if (obj->InheritsFrom(TGraph::Class())) {
2239 TGraph *gr =
dynamic_cast<TGraph *
> (obj);
2240 TGraph *newgr =
dynamic_cast<TGraph *
> (newobj);
2241 if (!gr || !newgr)
return kFALSE;
2243 SaveAxisTimeProperties(gr,tdisp,tform);
2245 gr->SetTitle(newgr->GetTitle());
2247 Int_t npoints = newgr->GetN();
2250 for (Int_t n = 0; n < npoints; n++) {
2251 newgr->GetPoint(n, xp, yp);
2252 gr->SetPoint(n, xp, yp);
2254 UpdateListOfFunctions(gr, newgr);
2255 RestoreAxisTimeProperties(gr,tdisp,tform);
2258 }
else if (obj->InheritsFrom(TLatex::Class())) {
2259 TLatex *l0 =
dynamic_cast<TLatex *
> (obj);
2260 TLatex *l1 =
dynamic_cast<TLatex *
> (newobj);
2261 if (!l1 || !l0)
return kFALSE;
2263 l0->SetTitle(l1->GetTitle());
2266 }
else if (obj->InheritsFrom(TF1::Class())) {
2267 TF1 *f0 =
dynamic_cast<TF1 *
> (obj);
2268 TF1 *f1 =
dynamic_cast<TF1 *
> (newobj);
2269 if (!f1 || !f0)
return kFALSE;
2280 TH1 *h1 = gr->GetHistogram();
2281 TAxis *xax = h1->GetXaxis();
2282 timedisplay = xax->GetTimeDisplay();
2283 format = xax->GetTimeFormat();
2289 TH1 *h1 = gr->GetHistogram();
2290 TAxis *xax = h1->GetXaxis();
2291 xax->SetTimeDisplay(timedisplay);
2292 xax->SetTimeFormat(format.Data());
2298 if(!oldgr || !newgr)
return;
2299 TList *theFunctions = oldgr->GetListOfFunctions();
2300 TObject *obj =
nullptr;
2301 while ((obj = theFunctions->First()) !=
nullptr) {
2302 while (theFunctions->Remove(obj)) { }
2306 TList *newFunctions = newgr->GetListOfFunctions();
2307 TListIter fiter(newFunctions);
2308 while(
auto fun = dynamic_cast<TF1 *>(fiter())) {
2309 TF1 *fclon =
dynamic_cast<TF1 *
>(fun->Clone());
2310 theFunctions->Add(fclon);
2311 fclon->SetParent(oldgr);
2315 TH1 *oldhis = oldgr->GetHistogram();
2316 TH1 *newhis = newgr->GetHistogram();
2317 if(oldhis && newhis) {
2318 oldhis->GetXaxis()->SetTitle(newhis->GetXaxis()->GetTitle());
2319 oldhis->GetYaxis()->SetTitle(newhis->GetYaxis()->GetTitle());
2326 if (!itemslot)
return;
2327 if (!fxWaitingList) fxWaitingList =
new TList;
2330 if (!BrowserItemName(itemslot, itemname))
return;
2332 TNamed *n = (TNamed*) fxWaitingList->FindObject(itemname.Data());
2334 n->SetTitle(destination);
2336 fxWaitingList->Add(
new TNamed(itemname.Data(), destination));
2341 if (!fxWaitingList)
return;
2344 if (!BrowserItemName(source, itemname))
return;
2346 TNamed *n = (TNamed*) fxWaitingList->FindObject(itemname.Data());
2348 const char *dest = n->GetTitle();
2349 if (dest && (strlen(dest) == 0)) dest =
nullptr;
2350 ProduceExplicitCopy(source, dest, kFALSE);
2351 fxWaitingList->Remove(n);
2360 TIter next(gROOT->GetListOfCanvases());
2361 while (
auto pad = (TPad *) next()) {
2365 while (
auto subpad = pad->GetPad(number++))
static bool CanClearItem(int cando)
Bool_t Connect(const char *nodename)
void SetCanDelete(TGo4Slot *slot, Bool_t on=kTRUE)
Bool_t ProcessEvent(TGo4Slot *slot, TGo4Slot *source, Int_t id, void *param) override
void SetOutFileComment(const char *comment=nullptr)
void SetOutFile(const char *filename=nullptr)
static void RestoreAxisTimeProperties(TGraph *gr, Bool_t &timedisplay, TString &format)
static void SetItemTimeDate(TGo4Slot *slot, const char *stime=nullptr, const char *sdate=nullptr)
TGo4Slot * GetChild(Int_t n) const
void OpenFile(const char *fname)
Bool_t GetIntPar(const char *name, Int_t &value) const
static void SaveAxisTimeProperties(TGraph *gr, Bool_t &timedisplay, TString &format)
static TClass * GetClass(const char *classname, Bool_t load=kFALSE)
Bool_t IsParent(const TGo4Slot *slot) const
void MakeHttpList(TObjArray *arr)
TString FindItem(const char *objname)
void SetIntPar(const char *name, Int_t value)
TString SaveToMemory(const char *pathname, TObject *obj, Bool_t ownership, Bool_t overwrite=kFALSE)
TObject * GetBrowserObject(const char *name, Int_t update=0)
void CheckPictureMonitor(TGo4Slot *slot)
void SetProxy(TGo4Proxy *cont)
virtual Bool_t UpdateFrom(TGo4Condition *cond, Bool_t counts)
Bool_t RefreshNamesList() override
void ExportItemsTo(TObjArray *items, Bool_t fetchitems, const char *filename, const char *filedir, const char *format, const char *description)
void CreateMemoryFolder(const char *foldername=nullptr)
TGo4ServerProxy * DefineServerObject(const char *itemname, TString *objname=nullptr, Bool_t onlyanalysis=kTRUE)
Bool_t IsItemMonitored(TGo4Slot *slot) const
Int_t ItemKind(const char *name)
void UpdateBrowserContent()
Bool_t DefineLeafName(const char *itemname, const char *treename, TString &leafname)
void AddWaitingList(TGo4Slot *itemslot, const char *destination=nullptr)
Bool_t IsItemRemote(const char *name)
static bool CanDrawItem(int cando)
Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner) override
virtual const char * GetContainedClassName() const
Int_t UpdateVisibleAnalysisObjects(bool checkmonitor)
TGo4Slot * FindChild(const char *name) const
void RenameMemoryItem(const char *itemname, const char *newname)
Int_t UpdateAllMonitoredObjects()
Int_t GetNumObjNames() const
void Finalize(TGo4Slot *slot) override
void SetProtectionBits(TGo4Slot *slot, Int_t delprot, Int_t clearprot)
Int_t ItemCanDo(const char *name)
Bool_t DeleteDataSource(TGo4Slot *itemslot)
void MakeHServerList(TObjArray *arr)
TGo4AnalysisProxy * FindAnalysis(const char *itemname=nullptr)
Bool_t IsAnalysisItem(const char *name)
TGo4Proxy * GetProxy() const
void Update(TGo4Slot *slot, Bool_t strong) override
void PerformTreeDraw(const char *treename, const char *Xexp, const char *Yexp, const char *Zexp, const char *cutcond, const char *hname, TString &createdhistoname)
static Bool_t CompareAxisValues(Double_t v1, Double_t v2, Double_t scale)
static bool CanExecuteItem(int cando)
void DoItemMonitor(TGo4Slot *slot)
TClass * ItemClass(const char *name)
Bool_t HandleTimer(TTimer *timer) override
static bool CanExpandItem(int cando)
Int_t RequestBrowserObject(const char *name, Int_t wait_time=0)
static Int_t CompareAxis(TAxis *ax1, TAxis *ax2)
TGo4Slot * BrowserSlot(const char *item=nullptr)
virtual Bool_t RequestObjectStatus(const char *objectname, TGo4Slot *tgtslot)
void CheckWaitingList(TGo4Slot *source)
TGo4Slot * FindServerSlot(Bool_t databranch, Int_t kind=0)
TGo4Slot * FindSlot(const char *fullpath, const char **subname=nullptr)
const char * getclassname()
Bool_t ConnectHServer(const char *servername, Int_t portnumber, const char *basename, const char *userpass, const char *filter)
void CreateMemorySubfolder(const char *itemname, const char *newfoldername)
TGo4Slot * getslot() const
Int_t getflag(const char *flagname)
void SetCurrentDir(const char *dir=nullptr)
TGo4Slot * DataSlot(const char *item)
TString GetFullName(TGo4Slot *toparent=nullptr)
virtual const char * GetServerName() const
Bool_t ShiftSlotBefore(TGo4Slot *slot, TGo4Slot *before)
static Bool_t UpdateObjectContent(TObject *obj, TObject *newobj, Int_t *hasrebinx=nullptr, Int_t *hasrebiny=nullptr)
static const char * ItemInfo(TGo4Slot *slot)
static bool CanDragItem(int cando)
static const char * Message(Int_t prio, const char *text,...) GO4_PRINTF2_ARGS
TObject * GetAssignedObject()
Int_t CalculateFolderSizes(TGo4Slot *topslot)
void CopyClipboard(const char *tgtpath, Bool_t forcerequest=kFALSE)
Bool_t UpdateAnalysisItem(const char *itemname, TObject *obj=nullptr)
const char * getfullname()
static bool CanExportItem(int cando)
TGo4Slot * GetNext() const
void Initialize(TGo4Slot *slot) override
TGo4Slot * GetParent() const
Bool_t DefineFileObject(const char *itemname, TString &filedataslot, const char **filepath)
Bool_t IsClipboard() const
virtual Bool_t IsConnected() const
void ClearMemoryItem(const char *itemname)
virtual void RemoteTreeDraw(const char *treename, const char *varexp, const char *cutcond, const char *hname)
Int_t ItemSizeInfo(TGo4Slot *slot)
void MakeFilesList(TObjArray *arr)
void DataSlotName(const char *item, TString &res) const
virtual void Update(Bool_t strong=kFALSE)
void MakeDabcList(TObjArray *arr)
static const char * ItemDate(TGo4Slot *slot)
virtual Bool_t UpdateAnalysisObject(const char *objectname, TObject *obj)
Bool_t SaveItemToFile(const char *itemname, const char *filename, const char *subfolder=nullptr)
TGo4Slot * GetSlot(const char *name, Bool_t force=kFALSE)
Bool_t IsCanDelete(TGo4Slot *slot) const
void SetStartDir(const char *dir=nullptr)
virtual ~TGo4BrowserObjProxy()
Bool_t UpdateObjectInFile(const char *filepath, TObject *obj)
const char * GetObjName(Int_t n) const
void RequestObjectStatus(const char *name, TGo4Slot *tgtslot)
void RemovePar(const char *name)
TString FindItemInAnalysis(const char *objname)
const char * ItemClassName(const char *name)
void AddToClipboard(const char *itemname)
void FetchItem(const char *itemname, Int_t wait_time=0)
Bool_t DefineRelatedObject(const char *itemname, const char *objectname, TString &objectitem, Int_t mask=3)
Int_t GetCalcSize(TGo4Slot *slot)
void SetItemMonitored(TGo4Slot *slot, Bool_t on=kTRUE)
virtual ~TGo4BrowserProxy()
TGo4Slot * BrowserMemorySlot()
TGo4Picture * FindPic(Int_t posy, Int_t posx)
Bool_t ConnectDabc(const char *nodename)
void RedrawItem(const char *itemname)
static bool CanCloseItem(int cando)
void SetHServConfig(const char *servername, Int_t portnumber, const char *basename, const char *userpass, const char *filter)
void InformBrowserUpdate()
const char * GetPar(const char *name) const
static const char * GetLinkedName(TGo4Slot *slot)
Bool_t DefineTreeName(const char *itemname, TString &treename)
void GetProtectionBits(TGo4Slot *slot, Int_t &delprot, Int_t &clearprot)
TGo4ServerProxy * DefineServerProxy(const char *itemname)
static void SetItemCanDo(TGo4Slot *slot, Int_t cando)
static void ProduceFolderAndName(const char *fullname, TString &foldername, TString &objectname)
void Export(TObject *ob, Go4Export_t format)
virtual void SetChanged(Bool_t on=kTRUE)
TGo4Slot * BrowserTopSlot()
void AddServerProxy(TGo4ServerProxy *serv, const char *slotname, const char *info)
Bool_t Use() const override
void SetCalcSize(TGo4Slot *slot, Int_t size)
void SetItemKind(TGo4Slot *slot, Int_t kind, const char *classname, const char *info, Int_t sizeinfo)
Bool_t AssignObject(TObject *obj, Bool_t owner)
static bool CanInfoItem(int cando)
TGo4BrowserObjProxy(TGo4Slot *slot, TObject *obj, Bool_t owner)
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=nullptr)
virtual Bool_t DelayedRefreshNamesList(Int_t delay_sec)
static void SetLinkedName(TGo4Slot *slot, const char *itemname)
TGo4ServerProxy * DefineAnalysisObject(const char *itemname, TString &analysisname)
void DeleteChilds(const char *startedwith=nullptr)
virtual Bool_t IsGo4Analysis() const
Bool_t ProduceExplicitCopy(const char *itemname, const char *tgtpath=nullptr, Bool_t forcerequest=kFALSE)
virtual Int_t NumberOfWaitingProxyes()
void BrowserSlotName(const char *item, TString &res) const
virtual TGo4ObjectManager * GetOM() const
Bool_t UpdateObjectInFile(const char *itemname, const char *fileslotname, const char *filepath)
void SetItemsFilter(Int_t filter)
void SetPar(const char *name, const char *value)
Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner) override
static const char * ItemTime(TGo4Slot *slot)
static void UpdateListOfFunctions(TGraph *oldgr, TGraph *newgr)
TGo4ServerProxy * FindServer(const char *itemname=nullptr, Bool_t asanalysis=kTRUE)
static bool CanEditItem(int cando)
Bool_t BrowserItemName(TGo4Slot *itemslot, TString &res)
TGo4Slot * ItemSlot(const char *itemname)
TGo4Slot * GetLink() const
static Int_t DefineItemProperties(Int_t kind, TClass *cl, TString &pixmap)
void ToggleMonitoring(Int_t period)
Bool_t next(Bool_t goesinto=kTRUE)
Bool_t SaveBrowserToFile(const char *filename, Bool_t prefetch=kFALSE, const char *selectedpath=nullptr, const char *description=nullptr)
Int_t levelchange() const
virtual void ProduceFullName(TString &name, TGo4Slot *toparent=nullptr)