Diana Software
QGDMainFrame.cc
Go to the documentation of this file.
1 #include <TApplication.h>
2 #include <TGClient.h>
3 #include <TCanvas.h>
4 #include <TF1.h>
5 #include <TObjString.h>
6 #include <TRandom.h>
7 #include <TGButton.h>
8 #include <TRootEmbeddedCanvas.h>
9 #include "QGDMainFrame.hh"
10 #include "QGDReceiver.hh"
11 #include "QGDUtils.hh"
12 #include "QRunData.hh"
13 #include "QPulse.hh"
14 #include "TMap.h"
15 #include <sstream>
16 
17 using namespace Diana;
18 using namespace std;
19 
21 
22 
23 QGDMainFrame::QGDMainFrame(const TGWindow *p,UInt_t w,UInt_t h) : TGMainFrame(p,w,h)
24 {
25  fEcanvas = new TRootEmbeddedCanvas ("Ecanvas",this,w,h);
26  AddFrame(fEcanvas, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10,10,10,1));
27  TGHorizontalFrame *hframe=new TGHorizontalFrame(this, 200,40);
28  TGTextButton *exit = new TGTextButton(hframe,"&Exit");
29  exit->Connect("Clicked()","QGDMainFrame",this,"Exit()");
30  hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
31  AddFrame(hframe,new TGLayoutHints(kLHintsCenterX,2,2,2,2));
32 
33  SetWindowName("DianaGUI (driver)");
34  MapSubwindows();
35  Resize(GetDefaultSize());
36  MapWindow();
37  Start();
38 }
39 
41 {
42  Stop();
43 }
44 
45 
47 {
48  Stop();
49  gApplication->Terminate(0);
50 }
51 
53 {
54  std::string sstatus = "";
55  switch(status) {
57  sstatus = "Status: STOP";
58  break;
60  sstatus = "Status: WAITCLIENT";
61  break;
63  sstatus = "Status: CONNECTED";
64  break;
66  default:
67  sstatus = "Status: UNKNOWN";
68  break;
69  }
70  // for now cout, in future display in the GUI
71  cout<<sstatus<<endl;
72 }
73 
75 {
76  std::vector<QGDCommand::Id>::const_iterator avCom = cmdList.fCommands.begin();
77  cout<<endl;
78  cout<<"Avalaible commands:"<<endl;
79  while(avCom != cmdList.fCommands.end()) {
80  cout<<" ["<<*avCom<<"] "<<QGDUtils::IdToString(*avCom)<<endl;
81  avCom++;
82  }
83  cout<<endl;
84  cout<<" Command > ";
85 
86  QGDCommand cmd;
87  int cmdInt;
88  cin>>cmdInt;
89  cmd.fCommandId = (QGDCommand::Id)cmdInt;
90  if(cmd.fCommandId == QGDCommand::CmdJump) {
91  cout<<" EventNumber > ";
92  std::string evnum; cin>>evnum;
93  cmd.fParameter1.fValue = evnum;
95  } else if(cmd.fCommandId == QGDCommand::CmdListPar) {
96  cout<<" Module index > ";
97  std::string modInd; cin>>modInd;
98  cmd.fParameter1.fValue = modInd;
100  } else if(cmd.fCommandId == QGDCommand::CmdChangePar) {
101  cout<<" Module index > ";
102  std::string modInd; cin>>modInd;
103  cmd.fParameter1.fValue = modInd;
105  cout<<" Parameter name > ";
106  std::string parName; cin>>parName;
107  cout<<" Parameter value > ";
108  std::string parValue; cin>>parValue;
109  cmd.fParameter2.fName = parName;
110  cmd.fParameter2.fValue = parValue;
111  } else if(cmd.fCommandId == QGDCommand::CmdSendData) {
112  cout<<" Data type (QGlobal, QEvent, QRunData) > ";
113  std::string parValue; cin>>parValue;
114  cmd.fParameter1.fValue = parValue;
115  }
116  return cmd;
117 }
118 
120 {
121  cout<<" List of enabled modules:"<<endl;
122  for(size_t i = 0; i < modList.fModules.size(); i++) {
123  cout<<" ["<<i<<"] "<<modList.fModules[i]<<endl;
124  }
125 }
126 
128 {
129  cout<<" List of parameters of current module:"<<endl;
130  for(size_t i = 0; i < paramList.fParameters.size(); i++) {
131  cout<<" ["<<i<<"] "
132  <<paramList.fParameters[i].fName<<": "
133  <<paramList.fParameters[i].fValue
134  <<" ("<<char(paramList.fParameters[i].fType)<<")"<<endl;
135  }
136 }
137 void QGDMainFrame::Display(TObject* obj)
138 {
139  if(dynamic_cast<TMap*>(obj) && strcmp(obj->GetName(),"QEvent") == 0 )
140  {
141  TMap* qev = (TMap*)obj;
142  TMapIter it(qev);
143  TObject* key = 0;
144  while((key = it.Next())) {
145  QObject* qobj = dynamic_cast<QObject*>(qev->GetValue(key));
146  TObjString* lab = dynamic_cast<TObjString*>(key);
147  cout<<" Info : Arrived "<<lab->GetString()<<endl;;
148  if(QPulse* pulse = dynamic_cast<QPulse*>(qobj)) {
149  QVector samples = pulse->GetSamples();
150  samples.Draw();
151  TCanvas *fCanvas = fEcanvas->GetCanvas();
152  fCanvas->cd();
153  fCanvas->Update();
154  cout<<" Info : Pulse displayed"<<std::endl;
155  } else if(qobj){
156  stringstream str;
157  qobj->Dump(str);
158  cout<<" Info : Dump() :"<<str.str()<<endl;
159  }
160  }
161  } else if(dynamic_cast<TMap*>(obj) && strcmp(obj->GetName(),"QGlobal") == 0 ) {
162  TMap* qev = (TMap*)obj;
163  TMapIter it(qev);
164  TObject* key = 0;
165  while((key = it.Next())) {
166  QObject* qobj = dynamic_cast<QObject*>(qev->GetValue(key));
167  TObjString* lab = dynamic_cast<TObjString*>(key);
168  cout<<" Info : Arrived "<<lab->GetString()<<endl;;
169  if(QPulse* pulse = dynamic_cast<QPulse*>(qobj)) {
170  QVector samples = pulse->GetSamples();
171  samples.Draw();
172  TCanvas *fCanvas = fEcanvas->GetCanvas();
173  fCanvas->cd();
174  fCanvas->Update();
175  cout<<" Info : Pulse displayed"<<std::endl;
176  } else if(qobj){
177  stringstream str;
178  qobj->Dump(str);
179  cout<<" Info : Dump() :"<<str.str()<<endl;
180  }
181  }
182  } else if (QRunData* runData = dynamic_cast<QRunData*>(obj)) {
183  cout<<" Info : Arrived QRunData"<<endl;
184  cout<<" Run : "<<runData->fNumber<<endl;
185  } else if(QObject* qobj = dynamic_cast<QObject*>(obj)){
186  stringstream strstr;
187  qobj->Dump(strstr);
188  cout<<" Info : Arrived QObject"<<endl;
189  cout<<" Dump : "<<strstr.str()<<endl;
190  } else {
191  cout<<"Error : something not recognized arrived"<<endl;
192  }
193  }
ClassImp(QGDMainFrame)
std::vector< QGDCommand::Id > fCommands
Definition: QGDInclude.hh:54
QGDParameter fParameter1
Definition: QGDInclude.hh:45
QGDParameter fParameter2
Definition: QGDInclude.hh:46
Main window of the interactive gui.
Definition: QGDMainFrame.hh:17
void Display(TObject *)
TRootEmbeddedCanvas * fEcanvas
Definition: QGDMainFrame.hh:32
virtual ~QGDMainFrame()
Definition: QGDMainFrame.cc:40
void DisplayModuleList(const QGDModuleList &modList)
void NotifyReceiverStatus(QGDReceiver::Status status)
Definition: QGDMainFrame.cc:52
QGDMainFrame(const TGWindow *p, UInt_t w, UInt_t h)
Definition: QGDMainFrame.cc:23
virtual QGDCommand GetCommand(const QGDCommandList &cmdList)
Definition: QGDMainFrame.cc:74
void DisplayModuleParameters(const QGDModuleParameterList &paramList)
void Start(Int_t port=1130)
std::vector< std::string > fModules
Definition: QGDInclude.hh:61
std::vector< QGDParameter > fParameters
Definition: QGDInclude.hh:67
std::string fName
Definition: QGDInclude.hh:19
ParType fType
Definition: QGDInclude.hh:21
std::string fValue
Definition: QGDInclude.hh:20
Raw event: sampled waveform.
Definition: QPulse.hh:22
Basic run based info.
Definition: QRunData.hh:20
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...
std::string IdToString(QGDCommand::Id id)
Definition: QGDUtils.cc:3
std::string Resize(const std::string &s, size_t len)
resize a string to len, adding spaces if necessary