QXRD  0.11.16
qxrdacquisitionextrainputsdialog.cpp
Go to the documentation of this file.
2 #include "ui_qxrdacquisitionextrainputsdialog.h"
4 #include <QCheckBox>
5 #include <QDoubleSpinBox>
6 #include <QLineEdit>
7 #include <QMessageBox>
8 #include "qxrddebug.h"
9 
11  QDockWidget(parent),
12  m_Settings(set),
13  m_Acquisition(acq),
16 {
18  printf("QxrdAcquisitionExtraInputsDialog::QxrdAcquisitionExtraInputsDialog(%p)\n", this);
19  }
20 
21  setupUi(this);
22 
23  connect(m_AddChannel, &QAbstractButton::clicked, this, &QxrdAcquisitionExtraInputsDialog::addChannel);
24  connect(m_RemoveChannel, &QAbstractButton::clicked, this, &QxrdAcquisitionExtraInputsDialog::removeChannel);
25  connect(m_TestReadout, &QAbstractButton::clicked, this, &QxrdAcquisitionExtraInputsDialog::initiateReadout);
26 
28 
29  if (acqp) {
30  m_AcquisitionExtraInputs = acqp->acquisitionExtraInputs();
31 
33 
35 
36  if (xtra) {
37  QxrdNIDAQPluginInterfacePtr nidaq = xtra->nidaqPlugin();
38 
39  if (nidaq) {
40  QStringList devices = nidaq->deviceNames();
41 
42  foreach(QString device, devices) {
43  QString desc = nidaq->deviceType(device);
44  int isSim = nidaq->deviceIsSimulated(device);
45 
46  QString item = device+" : "+desc;
47 
48  if (isSim) {
49  item += " [simulated]";
50  }
51 
52  m_AcquisitionDevice->addItem(item, device);
53  }
54  }
55 
56  xtra->prop_SampleRate()->linkTo(m_SampleRate);
57  xtra->prop_AcquireDelay()->linkTo(m_AcquisitionDelay);
58  xtra->prop_DeviceName()->linkTo(m_AcquisitionDevice);
59 
60  connect(xtra->prop_DeviceName(), &QcepStringProperty::valueChanged,
62 
65  }
66  }
67  }
68 
70 
71  if (setg) {
72  m_AcquisitionWaveforms -> init(setg->plotSettings());
73  }
74 
75  updateUi();
76 }
77 
79 {
81  printf("QxrdAcquisitionExtraInputsDialog::~QxrdAcquisitionExtraInputsDialog(%p)\n", this);
82  }
83 }
84 
86 {
87  if (ch) {
88  QCheckBox *cb = new QCheckBox();
89  ch->prop_Enabled()->linkTo(cb);
90 
91  QCheckBox *cb2 = new QCheckBox();
92  ch->prop_Plotted()->linkTo(cb2);
93 
94  QComboBox *nm = new QComboBox();
95 
97 
98  if (xtra) {
99  QString deviceName = xtra->get_DeviceName();
100  QxrdNIDAQPluginInterfacePtr nidaq = xtra->nidaqPlugin();
101 
102  if (nidaq) {
103  QStringList aiChannels = nidaq->deviceAIChannels(deviceName);
104  QStringList ctrChannels = nidaq->deviceCIChannels(deviceName);
105 
106  nm->addItem("Analog Inputs");
107  foreach(QString chan, aiChannels) {
108  nm->addItem(chan, chan);
109  }
110 
111  nm->addItem("Counter Inputs");
112  foreach(QString chan, ctrChannels) {
113  nm->addItem(chan, chan);
114  }
115  }
116  }
117 
118  ch->prop_ChannelName()->linkTo(nm);
119 
120  QComboBox *md = new QComboBox();
121 
122  md->addItem("Sum");
123  md->addItem("Avg");
124  md->addItem("Max");
125  md->addItem("Min");
126 
127  md->setItemData(0, "Value = Sum(wfm)", Qt::ToolTipRole);
128  md->setItemData(1, "Value = Avg(wfm)", Qt::ToolTipRole);
129  md->setItemData(2, "Value = Max(wfm)", Qt::ToolTipRole);
130  md->setItemData(3, "Value = Min(wfm)", Qt::ToolTipRole);
131 
132  ch->prop_Mode()->linkTo(md);
133 
134  QCheckBox *wf = new QCheckBox();
135  ch->prop_SaveWave()->linkTo(wf);
136 
137  QDoubleSpinBox *min = new QDoubleSpinBox();
138  min->setMinimum(-20.0);
139  min->setMaximum(20.0);
140  min->setSingleStep(0.1);
141  ch->prop_Min()->linkTo(min);
142 
143  QDoubleSpinBox *max = new QDoubleSpinBox();
144  max->setMinimum(-20.0);
145  max->setMaximum(20.0);
146  max->setSingleStep(0.1);
147  ch->prop_Max()->linkTo(max);
148 
149  QDoubleSpinBox *stt = new QDoubleSpinBox();
150  stt->setMinimum(-0.2);
151  stt->setMaximum(10.0);
152  stt->setSingleStep(0.1);
153  ch->prop_Start()->linkTo(stt);
154 
155  QDoubleSpinBox *end = new QDoubleSpinBox();
156  end->setMinimum(-0.2);
157  end->setMaximum(10.0);
158  end->setSingleStep(0.1);
159  ch->prop_End()->linkTo(end);
160 
161  QComboBox *tmode = new QComboBox();
162  tmode -> addItem("No Trigger");
163  tmode -> addItem("Positive Edge");
164  tmode -> addItem("Negative Edge");
165  tmode -> addItem("Positive Level");
166  tmode -> addItem("Negative Level");
167  ch->prop_TriggerMode()->linkTo(tmode);
168 
169  QDoubleSpinBox *tlevel = new QDoubleSpinBox();
170  tlevel -> setMinimum(-20.0);
171  tlevel -> setMaximum(+20.0);
172  tlevel -> setSingleStep(0.1);
173  ch->prop_TriggerLevel()->linkTo(tlevel);
174 
175  QDoubleSpinBox *thyst = new QDoubleSpinBox();
176  thyst -> setMinimum(0.0);
177  thyst -> setMaximum(+20.0);
178  thyst -> setSingleStep(0.1);
179  ch->prop_TriggerHysteresis()->linkTo(thyst);
180 
181  QLabel *phy = new QLabel();
182  ch->prop_PhysicalChannel()->linkTo(phy);
183 
184  QLabel *val = new QLabel();
185  ch->prop_Value()->linkTo(val);
186 
187  QCheckBox *trig = new QCheckBox();
188  ch->prop_Triggered()->linkTo(trig);
189 
190  int c = 0;
191 
192  if (m_ChannelsInRows) {
193  m_ExtraInputsTable->setCellWidget(i, c++, cb);
194  m_ExtraInputsTable->setCellWidget(i, c++, cb2);
195  m_ExtraInputsTable->setCellWidget(i, c++, nm);
196  m_ExtraInputsTable->setCellWidget(i, c++, md);
197  m_ExtraInputsTable->setCellWidget(i, c++, wf);
198  m_ExtraInputsTable->setCellWidget(i, c++, min);
199  m_ExtraInputsTable->setCellWidget(i, c++, max);
200  m_ExtraInputsTable->setCellWidget(i, c++, stt);
201  m_ExtraInputsTable->setCellWidget(i, c++, end);
202  m_ExtraInputsTable->setCellWidget(i, c++, tmode);
203  m_ExtraInputsTable->setCellWidget(i, c++, tlevel);
204  m_ExtraInputsTable->setCellWidget(i, c++, thyst);
205  m_ExtraInputsTable->setCellWidget(i, c++, phy);
206  m_ExtraInputsTable->setCellWidget(i, c++, val);
207  m_ExtraInputsTable->setCellWidget(i, c++, trig);
208  } else {
209  m_ExtraInputsTable->setCellWidget(c++, i, cb);
210  m_ExtraInputsTable->setCellWidget(c++, i, cb2);
211  m_ExtraInputsTable->setCellWidget(c++, i, nm);
212  m_ExtraInputsTable->setCellWidget(c++, i, md);
213  m_ExtraInputsTable->setCellWidget(c++, i, wf);
214  m_ExtraInputsTable->setCellWidget(c++, i, min);
215  m_ExtraInputsTable->setCellWidget(c++, i, max);
216  m_ExtraInputsTable->setCellWidget(c++, i, stt);
217  m_ExtraInputsTable->setCellWidget(c++, i, end);
218  m_ExtraInputsTable->setCellWidget(c++, i, tmode);
219  m_ExtraInputsTable->setCellWidget(c++, i, tlevel);
220  m_ExtraInputsTable->setCellWidget(c++, i, thyst);
221  m_ExtraInputsTable->setCellWidget(c++, i, phy);
222  m_ExtraInputsTable->setCellWidget(c++, i, val);
223  m_ExtraInputsTable->setCellWidget(c++, i, trig);
224  }
225  }
226 }
227 
229 {
231 
233 
234  if (acqp) {
235  m_AcquisitionExtraInputs = acqp->acquisitionExtraInputs();
236 
238 
240 
241  if (xtra) {
242  int nInputs = xtra->channels().count();
243 
244  m_ExtraInputsTable->clear();
245 
246  QStringList labels;
247 
248  labels << "Enabled" << "Plotted" << "Device Name" << "Mode" << "SaveWfm?"
249  << "Min V" << "Max V"
250  << "Start" << "End"
251  << "Trigger Mode" << "Trigger Level" << "Trigger Hysteresis"
252  << "Phys Chan" << "Value" << "Triggered?";
253 
254  QStringList chanLabels;
255 
256  for (int i=0; i<nInputs; i++) {
257  chanLabels << tr("Chan %1").arg(i);
258  }
259 
260  if (m_ChannelsInRows) {
261  m_ExtraInputsTable->setRowCount(nInputs);
262  m_ExtraInputsTable->setColumnCount(labels.count());
263  } else {
264  m_ExtraInputsTable->setRowCount(labels.count());
265  m_ExtraInputsTable->setColumnCount(nInputs);
266  }
267 
268  for (int i=0; i<nInputs; i++) {
269  setupUiChannel(i, xtra->channels().value(i));
270  }
271 
272 
273  if (m_ChannelsInRows) {
274  m_ExtraInputsTable->setHorizontalHeaderLabels(labels);
275  m_ExtraInputsTable->setVerticalHeaderLabels(chanLabels);
276  } else {
277  m_ExtraInputsTable->setHorizontalHeaderLabels(chanLabels);
278  m_ExtraInputsTable->setVerticalHeaderLabels(labels);
279  }
280 
281  if (m_ExtraInputsTable->columnCount() && m_ExtraInputsTable->rowCount()) {
282  m_ExtraInputsTable->resizeColumnsToContents();
283  m_ExtraInputsTable->resizeRowsToContents();
284  }
285  }
286  }
287  }
288 }
289 
291 {
293 
294  if (acqp) {
295  m_AcquisitionExtraInputs = acqp->acquisitionExtraInputs();
296 
298 
300 
301  if (xtra) {
302  int nch = xtra->channels().count();
303 
304  int n = (m_ChannelsInRows ?
305  m_ExtraInputsTable->currentRow() :
306  m_ExtraInputsTable->currentColumn());
307 
308  int ch = (n<0 ? nch-1 : n);
309 
310  QString titleString = tr("New Channel after Channel %1").arg(ch);
311  QString questString = tr("Do you really want to create a new extra input channel after channel %1").arg(ch);
312 
313  int reply = QMessageBox::question(this, titleString, questString,
314  QMessageBox::Ok | QMessageBox::Cancel,
315  QMessageBox::Cancel);
316 
317  if (reply== QMessageBox::Ok) {
318  if (ch < 0) {
319  xtra->appendChannel();
320  } else {
321  xtra->appendChannel(ch);
322  }
323 
324  updateUi();
325  }
326  }
327  }
328  }
329 }
330 
332 {
334 
335  if (acqp) {
336  m_AcquisitionExtraInputs = acqp->acquisitionExtraInputs();
337 
339 
341 
342  if (xtra) {
343  int nch = xtra->channels().count();
344 
345  int n = (m_ChannelsInRows ?
346  m_ExtraInputsTable->currentRow() :
347  m_ExtraInputsTable->currentColumn());
348 
349  int ch = (n<0 ? nch-1 : n);
350 
351  QString titleString = tr("Delete Channel %1").arg(ch);
352  QString questString = tr("Do you really want to delete extra input channel %1").arg(ch);
353 
354  int reply = QMessageBox::question(this, titleString, questString,
355  QMessageBox::Ok | QMessageBox::Cancel,
356  QMessageBox::Cancel);
357 
358  if (reply== QMessageBox::Ok) {
359  if (n < 0) {
360  xtra->removeChannel();
361  } else {
362  xtra->removeChannel(n);
363  }
364 
365  updateUi();
366  }
367  }
368  }
369  }
370 }
371 
373 {
375 
376  if (xtra) {
377  xtra->initiate();
378  }
379 }
380 
382 {
384 
385  if (xtra) {
386  int nchan = xtra->channels().count();
387 
388  m_AcquisitionWaveforms->setNChannels(nchan);
389 
390  for (int i=0; i<nchan; i++) {
391  QxrdAcquisitionExtraInputsChannelPtr chanp(xtra->channel(i));
392 
393  if (chanp && chanp->get_Enabled() && chanp->get_Plotted()) {
394  m_AcquisitionWaveforms->plotChannel(i,
395  chanp->startIndex(),
396  chanp->endIndex(),
397  xtra->readXChannel(),
398  xtra->readChannel(i));
399  } else {
400  m_AcquisitionWaveforms->plotChannel(i, 0, 0, QcepDoubleVector(), QcepDoubleVector());
401  }
402  }
403 
404  m_AcquisitionWaveforms->replot();
405  }
406 }
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
void valueChanged(QString val, int index)
QWeakPointer< QxrdAcquisitionExtraInputsDialogSettings > QxrdAcquisitionExtraInputsDialogSettingsWPtr
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
QSharedPointer< QxrdAcquisitionExtraInputsDialogSettings > QxrdAcquisitionExtraInputsDialogSettingsPtr
#define GUI_THREAD_CHECK
Definition: qcepmacros.h:10
QxrdAcquisitionExtraInputsWPtr m_AcquisitionExtraInputs
QVector< double > QcepDoubleVector
Definition: qcepmacros.h:19
QSharedPointer< QxrdAcquisitionExtraInputs > QxrdAcquisitionExtraInputsPtr
QSharedPointer< QxrdAcquisitionExtraInputsChannel > QxrdAcquisitionExtraInputsChannelPtr
QxrdAcquisitionExtraInputsDialog(QxrdAcquisitionExtraInputsDialogSettingsWPtr set, QWidget *parent, QxrdAcquisitionWPtr acq)
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
void setupUiChannel(int i, QxrdAcquisitionExtraInputsChannelPtr ch)
QxrdAcquisitionExtraInputsDialogSettingsWPtr m_Settings