GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4HServProxy.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
14#include "TGo4HServProxy.h"
15
16#include "TH1.h"
17#include "TH2.h"
18
19#include "TGo4Slot.h"
20
21extern "C" {
22 #include "s_his_head.h"
23 #include "f_his_hist.h"
24}
25
27 public:
29
30 TGo4HServIter(const TGo4Slot *slot) : TGo4LevelIter(), fSlot(slot) {}
31
32 virtual ~TGo4HServIter() {}
33
34 Bool_t next() override
35 { return fSlot && (++fIndex < fSlot->NumChilds()); }
36
37 Bool_t isfolder() override { return curSlot()->HasSlotsSubLevels(); }
38
39 TGo4LevelIter *subiterator() override { return new TGo4HServIter(curSlot()); }
40
41 const char *name() override { return curSlot()->GetName(); }
42
43 const char *info() override { return curSlot()->GetTitle(); }
44
45 Int_t getflag(const char *flagname) override
46 {
47 if (strcmp(flagname,"IsRemote") == 0) return 1;
48 return -1;
49 }
50
52
53 const char *GetClassName() override { return curSlot()->GetPar("::HistoClass"); }
54
55 protected:
56 TGo4Slot *curSlot() const { return fSlot->GetChild(fIndex); }
57
58 const TGo4Slot *fSlot{nullptr};
59 Int_t fIndex{-1};
60};
61
62// ******************************************************************
63
65 public:
67 const char *name,
68 const char *fullname,
69 const char *classname) :
70 TGo4Access(),
71 fHServ(hserv),
72 fObjName(name),
73 fObjFullName(fullname),
74 fObjClassName(classname)
75 {
76 }
77
79
80 Bool_t CanGetObject() const override { return fHServ!=nullptr; }
81
82 Bool_t GetObject(TObject *&obj, Bool_t &owner) const override
83 {
84 if (!fHServ) return kFALSE;
85 obj = fHServ->GetHistogram(fObjName.Data());
86 if (obj) owner = kTRUE;
87 return obj!=nullptr;
88 }
89
90 const char *GetObjectName() const override { return fObjName.Data(); }
91
92 const char *GetObjectClassName() const override { return fObjClassName.Data(); }
93
94 private:
96 TString fObjName;
97 TString fObjFullName;
98 TString fObjClassName;
99};
100
101
102
103// ********************************************************************
104
107 fServerName(),
108 fPortNumber(0),
109 fBaseName(),
110 fUserPass(),
111 fFilter(),
112 fxStructure(nullptr)
113{
114}
115
120
121void TGo4HServProxy::SetHServConfig(const char *servername,
122 Int_t portnumber,
123 const char *basename,
124 const char *userpass,
125 const char *filter)
126{
127 fServerName = servername;
128 fPortNumber = portnumber;
129 fBaseName = basename;
130 fUserPass = userpass;
131 fFilter = filter;
132}
133
137
139{
140}
141
142
144{
145 return fxStructure != nullptr;
146}
147
152
153std::unique_ptr<TGo4Access> TGo4HServProxy::ProvideAccess(const char *name)
154{
155 TGo4Slot *itemslot = fxStructure ? fxStructure->GetSlot(name) : nullptr;
156 if (!itemslot) return nullptr;
157 return std::make_unique<TGo4HServObjectAccess>(this, itemslot->GetName(), name, itemslot->GetPar("::HistoClass"));
158}
159
160void TGo4HServProxy::WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs)
161{
162}
163
164void TGo4HServProxy::ReadData(TGo4Slot *slot, TDirectory *dir)
165{
166}
167
172
174{
175 return fxStructure ? ClassName() : nullptr;
176}
177
178void TGo4HServProxy::Update(TGo4Slot *slot, Bool_t strong)
179{
180}
181
183{
184 if (fxStructure) {
185 delete fxStructure;
186 fxStructure = nullptr;
187 }
188
189 INTS4* pl_all_h = nullptr;
190 INTS4 l_histos = 0;
191 INTS4 result = f_his_getdir((CHARS *) fServerName.Data(),
193 (CHARS *) fBaseName.Data(),
194 (CHARS *) fUserPass.Data(),
195 (CHARS *) fFilter.Data(),
196 &pl_all_h,
197 &l_histos);
198
199 if(result != 0) return kFALSE;
200
201 fxStructure = new TGo4Slot(nullptr, "HClient","Structure holding slot");
202
203 s_his_head* ps_his_head = (s_his_head*) pl_all_h;
204 for (int i_j = 0; i_j < l_histos; i_j++) {
205 TString HisType = "TH";
206 if (ps_his_head->l_bins_2 > 1) {
207 if(strstr(ps_his_head->c_dtype,"r"))
208 HisType += "2F";
209 else
210 HisType += "2I";
211 } else {
212 if(strstr(ps_his_head->c_dtype,"r"))
213 HisType += "1F";
214 else
215 HisType += "1I";
216 }
217 TGo4Slot *child = fxStructure->GetSlot(ps_his_head->c_name, kTRUE);
218 if (child) {
219 child->SetPar("::HistoClass", HisType.Data());
220 child->SetPar("::Date", ps_his_head->c_data_time_cre);
221 }
222
223 ps_his_head++;
224 }
225
226 free(pl_all_h);
227
228 return kTRUE;
229}
230
231TH1 *TGo4HServProxy::GetHistogram(const char *remotehistoname)
232{
233 s_his_head* ps_his_head = nullptr;
234 INTS4* pl_all = nullptr;
235 INTS4 l_size = 0;
236
237 INTS4 result = f_his_gethis((CHARS *) fServerName.Data(),
239 (CHARS *) fBaseName.Data(),
240 (CHARS *) fUserPass.Data(),
241 (CHARS *) remotehistoname,
242 &ps_his_head,
243 &pl_all,
244 &l_size);
245 if(result != 0) return nullptr; // error this connection
246
247 if(l_size == 0) return nullptr; // no data in histogram at all
248
249 int i1 = ps_his_head->l_bins_1;
250 int i2 = ps_his_head->l_bins_2;
251
252 REAL4* pr_all = strstr(ps_his_head->c_dtype,"r") ? (REAL4 *) pl_all : nullptr;
253 INTS4* pl_start = pl_all;
254
255 TH1 *h1 = nullptr;
256 Double_t entries = 0;
257
258 if(i2==1) { // 1-Dimensional histogram
259 if (pr_all) {
260 h1 = new TH1F(ps_his_head->c_name, ps_his_head->c_name,
261 i1, ps_his_head->r_limits_low, ps_his_head->r_limits_up);
262 for (int k = 0; k < i1; k++) {
263 REAL4 val = *(pr_all++);
264 h1->SetBinContent(k, val);
265 entries+=val;
266 }
267 } else {
268 h1 = new TH1I(ps_his_head->c_name, ps_his_head->c_name,
269 i1, ps_his_head->r_limits_low, ps_his_head->r_limits_up);
270 for (int k = 0; k < i1; k++) {
271 INTS4 val = *(pl_all++);
272 h1->SetBinContent(k, val);
273 entries+=val;
274 }
275 }
276
277 h1->GetYaxis()->SetTitle(ps_his_head->c_lettering_res);
278
279 } else { // 2-dimensional histogram
280 if (pr_all) {
281 h1 = new TH2F(ps_his_head->c_name,ps_his_head->c_name,
282 i1, ps_his_head->r_limits_low, ps_his_head->r_limits_up,
283 i2, ps_his_head->r_limits_low_2, ps_his_head->r_limits_up_2);
284 for (int k = 0; k < i2; k++)
285 for (int k1 = 0; k1 < i1; k1++) {
286 REAL4 val = *(pr_all++);
287 h1->SetBinContent(k1,k,val);
288 entries+=val;
289 }
290 } else {
291 h1 = new TH2I(ps_his_head->c_name,ps_his_head->c_name,
292 i1, ps_his_head->r_limits_low, ps_his_head->r_limits_up,
293 i2, ps_his_head->r_limits_low_2, ps_his_head->r_limits_up_2);
294 for (int k = 0; k < i2; k++)
295 for (int k1 = 0; k1 < i1; k1++) {
296 INTS4 val = *(pl_all++);
297 h1->SetBinContent(k1,k,val);
298 entries+=val;
299 }
300 }
301
302 h1->GetYaxis()->SetTitle(ps_his_head->c_lettering_2);
303 }
304
305 free(pl_start);
306 free(ps_his_head);
307
308 h1->SetDirectory(nullptr);
309 h1->SetEntries(entries);
310 h1->Sumw2();
311
312 h1->GetXaxis()->SetTitle(ps_his_head->c_lettering_1);
313 h1->GetXaxis()->CenterTitle();
314 h1->GetYaxis()->CenterTitle();
315
316 return h1;
317}
TGo4Slot * curSlot() const
Int_t getflag(const char *flagname) override
TGo4LevelIter * subiterator() override
Bool_t next() override
const char * GetClassName() override
const TGo4Slot * fSlot
Int_t GetKind() override
const char * name() override
const char * info() override
TGo4HServIter(const TGo4Slot *slot)
virtual ~TGo4HServIter()
Bool_t isfolder() override
const char * GetObjectClassName() const override
TGo4HServObjectAccess(TGo4HServProxy *hserv, const char *name, const char *fullname, const char *classname)
Bool_t CanGetObject() const override
Returns kTRUE, when object can be directly obtained with GetObject() method.
Bool_t GetObject(TObject *&obj, Bool_t &owner) const override
const char * GetObjectName() const override
TGo4HServProxy * fHServ
Int_t GetObjectKind() const override
void SetHServConfig(const char *servername, Int_t portnumber, const char *basename, const char *userpass, const char *filter)
TH1 * GetHistogram(const char *remotehistoname)
void Update(TGo4Slot *slot, Bool_t strong) override
void Initialize(TGo4Slot *slot) override
void ReadData(TGo4Slot *slot, TDirectory *dir) override
Bool_t RefreshNamesList() override
const char * GetContainedClassName() const override
std::unique_ptr< TGo4Access > ProvideAccess(const char *name) override
TGo4Slot * fxStructure
void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override
TGo4LevelIter * MakeIter() override
void Finalize(TGo4Slot *slot) override
Bool_t HasSublevels() const override
virtual ~TGo4HServProxy()
TGo4ServerProxy()
contained object info
void SetPar(const char *name, const char *value)
Definition TGo4Slot.cxx:586
const char * GetPar(const char *name) const
Definition TGo4Slot.cxx:598
Bool_t HasSlotsSubLevels() const
Definition TGo4Slot.cxx:377
INTS4 f_his_gethis(CHARS *pc_server, INTS4 l_port, CHARS *pc_base, CHARS *pc_access, CHARS *pc_histo, s_his_head **p_head, INTS4 **p_buffer, INTS4 *pl_size)
Definition f_his_hist.c:311
INTS4 f_his_getdir(CHARS *pc_server, INTS4 l_port, CHARS *pc_base, CHARS *pc_access, CHARS *pc_histo, INTS4 **p_buffer, INTS4 *pl_histos)
Definition f_his_hist.c:189
CHARS c_name[64]
Definition s_his_head.h:41
REAL4 r_limits_up_2
Definition s_his_head.h:36
INTS4 l_bins_2
Definition s_his_head.h:23
REAL4 r_limits_low_2
Definition s_his_head.h:35
CHARS c_dtype[4]
Definition s_his_head.h:42
REAL4 r_limits_low
Definition s_his_head.h:27
CHARS c_lettering_res[64]
Definition s_his_head.h:45
INTS4 l_bins_1
Definition s_his_head.h:22
CHARS c_lettering_2[64]
Definition s_his_head.h:47
CHARS c_data_time_cre[28]
Definition s_his_head.h:43
CHARS c_lettering_1[64]
Definition s_his_head.h:46
REAL4 r_limits_up
Definition s_his_head.h:28
int INTS4
Definition typedefs.h:28
char CHARS
Definition typedefs.h:21
float REAL4
Definition typedefs.h:30