GSI Object Oriented Online Offline (Go4)  GO4-6.1.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
TGo4MBSViewer.cpp
Go to the documentation of this file.
1 // $Id: TGo4MBSViewer.cpp 3344 2021-10-18 13:41:52Z linev $
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 "TGo4MBSViewer.h"
15 
16 #include <iostream>
17 
18 #include "TH1.h"
19 
20 #include "TGo4Slot.h"
21 #include "TGo4BrowserProxy.h"
22 #include "TGo4QSettings.h"
23 
24 #include <QTimer>
25 #include <QDateTime>
26 #include <QButtonGroup>
27 #include <QMovie>
28 
29 extern "C"
30 {
31  #include "f_stccomm.h"
32  #include "f_mbs_status.h"
33  #include "f_ut_seg_show.h"
34 }
35 
36 
37 TGo4MBSViewer::TGo4MBSViewer(QWidget *parent, const char* name) :
38  QGo4Widget(parent,name),
39  fxRunMovie(0)
40 {
41  setupUi(this);
42 
43  QObject::connect(FullPrintButton, SIGNAL(clicked()), this, SLOT(PrintStatus()));
44  QObject::connect(MonitorButton, SIGNAL(clicked()), this, SLOT(TimerStart()));
45  QObject::connect(StopButton, SIGNAL(clicked()), this, SLOT(TimerStop()));
46  QObject::connect(RefreshButton, SIGNAL(clicked()), this, SLOT(RefreshButtonClick()));
47  QObject::connect(NodeEdit, SIGNAL(returnPressed()), this, SLOT(NodeEditEnter()));
48  QObject::connect(NodeEdit, SIGNAL(textChanged(QString)), this, SLOT(NodeChanged(QString)));
49  QObject::connect(TrendCheck, SIGNAL(toggled(bool)), this, SLOT(TrendSwitched(bool)));
50  QObject::connect(FrequencyBox, SIGNAL(valueChanged(int)), this, SLOT(FrequencyBox_valueChanged(int)));
51  QObject::connect(MoreBox, SIGNAL(toggled(bool)), this, SLOT(MoreBox_toggled(bool)));
52  QObject::connect(TrendBinsBox, SIGNAL(valueChanged(int)), this, SLOT(TrendBinsBox_valueChanged(int)));
53 
54 
55 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
56  RateEvents->setDigitCount(7);
57  SumEvents->setDigitCount(12);
58  RateBytes->setDigitCount(7);
59  SumBytes->setDigitCount(8);
60  ServerPercent->setDigitCount(3);
61  SumBytesFile->setDigitCount(9);
62 #else
63  RateEvents->setNumDigits(7);
64  SumEvents->setNumDigits(12);
65  RateBytes->setNumDigits(7);
66  SumBytes->setNumDigits(8);
67  ServerPercent->setNumDigits(3);
68  SumBytesFile->setNumDigits(9);
69 #endif
70 
71  fbIsMonitoring=false;
72  fbWarningState=false;
73  fbRunning=false;
74  fbGetSetup=false;
75  fbGetSetML=false;
76  fbGetSetMO=false;
77  fbTrending=false;
78  fbTrendingInit=true;
79  fbShowMore=false;
80  fbSingleRefresh=false;
81  fbTrendingForward=false; // define moving direction of trend histograms
82  fiTrendBins=1000;
83  // now overwrite some settings:
86  TrendCheck->setChecked(fbTrending);
88  TrendBinsBox->setValue(fiTrendBins);
90  MoreBox->setChecked(fbShowMore);
91  FrequencyBox->setValue(go4sett->getMbsMonitorFreq());
93 
94  StateGroup = new QButtonGroup(this);
95  StateGroup->setExclusive(false);
96  StateGroup->addButton(StatusRadio, 0);
97  StateGroup->addButton(SetupRadio, 1);
98  StateGroup->addButton(SetupMLRadio, 2);
99  StateGroup->addButton(SetupMORadio, 3);
100  StateGroup->button(0)->setChecked(true);
101  connect(StateGroup, SIGNAL(buttonClicked(int)), this, SLOT(StateGroup_clicked(int)));
102 
103  fxHistoAccessName = "nosuchobject";
104  fxHistokBAccessName = "nosuchobject";
105  fxHistoEvRatioAccessName = "nosuchobject";
106  fxServerLabel = "NO SERVER";
107  fxTimer = new QTimer(this);
108  fxMovieResetTimer = new QTimer(this);
109  QString moviepath = ":/icons/mbslogorun.gif";
110  fxRunMovie= new QMovie(moviepath);
111  memset(&fxDaqStat, 0, sizeof(fxDaqStat));
116  fiLastEventNum=0;
117  fiLastDataNum=0;
118  fxDeltaClock.start();
119  connect( fxTimer, SIGNAL(timeout()), this, SLOT(Refresh()) );
120  connect( fxMovieResetTimer, SIGNAL(timeout()), this, SLOT(ResetRunIcon()) );
121  Display();
122 
123 }
124 
126 {
127  delete fxRunMovie;
128 }
129 
130 
132 {
133  // save settings:
138  go4sett->setMbsMonitorFreq(FrequencyBox->value());
141 }
142 
143 
145 {
146  fbIsMonitoring=true;
147  fbTrendingInit=true;
148  fiLastEventNum=0;
149  fiLastDataNum=0;
151  Refresh();
152  fxTimer->start(1000*FrequencyBox->value());
153  Display();
154  StoreSettings();
155 }
156 
157 
159 {
160  fbIsMonitoring=false;
161  fxTimer->stop();
162  StartMovieReset();
163  Display();
164  StoreSettings();
165 }
166 
167 
169 {
170  setWindowTitle("MBS Status - "+NodeEdit->text());
171  if(!fbSingleRefresh)
172  {
173  NodeEdit->setEnabled(!fbIsMonitoring);
174  MonitorButton->setEnabled(!fbIsMonitoring);
175  StopButton->setEnabled(fbIsMonitoring);
176  FrequencyBox->setEnabled(!fbIsMonitoring);
177  //TrendCheck->setEnabled(!fbIsMonitoring);
178  TrendBinsBox->setEnabled(!fbTrending);
179  }
180  MoreFrame->setVisible(fbShowMore);
181  SumEvents->display((double) fxDaqStat.bl_n_events);
182  //RateEvents->display((double) fxDaqStat.bl_r_events);
183  RateEvents->display((double) fiCalcedEventRate);
184  SumBytes->display((double) ((unsigned int) fxDaqStat.bl_n_kbyte/1024));
185  //RateBytes->display((double) fxDaqStat.bl_r_kbyte);
186  RateBytes->display((double) fiCalcedDataRate);
187  DateLabel->setText(fxRefTime);
188  SumBytesFile->display((double) ((unsigned int) fxDaqStat.bl_n_kbyte_file/1024));
189 
191  OutfileLabel->setText(fxDaqStat.c_file_name);
192  else
193  OutfileLabel->setText("- file closed -") ;
194 
195  ServerLabel->setText(fxServerLabel) ;
196  ServerPercent->display((int) fiEvRatio);
197  if(fbRunning && !fbWarningState){
198  RunPix->clear();
199  RunPix->setMovie(fxRunMovie);
200  fxRunMovie->start();
201  }
202  else{
203  RunPix->setWindowIcon(QIcon( ":/icons/mbsbutton.png" ));
204  if(fxRunMovie) fxRunMovie->stop();
205  }
206  WarnPix->setVisible(fbWarningState);
207 
208  // put here enable/disable setup buttons:
209  SetupRadio->setEnabled(fxDaqStat.bh_setup_loaded);
210  SetupMLRadio->setEnabled(fxDaqStat.bh_set_ml_loaded);
211  SetupMORadio->setEnabled(fxDaqStat.bh_set_mo_loaded);
212  if(fbWarningState)
213  std::cerr <<fxMessage.toLatin1().constData() << std::endl;
214 
215  ensurePolished();
216  update();
217  show();
218 }
219 
220 
222 {
223  // for the ratemeter and running state, we always get status block
224  if(fxNode.isEmpty()) return;
225  int state=f_mbs_status(const_cast<char*>(fxNode.toLatin1().constData()), &fxDaqStat);
226  if(state!=STC__SUCCESS) {
227  fxMessage = QString("MBS Status refresh node %1 returned error %2 at ").arg(fxNode).arg(state);
228  fxMessage += QDateTime::currentDateTime().toString();
229  fbWarningState = true;
230  } else
231  fbWarningState = false;
232  //fxRefTime=QDateTime::currentDateTime ().toString();
235  int deltat=FrequencyBox->value();
236  int numperiods=1;
237  int deltamilsecs=deltat*1000.0; // default
238  if(fbIsMonitoring)
239  {
240  // only in monitoring mode: calculate rates ourselves, independent of mbs ratemter:
241  // NEW: first check real time diff since last call and correct rates:
242  deltamilsecs=fxDeltaClock.elapsed();
243  //std::cout <<"******* found ms:"<<deltamilsecs << std::endl;
244  fxDeltaClock.restart();
245  int deltasecs=deltamilsecs/1000;
246  if(!fbTrendingInit && (deltasecs>=deltat*2))
247  //if((deltasecs>=deltat*2)) // this one was for testing JAM
248  {
249  std::cout <<"Warning: MBS monitor found measuring interval:"<<deltasecs<<" s ("<<deltamilsecs <<" ms) exceeding timer period "<<deltat<<" s" << std::endl;
250  std::cout <<" Maybe timer was skipped?" << std::endl;
251  deltat=deltasecs;
252  numperiods=(deltat/ (int) FrequencyBox->value());
253  std::cout <<" Correcting number of measuring periods to:"<<numperiods << std::endl;
254  }
255  if(fiLastEventNum && deltamilsecs)
257  else
260 
261  if(fiLastDataNum && deltamilsecs)
262  {
264  fiCalcedDataRate = 1000.*fiDataDelta/deltamilsecs;
265  }
266  else
267  {
268  fiDataDelta = 0;
269  fiCalcedDataRate = 0;
270  }
272  // std::cout <<"Data rate:"<<fiCalcedDataRate << std::endl;
273  // std::cout <<"Data total:"<<fiLastDataNum << std::endl;
274  }
275  else
276  {
277  // single refresh on button press: use momentary mbs rate
280  }
281 
283  {
284  fxServerLabel = QString("streamserver %1%2").arg((int)(fxDaqStat.bl_strsrv_scale!=0 ? 100/fxDaqStat.bl_strsrv_scale : 0)).arg("%");
285 
286  if(fbIsMonitoring)
287  {
288  // own rate calculation for monitoring on:
289  if(fiLastServDataNum && deltamilsecs)
290  {
292  fiCalcedServDataRate=1000.*fiServDataDelta/deltamilsecs;
293  }
294  else
295  {
296  fiServDataDelta=0;
298  }
299  // std::cout <<"Streamserver rate:"<<fiCalcedServDataRate << std::endl;
300  // std::cout <<"Streamserver data:"<<fxDaqStat.bl_n_strserv_kbytes << std::endl;
301  // std::cout <<"Streamserver last data:"<<fiLastServDataNum << std::endl;
302  // std::cout <<"dt:"<<deltat << std::endl;
304  }
305  else
306  {
307  // single refresh: use ratio from current mbs calculated rates
309  fiDataDelta=0;
310  }
311  //fiEvRatio= (fiCalcedDataRate!=0 ? 100* fiCalcedServDataRate /fiCalcedDataRate : 0);
312  //int curentratio=(fiCalcedDataRate!=0 ? 100* fiCalcedServDataRate /fiCalcedDataRate : 0);
314  //std::cout<<"Eventratio="<<fiEvRatio<<" , currentratio="<<curentratio<< std::endl;
315  }
317  {
318  // calculate momentary rate for eventserver:
319 
320  fxServerLabel = QString("eventserver %1 %2%3")
321  .arg(fxDaqStat.bh_event_serv_ready ? "R" : "S")
322  .arg((int)(fxDaqStat.bl_evtsrv_scale!=0 ? 100/fxDaqStat.bl_evtsrv_scale : 0)).arg("%");
323  if(fbIsMonitoring)
324  {
325  // own rate calculation for monitoring on:
326  if(fiLastServDataNum && deltamilsecs)
327  {
329  fiCalcedServDataRate=1000.0*fiServDataDelta/deltamilsecs;
330  }
331  else
332  {
333  fiServDataDelta=0;
335  }
337  }
338  else
339  {
340  // single refresh: use ratio from current mbs calculated rates
342  fiDataDelta=0;
343  }
344  //fiEvRatio= (fiCalcedDataRate!=0 ? 100* fiCalcedServDataRate /fiCalcedDataRate : 0);
346 
347  }
348  else
349  {
350  fxServerLabel="NO SERVER";
351  fiEvRatio=0;
352  }
353 
355  {
356  while((numperiods--) > 0)
357  {
358  UpdateTrending(); // use same values for all skipped periods
359  //std::cout <<"Update trending with numperiods:"<<numperiods << std::endl;
360  }
361  }
362  StartMovieReset();
363  Display();
364  //f_ut_seg_show (&fxDaqStat,0,0,0);
365 }
366 
367 
369 {
370  Refresh();
371 }
372 
373 
374 
375 void TGo4MBSViewer::NodeChanged( const QString & txt )
376 {
377  fxNode = txt.trimmed();
378 }
379 
380 
382 {
383  if(fbWarningState)
384  {
385  std::cout <<fxMessage.toLatin1().constData() << std::endl;
386  }
387  else
388  {
389  std::cout <<"\n------------------------------------------------" << std::endl;
390  if(StateGroup->button(0)->isChecked())
391  f_ut_seg_show (&fxDaqStat,0,0,0);
392  if(fbGetSetup)
393  f_ut_seg_show (0,&fxSetup,0,0);
394  else if(fbGetSetML)
395  f_ut_seg_show (0,0,&fxSetupML,0);
396  else if(fbGetSetMO)
397  f_ut_seg_show (0,0,0,&fxSetupMO);
398  }
399 
400 }
401 
403 {
404  // only one of these can be enabled
405  fbGetSetup=StateGroup->button(1)->isChecked();
406  fbGetSetML=StateGroup->button(2)->isChecked();
407  fbGetSetMO=StateGroup->button(3)->isChecked();
408  // if status is wanted, do not print setups:
409  // if(fbGetSetup=StateGroup->button(0)->isChecked()){
410  // fbGetSetup=false;
411  // fbGetSetML=false;
412  // fbGetSetMO=false;
413  // }
414 }
415 
416 
418 {
419  if(fxNode.isEmpty()) return;
420  if(fbGetSetup)
421  {
422  // request setup if selected
423 
424  int state=f_mbs_setup(const_cast<char*>(fxNode.toLatin1().constData()), &fxSetup);
425  if(state!=0)
426  {
427  fxMessage = QString("MBS Setup refresh returned error %1 at %2").arg(state).arg(QDateTime::currentDateTime().toString());
428  fbWarningState = true;
429  }
430  else
431  fbWarningState=false;
432  }
433 
434  else if(fbGetSetML)
435  {
436  // request setup multilayer if selected
437  int state=f_mbs_ml_setup(const_cast<char*>(fxNode.toLatin1().constData()), &fxSetupML);
438  if(state!=0)
439  {
440  fxMessage = QString("MBS Setup ML refresh returned error %1 at %2").arg(state).arg(QDateTime::currentDateTime().toString());
441  fbWarningState = true;
442  }
443  else
444  fbWarningState = false;
445  }
446  else if(fbGetSetMO)
447  {
448  // request setup MO if selected
449  int state=f_mbs_mo_setup(const_cast<char*>(fxNode.toLatin1().constData()), &fxSetupMO);
450  if(state!=0)
451  {
452  fxMessage = QString("MBS Setup MO refresh returned error %1 at %2").arg(state).arg(QDateTime::currentDateTime().toString());
453  fbWarningState = true;
454  }
455  else
456  fbWarningState = false;
457  }
458 
459  else {}
460  RefreshButtonClick(); // always get new status structure and display on window
461  ShowStatus();
462 }
463 
464 
466 {
467  if(!fbTrending) fbTrendingInit=true;
468  fbTrending=on;
470  Display();
471 }
472 
473 
475 {
476  TrendHisto(fxHistoAccessName,"MbsEventRate","Events/s",fiCalcedEventRate);
477  TrendHisto(fxHistokBAccessName,"MbsDataRate","kB/s",fiCalcedDataRate);
478  TrendHisto(fxHistoEvRatioAccessName,fxServerLabel.section(' ',0,0),"% Events served",fiEvRatio);
479  fbTrendingInit=false;
480 }
481 
482 
483 void TGo4MBSViewer::IncTrending( TH1 * histo, int value, bool forwards )
484 {
485  if(histo==0) return;
486  int bins=histo->GetNbinsX();
487  //bool forwards=true;
488  int j,dj;
489  if(forwards)
490  dj=-1;
491  else
492  dj=+1;
493  for(int i=0;i<bins;i++)
494  {
495  if(forwards)
496  j=bins-i;
497  else
498  j=i;
499  int oldval=histo->GetBinContent(j+dj);
500  histo->SetBinContent(j,oldval);
501  }
502  histo->SetBinContent(j+dj,value);
503 }
504 
505 
507 {
508  fbTrendingInit=true;
509 }
510 
511 
512 TH1* TGo4MBSViewer::TrendHisto( QString & refname ,const QString & name, const QString & title, int value)
513 {
514  TH1* his=0;
515  TGo4Slot* histoslot=0;
516  if(!fbTrendingInit) histoslot=Browser()->BrowserSlot(refname.toLatin1());
517  if(histoslot==0)
518  {
519  Axis_t lo,up;
521  {
522  lo=0;
523  up=1*fiTrendBins*FrequencyBox->value();
524  }
525  else
526  {
527  lo=-1*fiTrendBins*FrequencyBox->value();
528  up=0;
529  }
530  his=new TH1F(name.toLatin1(), title.toLatin1() ,fiTrendBins,lo,up);
531  TAxis* xax=his->GetXaxis();
532  xax->SetTitle("s");
533  xax->CenterTitle();
534  //xax->SetLimits(0,lo,up);
535 
536  TGo4Slot* hisdataslot=Browser()->DataSlot(refname.toLatin1());
537  if(hisdataslot)
538  {
539  hisdataslot->AssignObject(his,true);
540  }
541  else
542  {
543  refname=Browser()->SaveToMemory("Mbs", his, true);
544  }
545  histoslot=Browser()->BrowserSlot(refname.toLatin1());
546  }
547  else
548  {
549  his=dynamic_cast<TH1*>(histoslot->GetAssignedObject());
550  }
551  IncTrending(his,value,fbTrendingForward);
552  if(histoslot)
553  {
554  histoslot->ForwardEvent(histoslot, TGo4Slot::evObjUpdated);
555  Browser()->SetItemTimeDate(histoslot);
556  }
557  return his;
558 }
559 
560 
562 {
563  fbShowMore=on;
565  Display();
566 }
567 
568 
570 {
571  fiTrendBins=i;
572  fbTrendingInit=true;
573 }
574 
575 
577 {
578  bool trend=fbTrending;
579  bool monitoring=fbIsMonitoring;
580  fbTrending=false; // avoid to put direct refresh into the trending histogram
581  fbIsMonitoring=false; // avoid confuse rate calculations
582  fbSingleRefresh=true; // avoid changing state of control buttons
583  Refresh();
584  fbSingleRefresh=false;
585  fbIsMonitoring=monitoring;
586  fbTrending=trend;
587 
588 }
589 
590 
591 void TGo4MBSViewer::SetNode( const QString & txt )
592 {
593  fxNode=txt;
594  NodeEdit->setText(txt);
595 }
596 
597 
599 {
600  fbRunning=false;
601  Display();
602 }
603 
604 
606 {
607  if(!fbIsMonitoring) {
608  fxMovieResetTimer->setSingleShot(true);
609  fxMovieResetTimer->start(2000);
610  }
611 }
int fiCalcedServDataRate
QString fxHistoEvRatioAccessName
INTU4 bl_r_events
Definition: s_daqst.h:68
virtual void StateGroup_clicked(int id)
QMovie * fxRunMovie
virtual void TimerStop()
QTimer * fxTimer
TString SaveToMemory(const char *pathname, TObject *obj, Bool_t ownership, Bool_t overwrite=kFALSE)
void setMbsMonitorMonitorActive(bool on=true)
void setMbsMonitorTrend(bool on=true)
QString fxServerLabel
INTU4 bl_r_kbyte
Definition: s_daqst.h:71
#define SYS__stream_serv
Definition: sys_def.h:44
INTU4 bl_evtsrv_scale
Definition: s_daqst.h:127
virtual void MoreBox_toggled(bool on)
virtual void StartMovieReset()
INTU4 bl_strsrv_scale
Definition: s_daqst.h:121
virtual void Display()
#define SYS__event_serv
Definition: sys_def.h:37
INTU4 bh_set_ml_loaded
Definition: s_daqst.h:54
INTU4 bl_n_kbyte
Definition: s_daqst.h:61
virtual void PrintStatus()
INTU4 bl_n_kbyte_file
Definition: s_daqst.h:67
virtual void TrendSwitched(bool on)
TH1 * TrendHisto(QString &refname, const QString &name, const QString &title, int value)
INTS4 f_mbs_status(CHARS *c_node, s_daqst *ps_daqst)
Definition: f_mbs_status.c:52
QString fxHistoAccessName
Definition: TGo4MBSViewer.h:97
QString fxMessage
virtual void StoreSettings()
virtual void FrequencyBox_valueChanged(int)
INTS4 f_mbs_mo_setup(CHARS *c_node, s_set_mo *ps_set_mo)
Definition: f_mbs_status.c:172
virtual void TrendBinsBox_valueChanged(int i)
INTU4 bh_setup_loaded
Definition: s_daqst.h:53
bool fbTrendingForward
Definition: TGo4MBSViewer.h:93
TGo4BrowserProxy * Browser()
Definition: QGo4Widget.cpp:224
QButtonGroup * StateGroup
#define STC__SUCCESS
Definition: f_stccomm.h:369
INTU4 bl_n_strserv_kbytes
Definition: s_daqst.h:65
INTU4 bh_acqui_running
Definition: s_daqst.h:51
INTU4 bl_n_events
Definition: s_daqst.h:58
TGo4Slot * DataSlot(const char *item)
virtual void UpdateTrending()
s_set_mo fxSetupMO
Definition: TGo4MBSViewer.h:91
TObject * GetAssignedObject()
Definition: TGo4Slot.cxx:370
INTS4 f_mbs_ml_setup(CHARS *c_node, s_set_ml *ps_set_ml)
Definition: f_mbs_status.c:129
QElapsedTimer fxDeltaClock
virtual void IncTrending(TH1 *histo, int value, bool forwards)
virtual void SetNode(const QString &txt)
INTU4 bh_event_serv_ready
Definition: s_daqst.h:120
INTS4 f_mbs_setup(CHARS *c_node, s_setup *ps_setup)
Definition: f_mbs_status.c:84
virtual void RefreshButtonClick()
bool getMbsMonitorTrend()
bool getMbsMonitorMore()
INTU4 bl_r_strserv_kbytes
Definition: s_daqst.h:76
virtual void Refresh()
void setMbsMonitorNode(const QString &name)
TGo4QSettings * go4sett
QString fxHistokBAccessName
Definition: TGo4MBSViewer.h:94
TGo4MBSViewer(QWidget *parent=0, const char *name=0)
virtual void NodeEditEnter()
TGo4Slot * BrowserSlot(const char *item)
INTS4 l_open_file
Definition: s_daqst.h:90
INTS4 f_ut_seg_show(s_daqst *ps_daqst, s_setup *ps_setup, s_set_ml *ps_set_ml, s_set_mo *ps_set_mo)
Definition: f_ut_seg_show.c:47
s_set_ml fxSetupML
bool getMbsMonitorBackwardsTrending()
INTU4 bh_set_mo_loaded
Definition: s_daqst.h:55
QString getMbsMonitorNode()
virtual ~TGo4MBSViewer()
INTU4 bh_running[SYS__N_MAX_PROCS]
Definition: s_daqst.h:103
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=0)
Definition: TGo4Slot.cxx:581
virtual void ResetRunIcon()
s_daqst fxDaqStat
Bool_t AssignObject(TObject *obj, Bool_t owner)
Definition: TGo4Slot.cxx:358
CHARS c_file_name[256]
Definition: s_daqst.h:162
QTimer * fxMovieResetTimer
void setMbsMonitorBins(int num)
void setMbsMonitorBackwardsTrending(bool on=true)
INTU4 bl_r_evserv_kbytes
Definition: s_daqst.h:74
virtual void NodeChanged(const QString &txt)
virtual void TimerStart()
void setMbsMonitorFreq(int secs)
CHARS c_date[SBS__STR_LEN_64]
Definition: s_daqst.h:148
static void SetItemTimeDate(TGo4Slot *slot, const char *stime=0, const char *sdate=0)
void setMbsMonitorMore(bool on=true)
bool fbSingleRefresh
Definition: TGo4MBSViewer.h:87
INTU4 bl_n_evserv_kbytes
Definition: s_daqst.h:63
virtual void ShowStatus()
QString fxRefTime