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(std::make_unique<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
69
70//=============================================================================================================
71
72void AveragingSettingsView::setStimChannels(const QMap<QString, int>& mapStimChsIndexNames)
73{
74 if (!mapStimChsIndexNames.isEmpty()) {
75 m_mapStimChsIndexNames = mapStimChsIndexNames;
77 }
78}
79
80//=============================================================================================================
81
83{
84 {
85 const QSignalBlocker blocker(m_pUi->m_pComboBoxChSelection);
86 m_pUi->m_pComboBoxChSelection->clear();
87
88 QMapIterator<QString, int> i(m_mapStimChsIndexNames);
89 while (i.hasNext()) {
90 i.next();
91 m_pUi->m_pComboBoxChSelection->addItem(i.key(), i.value());
92 }
93
94 m_pUi->m_pComboBoxChSelection->setCurrentText(m_sCurrentStimChan);
95 }
96
97 connect(m_pUi->m_pComboBoxChSelection, &QComboBox::currentTextChanged,
98 this, &AveragingSettingsView::onChangeStimChannel, Qt::UniqueConnection);
99}
100
101//=============================================================================================================
102
107
108//=============================================================================================================
109
114
115//=============================================================================================================
116
121
122//=============================================================================================================
123
128
129//=============================================================================================================
130
135
136//=============================================================================================================
137
142
143//=============================================================================================================
144
149
150//=============================================================================================================
151
153{
154 return m_pUi->m_pComboBoxChSelection->currentData().toInt();
155}
156
157//=============================================================================================================
158
160{
161 if (!m_mapStimChsIndexNames.isEmpty()) {
163 }
164
165 m_pUi->m_pSpinBoxNumAverages->setValue(m_iNumAverages);
166 connect(m_pUi->m_pSpinBoxNumAverages, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
168
169 //Pre Post stimulus
170 m_pUi->m_pSpinBoxPreStimMSeconds->setValue(m_iPreStimSeconds);
171 connect(m_pUi->m_pSpinBoxPreStimMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
173
174 m_pUi->m_pSpinBoxPostStimMSeconds->setValue(m_iPostStimSeconds);
175 connect(m_pUi->m_pSpinBoxPostStimMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
177
178 //Baseline Correction
179 m_pUi->m_pcheckBoxBaselineCorrection->setChecked(m_bDoBaselineCorrection);
180 connect(m_pUi->m_pcheckBoxBaselineCorrection, &QCheckBox::clicked,
182
183 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
184 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
185 m_pUi->m_pSpinBoxBaselineFromMSeconds->setValue(m_iBaselineFromSeconds);
186 connect(m_pUi->m_pSpinBoxBaselineFromMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
188
189 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
190 m_pUi->m_pSpinBoxBaselineToMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
191 m_pUi->m_pSpinBoxBaselineToMSeconds->setValue(m_iBaselineToSeconds);
192 connect(m_pUi->m_pSpinBoxBaselineToMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
194
195 connect(m_pUi->m_pushButton_reset, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
197
198 connect(m_pUi->m_pushButton_compute, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
200 connect(m_pUi->m_checkBox_reject, &QCheckBox::clicked,
202
203 connect(m_pUi->checkBox_autoCompute, &QCheckBox::clicked,
205
206 m_pUi->m_pushButton_compute->hide();
207 m_pUi->m_checkBox_reject->hide();
208 m_pUi->m_pushButton_compute->hide();
209
210 setWindowFlags(Qt::WindowStaysOnTopHint);
211
212 m_pUi->m_groupBox_detectedTrials->hide();
213}
214
215//=============================================================================================================
216
218{
219 if (evokedSet.evoked.isEmpty()) {
220 m_pUi->m_groupBox_detectedTrials->hide();
221 return;
222 } else {
223 m_pUi->m_groupBox_detectedTrials->show();
224 }
225
226 QGridLayout* topLayout = static_cast<QGridLayout*>(m_pUi->m_groupBox_detectedTrials->layout());
227 if (!topLayout) {
228 topLayout = new QGridLayout();
229 }
230
231 QLayoutItem* child;
232 while ((child = topLayout->takeAt(0)) != 0) {
233 delete child->widget();
234 delete child;
235 }
236
237 topLayout->addWidget(new QLabel("Type"), 0, 0);
238 topLayout->addWidget(new QLabel("#"), 0, 1);
239
240 for (int i = 0; i < evokedSet.evoked.size(); i++) {
241 if (i < 10) {
242 // Show only a maximum of 10 average types
243 topLayout->addWidget(new QLabel(evokedSet.evoked.at(i).comment), i + 1, 0);
244 topLayout->addWidget(new QLabel(QString::number(evokedSet.evoked.at(i).nave)), i + 1, 1);
245 }
246 }
247
248 //Find Filter tab and add current layout
249 m_pUi->m_groupBox_detectedTrials->setLayout(topLayout);
250}
251
252//=============================================================================================================
253
255{
256 if (m_sSettingsPath.isEmpty()) {
257 return;
258 }
259
260 // Save Settings
261 QSettings settings("MNECPP");
262
263 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/preStimSeconds"), m_iPreStimSeconds);
264 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/postStimSeconds"), m_iPostStimSeconds);
265 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/numAverages"), m_iNumAverages);
266 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/currentStimChannel"), m_sCurrentStimChan);
267 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/baselineFromSeconds"), m_iBaselineFromSeconds);
268 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/baselineToSeconds"), m_iBaselineToSeconds);
269 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/doBaselineCorrection"), m_bDoBaselineCorrection);
270}
271
272//=============================================================================================================
273
275{
276 if (m_sSettingsPath.isEmpty()) {
277 return;
278 }
279
280 // Load Settings
281 QSettings settings("MNECPP");
282
283 m_iPreStimSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/preStimSeconds"), 100).toInt();
284 m_iPostStimSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/postStimSeconds"), 400).toInt();
285 m_iBaselineFromSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/baselineFromSeconds"), 0).toInt();
286 m_iBaselineToSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/baselineToSeconds"), 0).toInt();
287
290 }
291
294 }
295
296 m_iNumAverages = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/numAverages"), 10).toInt();
297 m_sCurrentStimChan = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/currentStimChannel"), "STI014").toString();
298 m_bDoBaselineCorrection = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/doBaselineCorrection"), false).toBool();
299}
300
301//=============================================================================================================
302
304{
305 switch (mode) {
307 break;
308 default: // default is research mode
309 break;
310 }
311}
312
313//=============================================================================================================
314
316{
317 switch (mode) {
319 m_pUi->m_pSpinBoxNumAverages->hide();
320 m_pUi->m_pComboBoxChSelection->hide();
321 m_pUi->m_pushButton_reset->hide();
322 m_pUi->label->hide();
323 m_pUi->m_label_numberAverages->hide();
324 m_pUi->m_pushButton_compute->show();
325 m_pUi->m_checkBox_reject->show();
326 m_pUi->checkBox_autoCompute->show();
327 break;
328 default: // default is realtime mode
329 m_pUi->m_pSpinBoxNumAverages->show();
330 m_pUi->m_pComboBoxChSelection->show();
331 m_pUi->m_pushButton_reset->show();
332 m_pUi->label->show();
333 m_pUi->m_label_numberAverages->show();
334 m_pUi->m_pushButton_compute->hide();
335 m_pUi->m_checkBox_reject->hide();
336 m_pUi->checkBox_autoCompute->hide();
337 break;
338 }
339}
340//=============================================================================================================
341
343{
344 qint32 mSeconds = m_pUi->m_pSpinBoxPreStimMSeconds->value();
345 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
346 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value() * -1);
347
348 m_iPreStimSeconds = mSeconds;
349
350 emit changePreStim(mSeconds);
351
352 saveSettings();
353}
354
355//=============================================================================================================
356
358{
359 qint32 mSeconds = m_pUi->m_pSpinBoxPostStimMSeconds->value();
360 m_pUi->m_pSpinBoxBaselineToMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
361 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
362
363 m_iPostStimSeconds = mSeconds;
364
365 emit changePostStim(mSeconds);
366
367 saveSettings();
368}
369
370//=============================================================================================================
371
373{
374 qint32 mSeconds = m_pUi->m_pSpinBoxBaselineFromMSeconds->value();
375 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(mSeconds);
376
377 m_iBaselineFromSeconds = mSeconds;
378
379 emit changeBaselineFrom(mSeconds);
380
381 saveSettings();
382}
383
384//=============================================================================================================
385
387{
388 qint32 mSeconds = m_pUi->m_pSpinBoxBaselineToMSeconds->value();
389 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(mSeconds);
390
391 m_iBaselineToSeconds = mSeconds;
392
393 emit changeBaselineTo(mSeconds);
394
395 saveSettings();
396}
397
398//=============================================================================================================
399
401{
402 m_iNumAverages = m_pUi->m_pSpinBoxNumAverages->value();
403
404 emit changeNumAverages(m_pUi->m_pSpinBoxNumAverages->value());
405
406 saveSettings();
407}
408
409//=============================================================================================================
410
412{
413 m_bDoBaselineCorrection = bActive;
414
415 emit changeBaselineActive(bActive);
416
417 saveSettings();
418}
419
420//=============================================================================================================
421
423{
424 m_sCurrentStimChan = m_pUi->m_pComboBoxChSelection->currentText();
425
427
428 saveSettings();
429}
430
431//=============================================================================================================
432
436
437//=============================================================================================================
438
440{
441 return m_pUi->checkBox_autoCompute->isChecked();
442}
443
444//=============================================================================================================
445
447{
448 return QString();
449}
450
451//=============================================================================================================
452
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)
std::unique_ptr< Ui::AverageSettingsViewWidget > m_pUi
void changeBaselineFrom(qint32 value)
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