v2.0.0
Loading...
Searching...
No Matches
averagingsettingsview.cpp
Go to the documentation of this file.
1//=============================================================================================================
14
15//=============================================================================================================
16// INCLUDES
17//=============================================================================================================
18
20#include "ui_averagingsettingsview.h"
21
23
24//=============================================================================================================
25// QT INCLUDES
26//=============================================================================================================
27
28#include <QSettings>
29
30//=============================================================================================================
31// EIGEN INCLUDES
32//=============================================================================================================
33
34//=============================================================================================================
35// USED NAMESPACES
36//=============================================================================================================
37
38using namespace DISPLIB;
39using namespace FIFFLIB;
40
41//=============================================================================================================
42// DEFINE MEMBER METHODS
43//=============================================================================================================
44
46 const QMap<QString, int>& mapStimChsIndexNames,
47 QWidget* parent)
48: AbstractView(parent)
49, m_pUi(new Ui::AverageSettingsViewWidget)
50, m_mapStimChsIndexNames(mapStimChsIndexNames)
51{
52 m_sSettingsPath = sSettingsPath;
53 m_pUi->setupUi(this);
54
55 this->setWindowTitle("Averaging Settings");
56 this->setMinimumWidth(330);
57 //this->setMaximumWidth(330);
58
60 redrawGUI();
61}
62
63//=============================================================================================================
64
70
71//=============================================================================================================
72
73void AveragingSettingsView::setStimChannels(const QMap<QString, int>& mapStimChsIndexNames)
74{
75 if (!mapStimChsIndexNames.isEmpty()) {
76 m_mapStimChsIndexNames = mapStimChsIndexNames;
78 }
79}
80
81//=============================================================================================================
82
84{
85 {
86 const QSignalBlocker blocker(m_pUi->m_pComboBoxChSelection);
87 m_pUi->m_pComboBoxChSelection->clear();
88
89 QMapIterator<QString, int> i(m_mapStimChsIndexNames);
90 while (i.hasNext()) {
91 i.next();
92 m_pUi->m_pComboBoxChSelection->addItem(i.key(), i.value());
93 }
94
95 m_pUi->m_pComboBoxChSelection->setCurrentText(m_sCurrentStimChan);
96 }
97
98 connect(m_pUi->m_pComboBoxChSelection, &QComboBox::currentTextChanged,
99 this, &AveragingSettingsView::onChangeStimChannel, Qt::UniqueConnection);
100}
101
102//=============================================================================================================
103
108
109//=============================================================================================================
110
115
116//=============================================================================================================
117
122
123//=============================================================================================================
124
129
130//=============================================================================================================
131
136
137//=============================================================================================================
138
143
144//=============================================================================================================
145
150
151//=============================================================================================================
152
154{
155 return m_pUi->m_pComboBoxChSelection->currentData().toInt();
156}
157
158//=============================================================================================================
159
161{
162 if (!m_mapStimChsIndexNames.isEmpty()) {
164 }
165
166 m_pUi->m_pSpinBoxNumAverages->setValue(m_iNumAverages);
167 connect(m_pUi->m_pSpinBoxNumAverages, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
169
170 //Pre Post stimulus
171 m_pUi->m_pSpinBoxPreStimMSeconds->setValue(m_iPreStimSeconds);
172 connect(m_pUi->m_pSpinBoxPreStimMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
174
175 m_pUi->m_pSpinBoxPostStimMSeconds->setValue(m_iPostStimSeconds);
176 connect(m_pUi->m_pSpinBoxPostStimMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
178
179 //Baseline Correction
180 m_pUi->m_pcheckBoxBaselineCorrection->setChecked(m_bDoBaselineCorrection);
181 connect(m_pUi->m_pcheckBoxBaselineCorrection, &QCheckBox::clicked,
183
184 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
185 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
186 m_pUi->m_pSpinBoxBaselineFromMSeconds->setValue(m_iBaselineFromSeconds);
187 connect(m_pUi->m_pSpinBoxBaselineFromMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
189
190 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
191 m_pUi->m_pSpinBoxBaselineToMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
192 m_pUi->m_pSpinBoxBaselineToMSeconds->setValue(m_iBaselineToSeconds);
193 connect(m_pUi->m_pSpinBoxBaselineToMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
195
196 connect(m_pUi->m_pushButton_reset, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
198
199 connect(m_pUi->m_pushButton_compute, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
201 connect(m_pUi->m_checkBox_reject, &QCheckBox::clicked,
203
204 connect(m_pUi->checkBox_autoCompute, &QCheckBox::clicked,
206
207 m_pUi->m_pushButton_compute->hide();
208 m_pUi->m_checkBox_reject->hide();
209 m_pUi->m_pushButton_compute->hide();
210
211 setWindowFlags(Qt::WindowStaysOnTopHint);
212
213 m_pUi->m_groupBox_detectedTrials->hide();
214}
215
216//=============================================================================================================
217
219{
220 if (evokedSet.evoked.isEmpty()) {
221 m_pUi->m_groupBox_detectedTrials->hide();
222 return;
223 } else {
224 m_pUi->m_groupBox_detectedTrials->show();
225 }
226
227 QGridLayout* topLayout = static_cast<QGridLayout*>(m_pUi->m_groupBox_detectedTrials->layout());
228 if (!topLayout) {
229 topLayout = new QGridLayout();
230 }
231
232 QLayoutItem* child;
233 while ((child = topLayout->takeAt(0)) != 0) {
234 delete child->widget();
235 delete child;
236 }
237
238 topLayout->addWidget(new QLabel("Type"), 0, 0);
239 topLayout->addWidget(new QLabel("#"), 0, 1);
240
241 for (int i = 0; i < evokedSet.evoked.size(); i++) {
242 if (i < 10) {
243 // Show only a maximum of 10 average types
244 topLayout->addWidget(new QLabel(evokedSet.evoked.at(i).comment), i + 1, 0);
245 topLayout->addWidget(new QLabel(QString::number(evokedSet.evoked.at(i).nave)), i + 1, 1);
246 }
247 }
248
249 //Find Filter tab and add current layout
250 m_pUi->m_groupBox_detectedTrials->setLayout(topLayout);
251}
252
253//=============================================================================================================
254
256{
257 if (m_sSettingsPath.isEmpty()) {
258 return;
259 }
260
261 // Save Settings
262 QSettings settings("MNECPP");
263
264 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/preStimSeconds"), m_iPreStimSeconds);
265 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/postStimSeconds"), m_iPostStimSeconds);
266 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/numAverages"), m_iNumAverages);
267 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/currentStimChannel"), m_sCurrentStimChan);
268 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/baselineFromSeconds"), m_iBaselineFromSeconds);
269 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/baselineToSeconds"), m_iBaselineToSeconds);
270 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/doBaselineCorrection"), m_bDoBaselineCorrection);
271}
272
273//=============================================================================================================
274
276{
277 if (m_sSettingsPath.isEmpty()) {
278 return;
279 }
280
281 // Load Settings
282 QSettings settings("MNECPP");
283
284 m_iPreStimSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/preStimSeconds"), 100).toInt();
285 m_iPostStimSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/postStimSeconds"), 400).toInt();
286 m_iBaselineFromSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/baselineFromSeconds"), 0).toInt();
287 m_iBaselineToSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/baselineToSeconds"), 0).toInt();
288
291 }
292
295 }
296
297 m_iNumAverages = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/numAverages"), 10).toInt();
298 m_sCurrentStimChan = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/currentStimChannel"), "STI014").toString();
299 m_bDoBaselineCorrection = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/doBaselineCorrection"), false).toBool();
300}
301
302//=============================================================================================================
303
305{
306 switch (mode) {
308 break;
309 default: // default is research mode
310 break;
311 }
312}
313
314//=============================================================================================================
315
317{
318 switch (mode) {
320 m_pUi->m_pSpinBoxNumAverages->hide();
321 m_pUi->m_pComboBoxChSelection->hide();
322 m_pUi->m_pushButton_reset->hide();
323 m_pUi->label->hide();
324 m_pUi->m_label_numberAverages->hide();
325 m_pUi->m_pushButton_compute->show();
326 m_pUi->m_checkBox_reject->show();
327 m_pUi->checkBox_autoCompute->show();
328 break;
329 default: // default is realtime mode
330 m_pUi->m_pSpinBoxNumAverages->show();
331 m_pUi->m_pComboBoxChSelection->show();
332 m_pUi->m_pushButton_reset->show();
333 m_pUi->label->show();
334 m_pUi->m_label_numberAverages->show();
335 m_pUi->m_pushButton_compute->hide();
336 m_pUi->m_checkBox_reject->hide();
337 m_pUi->checkBox_autoCompute->hide();
338 break;
339 }
340}
341//=============================================================================================================
342
344{
345 qint32 mSeconds = m_pUi->m_pSpinBoxPreStimMSeconds->value();
346 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
347 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
348
349 m_iPreStimSeconds = mSeconds;
350
351 emit changePreStim(mSeconds);
352
353 saveSettings();
354}
355
356//=============================================================================================================
357
359{
360 qint32 mSeconds = m_pUi->m_pSpinBoxPostStimMSeconds->value();
361 m_pUi->m_pSpinBoxBaselineToMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
362 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
363
364 m_iPostStimSeconds = mSeconds;
365
366 emit changePostStim(mSeconds);
367
368 saveSettings();
369}
370
371//=============================================================================================================
372
374{
375 qint32 mSeconds = m_pUi->m_pSpinBoxBaselineFromMSeconds->value();
376 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(mSeconds);
377
378 m_iBaselineFromSeconds = mSeconds;
379
380 emit changeBaselineFrom(mSeconds);
381
382 saveSettings();
383}
384
385//=============================================================================================================
386
388{
389 qint32 mSeconds = m_pUi->m_pSpinBoxBaselineToMSeconds->value();
390 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(mSeconds);
391
392 m_iBaselineToSeconds = mSeconds;
393
394 emit changeBaselineTo(mSeconds);
395
396 saveSettings();
397}
398
399//=============================================================================================================
400
402{
403 m_iNumAverages = m_pUi->m_pSpinBoxNumAverages->value();
404
405 emit changeNumAverages(m_pUi->m_pSpinBoxNumAverages->value());
406
407 saveSettings();
408}
409
410//=============================================================================================================
411
413{
414 m_bDoBaselineCorrection = bActive;
415
416 emit changeBaselineActive(bActive);
417
418 saveSettings();
419}
420
421//=============================================================================================================
422
424{
425 m_sCurrentStimChan = m_pUi->m_pComboBoxChSelection->currentText();
426
428
429 saveSettings();
430}
431
432//=============================================================================================================
433
437
438//=============================================================================================================
439
441{
442 return m_pUi->checkBox_autoCompute->isChecked();
443}
444
445//=============================================================================================================
446
448{
449 return QString();
450}
451
452//=============================================================================================================
453
Set of averaged evoked responses sharing a FiffInfo, plus the ave-style category / rejection descript...
Settings panel driving the on-line / off-line averaging engine (pre/post stim, baseline,...
FIFF file I/O, in-memory data structures and high-level readers/writers.
2-D display widgets and visualisation helpers (charts, topography, colour maps).
AbstractView(QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
void changeDropActive(bool state)
void changePreStim(qint32 value)
void changeBaselineFrom(qint32 value)
Ui::AverageSettingsViewWidget * m_pUi
QMap< QString, int > m_mapStimChsIndexNames
void changeBaselineTo(qint32 value)
void calculateAverage(bool state)
void setDetectedEpochs(const FIFFLIB::FiffEvokedSet &evokedSet)
void changePostStim(qint32 value)
void changeNumAverages(qint32 value)
void setAutoCompute(bool state)
void changeStimChannel(const QString &sStimName)
AveragingSettingsView(const QString &sSettingsPath="", const QMap< QString, int > &mapStimChsIndexNames=QMap< QString, int >(), QWidget *parent=nullptr)
void setStimChannels(const QMap< QString, int > &mapStimChsIndexNames)
void changeBaselineActive(bool state)
void updateProcessingMode(ProcessingMode mode)
Set of FiffEvoked instances sharing one FiffInfo, plus channel-picking and compensation helpers.
QList< FiffEvoked > evoked