HYDRA_development_version
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
honlinemonclientxml.cc
Go to the documentation of this file.
1 #include "honlinemonclientxml.h"
2 
3 #include "honlinemonclientmain.h"
5 #include "honlinemonclientdet.h"
8 #include "honlinemonclienttab.h"
10 #include "honlinemonclienthist.h"
11 
12 #include <cstdlib>
13 
15 
16 /* -------------------------------------------------------------------------- */
18 }
19 /* -------------------------------------------------------------------------- */
21 }
22 /* -------------------------------------------------------------------------- */
23 Bool_t HOnlineMonClientXML::ParseXMLFile(TString filename, HOnlineMonClientMain* pclientmain) {
24  // parse the xml config file given by filename
25  // get the root node 'client' and search
26  // three child nodes 'config', 'MainWindow' and 'detector'
27  // and call parse functions
28  clientmain = pclientmain;
29  TDOMParser *parser = 0;
30  TXMLDocument *xmldoc = 0;
31  TXMLNode *rootnode = 0;
32  TXMLNode *node = 0;
33  Int_t parsecode = -1;
34  currentDetector = 0;
35 
36  parser = new TDOMParser();
37  parsecode = parser->ParseFile(filename);
38 
39  if (parsecode != 0) { // parsing of document failed
40  Printf("XML ERROR: Parsing of XML file '%s' failed. Parse code error %d .", filename.Data(), parsecode);
41  exit(1);
42  }
43 
44  xmldoc = parser->GetXMLDocument();
45 
46  if (xmldoc == 0) { // parsing of document failed
47  Printf("XML ERROR: parsing of xml file '%s' failed.", filename.Data());
48  exit(1);
49  }
50 
51  rootnode = xmldoc->GetRootNode(); // root node should be 'client' node
52 
53  if ( TString(rootnode->GetNodeName()) != "client") { // root node is NOT 'client', error&exit
54  Printf("XML ERROR: xml root node is not 'client'.");
55  exit(1);
56  }
57 
58  node = rootnode->GetChildren();
59 
60  while (node->HasNextNode()) { // get the child nodes ('config','MainWindow','detector') under root node
61  node = node->GetNextNode();
62  if (node->GetNodeType() == TXMLNode::kXMLElementNode) {
63  if( TString(node->GetNodeName()) == "config") {
64  ParseConfigNode(node);
65  }
66  if( TString(node->GetNodeName()) == "MainWindow") {
68  }
69  if( TString(node->GetNodeName()) == "detector") {
70  HOnlineMonClientDet *detector = new HOnlineMonClientDet();
71  ParseDetectorNode(node, detector);
72  clientmain->listDetectors.Add(detector);
73  }
74  }
75  }
76 
77  delete parser; // deletes the xmldocument, too
78  parser = 0;
79 
80  return kTRUE;
81 }
82 /* -------------------------------------------------------------------------- */
85  histo->SetGuiName(currentDetector->GetName());
86 
87  TXMLNode *child = 0;
88  histo->SetActive(kFALSE);
89 
90  if (!node->HasChildren()) {
91  Printf("XML ERROR: parsing histogram node of canvas '%s' failed.", canvas->GetName() );
92  exit(1);
93  }
94 
95  child = node->GetChildren();
96 
97  while (child->HasNextNode()) {
98  child = child->GetNextNode();
99  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
100 
101  if( TString(child->GetNodeName()) == "name") {
102  // name node is last layer, get text inside tag
103  TString histoname = child->GetText();
104  // histoname can contain underscores, then isAlnum() returns false
105  // if(!histoname.IsAlnum()) {
106  if(histoname.Contains(' ') || histoname.Contains('-')) { // histogram name can contain underscores
107  Printf("XML ERROR: parsing histogram node of canvas '%s' failed. Invalid histogram name '%s'.", canvas->GetName(), histoname.Data() );
108  exit(1);
109  }
110  histo->SetRealName(histoname);
111  }
112 
113  if( TString(child->GetNodeName()) == "type") {
114  // title node is last layer, get text inside tag
115  TString value = child->GetText();
116  if (value == "single") {
117  histo->SetType("single");
118  } else {
119  // parse text, delimeter is a ':'
120  // example: <type>array:1:2</type>
121  // indices = -1: draw alle histograms in array
122  TObjArray* ar = value.Tokenize(":");
123  TString p1 = ((TObjString*) ar->At(0))->GetString();
124  TString p2 = ((TObjString*) ar->At(1))->GetString();
125  TString p3 = ((TObjString*) ar->At(2))->GetString();
126  if ( (p1 == "array") && (p2.IsDigit() || (p2.CompareTo("-1")==0)) && (p3.IsDigit() || (p3.CompareTo("-1")==0)) ) {
127  // check ok, values valid
128  histo->SetArrayIndexS(p2.Atoi());
129  histo->SetArrayIndexM(p3.Atoi());
130  delete ar;
131  } else {
132  Printf("XML ERROR: type of histogram '%s' in canvas '%s' is not valid. Must be 'single', or 'array:s:m' with s,m integer values.", histo->GetName(), canvas->GetName() );
133  Printf("found: type: '%s', index1: '%s', index2: '%s'", p1.Data(), p2.Data(), p3.Data());
134  delete ar;
135  exit(1);
136  }
137  }
138 
139  }
140 
141  if( TString(child->GetNodeName()) == "subpad") {
142  // subpad node is last layer, get text inside tag
143  // if canvas not splitted, ignore subpadnumber given
144  // by xml data and set subpadnumber to 0
145 
146  // type checking
147  TString val = child->GetText();
148  if (!val.IsDigit()) {
149  Printf("XML ERROR: subpad number '%s' of histogram '%s' in canvas '%s' is not a valid number", val.Data(), histo->GetName(), canvas->GetName() );
150  exit(1);
151  }
152 
153  if (canvas->IsSplitted()) {
154  histo->SetSubpadnumber(val.Atoi());
155  } else {
156  histo->SetSubpadnumber(0);
157  }
158 
159  TString hname = currentDetector->GetName();
160  hname += "_";
161  hname += canvas->GetName();
162  hname += "_";
163  hname += histo->GetSubpadnumber();
164  hname += "_";
165  hname += histo->GetRealName();
166  histo->SetName(hname);
167  canvas->listHists.Add(histo);
168  }
169  }
170  }
171 
172 }
173 /* -------------------------------------------------------------------------- */
175  // parse Canvases in TabWindows
176 
177  TXMLNode *child = 0;
179 
180 
181 
182  if (!node->HasChildren()) {
183  Printf("XML ERROR: parsing canvas node of window '%s' failed.", window->GetName() );
184  exit(1);
185  }
186 
187  child = node->GetChildren();
188 
189  while (child->HasNextNode()) {
190 
191  child = child->GetNextNode();
192  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
193  if( TString(child->GetNodeName()) == "name") {
194  // name node is last layer, get text inside tag
195  TString canvasname = child->GetText();
196  if(!canvasname.IsAlnum()) {
197  Printf("XML ERROR: parsing canvas node of window '%s' failed. Invalid canvas name '%s'", window->GetName(), canvasname.Data() );
198  exit(1);
199  }
200  canvas->SetName(canvasname);
201  montab->listCanvases.Add(canvas);
202  }
203  if( TString(child->GetNodeName()) == "width") {
204  // width node is last layer, get text inside tag
205 
206  // type checking
207  TString val = child->GetText();
208  if (!val.IsDigit()) {
209  Printf("XML ERROR: width '%s' of canvas '%s' in tab '%s' in window '%s' is not a valid number.", val.Data(), canvas->GetName(), montab->GetName(), window->GetName() );
210  exit(1);
211  }
212 
213  canvas->SetWidth(val.Atoi());
214  }
215  if( TString(child->GetNodeName()) == "height") {
216  // height node is last layer, get text inside tag
217 
218  // type checking
219  TString val = child->GetText();
220  if (!val.IsDigit()) {
221  Printf("XML ERROR: width '%s' of canvas '%s' in tab '%s' in window '%s' is not a valid number.", val.Data(), canvas->GetName(), montab->GetName(), window->GetName() );
222  exit(1);
223  }
224 
225  canvas->SetHeight(val.Atoi());
226  }
227  if( TString(child->GetNodeName()) == "splitted") {
228  // splitted node is last layer, get text inside tag
229 
230  // type checking
231  TString val = child->GetText();
232  val.ToLower();
233 
234  if ( (val != "true") && (val != "false") ) {
235  Printf("XML ERROR: The value '%s' of canvas '%s' in tab '%s' in window '%s' is not valid.", val.Data(), canvas->GetName(), montab->GetName(), window->GetName() );
236  Printf("Must be 'true' or 'false'.");
237  exit(1);
238  }
239 
240  canvas->SetSplitted((val == "true") ? kTRUE : kFALSE);
241  }
242 
243  if( TString(child->GetNodeName()) == "nx") {
244  // nx node is last layer, get text inside tag
245  // ignore value of nx from xml if splitted=false
246  // set nx=0 if splitted=false
247 
248  // type checking
249  TString val = child->GetText();
250  if (!val.IsDigit()) {
251  Printf("XML ERROR: The nx split value '%s' of canvas '%s' in tab '%s' in window '%s' is not a valid number.", val.Data(), canvas->GetName(), montab->GetName(), window->GetName() );
252  exit(1);
253  }
254 
255  canvas->SetNx( (canvas->IsSplitted()) ? val.Atoi() : 0 );
256  }
257 
258  if( TString(child->GetNodeName()) == "ny") {
259  // ny node is last layer, get text inside tag
260  // ignore value of ny from xml if splitted=false
261  // set ny=0 if splitted=false
262 
263  // type checking
264  TString val = child->GetText();
265  if (!val.IsDigit()) {
266  Printf("XML ERROR: The ny split value '%s' of canvas '%s' in tab '%s' in window '%s' is not a valid number.", val.Data(), canvas->GetName(), montab->GetName(), window->GetName() );
267  exit(1);
268  }
269 
270  canvas->SetNy( (canvas->IsSplitted()) ? val.Atoi() : 0 );
271  }
272 
273  if( TString(child->GetNodeName()) == "histogram") {
274  // if node is histogram, go one layer down
275  ParseHistogramNode(child, canvas);
276  }
277  }
278  }
279 }
280 
281 /* -------------------------------------------------------------------------- */
283  // parse Canvases in SimpleWindows
284 
285  TXMLNode *child = 0;
287 
288 
289  if (!node->HasChildren()) {
290  Printf("XML ERROR: parsing canvas node of window '%s' failed.", window->GetName() );
291  exit(1);
292  }
293 
294  child = node->GetChildren();
295 
296  while (child->HasNextNode()) {
297 
298  child = child->GetNextNode();
299  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
300 
301  if( TString(child->GetNodeName()) == "name") {
302  // name node is last layer, get text inside tag
303  TString canvasname = child->GetText();
304  if(!canvasname.IsAlnum()) {
305  Printf("XML ERROR: parsing canvas node of window '%s' failed. Invalid canvas name '%s'", window->GetName(), canvasname.Data() );
306  exit(1);
307  }
308  canvas->SetName(canvasname);
309  window->listCanvases.Add(canvas);
310  }
311 
312  if( TString(child->GetNodeName()) == "title") {
313  // title node is last layer, get text inside tag
314  canvas->SetTitle(child->GetText());
315  }
316 
317  if( TString(child->GetNodeName()) == "width") {
318  // width node is last layer, get text inside tag
319 
320  // type checking
321  TString val = child->GetText();
322  if (!val.IsDigit()) {
323  Printf("XML ERROR: width of canvas '%s' in window '%s' is not a valid number.", canvas->GetName(), window->GetName() );
324  exit(1);
325  }
326 
327  canvas->SetWidth(val.Atoi());
328  }
329 
330  if( TString(child->GetNodeName()) == "height") {
331  // height node is last layer, get text inside tag
332 
333  // type checking
334  TString val = child->GetText();
335  if (!val.IsDigit()) {
336  Printf("XML ERROR: height of canvas '%s' in window '%s' is not a valid number.", canvas->GetName(), window->GetName() );
337  exit(1);
338  }
339 
340  canvas->SetHeight(val.Atoi());
341  }
342 
343  if( TString(child->GetNodeName()) == "splitted") {
344  // splitted node is last layer, get text inside tag
345 
346  // type checking
347  TString val = child->GetText();
348  val.ToLower();
349 
350  if ( (val != "true") && (val != "false") ) {
351  Printf("XML ERROR: The value '%s' of 'splitted' of canvas '%s' in window '%s' is not valid.", val.Data(), canvas->GetName(), window->GetName() );
352  Printf("Must be 'true' or 'false'.");
353  exit(1);
354  }
355 
356  canvas->SetSplitted( (val == "true") ? kTRUE : kFALSE );
357  }
358 
359  if( TString(child->GetNodeName()) == "nx") {
360  // nx node is last layer, get text inside tag
361  // ignore value of nx from xml if splitted=false
362  // set nx=0 if splitted=false
363 
364  // type checking
365  TString val = child->GetText();
366  if (!val.IsDigit()) {
367  Printf("XML ERROR: The nx split value '%s' of canvas '%s' in window '%s' is not a valid number.", val.Data(), canvas->GetName(), window->GetName() );
368  exit(1);
369  }
370 
371  canvas->SetNx( (canvas->IsSplitted()) ? val.Atoi() : 0 );
372  }
373 
374  if( TString(child->GetNodeName()) == "ny") {
375  // ny node is last layer, get text inside tag
376  // ignore value of ny from xml if splitted=false
377  // set ny=0 if splitted=false
378 
379  // type checking
380  TString val = child->GetText();
381  if (!val.IsDigit()) {
382  Printf("XML ERROR: The ny split value '%s' of canvas '%s' in window '%s' is not a valid number.", val.Data(), canvas->GetName(), window->GetName() );
383  exit(1);
384  }
385 
386  canvas->SetNy( (canvas->IsSplitted()) ? val.Atoi() : 0 );
387  }
388 
389  if( TString(child->GetNodeName()) == "histogram") {
390  // if node is window, go one layer down
391  ParseHistogramNode(child, canvas);
392  }
393  }
394  }
395 
396 }
397 /* -------------------------------------------------------------------------- */
399 
401  TXMLNode *child = 0;
402 
403 
404 
405  if (!node->HasChildren()) {
406  Printf("XML ERROR: parsing tab node of window '%s' failed.", window->GetName() );
407  exit(1);
408  }
409 
410  child = node->GetChildren();
411 
412  while (child->HasNextNode()) {
413  child = child->GetNextNode();
414  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
415  if( TString(child->GetNodeName()) == "name") {
416  // name node is last layer, get text inside tag
417  TString tabname = child->GetText();
418  if(!tabname.IsAlnum()) {
419  Printf("XML ERROR: parsing tab node of window '%s' failed. Invalid tab name '%s'", window->GetName(), tabname.Data() );
420  exit(1);
421  }
422  montab->SetName(tabname);
423  window->listTabs.Add(montab);
424  }
425  if( TString(child->GetNodeName()) == "title") {
426  // title node is last layer, get text inside tag
427  montab->SetTitle(child->GetText());
428  }
429  if( TString(child->GetNodeName()) == "canvas") {
430  // if node is window, go one layer down
431  ParseCanvasNode(child, window, montab);
432  }
433 
434  }
435  }
436 }
437 /* -------------------------------------------------------------------------- */
439  Bool_t tabbed = kFALSE;
440  TString name = "";
441  TString title = "";
442  TXMLNode *child = 0;
443 
444  if (!node->HasChildren()) {
445  Printf("XML ERROR: parsing window node of detector '%s' failed.", detector->GetName() );
446  exit(1);
447  }
448 
449  child = node->GetChildren();
450 
451  while (child->HasNextNode()) {
452  child = child->GetNextNode();
453 
454  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
455  if( TString(child->GetNodeName()) == "name") {
456  // name node is last layer, get text inside tag
457  TString windowname = child->GetText();
458  if (!windowname.IsAlnum()) {
459  Printf("XML ERROR: parsing window node of detector '%s' failed. Invalid window name '%s'", detector->GetName(), windowname.Data() );
460  exit(1);
461  }
462  name = windowname;
463  }
464  if( TString(child->GetNodeName()) == "title") {
465  // title node is last layer, get text inside tag
466  title = child->GetText();
467  }
468  if( TString(child->GetNodeName()) == "tabbed") {
469  // tabbed node is last layer, get text inside tag
470  if (TString(child->GetText()) == "true") {
471  // tabbed window
472  tabbed = kTRUE;
474  window->SetName(name);
475  window->SetTitle(title);
476  detector->listWindows.Add(window);
477  } else {
478  // simple window
479  tabbed = kFALSE;
481  window->SetName(name);
482  window->SetTitle(title);
483  detector->listWindows.Add(window);
484  }
485  }
486  if( TString(child->GetNodeName()) == "canvas") {
487  // if node is canvas, go one layer down
488  // is possible in nontabbed window ONLY
489  // so tabbed must be false, otherwise the xml configuration file is incorrect
490  if (tabbed) {
491  Printf("XML ERROR: xml file wrong, found tabbed=true and canvas directly under window.");
492  Printf("Add a tab tag or set tabbed to false.");
493  Printf("Window name: %s", name.Data() );
494  Printf("Detector name: %s", detector->GetName() );
495  exit(1);
496  }
497 
498  ParseCanvasNode(child, (HOnlineMonClientSimpleWin*)detector->listWindows.FindObject(name)); // window is always HOnlineMonClientSimpleWin
499  }
500  if( TString(child->GetNodeName()) == "tab") {
501  // if node is tab, go one layer down
502  ParseTabNode(child, (HOnlineMonClientTabWin*)detector->listWindows.FindObject(name)); // window is always HOnlineMonClientTabWin
503  }
504  }
505  }
506 }
507 /* -------------------------------------------------------------------------- */
509  TXMLNode *child = 0;
510 
511  currentDetector = detector;
512 
513  if (!node->HasChildren()) {
514  Printf("XML ERROR: parsing detector node failed.");
515  exit(1);
516  }
517 
518  child = node->GetChildren();
519 
520  while (child->HasNextNode()) {
521  child = child->GetNextNode();
522 
523  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
524  if( TString(child->GetNodeName()) == "name") {
525  // name node is last layer, get text inside tag
526  TString detname = child->GetText();
527  if (!detname.IsAlnum()) {
528  Printf("XML ERROR: parsing detector node failed. Invalid detector name '%s'", detname.Data());
529  exit(1);
530  }
531 
532  detector->SetName(detname);
533  }
534  if( TString(child->GetNodeName()) == "title") {
535  // title node is last layer, get text inside tag
536  detector->SetTitle(child->GetText());
537  }
538  if( TString(child->GetNodeName()) == "window") {
539  // if node is window, go one layer down
540  ParseWindowNode(child, detector);
541  }
542 
543  }
544  }
545 }
546 /* -------------------------------------------------------------------------- */
548  TXMLNode *child = 0;
549 
550  if (!node->HasChildren()) {
551  Printf("XML ERROR: parsing server node failed.");
552  exit(1);
553  }
554 
555  child = node->GetChildren();
556 
557  while (child->HasNextNode()) {
558  child = child->GetNextNode();
559 
560  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
561  if( TString(child->GetNodeName()) == "host") {
562  // host node is last layer, get text inside tag
563  clientmain->SetServerhost(child->GetText());
564  }
565  if( TString(child->GetNodeName()) == "port") {
566  // port node is last layer, get text inside tag
567 
568  // type checking
569  TString val = child->GetText();
570  if (!val.IsDigit()) {
571  Printf("XML ERROR: The server port is not a valid number.");
572  exit(1);
573  }
574 
575  clientmain->SetServerport(val.Atoi());
576  }
577 
578  }
579 
580  }
581 }
582 /* -------------------------------------------------------------------------- */
584  TXMLNode *child = 0;
585 
586  if (!node->HasChildren()) {
587  Printf("XML ERROR: parsing config node failed.");
588  exit(1);
589  }
590 
591  child = node->GetChildren();
592 
593  while (child->HasNextNode()) {
594  child = child->GetNextNode();
595 
596  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
597  if( TString(child->GetNodeName()) == "server") {
598  // if node is server, go one layer down
599  ParseServerNode(child);
600  }
601  }
602 
603  }
604 }
605 /* -------------------------------------------------------------------------- */
607  TXMLNode *child = 0;
608 
609  if (!node->HasChildren()) {
610  Printf("XML ERROR: parsing MainWindow node failed.");
611  exit(1);
612  }
613 
614  child = node->GetChildren();
615 
616  while (child->HasNextNode()) {
617  child = child->GetNextNode();
618 
619  if (child->GetNodeType() == TXMLNode::kXMLElementNode) {
620  if( TString(child->GetNodeName()) == "name") {
621  // name node is last layer, get text inside tag
622  TString windowname = child->GetText();
623  if (!windowname.IsAlnum()) {
624  Printf("XML ERROR: parsing MainWindow node failed. Invalid MainWindow name '%s'", windowname.Data());
625  exit(1);
626  }
627  clientmainwin->SetName(windowname);
628  }
629 
630  if( TString(child->GetNodeName()) == "title") {
631  // title node is last layer, get text inside tag
632  clientmainwin->SetTitle(child->GetText());
633  }
634 
635  if( TString(child->GetNodeName()) == "width") {
636  // width node is last layer, get text inside tag
637 
638  // type checking
639  TString val = child->GetText();
640  if (!val.IsDigit()) {
641  Printf("XML ERROR: width of MainWindow is not a valid number.");
642  exit(1);
643  }
644 
645  clientmainwin->SetWidth(val.Atoi());
646  }
647 
648  if( TString(child->GetNodeName()) == "height") {
649  // height node is last layer, get text inside tag
650 
651  // type checking
652  TString val = child->GetText();
653  if (!val.IsDigit()) {
654  Printf("XML ERROR: height of MainWindow is not a valid number.");
655  exit(1);
656  }
657 
658  clientmainwin->SetHeight(val.Atoi());
659  }
660 
661  if( TString(child->GetNodeName()) == "snapshotpath") {
662  clientmainwin->SetSnapShotPath(child->GetText());
663  }
664  if( TString(child->GetNodeName()) == "snapshotpathonline") {
665  clientmainwin->fTextSnapshotPathOnline=child->GetText();
666  }
667 
668  if( TString(child->GetNodeName()) == "autosaverate") {
669  TString val = child->GetText();
670  if (!val.IsDigit()) {
671  Printf("XML ERROR: autosaverate of MainWindow is not a valid number.");
672  exit(1);
673  }
674  clientmainwin->SetAutoSaveRate(val.Atoi());
676  }
677  if( TString(child->GetNodeName()) == "autosaverateonline") {
678  TString val = child->GetText();
679  if (!val.IsDigit()) {
680  Printf("XML ERROR: autosaverateonline of MainWindow is not a valid number.");
681  exit(1);
682  }
684  }
685 
686  if( TString(child->GetNodeName()) == "openlist") {
687  TString val = child->GetText();
688 
689  TObjArray* myarguments = val.Tokenize(",");
690  TIterator* myiter = myarguments->MakeIterator();
691  TObjString* stemp = 0;
692  // iterate over the list of arguments
693  while ((stemp = (TObjString*)myiter->Next()) != 0)
694  {
695  TString argument = stemp->GetString();
696  clientmainwin->listOpenDetectors.Add(new TObjString(argument.Data()));
697  }
698  myarguments->Delete();
699  delete myarguments;
700  delete myiter;
701 
702  }
703 
704  if( TString(child->GetNodeName()) == "reconnect") {
705  TString val = child->GetText();
706  if (!val.IsDigit()) {
707  Printf("XML ERROR: reconnect of MainWindow is not a valid number.");
708  exit(1);
709  }
710 
711  clientmainwin->GetMainClient()->SetReconnect(val.Atoi());
712  }
713 
714  }
715 
716  }
717 }
718 
static void SetAutoSaveInterval(Int_t minute)
void SetSubpadnumber(Int_t nr)
HOnlineMonClientDet * currentDetector
void ParseConfigNode(TXMLNode *node)
void SetServerport(Int_t port)
void ParseServerNode(TXMLNode *node)
HOnlineMonClientMain * GetMainClient()
void SetGuiName(TString rname)
void SetActive(Bool_t state)
TGraph p2(xdim, pgrid, respme)
Bool_t ParseXMLFile(TString filename, HOnlineMonClientMain *pclientmain)
void SetType(TString histotype)
void ParseWindowNode(TXMLNode *node, HOnlineMonClientDet *detector)
void ParseCanvasNode(TXMLNode *node, HOnlineMonClientSimpleWin *window)
void ParseHistogramNode(TXMLNode *node, HOnlineMonClientCanvas *canvas)
void SetRealName(TString rname)
void SetReconnect(Int_t recon)
void SetServerhost(TString host)
ClassImp(HOnlineMonClientXML)
void SetSplitted(Bool_t split)
static void SetAutoSaveIntervalOnline(Int_t minute)
void ParseMainWindowNode(TXMLNode *node, HOnlineMonClientMainWin *clientmainwin)
TGraph p1(xdim, pgrid, resplo)
HOnlineMonClientMainWin * clientmainwin
void ParseDetectorNode(TXMLNode *node, HOnlineMonClientDet *detector)
void ParseTabNode(TXMLNode *node, HOnlineMonClientTabWin *window)
HOnlineMonClientMain * clientmain
TGraph p3(xdim, pgrid, resphi)