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;
77
78 m_pUi->m_pComboBoxChSelection->clear();
79
80 QMapIterator<QString, int> i(mapStimChsIndexNames);
81 while (i.hasNext()) {
82 i.next();
83 m_pUi->m_pComboBoxChSelection->insertItem(m_pUi->m_pComboBoxChSelection->count(),i.key());
84 }
85
86 m_pUi->m_pComboBoxChSelection->setCurrentText(m_sCurrentStimChan);
87
88 connect(m_pUi->m_pComboBoxChSelection, &QComboBox::currentTextChanged,
90 }
91}
92
93//=============================================================================================================
94
99
100//=============================================================================================================
101
106
107//=============================================================================================================
108
113
114//=============================================================================================================
115
120
121//=============================================================================================================
122
127
128//=============================================================================================================
129
134
135//=============================================================================================================
136
141
142//=============================================================================================================
143
145{
146 return m_pUi->m_pComboBoxChSelection->currentData().toInt();
147}
148
149//=============================================================================================================
150
152{
153 if(!m_mapStimChsIndexNames.isEmpty()) {
154 m_pUi->m_pComboBoxChSelection->clear();
155
156 QMapIterator<QString, int> i(m_mapStimChsIndexNames);
157 while (i.hasNext()) {
158 i.next();
159 m_pUi->m_pComboBoxChSelection->insertItem(m_pUi->m_pComboBoxChSelection->count(),i.key());
160 }
161
162 m_pUi->m_pComboBoxChSelection->setCurrentText(m_sCurrentStimChan);
163
164 connect(m_pUi->m_pComboBoxChSelection, &QComboBox::currentTextChanged,
166 }
167
168 m_pUi->m_pSpinBoxNumAverages->setValue(m_iNumAverages);
169 connect(m_pUi->m_pSpinBoxNumAverages, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
171
172 //Pre Post stimulus
173 m_pUi->m_pSpinBoxPreStimMSeconds->setValue(m_iPreStimSeconds);
174 connect(m_pUi->m_pSpinBoxPreStimMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
176
177 m_pUi->m_pSpinBoxPostStimMSeconds->setValue(m_iPostStimSeconds);
178 connect(m_pUi->m_pSpinBoxPostStimMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
180
181 //Baseline Correction
182 m_pUi->m_pcheckBoxBaselineCorrection->setChecked(m_bDoBaselineCorrection);
183 connect(m_pUi->m_pcheckBoxBaselineCorrection, &QCheckBox::clicked,
185
186 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value()*-1);
187 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
188 m_pUi->m_pSpinBoxBaselineFromMSeconds->setValue(m_iBaselineFromSeconds);
189 connect(m_pUi->m_pSpinBoxBaselineFromMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
191
192 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value()*-1);
193 m_pUi->m_pSpinBoxBaselineToMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
194 m_pUi->m_pSpinBoxBaselineToMSeconds->setValue(m_iBaselineToSeconds);
195 connect(m_pUi->m_pSpinBoxBaselineToMSeconds, static_cast<void (QSpinBox::*)()>(&QSpinBox::editingFinished),
197
198 connect(m_pUi->m_pushButton_reset, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
200
201 connect(m_pUi->m_pushButton_compute, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked),
203 connect(m_pUi->m_checkBox_reject, &QCheckBox::clicked,
205
206 connect(m_pUi->checkBox_autoCompute, &QCheckBox::clicked,
208
209 m_pUi->m_pushButton_compute->hide();
210 m_pUi->m_checkBox_reject->hide();
211 m_pUi->m_pushButton_compute->hide();
212
213 setWindowFlags(Qt::WindowStaysOnTopHint);
214
215 m_pUi->m_groupBox_detectedTrials->hide();
216}
217
218//=============================================================================================================
219
221{
222 if(evokedSet.evoked.isEmpty()) {
223 m_pUi->m_groupBox_detectedTrials->hide();
224 return;
225 } else {
226 m_pUi->m_groupBox_detectedTrials->show();
227 }
228
229 QGridLayout* topLayout = static_cast<QGridLayout*>(m_pUi->m_groupBox_detectedTrials->layout());
230 if(!topLayout) {
231 topLayout = new QGridLayout();
232 }
233
234 QLayoutItem *child;
235 while ((child = topLayout->takeAt(0)) != 0) {
236 delete child->widget();
237 delete child;
238 }
239
240 topLayout->addWidget(new QLabel("Type"),0,0);
241 topLayout->addWidget(new QLabel("#"),0,1);
242
243 for(int i = 0; i < evokedSet.evoked.size(); i++) {
244 if(i < 10) {
245 // Show only a maximum of 10 average types
246 topLayout->addWidget(new QLabel(evokedSet.evoked.at(i).comment),i+1,0);
247 topLayout->addWidget(new QLabel(QString::number(evokedSet.evoked.at(i).nave)),i+1,1);
248 }
249 }
250
251 //Find Filter tab and add current layout
252 m_pUi->m_groupBox_detectedTrials->setLayout(topLayout);
253}
254
255//=============================================================================================================
256
258{
259 if(m_sSettingsPath.isEmpty()) {
260 return;
261 }
262
263 // Save Settings
264 QSettings settings("MNECPP");
265
266 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/preStimSeconds"), m_iPreStimSeconds);
267 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/postStimSeconds"), m_iPostStimSeconds);
268 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/numAverages"), m_iNumAverages);
269 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/currentStimChannel"), m_sCurrentStimChan);
270 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/baselineFromSeconds"), m_iBaselineFromSeconds);
271 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/baselineToSeconds"), m_iBaselineToSeconds);
272 settings.setValue(m_sSettingsPath + QString("/AveragingSettingsView/doBaselineCorrection"), m_bDoBaselineCorrection);
273}
274
275//=============================================================================================================
276
278{
279 if(m_sSettingsPath.isEmpty()) {
280 return;
281 }
282
283 // Load Settings
284 QSettings settings("MNECPP");
285
286 m_iPreStimSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/preStimSeconds"), 100).toInt();
287 m_iPostStimSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/postStimSeconds"), 400).toInt();
288 m_iBaselineFromSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/baselineFromSeconds"), 0).toInt();
289 m_iBaselineToSeconds = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/baselineToSeconds"), 0).toInt();
290
293 }
294
297 }
298
299 m_iNumAverages = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/numAverages"), 10).toInt();
300 m_sCurrentStimChan = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/currentStimChannel"), "STI014").toString();
301 m_bDoBaselineCorrection = settings.value(m_sSettingsPath + QString("/AveragingSettingsView/doBaselineCorrection"), false).toBool();
302}
303
304//=============================================================================================================
305
307{
308 switch(mode) {
310 break;
311 default: // default is research mode
312 break;
313 }
314}
315
316//=============================================================================================================
317
319{
320 switch(mode) {
322 m_pUi->m_pSpinBoxNumAverages->hide();
323 m_pUi->m_pComboBoxChSelection->hide();
324 m_pUi->m_pushButton_reset->hide();
325 m_pUi->label->hide();
326 m_pUi->m_label_numberAverages->hide();
327 m_pUi->m_pushButton_compute->show();
328 m_pUi->m_checkBox_reject->show();
329 m_pUi->checkBox_autoCompute->show();
330 break;
331 default: // default is realtime mode
332 m_pUi->m_pSpinBoxNumAverages->show();
333 m_pUi->m_pComboBoxChSelection->show();
334 m_pUi->m_pushButton_reset->show();
335 m_pUi->label->show();
336 m_pUi->m_label_numberAverages->show();
337 m_pUi->m_pushButton_compute->hide();
338 m_pUi->m_checkBox_reject->hide();
339 m_pUi->checkBox_autoCompute->hide();
340 break;
341 }
342}
343//=============================================================================================================
344
346{
347 qint32 mSeconds = m_pUi->m_pSpinBoxPreStimMSeconds->value();
348 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value()*-1);
349 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMinimum(m_pUi->m_pSpinBoxPreStimMSeconds->value()*-1);
350
351 m_iPreStimSeconds = mSeconds;
352
353 emit changePreStim(mSeconds);
354
355 saveSettings();
356}
357
358//=============================================================================================================
359
361{
362 qint32 mSeconds = m_pUi->m_pSpinBoxPostStimMSeconds->value();
363 m_pUi->m_pSpinBoxBaselineToMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
364 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(m_pUi->m_pSpinBoxPostStimMSeconds->value());
365
366 m_iPostStimSeconds = mSeconds;
367
368 emit changePostStim(mSeconds);
369
370 saveSettings();
371}
372
373//=============================================================================================================
374
376{
377 qint32 mSeconds = m_pUi->m_pSpinBoxBaselineFromMSeconds->value();
378 m_pUi->m_pSpinBoxBaselineToMSeconds->setMinimum(mSeconds);
379
380 m_iBaselineFromSeconds = mSeconds;
381
382 emit changeBaselineFrom(mSeconds);
383
384 saveSettings();
385}
386
387//=============================================================================================================
388
390{
391 qint32 mSeconds = m_pUi->m_pSpinBoxBaselineToMSeconds->value();
392 m_pUi->m_pSpinBoxBaselineFromMSeconds->setMaximum(mSeconds);
393
394 m_iBaselineToSeconds = mSeconds;
395
396 emit changeBaselineTo(mSeconds);
397
398 saveSettings();
399}
400
401//=============================================================================================================
402
404{
405 m_iNumAverages = m_pUi->m_pSpinBoxNumAverages->value();
406
407 emit changeNumAverages(m_pUi->m_pSpinBoxNumAverages->value());
408
409 saveSettings();
410}
411
412//=============================================================================================================
413
415{
416 m_sCurrentStimChan = m_pUi->m_pComboBoxChSelection->currentText();
417
419
420 saveSettings();
421}
422
423//=============================================================================================================
424
429
430//=============================================================================================================
431
433{
434 return m_pUi->checkBox_autoCompute->isChecked();
435}
436
437//=============================================================================================================
438
440{
441 return QString();
442}
443
444//=============================================================================================================
445
Settings panel driving the on-line / off-line averaging engine (pre/post stim, baseline,...
Set of averaged evoked responses sharing a FiffInfo, plus the ave-style category / rejection descript...
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)
QMap< QString, int > m_mapStimChsIndexNames
void changePreStim(qint32 value)
void changeBaselineFrom(qint32 value)
Ui::AverageSettingsViewWidget * m_pUi
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