GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4AbstractInterface.cxx
Go to the documentation of this file.
1// $Id$
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
15
16#include <iostream>
17#include <fstream>
18
19#include "TROOT.h"
20#include "TSystem.h"
21#include "TInterpreter.h"
22#include "TObjString.h"
23
24#include "TGo4Log.h"
25#include "TGo4Iter.h"
26#include "TGo4BrowserProxy.h"
27#include "TGo4ServerProxy.h"
28
30
32
33
38
40{
41 if (fgInstance) {
42 delete fgInstance;
43 fgInstance = nullptr;
44 }
45}
46
48{
49 return ".hotstart";
50}
51
53{
54 return "temporary object to setup viewpanel";
55}
56
58{
59 return 20;
60}
61
63{
64 fInitSharedLibs = libs ? libs : gInterpreter->GetSharedLibs();
65}
66
68 TObject(),
69 fOM(nullptr),
70 fBrowser(nullptr),
72{
73 fgInstance = this;
74}
75
77{
78 fOM = om;
79 fBrowser = br;
80
81 Int_t error = 0;
82 gROOT->ProcessLineSync("TGo4AbstractInterface *go4 = TGo4AbstractInterface::Instance();", &error);
83 gROOT->ProcessLineSync("TGo4ObjectManager *om = TGo4AbstractInterface::Instance()->OM();", &error);
84 gROOT->ProcessLineSync("TGo4BrowserProxy *br = TGo4AbstractInterface::Instance()->Browser();", &error);
85 gROOT->ProcessLineSync(TString::Format(".x %s", TGo4Log::subGO4SYS("macros/go4macroinit.C").Data()).Data());
86}
87
89{
91
92 gROOT->ProcessLine(TString::Format(".x %s", TGo4Log::subGO4SYS("macros/go4macroclose.C").Data()).Data());
93
94 gInterpreter->DeleteGlobal(fBrowser);
95 gInterpreter->DeleteGlobal(fOM);
96 gInterpreter->DeleteGlobal(this);
97
98 fgInstance = nullptr;
99
100}
101
106
108{
109 return Browser() ? Browser()->FindServer() : nullptr;
110}
111
113{
114 if (!fname || (strlen(fname) == 0)) return;
115
116 TString libs = gInterpreter->GetSharedLibs();
117
118 const char *token = strtok((char *) libs.Data(), " ,\t\n");
119
120 while(token != nullptr) {
121 if (strcmp(token, fname) == 0) return;
122 token = strtok(nullptr, " ,\t\n");
123 }
124
125 gSystem->Load(fname);
126}
127
128void TGo4AbstractInterface::OpenFile(const char *fname)
129{
130 Browser()->OpenFile(fname);
131 ProcessEvents(-1);
132}
133
134
135Bool_t TGo4AbstractInterface::SaveToFile(const char *itemname,
136 const char *filename,
137 const char *filetitle)
138{
139 return Browser()->SaveBrowserToFile(filename, kFALSE, itemname, filetitle);
140}
141
142Bool_t TGo4AbstractInterface::ExportToFile(const char *itemname,
143 const char *dirpath,
144 const char *format,
145 const char *filetitle)
146{
147 TGo4Slot *topslot = Browser()->ItemSlot(itemname);
148 if (!topslot) return kFALSE;
149
150 TObjArray items;
151
152 TGo4Iter iter(topslot, kTRUE);
153
154 TString buf;
155
156 while (iter.next())
157 if (Browser()->BrowserItemName(iter.getslot(), buf))
158 items.Add(new TObjString(buf));
159
160 Browser()->ExportItemsTo(&items, kFALSE, "null", dirpath, format, filetitle);
161
162 items.Delete();
163
164 return kTRUE;
165}
166
167
168void TGo4AbstractInterface::ConnectHServer(const char *servername,
169 Int_t portnumber,
170 const char *basename,
171 const char *userpass,
172 const char *filter)
173{
174 Browser()->ConnectHServer(servername,
175 portnumber,
176 basename,
177 userpass,
178 filter);
179 ProcessEvents(200);
180}
181
182void TGo4AbstractInterface::ConnectDabc(const char *servername)
183{
184 Browser()->ConnectDabc(servername);
185}
186
188{
189 return !Server() ? kFALSE : Server()->IsConnected();
190}
191
192void TGo4AbstractInterface::ExecuteLine(const char *remotecmd)
193{
194 TGo4ServerProxy *anal = Server();
195 if (anal && remotecmd) {
196 anal->ExecuteLine(remotecmd);
197 TGo4Log::Message(1, "Exec: %s", remotecmd);
198 }
199}
200
202{
203 TGo4ServerProxy *anal = Server();
204 if (anal)
206}
207
208void TGo4AbstractInterface::MonitorItem(const char *itemname, Bool_t on)
209{
210 TGo4Slot *itemslot = Browser()->BrowserSlot(itemname);
211 if (itemslot)
212 Browser()->SetItemMonitored(itemslot, on);
213}
214
216{
217 Browser()->ToggleMonitoring(period*1000);
218}
219
224
225TString TGo4AbstractInterface::FindItem(const char *objname)
226{
227 // if itemname is specified, return as is
228 if (Browser()->ItemSlot(objname)) return TString(objname);
229
230 return Browser()->FindItem(objname);
231}
232
233Bool_t TGo4AbstractInterface::CopyItem(const char *itemname)
234{
235 return Browser()->ProduceExplicitCopy(itemname);
236}
237
238Bool_t TGo4AbstractInterface::DeleteItem(const char *itemname)
239{
240 return Browser()->DeleteDataSource(Browser()->ItemSlot(itemname));
241}
242
243void TGo4AbstractInterface::FetchItem(const char *itemname, Int_t wait_time)
244{
245 Browser()->FetchItem(itemname, wait_time);
246}
247
248void TGo4AbstractInterface::RedrawItem(const char *itemname)
249{
250 Browser()->RedrawItem(itemname);
251}
252
253TObject *TGo4AbstractInterface::GetObject(const char *itemname, Int_t updatelevel)
254{
255 if (!itemname || (strlen(itemname) == 0)) return nullptr;
256
257 return Browser()->GetBrowserObject(itemname, updatelevel);
258}
259
260TString TGo4AbstractInterface::SaveToMemory(const char *path, TObject *obj, Bool_t ownership)
261{
262 TString res = Browser()->SaveToMemory(path, obj, ownership, kTRUE);
263
265
266 return res;
267}
268
269Bool_t TGo4AbstractInterface::LoadHotStart(const char *filename)
270{
272
273 std::ifstream f(filename);
274
275 if (!f.good()) return kFALSE;
276
277 char buf[10000];
278
279 while (!f.eof()) {
280 f.getline(buf, 10000);
281 fxCommands.Add(new TObjString(buf));
282 }
283
284 if (fxCommands.IsEmpty()) return kFALSE;
285
286 // Add empty string, which will be deleted first
287 fxCommands.AddFirst(new TObjString(""));
288 return kTRUE;
289}
290
292{
293 return !fxCommands.IsEmpty();
294}
295
297{
298 if (fxCommands.IsEmpty()) return nullptr;
299 TObject *obj = fxCommands.First();
300 fxCommands.Remove(obj);
301 delete obj;
302 const char *res = nullptr;
303 do {
304 if (fxCommands.IsEmpty()) return nullptr;
305 TObjString* str = (TObjString*) fxCommands.First();
306 res = str->GetName();
307 if (!res || (strlen(res) == 0)) {
308 res = nullptr;
309 fxCommands.Remove(str);
310 delete str;
311 }
312
313 } while (!res);
314 return res;
315}
316
321
323{
324 TString rootsys;
325 if (gSystem->Getenv("ROOTSYS") != nullptr) {
326 rootsys = gSystem->Getenv("ROOTSYS");
327 if (rootsys[rootsys.Length()-1] != '/') rootsys+="/";
328 }
329
330 TString go4sys = TGo4Log::GO4SYS();
331
332 TString libs = gInterpreter->GetSharedLibs();
333 const char *token = strtok((char *) libs.Data(), " ,\t\n");
334 while(token != nullptr) {
335 if ((fInitSharedLibs.Index(token) == kNPOS)
336// !strstr(token,"libGX11.") &&
337// !strstr(token,"libGX11TTF.") &&
338 && !strstr(token,"libHistPainter.")) {
339 fs << "go4->LoadLibrary(\"";
340 if ((go4sys.Length() > 0) && strstr(token, go4sys.Data()) == token)
341 fs << "$GO4SYS/" << (token + go4sys.Length());
342 else
343 if ((rootsys.Length() > 0) && strstr(token, rootsys.Data()) == token)
344 fs << "$ROOTSYS/" << (token + rootsys.Length());
345 else
346 fs << token;
347
348 fs << "\");" << std::endl;
349 }
350 token = strtok(nullptr, " ,\t\n");
351 }
352}
Generic interface to GUI functionality.
virtual void ConnectHServer(const char *servername, Int_t portnumber, const char *basename, const char *userpass, const char *filter)
Connect to GSI histogram server.
virtual void MonitorItem(const char *itemname, Bool_t on=kTRUE)
Enable/disable monitoring of browser item.
TGo4AnalysisProxy * Analysis()
Returns pointer on analysis proxy.
static Int_t DelayMillisec()
Default delay during hotstart file extension.
virtual void RedrawItem(const char *itemname)
Redraw item of given name on all viewpanels/editors.
virtual void OpenFile(const char *fname)
Open specified file in read-only mode.
virtual void LoadLibrary(const char *fname)
Load specified ROOT library.
static TGo4AbstractInterface * Instance()
Return pointer on instance of implementation of TGo4AbstractInterface class.
virtual Bool_t CopyItem(const char *itemname)
Copy item to workspace.
TGo4BrowserProxy * fBrowser
virtual void ConnectDabc(const char *servername)
Connect to DABC server.
static const char * DefaultPicTitle()
Returns default hotstart file extension.
TGo4BrowserProxy * Browser() const
Returns pointer on browser proxy.
virtual Bool_t ExportToFile(const char *itemname, const char *dirpath, const char *format, const char *filetitle=nullptr)
Export browser item to different file formats.
virtual Bool_t DeleteItem(const char *itemname)
Delete item (if allowed).
virtual void RequestAnalysisConfig()
Requests current analysis configuration.
virtual void StartMonitoring(Int_t period=10)
Start monitoring mode.
virtual Bool_t IsAnalysisConnected()
Indicate, if analysis was successfully connected.
virtual void StopMonitoring()
Stop monitoring mode.
static TGo4AbstractInterface * fgInstance
static const char * FileExtension()
Returns default hotstart file extension.
TGo4ServerProxy * Server()
Returns pointer on more generic server proxy.
void Initialize(TGo4ObjectManager *om, TGo4BrowserProxy *br)
list of shared libraries when application is started
virtual void ExecuteLine(const char *remotecmd)
Execute one macro line on analysis side.
virtual void FetchItem(const char *itemname, Int_t wait_time=2000)
Fetch item from data source.
virtual Bool_t SaveToFile(const char *itemname, const char *filename, const char *filetitle=nullptr)
Save specified browser item to file.
virtual ~TGo4AbstractInterface()
destructor
Bool_t LoadHotStart(const char *filename)
virtual void ProcessEvents(Int_t timeout=-1)=0
virtual TObject * GetObject(const char *itemname, Int_t updatelevel=1)
Returns object, assigned to specified browser item.
virtual TString SaveToMemory(const char *path, TObject *obj, Bool_t ownership=kFALSE)
Save object in browser workspace.
static void SetInitSharedLibs(const char *libs=nullptr)
method to set initial list of shared libraries, which than will not be included in hotstart file
static void DeleteInstance()
Delete instance of interface class.
virtual TString FindItem(const char *objname)
Find item with given object name.
static void ProduceLoadLibs(std::ostream &fs)
Bool_t SaveBrowserToFile(const char *filename, Bool_t prefetch=kFALSE, const char *selectedpath=nullptr, const char *description=nullptr)
TGo4AnalysisProxy * FindAnalysis(const char *itemname=nullptr)
Bool_t DeleteDataSource(TGo4Slot *itemslot)
TGo4Slot * BrowserSlot(const char *item=nullptr)
TGo4Slot * ItemSlot(const char *itemname)
Bool_t ProduceExplicitCopy(const char *itemname, const char *tgtpath=nullptr, Bool_t forcerequest=kFALSE)
TObject * GetBrowserObject(const char *name, Int_t update=0)
void ToggleMonitoring(Int_t period)
TString SaveToMemory(const char *pathname, TObject *obj, Bool_t ownership, Bool_t overwrite=kFALSE)
void ExportItemsTo(TObjArray *items, Bool_t fetchitems, const char *filename, const char *filedir, const char *format, const char *description)
Bool_t ConnectHServer(const char *servername, Int_t portnumber, const char *basename, const char *userpass, const char *filter)
void RedrawItem(const char *itemname)
void FetchItem(const char *itemname, Int_t wait_time=0)
TGo4ServerProxy * FindServer(const char *itemname=nullptr, Bool_t asanalysis=kTRUE)
void SetItemMonitored(TGo4Slot *slot, Bool_t on=kTRUE)
Bool_t ConnectDabc(const char *nodename)
TString FindItem(const char *objname)
void OpenFile(const char *fname)
Bool_t next(Bool_t goesinto=kTRUE)
Definition TGo4Iter.cxx:44
TGo4Slot * getslot() const
Definition TGo4Iter.cxx:166
static TString subGO4SYS(const char *subdir)
Return subdirectory in the GO4SYS.
Definition TGo4Log.cxx:189
static const char * Message(Int_t prio, const char *text,...) GO4_PRINTF2_ARGS
Display a message.
Definition TGo4Log.cxx:206
static const char * GO4SYS()
Return GO4SYS environment variable or Go4 top directory during compile (if GO4SYS) not set.
Definition TGo4Log.cxx:156
special base class for remote data servers like DABC, HTTP, hist server
virtual Bool_t IsConnected() const
virtual void RequestAnalysisSettings()
virtual void ExecuteLine(const char *line)