24 #include "TProfile2D.h"
26 #include "TGraphErrors.h"
27 #include "TGraphAsymmErrors.h"
28 #include "TMultiGraph.h"
31 #include "TDirectory.h"
38 #include "TObjString.h"
41 #include "TVirtualTreePlayer.h"
44 #include "TGo4LockGuard.h"
80 if ((slot!=0) && (obj!=0))
86 virtual Bool_t
Use()
const {
return kFALSE; }
92 Bool_t updatedone =
false;
95 if ((
fObject->IsA()==obj->IsA()) &&
96 (strcmp(
fObject->GetName(), obj->GetName())==0))
104 if (owner)
delete obj;
114 if ((
fObject==0) && !strong)
return;
121 if (browser!=0)
break;
136 fbWithRootBrowser(kFALSE),
140 fiMonitoringPeriod(0),
142 fbBlockMonitoring(kFALSE),
153 const char* viewpath,
154 Bool_t withRootBrowser) :
156 fxDataPath(datapath),
158 fxViewPath(viewpath),
159 fbWithRootBrowser(withRootBrowser),
160 fxMemoryPath(
"Workspace"),
163 fiMonitoringPeriod(0),
165 fbBlockMonitoring(kFALSE),
177 if (gDebug>1) Info(
"~TGo4BrowserProxy",
"Called");
202 if (gDebug>1) Info(
"~TGo4BrowserProxy",
"Finished");
212 gROOT->GetClass(
"TH1");
213 gROOT->GetClass(
"TH1C");
214 gROOT->GetClass(
"TH1D");
215 gROOT->GetClass(
"TH1F");
216 gROOT->GetClass(
"TH1I");
217 gROOT->GetClass(
"TH1S");
218 gROOT->GetClass(
"TH2");
219 gROOT->GetClass(
"TH2C");
220 gROOT->GetClass(
"TH2D");
221 gROOT->GetClass(
"TH2F");
222 gROOT->GetClass(
"TH2I");
223 gROOT->GetClass(
"TH2S");
224 gROOT->GetClass(
"TH3");
225 gROOT->GetClass(
"TH3C");
226 gROOT->GetClass(
"TH3D");
227 gROOT->GetClass(
"TH3F");
228 gROOT->GetClass(
"TH3I");
229 gROOT->GetClass(
"TH3S");
231 gROOT->GetClass(
"TGo4WinCond");
232 gROOT->GetClass(
"TGo4PolyCond");
233 gROOT->GetClass(
"TGo4ShapedCond");
234 gROOT->GetClass(
"TGo4CondArray");
236 gROOT->GetClass(
"TGo4Fitter");
237 gROOT->GetClass(
"TGo4Parameter");
238 gROOT->GetClass(
"TGo4Picture");
240 gROOT->GetClass(
"TGo4DynamicEntry");
241 gROOT->GetClass(
"TGo4HistogramEntry");
242 gROOT->GetClass(
"TGo4TreeHistogramEntry");
243 gROOT->GetClass(
"TLatex");
244 gROOT->GetClass(
"TF1");
245 gROOT->GetClass(
"TGo4AnalysisStatus");
263 bool ischildevent = source->
IsParent(slot);
267 if ((source!=slot) && !ischildevent) {
281 if ((source!=slot) && ischildevent) {
351 if ((cl==0) || !cl->IsLoaded())
return 0;
379 if (itemslot==0)
return kFALSE;
384 if (itemslot->
IsParent(memslot) && (tgtpath==0))
return kFALSE;
387 if (tgtslot==0)
return kFALSE;
388 if ((tgtslot==itemslot) || tgtslot->
IsParent(itemslot))
return kFALSE;
394 for (Int_t n=0;n<itemslot->
NumChilds();n++)
401 if (tgtslot==0)
return kFALSE;
402 if (tgtslot->
GetSlot(itemslot->GetName(), kTRUE)==0)
return kFALSE;
409 subpath += itemslot->GetName();
411 tgtpath = subpath.Data();
414 for (Int_t n=0;n<=childs.GetLast();n++) {
427 if (tgtslot==0)
return kFALSE;
428 if (!tgtslot->
IsParent(memslot) && (tgtslot!=memslot))
return kFALSE;
429 if (itemslot->
GetParent()==tgtslot)
return kFALSE;
430 if (memslot!=tgtslot)
438 if ((obj==0) || forcerequest) {
440 if (res==0)
return kFALSE;
442 if ((res==1) || !forcerequest)
447 TString res =
SaveToMemory(pathname, obj->Clone(), kTRUE);
448 return res.Length()>0;
472 if (itemslot==0)
return;
478 if (slot==0)
continue;
479 if (itemslot->
IsParent(slot))
return;
482 fxClipboard->Add(
new TNamed(itemname,
"clipboard item"));
500 if ((fname==0) || (*fname==0))
return;
516 if ((nodename==0) || (*nodename==0))
return kFALSE;
519 if (!proxy->
Connect(nodename)) {
524 const char* slotname = nodename;
525 if (strncmp(slotname,
"dabc://",7)==0) slotname+=7;
535 const char* basename,
536 const char* userpass,
550 TString capt =
"HServ_";
553 AddServerProxy(hserv, capt.Data(),
"Connection to histogram server");
571 if ((pr!=0) && pr->
IsFile())
586 if (pr!=0) arr->Add(pr);
600 if (pr!=0) arr->Add(pr);
617 (strncmp(pr->
GetServerName(),
"https://",8)==0)) arr->Add(pr);
634 TString& createdhistoname)
636 if (strlen(Xexp)==0)
return;
638 TString varexp(Xexp);
641 varexp = TString(Yexp) + TString(
":") + varexp;
643 varexp = TString(Zexp) + TString(
":") + varexp;
646 int drawdim = varexp.CountChar(
':') + 1;
647 if (drawdim>3) drawdim = 3;
654 TString analhname(hname);
657 TString anitem =
"abcdef";
658 if (analhname.Length()==0)
659 while (anitem.Length()>0) {
660 analhname =
"hTreeDraw";
661 if (cnt>0) { analhname+=
"_"; analhname+=cnt; }
666 an->
RemoteTreeDraw(objname.Data(), varexp.Data(), cutcond, analhname.Data());
670 createdhistoname =
"";
677 TString treeslotname;
679 TTree* SelectedTree =
dynamic_cast<TTree*
> (
fxOM->
GetObject(treeslotname.Data()));
680 if (SelectedTree==0)
return;
682 TString histoname(hname), hslotname;
690 if ((histo!=0) && (drawdim!=histo->GetDimension())) {
698 if ((histo==0) && (histoname.Length()==0))
701 histoname +=
"/hTreeDraw_";
707 TString hfoldername, hobjectname;
711 hobjectname = histo->GetName();
714 varexp += hobjectname;
716 TDirectory* oldhisdir = histo ? histo->GetDirectory() : 0;
717 TDirectory* savdir = gDirectory;
719 TDirectory dummydir(
"DummyTreeDraw",
"Dummy directory to call tree draw");
722 histo->SetDirectory(&dummydir);
724 SelectedTree->Draw(varexp, cutcond,
"goff", 10000000, 0);
727 histo =
dynamic_cast<TH1*
> (dummydir.FindObject(hobjectname));
729 histo->SetDirectory(0);
735 histo->SetDirectory(oldhisdir);
742 #if ROOT_VERSION_CODE < ROOT_VERSION(5,13,1)
764 while (iter.
next()) {
767 if (slot==0)
continue;
771 if ((serv==0) || ((kind==1) && !serv->
IsGo4Analysis()))
continue;
773 if (dynamic_cast<TGo4AnalysisProxy*>(slot->
GetProxy())==0)
continue;
780 if ((res!=0) && !databranch) {
795 if ((slot==0) || (itemname==0))
809 if ((slot==0) || (itemname==0))
818 if ((analslot==0) || (objname==0))
return TString(
"");
821 while (iter.
next()) {
822 if (strcmp(iter.
getname(), objname)!=0)
continue;
836 if ((topslot==0) || (objname==0))
return TString(
"");
840 if (strcmp(iter.
getname(), objname)==0)
849 if (slot==0)
return 0;
853 if (pr!=0)
return pr;
864 const char* objectname = 0;
870 if (serv==0)
return 0;
872 if (objname!=0) *objname = objectname;
884 if (!slot)
return kFALSE;
887 if (!obj)
return kFALSE;
889 const char* analysisname = 0;
895 anslot =
fxOM->
FindSlot(slotname.Data(), &analysisname);
910 if (itemslot==0)
return;
916 while (iter.
next()) {
922 if (wait_time==0)
return;
946 if (guislot==0)
return 0;
950 if ((update==0) || ((update==1) && (obj!=0)))
return obj;
983 if (itemslot->
GetPar(
"::CopyObject")!=0) {
1021 if (slot==0)
return kFALSE;
1024 while (treeslot!=0) {
1026 if ((cl!=0) && (cl->InheritsFrom(TTree::Class())))
break;
1029 if (treeslot==0)
return kFALSE;
1038 if ((itemname==0) || (treename==0))
return kFALSE;
1043 if (slot==0)
return kFALSE;
1045 printf(
"DefineLeafName %s %s kind :%d\n", itemname, treename,
ItemKind(slot));
1049 int ilen = strlen(itemname);
1050 int tlen = strlen(treename);
1051 if ((ilen<tlen) || (strncmp(itemname, treename, tlen)!=0))
return kFALSE;
1053 leafname = slot->GetName();
1059 if ((objname==0) || (*objname==0))
return kFALSE;
1062 objectitem = objname;
1074 if (*objname!=
'/') searchname+=
"/";
1075 searchname+=objname;
1082 searchname.Append(
";1");
1087 objectitem = searchname;
1095 if (strchr(objname,
'/')!=0) {
1097 if ((mask & 2) == 0)
return kFALSE;
1103 const char *slash = strchr(objname,
'/');
1105 while (slash != 0) {
1106 slash = strchr(slash+1,
'/');
1107 if (slash == 0)
break;
1110 if (!
DefineRelatedObject(itemname, TString(objname, slash-objname).Data(), diritem, 0))
break;
1112 int kind =
ItemKind(diritem.Data());
1124 if ((mask & 1) == 0)
return kFALSE;
1130 size_t len = strlen(objname);
1131 while (iter.
next()) {
1132 const char* name = iter.
getname();
1134 if (strncmp(objname, name, len)!=0)
continue;
1136 if ((strlen(name) == len) ||
1137 ((strlen(name)==(len+2)) && (strcmp(name+len,
";1")==0))) {
1145 }
while (searchslot!=0);
1153 if (slot==0)
return kFALSE;
1159 if ((cl!=0) && (cl->InheritsFrom(TFile::Class())))
break;
1167 *filepath = itemname + fitemname.Length();
1168 if (**filepath==
'/') (*filepath)++;
1179 if (slot==0)
return kFALSE;
1182 if (obj==0)
return kFALSE;
1185 if (fileslot==0)
return kFALSE;
1188 if (dircont==0)
return kFALSE;
1201 if (slot==0)
return kFALSE;
1204 if (obj==0)
return kFALSE;
1206 TFile* f = TFile::Open(filename,
"UPDATE");
1207 if (f==0)
return kFALSE;
1209 TDirectory* dir = f;
1211 if ((subfolder!=0) && (*subfolder!=0)) {
1212 dir =
dynamic_cast<TDirectory*
> (f->Get(subfolder));
1213 if (dir==0) dir = f;
1217 bool res = dir->WriteTObject(obj, obj->GetName(),
"Overwrite") > 0;
1219 if (obj->InheritsFrom(TH1::Class()))
1220 ((TH1*) obj)->SetDirectory(0);
1229 const char* filename,
1230 const char* filedir,
1232 const char* description)
1234 if ((items==0) || (items->GetSize()==0))
return;
1243 if(convert.Contains(
"ASCII")) {
1247 if (convert.Contains(
"Radware")) {
1251 if (convert.Contains(
"ROOT XML")) {
1255 if (convert.Contains(
"ROOT")) {
1265 TObjString* str =
dynamic_cast<TObjString*
> (items->At(0));
1269 TString fname = filename;
1272 if(!fname.Contains(
".xml")) fname.Append(
".xml");
1274 if(!fname.Contains(
".root")) fname.Append(
".root");
1277 if ((itemslot!=0) && (itemslot->
NumChilds()>0)) {
1289 TGo4Log::Message(1,
"Exporting selected browser objects to %s",convert.Data());
1292 for (
int n=0;n<=items->GetLast();n++) {
1293 TObjString* str =
dynamic_cast<TObjString*
> (items->At(n));
1294 if (str==0)
continue;
1299 if (obj!=0) objs.Add(obj);
1302 exman.
Export(&objs, filter);
1307 const char* selectedpath,
1308 const char* description)
1312 if (toppath==0)
return kFALSE;
1317 TFile* f = TFile::Open(filename,
"recreate", description);
1318 if (f==0)
return kFALSE;
1334 if (slot==0)
return kFALSE;
1336 if (!slot->
GetIntPar(
"GUI::Remote", remote))
return kFALSE;
1342 TString analysisname;
1348 if ((stime!=0) && (sdate!=0)) {
1349 slot->
SetPar(
"GUI::Time", stime);
1350 slot->
SetPar(
"GUI::Date", sdate);
1355 const char* datetime = t.AsSQLString();
1356 char* time = (
char*) strchr(datetime,
' ');
1358 slot->
SetPar(
"GUI::Time",datetime);
1359 slot->
SetPar(
"GUI::Date",datetime);
1361 slot->
SetPar(
"GUI::Time", time+1);
1363 slot->
SetPar(
"GUI::Date", datetime);
1369 return slot==0 ? 0 : slot->
GetPar(
"GUI::Time");
1374 return slot==0 ? 0 : slot->
GetPar(
"GUI::Date");
1380 slot->
SetPar(
"::LinkedItem", itemname);
1385 return (slot==0) ? 0 : slot->
GetPar(
"::LinkedItem");
1403 if (slot==0)
return;
1404 if (kind>=0) slot->
SetIntPar(
"GUI::Kind", kind);
1406 slot->
SetPar(
"GUI::Class", classname);
1407 slot->
SetPar(
"GUI::Info", info);
1408 slot->
SetIntPar(
"GUI::SizeInfo", sizeinfo);
1413 return slot==0 ? 0 : slot->
GetPar(
"GUI::Info");
1418 if (slot==0)
return -1;
1420 if (!slot->
GetIntPar(
"GUI::SizeInfo", sizeinfo))
return -1;
1432 if (slot==0)
return 0;
1434 if (!slot->
GetIntPar(
"GUI::CalcSize", size))
return 0;
1450 return slot==0 ? 0 : slot->
GetPar(
"GUI::Class");
1465 if (slot==0)
return 0;
1468 if (!slot->
GetIntPar(
"GUI::CanDo", cando))
return 0;
1474 if (slot!=0) slot->
SetIntPar(
"GUI::CanDo", cando);
1479 return slot==0 ? kTRUE : slot->
GetPar(
"GUI::NotMonitored")==0;
1484 if (slot==0)
return;
1488 while (iter.
next()) {
1498 slot->
SetPar(
"GUI::NotMonitored",
"1");
1505 return (cando % 1000000000) / 100000000 > 0;
1510 return (cando % 100000000) / 10000000 > 0;
1515 return (cando % 10000000) / 1000000 > 0;
1520 return (cando % 1000000) / 100000 > 0;
1526 return (cando % 100000) / 10000 > 0;
1531 return (cando % 10000) / 1000 > 0;
1536 return (cando % 1000) / 100 > 0;
1541 return (cando % 100) / 10 > 0;
1546 return (cando % 10 > 0);
1551 if ((foldername!=0) && (*foldername!=0))
1554 TString fullpathname;
1564 if ((itemslot==0) || (newfoldername==0) || (strlen(newfoldername)==0))
return;
1567 if (!itemslot->
IsParent(memslot) && (memslot!=itemslot))
return;
1570 if (slot==0)
return;
1581 if ((itemslot==0) || (newname==0) || (strlen(newname)==0))
return;
1583 if ((strchr(newname,
'/')!=0) || (strchr(newname,
'\\')!=0))
return;
1586 if (!itemslot->
IsParent(memslot))
return;
1589 if (slot==0)
return;
1594 slot->SetName(newname);
1596 if (n!=0) n->SetName(newname);
1606 if (itemslot==0)
return;
1609 if (!itemslot->
IsParent(memslot))
return;
1612 if (slot==0)
return;
1617 if(ob->InheritsFrom(TH1::Class())) {
1618 TH1* his =
dynamic_cast<TH1*
>(ob);
1619 if (his) his->Reset();
1621 if(ob->InheritsFrom(TGo4DynamicEntry::Class())) {
1623 if (entry) entry->
Reset();
1625 if(ob->InheritsFrom(TGo4Picture::Class())) {
1627 if (pic) pic->
Reset();
1629 if(ob->InheritsFrom(TGraph::Class())) {
1630 TGraph* gr=
dynamic_cast<TGraph*
>(ob);
1632 Int_t pn = gr->GetN();
1637 if(ob->InheritsFrom(TMultiGraph::Class())) {
1638 TMultiGraph* mg =
dynamic_cast<TMultiGraph*
>(ob);
1640 TIter liter(mg->GetListOfGraphs());
1642 while(( gr = (TGraph*) liter())!=0) {
1643 Int_t pn = gr->GetN();
1659 if (obj==0)
return TString(
"");
1662 if ((pathname!=0) && (*pathname!=0)) {
1669 TString itemname = path;
1671 itemname+=obj->GetName();
1679 TString fullpathname;
1682 TGo4Slot* slot =
fxOM->
Add(fullpathname.Data(), obj, ownership, kTRUE);
1689 if (slot==0)
return;
1699 TString picitemname;
1709 for(Int_t posy=0; posy<pic->
GetDivY(); posy++)
1710 for(Int_t posx=0; posx<pic->
GetDivX(); posx++)
1724 TIter iter(gROOT->GetList());
1726 while ((obj=iter())!=0) {
1730 gROOT->GetList()->Clear();
1736 if(on) slot->
SetPar(
"GUI::CanDelete",
"1");
1743 return slot==0 ? kFALSE : slot->
GetPar(
"GUI::CanDelete")!=0;
1768 if (viewslot==0)
return 0;
1772 TObjArray UniqueItems;
1776 while (iter.
next()) {
1782 if ((srcslot!=0) && srcslot->
IsParent(brslot) &&
1783 (UniqueItems.FindObject(srcslot)==0))
1784 UniqueItems.Add(srcslot);
1788 Int_t nrequests = 0;
1789 for (
int n=0;n<=UniqueItems.GetLast();n++) {
1801 Int_t nrequests = 0;
1805 while (iter.
next()) {
1829 Bool_t anready = kTRUE;
1857 if (slot==0)
return;
1859 slot->
SetIntPar(
"GUI::DeleteProtect", delprot);
1863 slot->
SetIntPar(
"GUI::ResetProtect", clearprot);
1870 delprot = -1; clearprot = -1;
1871 if (slot==0)
return;
1872 if (!slot->
GetIntPar(
"GUI::DeleteProtect", delprot)) delprot = -1;
1873 if (!slot->
GetIntPar(
"GUI::ResetProtect", clearprot)) clearprot = -1;
1883 if (source==0)
return;
1886 if (curfold==0)
return;
1892 const char* EventsFolder =
"EventObjects/Events/";
1894 while (curfold!=0) {
1897 Bool_t res = iter.
next();
1903 while (levelchange++<0) {
1904 while (curslot!=0) {
1912 if (curfold==0)
break;
1920 while ((find!=0) && (strcmp(iter.
getname(), find->GetName())!=0))
1926 if (find!=curslot) {
1934 const char* ppp = strstr(fullname, EventsFolder);
1936 ppp += strlen(EventsFolder);
1937 if ((strlen(ppp)!=0) && (strchr(ppp,
'/')==0)) {
1950 TObject* assobj = 0;
1974 if ((curslot!=0) && curslot->
IsParent(targetslot))
1975 while (curslot!=0) {
1993 if (topslot==0)
return 0;
1999 for (Int_t n=0;n<topslot->
NumChilds();n++)
2024 if (cl->InheritsFrom(TProfile::Class())) { cando = 1110; pixmap =
"profile_t.png"; }
else
2025 if (cl->InheritsFrom(TProfile2D::Class())) { cando = 1110; pixmap =
"col.png"; }
else
2026 if (cl->InheritsFrom(TGo4Picture::Class())) { cando = 110; pixmap =
"picture.png"; }
else
2027 if (cl->InheritsFrom(TGo4Parameter::Class())) { cando = 1011; pixmap =
"parameter.png"; }
else
2028 if (cl->InheritsFrom(TMultiGraph::Class())) { cando = 1110; pixmap =
"superimpose.png"; }
else
2029 if (cl->InheritsFrom(THStack::Class())) { cando = 1110; pixmap =
"superimpose.png"; }
else
2030 if (cl->InheritsFrom(TGraph::Class())) { cando = 1001110; pixmap =
"tgraph.png"; }
else
2031 if (cl->InheritsFrom(TGo4Fitter::Class())) { cando = 11; pixmap =
"fitter.png"; }
else
2032 if (cl->InheritsFrom(TCanvas::Class())) { cando = 110; pixmap =
"canvas.png"; }
else
2033 if (cl->InheritsFrom(TFile::Class())) { pixmap =
"rootdb_t.png"; }
else
2034 if (cl->InheritsFrom(TTree::Class())) { pixmap =
"tree_t.png"; }
else
2035 if (cl->InheritsFrom(TFolder::Class())) { pixmap =
"folder_t.png"; }
else
2036 if (cl->InheritsFrom(TDirectory::Class())) { pixmap =
"folder_t.png"; }
else
2037 if (cl->InheritsFrom(TH3::Class())) { cando = 1101110; pixmap =
"h3_t.png"; }
else
2038 if (cl->InheritsFrom(TH2::Class())) { cando = 1101110; pixmap =
"h2_t.png"; }
else
2039 if (cl->InheritsFrom(TH1::Class())) { cando = 1101110; pixmap =
"h1_t.png"; }
else
2040 if (cl->InheritsFrom(TGo4WinCond::Class())) { cando = 101011; pixmap =
"windcond.png"; }
else
2041 if (cl->InheritsFrom(TGo4PolyCond::Class())) { cando = 101011; pixmap =
"polycond.png"; }
else
2042 if (cl->InheritsFrom(TGo4ShapedCond::Class())) { cando = 101011; pixmap =
"polycond.png"; }
else
2043 if (cl->InheritsFrom(TGo4ListCond::Class())) { cando = 101011; pixmap =
"windcond.png"; }
else
2044 if (cl->InheritsFrom(TGo4CondArray::Class())) { cando = 101011; pixmap =
"windcondarray.png"; }
else
2045 if (cl->InheritsFrom(TGo4TreeHistogramEntry::Class())) { cando = 1011; pixmap =
"dynentryx.png"; }
else
2046 if (cl->InheritsFrom(TGo4HistogramEntry::Class())) { cando = 1011; pixmap =
"dynentryx.png"; }
else
2047 if (cl->InheritsFrom(TLatex::Class())) { cando = 110; pixmap =
"canvas.png"; }
else
2048 if (cl->InheritsFrom(TF1::Class())) { cando = 110; pixmap =
"draw1dline.png"; }
else
2049 if (cl->InheritsFrom(TLeaf::Class())) { cando = 11; pixmap =
"leaf_t.png"; }
else
2050 if (cl->InheritsFrom(TGo4AnalysisStatus::Class())) { cando = 1; pixmap =
"control.png"; }
2054 pixmap =
"folder_t.png";
2055 if ((cl!=0) && cl->InheritsFrom(TTree::Class())) { cando = 10; pixmap =
"tree_t.png"; }
else
2056 if ((cl!=0) && cl->InheritsFrom(TCanvas::Class())) { cando = 110; pixmap =
"canvas.png"; }
else
2057 if ((cl!=0) && cl->InheritsFrom(THStack::Class())) { cando = 110; pixmap =
"superimpose.png"; }
else
2058 if ((cl!=0) && cl->InheritsFrom(TFile::Class())) { cando = 10000; pixmap =
"rootdb_t.png"; }
else
2059 if ((cl!=0) && cl->InheritsFrom(TGo4HServProxy::Class())) { cando = 10000; pixmap =
"histserv.png"; }
else
2060 if ((cl!=0) && cl->InheritsFrom(TGo4DabcProxy::Class())) { cando = 10000; pixmap =
"dabc.png"; }
else
2061 if ((cl!=0) && cl->InheritsFrom(TGo4AnalysisProxy::Class())) { pixmap =
"analysiswin.png"; }
else
2062 if ((cl!=0) && cl->InheritsFrom(TGo4ServerProxy::Class())) { cando = 10000; pixmap =
"http.png"; }
2066 pixmap =
"branch_t.png";
2069 cando = 11; pixmap =
"leaf_t.png";
2072 cando = 1011; pixmap =
"parameter.png";
2075 cando = 10; pixmap =
"eventitem.png";
2078 cando = 100010; pixmap =
"eventobj.png";
2081 cando = 100000000; pixmap =
"eventobj.png";
2089 if (v1==v2)
return kTRUE;
2091 return (fabs(v1-v2) <= scale);
2101 if ((ax1==0) || (ax2==0))
return 0;
2103 Int_t num1 = ax1->GetNbins();
2104 Int_t num2 = ax2->GetNbins();
2106 Double_t scale = fabs(ax1->GetXmax() - ax1->GetXmin()) / (num1+1.) * 1e-3;
2110 if ((num1>num2/2) || (num1<2))
return 0;
2112 Int_t rebin = num2/num1;
2113 if (rebin==0)
return 0;
2116 if ((ax1->GetXbins()->GetSize()!=0) || (ax2->GetXbins()->GetSize()!=0))
return 0;
2123 if (num1*rebin!=num2) xmax = ax2->GetBinUpEdge(num1*rebin);
2124 else xmax = ax2->GetXmax();
2132 if ((ax1->GetXbins()->GetSize()==0) && (ax2->GetXbins()->GetSize()==0)) {
2136 for (Int_t n=1;n<=num1;n++)
2138 ax2->GetBinCenter(n), scale))
return 0;
2146 Bool_t tdisp(kFALSE);
2149 if (obj->InheritsFrom(TProfile::Class())) {
2150 TProfile* profile =
dynamic_cast<TProfile*
> (obj);
2151 TProfile* profile2 =
dynamic_cast<TProfile*
> (newobj);
2152 if (!profile || !profile2)
return kFALSE;
2153 if (profile->GetNbinsX() != profile2->GetNbinsX())
return kFALSE;
2154 profile2->Copy(*profile);
2157 if (obj->InheritsFrom(TProfile2D::Class())) {
2158 TProfile2D* profile =
dynamic_cast<TProfile2D*
> (obj);
2159 TProfile2D* profile2 =
dynamic_cast<TProfile2D*
> (newobj);
2160 if (!profile || !profile2)
return kFALSE;
2161 if ((profile->GetNbinsX() != profile2->GetNbinsX()) || (profile->GetNbinsY() != profile2->GetNbinsY()))
return kFALSE;
2162 profile2->Copy(*profile);
2165 if (obj->InheritsFrom(TH1::Class())) {
2166 TH1* histo =
dynamic_cast<TH1*
> (obj);
2167 TH1* histo2 =
dynamic_cast<TH1*
> (newobj);
2168 if ((histo==0) || (histo2==0))
return kFALSE;
2170 if ((dynamic_cast<TProfile*>(obj)!=0) || (dynamic_cast<TProfile2D*>(obj)!=0))
return kFALSE;
2172 if (histo->GetDimension()!=histo2->GetDimension())
return kFALSE;
2174 histo->SetTitle(histo2->GetTitle());
2176 Int_t rebinx = 1, rebiny = 1;
2178 rebinx =
CompareAxis(histo->GetXaxis(), histo2->GetXaxis());
2179 if (histo->GetDimension()>1)
2180 rebiny =
CompareAxis(histo->GetYaxis(), histo2->GetYaxis());
2181 if (histo->GetDimension()>2)
2182 if (
CompareAxis(histo->GetZaxis(), histo2->GetZaxis())!=1)
return kFALSE;
2184 if ((rebinx==0) || (rebiny==0))
return kFALSE;
2188 if ((rebinx>1) || (rebiny>1)) {
2189 if ((hasrebinx==0) || (hasrebiny==0))
return kFALSE;
2191 TH1* clon = (TH1*) histo2->Clone(
"____dummyhisto____");
2192 if (clon==0)
return kFALSE;
2193 clon->SetDirectory(0);
2194 Bool_t rebinres = kFALSE;
2196 if (histo->GetDimension() == 1) {
2197 clon->Rebin(rebinx);
2199 }
else if (histo->GetDimension() == 2) {
2200 TH2 *h2 =
dynamic_cast<TH2 *
>(clon);
2202 h2->Rebin2D(rebinx, rebiny);
2208 *hasrebinx = rebinx;
2209 *hasrebiny = rebiny;
2215 Int_t sz = histo->GetNbinsX()+2;
2216 if (histo->GetDimension()>1)
2217 sz = sz*(histo->GetNbinsY()+2);
2218 if (histo->GetDimension()>2)
2219 sz = sz*(histo->GetNbinsZ()+2);
2220 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
2221 Bool_t canrebin = histo->TestBit(TH1::kCanRebin);
2222 histo->SetBit(TH1::kCanRebin, kFALSE);
2224 Bool_t canrebin = histo->CanExtendAllAxes();
2225 histo->SetCanExtend(TH1::kNoAxis);
2228 for (
int n=0;n<sz;n++) {
2229 Stat_t value = histo2->GetBinContent(n);
2231 histo->SetBinContent(n, value);
2234 #if ROOT_VERSION_CODE < ROOT_VERSION(6,4,2)
2235 if (canrebin) histo->SetBit(TH1::kCanRebin, kTRUE);
2237 if (canrebin) histo->SetCanExtend(TH1::kAllAxes);
2240 histo->SetEntries(sum);
2242 TArrayD *sumw_tgt = 0, *sumw_src = 0;
2244 if (histo2->GetSumw2N()>0)
2245 sumw_src = histo2->GetSumw2();
2251 histo->GetSumw2()->Set(0);
2256 if(histo->GetSumw2N()==0)
2258 sumw_tgt = histo->GetSumw2();
2261 if (sumw_src && sumw_tgt)
2262 sumw_tgt->Set(sz, sumw_src->GetArray());
2266 if (obj->InheritsFrom(TGo4Condition::Class())) {
2269 if ((cond==0) || (newcond==0))
return kFALSE;
2276 if (obj->InheritsFrom(TGraphAsymmErrors::Class())) {
2277 TGraphAsymmErrors* gr =
dynamic_cast<TGraphAsymmErrors*
> (obj);
2278 TGraph* newgr =
dynamic_cast<TGraph*
> (newobj);
2279 if ((gr==0) || (newgr==0))
return kFALSE;
2281 gr->SetTitle(newgr->GetTitle());
2283 Int_t npoints = newgr->GetN();
2285 Double_t xp, yp, exh, exl, eyh, eyl;
2286 for (Int_t n=0;n<npoints;n++) {
2287 newgr->GetPoint(n,xp,yp);
2288 gr->SetPoint(n,xp,yp);
2289 exh = newgr->GetErrorXhigh(n);
2290 exl = newgr->GetErrorXlow(n);
2291 eyh = newgr->GetErrorYhigh(n);
2292 eyl = newgr->GetErrorYlow(n);
2293 gr->SetPointError(n, exl, exh, eyl, eyh);
2300 if (obj->InheritsFrom(TGraphErrors::Class())) {
2301 TGraphErrors* gr =
dynamic_cast<TGraphErrors*
> (obj);
2302 TGraph* newgr =
dynamic_cast<TGraph*
> (newobj);
2303 if ((gr==0) || (newgr==0))
return kFALSE;
2305 gr->SetTitle(newgr->GetTitle());
2307 Int_t npoints = newgr->GetN();
2309 Double_t xp, yp, ex, ey;
2310 for (Int_t n=0;n<npoints;n++) {
2311 newgr->GetPoint(n,xp,yp);
2312 gr->SetPoint(n,xp,yp);
2313 ex = newgr->GetErrorX(n);
2314 ey = newgr->GetErrorY(n);
2315 gr->SetPointError(n, ex, ey);
2323 if (obj->InheritsFrom(TGraph::Class())) {
2324 TGraph* gr =
dynamic_cast<TGraph*
> (obj);
2325 TGraph* newgr =
dynamic_cast<TGraph*
> (newobj);
2326 if ((gr==0) || (newgr==0))
return kFALSE;
2331 gr->SetTitle(newgr->GetTitle());
2333 Int_t npoints = newgr->GetN();
2336 for (Int_t n=0;n<npoints;n++) {
2337 newgr->GetPoint(n,xp,yp);
2338 gr->SetPoint(n,xp,yp);
2345 if (obj->InheritsFrom(TLatex::Class())) {
2346 TLatex* l0 =
dynamic_cast<TLatex*
> (obj);
2347 TLatex* l1 =
dynamic_cast<TLatex*
> (newobj);
2348 if ((l1==0) || (l0==0))
return kFALSE;
2350 l0->SetTitle(l1->GetTitle());
2354 if (obj->InheritsFrom(TF1::Class())) {
2356 TF1* f0 =
dynamic_cast<TF1*
> (obj);
2357 TF1* f1 =
dynamic_cast<TF1*
> (newobj);
2358 if ((f1==0) || (f0==0))
return kFALSE;
2370 TH1* h1=gr->GetHistogram();
2371 TAxis* xax=h1->GetXaxis();
2372 timedisplay=xax->GetTimeDisplay();
2373 format=xax->GetTimeFormat();
2379 TH1*h1=gr->GetHistogram();
2380 TAxis* xax=h1->GetXaxis();
2381 xax->SetTimeDisplay(timedisplay);
2382 xax->SetTimeFormat(format.Data());
2388 if(oldgr==0 || newgr==0)
return;
2389 TList* theFunctions=oldgr->GetListOfFunctions();
2391 while ((obj = theFunctions->First()) != 0) {
2392 while (theFunctions->Remove(obj)) { }
2397 TList* newFunctions = newgr->GetListOfFunctions();
2398 TListIter fiter(newFunctions);
2400 while((fun=dynamic_cast<TF1*>(fiter.Next())) !=0) {
2401 TF1* fclon =
dynamic_cast<TF1*
>(fun->Clone());
2402 theFunctions->Add(fclon);
2403 fclon->SetParent(oldgr);
2409 TH1* oldhis=oldgr->GetHistogram();
2410 TH1* newhis=newgr->GetHistogram();
2411 if(oldhis && newhis)
2413 oldhis->GetXaxis()->SetTitle(newhis->GetXaxis()->GetTitle());
2414 oldhis->GetYaxis()->SetTitle(newhis->GetYaxis()->GetTitle());
2423 if (itemslot==0)
return;
2429 TNamed* n = (TNamed*)
fxWaitingList->FindObject(itemname.Data());
2431 n->SetTitle(destination);
2433 fxWaitingList->Add(
new TNamed(itemname.Data(), destination));
2443 TNamed* n = (TNamed*)
fxWaitingList->FindObject(itemname.Data());
2445 const char* dest = n->GetTitle();
2446 if ((dest!=0) && (strlen(dest)==0)) dest = 0;
2457 TIter next(gROOT->GetListOfCanvases());
2459 while ((pad = (TPad*) next()) != 0) {
2462 TVirtualPad* subpad = 0;
2464 while ((subpad = pad->GetPad(number++))!=0)
static bool CanClearItem(int cando)
Bool_t Connect(const char *nodename)
void SetCanDelete(TGo4Slot *slot, Bool_t on=kTRUE)
static void RestoreAxisTimeProperties(TGraph *gr, Bool_t &timedisplay, TString &format)
void OpenFile(const char *fname)
Bool_t GetIntPar(const char *name, Int_t &value)
static void SaveAxisTimeProperties(TGraph *gr, Bool_t &timedisplay, TString &format)
void SetStartDir(const char *dir=0)
static TClass * GetClass(const char *classname, Bool_t load=kFALSE)
virtual Bool_t IsConnected()
Bool_t IsItemMonitored(TGo4Slot *slot)
void MakeHttpList(TObjArray *arr)
TString FindItem(const char *objname)
void SetIntPar(const char *name, Int_t value)
virtual void Update(TGo4Slot *slot, Bool_t strong)
void SetOutFileComment(const char *comment=0)
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 DataSlotName(const char *item, TString &res)
void SetProxy(TGo4Proxy *cont)
virtual Bool_t UpdateFrom(TGo4Condition *cond, Bool_t counts)
void ExportItemsTo(TObjArray *items, Bool_t fetchitems, const char *filename, const char *filedir, const char *format, const char *description)
TGo4Slot * FindSlot(const char *fullpath, const char **subname=0)
Int_t RequestObject(const char *source, const char *targetslot, Int_t waittime_millisec=0)
Int_t ItemKind(const char *name)
static Bool_t UpdateObjectContent(TObject *obj, TObject *newobj, Int_t *hasrebinx=0, Int_t *hasrebiny=0)
virtual const char * GetContainedClassName()
void UpdateBrowserContent()
virtual void Initialize(TGo4Slot *slot)
Bool_t DefineLeafName(const char *itemname, const char *treename, TString &leafname)
void AddFile(const char *pathname, const char *filename)
void UnregisterLink(TGo4Slot *target)
Bool_t IsItemRemote(const char *name)
void SetCurrentDir(const char *dir=0)
static bool CanDrawItem(int cando)
TGo4Proxy * GetProxy() const
const char * GetObjName(Int_t n)
Int_t UpdateVisibleAnalysisObjects(bool checkmonitor)
void RenameMemoryItem(const char *itemname, const char *newname)
virtual void ProduceFullName(TString &name, TGo4Slot *toparent=0)
void MakeFolder(const char *pathname)
Int_t UpdateAllMonitoredObjects()
void SetProtectionBits(TGo4Slot *slot, Int_t delprot, Int_t clearprot)
Int_t ItemCanDo(const char *name)
virtual Bool_t IsGo4Analysis() const
TGo4Slot * getslot() const
Bool_t DeleteDataSource(TGo4Slot *itemslot)
void MakeHServerList(TObjArray *arr)
TGo4ServerProxy * DefineServerObject(const char *itemname, TString *objname=0, Bool_t onlyanalysis=kTRUE)
Bool_t IsAnalysisItem(const char *name)
void RegisterLink(TGo4Slot *source, TGo4Slot *target, Bool_t exapndchilds=kFALSE)
const char * GetPar(const char *name) const
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)
void DeleteChilds(const char *startedwith=0)
static bool CanExpandItem(int cando)
Int_t RequestBrowserObject(const char *name, Int_t wait_time=0)
virtual Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner)
static Int_t CompareAxis(TAxis *ax1, TAxis *ax2)
virtual Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner)
virtual Bool_t RequestObjectStatus(const char *objectname, TGo4Slot *tgtslot)
void CheckWaitingList(TGo4Slot *source)
void AddWaitingList(TGo4Slot *itemslot, const char *destination=0)
TGo4Slot * FindServerSlot(Bool_t databranch, Int_t kind=0)
TGo4ServerProxy * FindServer(const char *itemname=0, Bool_t asanalysis=kTRUE)
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)
Int_t getflag(const char *flagname)
virtual Bool_t HandleTimer(TTimer *timer)
Bool_t SaveBrowserToFile(const char *filename, Bool_t prefetch=kFALSE, const char *selectedpath=0, const char *description=0)
virtual void Finalize(TGo4Slot *slot)
void DeleteSlot(const char *pathname)
TGo4Slot * DataSlot(const char *item)
Bool_t ShiftSlotBefore(TGo4Slot *slot, TGo4Slot *before)
static const char * ItemInfo(TGo4Slot *slot)
static bool CanDragItem(int cando)
TObject * GetAssignedObject()
Bool_t IsCanDelete(TGo4Slot *slot)
Int_t CalculateFolderSizes(TGo4Slot *topslot)
void CopyClipboard(const char *tgtpath, Bool_t forcerequest=kFALSE)
const char * getfullname()
static bool CanExportItem(int cando)
Bool_t IsParent(const TGo4Slot *slot) const
virtual Bool_t RefreshNamesList()
TObject * GetObject(const char *name=0)
TGo4Slot * FindChild(const char *name)
Bool_t DefineFileObject(const char *itemname, TString &filedataslot, const char **filepath)
void CreateMemoryFolder(const char *foldername=0)
void ClearMemoryItem(const char *itemname)
virtual void RemoteTreeDraw(const char *treename, const char *varexp, const char *cutcond, const char *hname)
TGo4Slot * GetParent() const
Int_t ItemSizeInfo(TGo4Slot *slot)
void MakeFilesList(TObjArray *arr)
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)
TGo4Slot * GetSlot(const char *name, Bool_t force=kFALSE)
void SaveDataToFile(TFile *f, Bool_t onlyobjs=kFALSE, TGo4Slot *startslot=0)
virtual ~TGo4BrowserObjProxy()
Bool_t UpdateObjectInFile(const char *filepath, TObject *obj)
void RequestObjectStatus(const char *name, TGo4Slot *tgtslot)
void RemovePar(const char *name)
TString FindItemInAnalysis(const char *objname)
const char * ItemClassName(const char *name)
TVirtualTreePlayer * fDummyTreePlayer
static const char * Message(Int_t prio, const char *text,...)
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)
TGo4Slot * BrowserSlot(const char *item)
void SetItemMonitored(TGo4Slot *slot, Bool_t on=kTRUE)
virtual ~TGo4BrowserProxy()
TGo4Slot * BrowserMemorySlot()
TGo4Picture * FindPic(Int_t posy, Int_t posx)
Bool_t ProduceExplicitCopy(const char *itemname, const char *tgtpath=0, Bool_t forcerequest=kFALSE)
void AddProxy(const char *pathname, TGo4Proxy *cont, const char *name, const char *title="title")
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)
TGo4AnalysisProxy * FindAnalysis(const char *itemname=0)
void InformBrowserUpdate()
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)
TGo4Slot * GetLink() const
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=0)
Int_t levelchange() const
void Export(TObject *ob, Go4Export_t format)
virtual void SetChanged(Bool_t on=kTRUE)
TGo4Slot * BrowserTopSlot()
void SetOutFile(const char *filename=0)
void AddServerProxy(TGo4ServerProxy *serv, const char *slotname, const char *info)
void SetCalcSize(TGo4Slot *slot, Int_t size)
virtual Bool_t ProcessEvent(TGo4Slot *slot, TGo4Slot *source, Int_t id, void *param)
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)
TString GetFullName(TGo4Slot *toparent=0)
virtual Bool_t DelayedRefreshNamesList(Int_t delay_sec)
static void SetLinkedName(TGo4Slot *slot, const char *itemname)
TGo4ServerProxy * DefineAnalysisObject(const char *itemname, TString &analysisname)
virtual const char * GetServerName() const
virtual Int_t NumberOfWaitingProxyes()
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)
TGo4Slot * GetChild(Int_t n) const
static const char * ItemTime(TGo4Slot *slot)
static void UpdateListOfFunctions(TGraph *oldgr, TGraph *newgr)
Bool_t UpdateAnalysisItem(const char *itemname, TObject *obj=0)
static bool CanEditItem(int cando)
Bool_t BrowserItemName(TGo4Slot *itemslot, TString &res)
TGo4Slot * ItemSlot(const char *itemname)
static void SetItemTimeDate(TGo4Slot *slot, const char *stime=0, const char *sdate=0)
TGo4Slot * Add(const char *pathname, TObject *obj, Bool_t owner=kFALSE, Bool_t canrename=kFALSE)
static Int_t DefineItemProperties(Int_t kind, TClass *cl, TString &pixmap)
void ToggleMonitoring(Int_t period)
Bool_t SaveItemToFile(const char *itemname, const char *filename, const char *subfolder=0)
Bool_t next(Bool_t goesinto=kTRUE)
virtual Bool_t Use() const
void BrowserSlotName(const char *item, TString &res)