v2.0.0
Loading...
Searching...
No Matches
fwdsettingsview.cpp
Go to the documentation of this file.
1//=============================================================================================================
16
17//=============================================================================================================
18// INCLUDES
19//=============================================================================================================
20
21#include "fwdsettingsview.h"
22#include "QtWidgets/qspinbox.h"
23#include "ui_fwdsettingsview.h"
24
25#include <fs/fs_annotationset.h>
26
27//=============================================================================================================
28// QT INCLUDES
29//=============================================================================================================
30
31#include <QFileInfo>
32#include <QFileDialog>
33#include <QMessageBox>
34#include <QSettings>
35
36//=============================================================================================================
37// EIGEN INCLUDES
38//=============================================================================================================
39
40//=============================================================================================================
41// USED NAMESPACES
42//=============================================================================================================
43
44using namespace DISPLIB;
45using namespace FSLIB;
46
47//=============================================================================================================
48// DEFINE GLOBAL METHODS
49//=============================================================================================================
50
51//=============================================================================================================
52// DEFINE MEMBER METHODS
53//=============================================================================================================
54
55FwdSettingsView::FwdSettingsView(const QString& sSettingsPath,
56 QWidget* parent,
57 Qt::WindowFlags f)
58: AbstractView(parent, f)
60, m_pUi(std::make_unique<Ui::FwdSettingsViewWidget>())
61{
62 m_sSettingsPath = sSettingsPath;
63 m_pUi->setupUi(this);
64
65 // init
66 m_pUi->m_checkBox_bDoRecomputation->setChecked(false);
67 m_pUi->m_checkBox_bDoClustering->setChecked(true);
68 m_pUi->m_lineEdit_iNChan->setText(QString::number(0));
69 m_pUi->m_lineEdit_iNSourceSpace->setText(QString::number(0));
70 m_pUi->m_lineEdit_iNDipole->setText(QString::number(0));
71 m_pUi->m_lineEdit_sSourceOri->setText("fixed");
72 m_pUi->m_lineEdit_sCoordFrame->setText("Head Space");
73 m_pUi->m_lineEdit_iNDipoleClustered->setText("Not Clustered");
74 m_pUi->m_spinBox_iNDipoleClustered->setValue(200);
75 m_pUi->m_spinBox_iNDipoleClustered->setKeyboardTracking(false);
76
77 // load init annotation set
78 QString t_sAtlasDir = QCoreApplication::applicationDirPath() + "/../resources/data/MNE-sample-data/subjects/sample/label";
79 m_pUi->m_qLineEdit_AtlasDirName->setText(t_sAtlasDir);
80
81 FsAnnotationSet::SPtr t_pAnnotationSet = FsAnnotationSet::SPtr(new FsAnnotationSet(t_sAtlasDir + "/lh.aparc.a2009s.annot", t_sAtlasDir + "/rh.aparc.a2009s.annot"));
82
83 // No atlasDirChanged() here: nothing can be connected to it during construction
84 if (!t_pAnnotationSet->isEmpty() && t_pAnnotationSet->size() == 2) {
85 m_pUi->m_qLabel_atlasStat->setText("loaded");
87 } else {
88 m_pUi->m_qLabel_atlasStat->setText("not loaded");
89 }
90
91 // connect
92 connect(m_pUi->m_checkBox_bDoRecomputation, &QCheckBox::clicked,
94 connect(m_pUi->m_qPushButton_AtlasDirDialog, &QPushButton::released,
96 connect(m_pUi->m_checkBox_bDoClustering, &QCheckBox::clicked,
98 connect(m_pUi->m_qPushButton_ComputeForward, &QPushButton::clicked,
100 connect(m_pUi->m_spinBox_iNDipoleClustered, QOverload<int>::of(&QSpinBox::valueChanged),
102
103 // load settings
104 loadSettings();
105}
106
107//=============================================================================================================
108
113
114//=============================================================================================================
115
117{
118 if (m_sSettingsPath.isEmpty()) {
119 return;
120 }
121
122 QSettings settings("MNECPP");
123}
124
125//=============================================================================================================
126
128{
129 if (m_sSettingsPath.isEmpty()) {
130 return;
131 }
132
133 QSettings settings("MNECPP");
134 QVariant defaultData;
135}
136
137//=============================================================================================================
138
140{
141 switch (mode) {
143 break;
144 default: // default is research mode
145 break;
146 }
147}
148
149//=============================================================================================================
150
152{
153 switch (mode) {
155 break;
156 default: // default is realtime mode
157 break;
158 }
159}
160
161//=============================================================================================================
162
164{
165 return m_pUi->m_checkBox_bDoRecomputation->isChecked();
166}
167
168//=============================================================================================================
169
171{
172 if (iStatus == 0) {
173 m_pUi->m_label_recomputationFeedback->setText("Initializing");
174 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : red;}");
175 } else if (iStatus == 1) {
176 m_pUi->m_label_recomputationFeedback->setText("Computing");
177 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : red;}");
178 } else if (iStatus == 2) {
179 m_pUi->m_label_recomputationFeedback->setText("Recomputing");
180 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : red;}");
181 } else if (iStatus == 3) {
182 m_pUi->m_label_recomputationFeedback->setText("Clustering");
183 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : red;}");
184 } else if (iStatus == 4) {
185 m_pUi->m_label_recomputationFeedback->setText("Not Computed");
186 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : red;}");
187 } else if (iStatus == 5) {
188 m_pUi->m_label_recomputationFeedback->setText("Not Clustered");
189 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : yellow;}");
190 } else {
191 m_pUi->m_label_recomputationFeedback->setText("Finished");
192 m_pUi->m_label_recomputationFeedback->setStyleSheet("QLabel { background-color : green;}");
193 }
194}
195
196//=============================================================================================================
197
199 FIFFLIB::fiff_int_t iCoordFrame,
200 int iNSource,
201 int iNChan,
202 int iNSpaces)
203{
204 // set source orientation
205 if (iSourceOri == 0) {
206 m_pUi->m_lineEdit_sSourceOri->setText("fixed");
207 } else {
208 m_pUi->m_lineEdit_sSourceOri->setText("free");
209 }
210
211 // set coordinate frame
212 if (iCoordFrame == FIFFV_COORD_HEAD) {
213 m_pUi->m_lineEdit_sCoordFrame->setText("Head Space");
214 } else if (iCoordFrame == FIFFV_COORD_MRI) {
215 m_pUi->m_lineEdit_sCoordFrame->setText("MRI Space");
216 } else {
217 m_pUi->m_lineEdit_sCoordFrame->setText("Unknown");
218 }
219
220 // set number of sources
221 m_pUi->m_lineEdit_iNDipole->setText(QString::number(iNSource));
222
223 // set number of clustered sources
224 m_pUi->m_lineEdit_iNDipoleClustered->setText("Not clustered");
225
226 // set number of channels
227 m_pUi->m_lineEdit_iNChan->setText(QString::number(iNChan));
228
229 // set number of source spaces
230 m_pUi->m_lineEdit_iNSourceSpace->setText(QString::number(iNSpaces));
231}
232
233//=============================================================================================================
234
236{
237 return m_pUi->m_checkBox_bDoClustering->isChecked();
238}
239
240//=============================================================================================================
241
243{
244 return m_pUi->m_spinBox_iNDipoleClustered->value();
245}
246
247//=============================================================================================================
248
250{
251 if (!m_bAnnotaionsLoaded) {
252 QMessageBox msgBox;
253 msgBox.setText("Please load an annotation set before clustering.");
254 msgBox.exec();
255 m_pUi->m_checkBox_bDoClustering->setChecked(false);
256 return;
257 } else {
258 emit clusteringStatusChanged(bChecked);
259 }
260}
261
262//=============================================================================================================
263
265{
266 // set number of clustered sources
267 m_pUi->m_lineEdit_iNDipoleClustered->setText(QString::number(iNSources));
268}
269
270//=============================================================================================================
271
273{
274 QString t_sAtlasDir = QFileDialog::getExistingDirectory(this, tr("Open Atlas Directory"),
275 QCoreApplication::applicationDirPath(),
276 QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
277
278 m_pUi->m_qLineEdit_AtlasDirName->setText(t_sAtlasDir);
279
280 FsAnnotationSet::SPtr t_pAnnotationSet = FsAnnotationSet::SPtr(new FsAnnotationSet(t_sAtlasDir + "/lh.aparc.a2009s.annot", t_sAtlasDir + "/rh.aparc.a2009s.annot"));
281
282 if (!t_pAnnotationSet->isEmpty() && t_pAnnotationSet->size() == 2) {
283 emit atlasDirChanged(t_sAtlasDir, t_pAnnotationSet);
284 m_pUi->m_qLabel_atlasStat->setText("loaded");
285 m_bAnnotaionsLoaded = true;
286 } else {
287 m_pUi->m_qLabel_atlasStat->setText("not loaded");
288 }
289}
290
291//=============================================================================================================
292
constexpr auto FIFFV_COORD_HEAD
constexpr auto FIFFV_COORD_MRI
Forward-solution computation controls (BEM / source space / EEG sphere model selectors).
Bi-hemispheric pair of FreeSurfer annotations (lh + rh) for one parcellation atlas.
FreeSurfer surface, annotation and parcellation I/O for mne-cpp.
qint32 fiff_int_t
Definition fiff_types.h:86
2-D display widgets and visualisation helpers (charts, topography, colour maps).
AbstractView(QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
void setSolutionInformation(FIFFLIB::fiff_int_t iSourceOri, FIFFLIB::fiff_int_t iCoordFrame, int iNSource, int iNChan, int iNSpaces)
void setClusteredInformation(int iNSource)
std::unique_ptr< Ui::FwdSettingsViewWidget > m_pUi
void clusterNumberChanged(int iNCluster)
void setRecomputationStatus(int iStatus)
void atlasDirChanged(const QString &sDirPath, const FSLIB::FsAnnotationSet::SPtr pAnnotationSet)
void updateProcessingMode(ProcessingMode mode)
void clusteringStatusChanged(bool bChecked)
void recompStatusChanged(bool bChecked)
void onClusteringStatusChanged(bool bChecked)
void updateGuiMode(GuiMode mode)
FwdSettingsView(const QString &sSettingsPath="", QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
Container holding the lh and/or rh FsAnnotation for one parcellation atlas.
QSharedPointer< FsAnnotationSet > SPtr