v2.0.0
Loading...
Searching...
No Matches
dipolefitview.cpp
Go to the documentation of this file.
1//=============================================================================================================
14
15//=============================================================================================================
16// INCLUDES
17//=============================================================================================================
18
19#include "dipolefitview.h"
20#include "ui_dipolefitview.h"
21
22//=============================================================================================================
23// QT INCLUDES
24//=============================================================================================================
25
26#include <QDateTime>
27#include <QtDebug>
28
29//=============================================================================================================
30// USED NAMESPACES
31//=============================================================================================================
32
33using namespace DISPLIB;
34
35//=============================================================================================================
36// DEFINE MEMBER METHODS
37//=============================================================================================================
38
40 Qt::WindowFlags)
41: AbstractView(parent)
42, m_pUi(new Ui::DipoleFitViewWidget)
43{
44 m_pUi->setupUi(this);
45 this->setMinimumWidth(330);
46
47 initGui();
48}
49
50//=============================================================================================================
51
55
56//=============================================================================================================
57
61
62//=============================================================================================================
63
65{
66 switch (mode) {
68 break;
69 default: // default is research mode
70 break;
71 }
72}
73
74//=============================================================================================================
75
77{
78 switch (mode) {
80 break;
81 default: // default is realtime mode
82 break;
83 }
84}
85
86//=============================================================================================================
87
88void DipoleFitView::addBem(const QString& sFileName)
89{
90 m_pUi->comboBox_bem->addItem(sFileName);
91}
92
93//=============================================================================================================
94
95void DipoleFitView::addMri(const QString& sFileName)
96{
97 m_pUi->comboBox_mri->addItem(sFileName);
98}
99
100//=============================================================================================================
101
102void DipoleFitView::addNoise(const QString& sFileName)
103{
104 m_pUi->comboBox_noise->addItem(sFileName);
105}
106
107//=============================================================================================================
108
110{
111 emit timeChanged(m_pUi->spinBox_tmin->value(),
112 m_pUi->spinBox_tmax->value(),
113 m_pUi->spinBox_tstep->value(),
114 m_pUi->spinBox_tint->value());
115
116 emit modalityChanged(m_pUi->checkBox_EEG->isChecked(), m_pUi->checkBox_MEG->isChecked());
117
118 emit fittingChanged(m_pUi->doubleSpinBox_dist->value(),
119 m_pUi->doubleSpinBox_grid->value());
120
121 if (m_pUi->spinBox_bmin->value() != m_pUi->spinBox_bmax->value()) {
122 emit baselineChanged(m_pUi->spinBox_bmin->value(),
123 m_pUi->spinBox_bmax->value());
124 } else {
125 emit baselineChanged(1e6, 1e6);
126 }
127
128 emit noiseChanged(m_pUi->doubleSpinBox_gradnoise->value(),
129 m_pUi->doubleSpinBox_magnoise->value(),
130 m_pUi->doubleSpinBox_eegnoise->value());
131
132 emit regChanged(m_pUi->doubleSpinBox_gradreg->value(),
133 m_pUi->doubleSpinBox_magreg->value(),
134 m_pUi->doubleSpinBox_eegreg->value());
135
136 emit sphereChanged(m_pUi->doubleSpinBox_orgx->value(),
137 m_pUi->doubleSpinBox_orgy->value(),
138 m_pUi->doubleSpinBox_orgz->value(),
139 m_pUi->doubleSpinBox_rad->value());
140}
141
142//=============================================================================================================
143
144void DipoleFitView::initGui()
145{
146 //Init Combo boxes
147 m_pUi->comboBox_bem->addItem("None");
148 m_pUi->comboBox_noise->addItem("None");
149 m_pUi->comboBox_mri->addItem("None");
150 m_pUi->comboBox_meas->addItem("None");
151
152 //Perform Fit
153 connect(m_pUi->pushButton_fit, &QPushButton::clicked, [=, this] {
154 emit performDipoleFit(m_pUi->lineEdit_name->text());
155 });
156
157 connect(m_pUi->spinBox_set, QOverload<int>::of(&QSpinBox::valueChanged),
158 this, &DipoleFitView::setChanged, Qt::UniqueConnection);
159
160 //Time settings
161 connect(m_pUi->spinBox_tmin, QOverload<int>::of(&QSpinBox::valueChanged), [=, this](int iValue) {
162 emit timeChanged(iValue,
163 m_pUi->spinBox_tmax->value(),
164 m_pUi->spinBox_tstep->value(),
165 m_pUi->spinBox_tint->value());
166 });
167 connect(m_pUi->spinBox_tmax, QOverload<int>::of(&QSpinBox::valueChanged), [=, this](int iValue) {
168 emit timeChanged(m_pUi->spinBox_tmin->value(),
169 iValue,
170 m_pUi->spinBox_tstep->value(),
171 m_pUi->spinBox_tint->value());
172 });
173 connect(m_pUi->spinBox_tstep, QOverload<int>::of(&QSpinBox::valueChanged), [=, this](int iValue) {
174 emit timeChanged(m_pUi->spinBox_tmin->value(),
175 m_pUi->spinBox_tmax->value(),
176 iValue,
177 m_pUi->spinBox_tint->value());
178 });
179 connect(m_pUi->spinBox_tint, QOverload<int>::of(&QSpinBox::valueChanged), [=, this](int iValue) {
180 emit timeChanged(m_pUi->spinBox_tmin->value(),
181 m_pUi->spinBox_tmax->value(),
182 m_pUi->spinBox_tstep->value(),
183 iValue);
184 });
185
186 //Baseline
187 connect(m_pUi->spinBox_bmin, QOverload<int>::of(&QSpinBox::valueChanged), [=, this](int iValue) {
188 if (iValue != m_pUi->spinBox_bmax->value()) {
189 emit baselineChanged(iValue,
190 m_pUi->spinBox_bmax->value());
191 } else {
192 emit baselineChanged(1e6, 1e6);
193 }
194 });
195 connect(m_pUi->spinBox_bmax, QOverload<int>::of(&QSpinBox::valueChanged), [=, this](int iValue) {
196 if (iValue != m_pUi->spinBox_bmin->value()) {
197 emit baselineChanged(m_pUi->spinBox_bmin->value(),
198 iValue);
199 } else {
200 emit baselineChanged(1e6, 1e6);
201 }
202 });
203
204 //Modality
205 connect(m_pUi->checkBox_EEG, &QCheckBox::toggled, [=, this](bool bChecked) {
206 emit modalityChanged(bChecked, m_pUi->checkBox_MEG->isChecked());
207 });
208 connect(m_pUi->checkBox_MEG, &QCheckBox::toggled, [=, this](bool bChecked) {
209 emit modalityChanged(m_pUi->checkBox_EEG->isChecked(), bChecked);
210 });
211
212 //Fittings
213 connect(m_pUi->doubleSpinBox_dist, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
214 emit fittingChanged(dValue,
215 m_pUi->doubleSpinBox_grid->value());
216 });
217 connect(m_pUi->doubleSpinBox_grid, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
218 emit fittingChanged(m_pUi->doubleSpinBox_dist->value(),
219 dValue);
220 });
221
222 //Noise
223 connect(m_pUi->doubleSpinBox_gradnoise, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
224 emit noiseChanged(dValue,
225 m_pUi->doubleSpinBox_magnoise->value(),
226 m_pUi->doubleSpinBox_eegnoise->value());
227 });
228 connect(m_pUi->doubleSpinBox_magnoise, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
229 emit noiseChanged(m_pUi->doubleSpinBox_gradnoise->value(),
230 dValue,
231 m_pUi->doubleSpinBox_eegnoise->value());
232 });
233 connect(m_pUi->doubleSpinBox_eegnoise, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
234 emit noiseChanged(m_pUi->doubleSpinBox_gradnoise->value(),
235 m_pUi->doubleSpinBox_magnoise->value(),
236 dValue);
237 });
238
239 //Reg
240 connect(m_pUi->doubleSpinBox_gradreg, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
241 emit regChanged(dValue,
242 m_pUi->doubleSpinBox_magreg->value(),
243 m_pUi->doubleSpinBox_eegreg->value());
244 });
245 connect(m_pUi->doubleSpinBox_magreg, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
246 emit regChanged(m_pUi->doubleSpinBox_gradreg->value(),
247 dValue,
248 m_pUi->doubleSpinBox_eegreg->value());
249 });
250 connect(m_pUi->doubleSpinBox_eegreg, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
251 emit regChanged(m_pUi->doubleSpinBox_gradreg->value(),
252 m_pUi->doubleSpinBox_magreg->value(),
253 dValue);
254 });
255
256 //Sphere model
257 connect(m_pUi->doubleSpinBox_orgx, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
258 emit sphereChanged(dValue,
259 m_pUi->doubleSpinBox_orgy->value(),
260 m_pUi->doubleSpinBox_orgz->value(),
261 m_pUi->doubleSpinBox_rad->value());
262 });
263 connect(m_pUi->doubleSpinBox_orgy, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
264 emit sphereChanged(m_pUi->doubleSpinBox_orgx->value(),
265 dValue,
266 m_pUi->doubleSpinBox_orgz->value(),
267 m_pUi->doubleSpinBox_rad->value());
268 });
269 connect(m_pUi->doubleSpinBox_orgz, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
270 emit sphereChanged(m_pUi->doubleSpinBox_orgx->value(),
271 m_pUi->doubleSpinBox_orgy->value(),
272 dValue,
273 m_pUi->doubleSpinBox_rad->value());
274 });
275 connect(m_pUi->doubleSpinBox_rad, QOverload<double>::of(&QDoubleSpinBox::valueChanged), [=, this](double dValue) {
276 emit sphereChanged(m_pUi->doubleSpinBox_orgx->value(),
277 m_pUi->doubleSpinBox_orgy->value(),
278 m_pUi->doubleSpinBox_orgz->value(),
279 dValue);
280 });
281
282 //Models
283 connect(m_pUi->comboBox_bem, &QComboBox::currentTextChanged,
284 this, &DipoleFitView::selectedBem, Qt::UniqueConnection);
285 connect(m_pUi->comboBox_noise, &QComboBox::currentTextChanged,
286 this, &DipoleFitView::selectedNoise, Qt::UniqueConnection);
287 connect(m_pUi->comboBox_mri, &QComboBox::currentTextChanged,
288 this, &DipoleFitView::selectedMri, Qt::UniqueConnection);
289 connect(m_pUi->comboBox_meas, &QComboBox::currentTextChanged, [=, this](const QString& sFileName) {
290#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
291 auto skip = QString::SkipEmptyParts;
292#else
293 auto skip = Qt::SkipEmptyParts;
294#endif
295 // clear() reports an empty selection, which has no name to derive.
296 const QStringList parts = sFileName.split(".", skip);
297 if (parts.isEmpty()) {
298 m_pUi->lineEdit_name->clear();
299 emit selectedMeas(sFileName);
300 return;
301 }
302 QString sName = parts.at(0);
303 if (sName.endsWith("-ave") || sName.endsWith("_ave") || sName.endsWith("-raw") || sName.endsWith("_raw")) {
304 sName.chop(4);
305 }
306 m_pUi->lineEdit_name->setText("Dipole Fit - " + sName + " - " + QDateTime::currentDateTime().toString("MMMM d yyyy hh:mm:ss"));
307 emit selectedMeas(sFileName);
308 });
309}
310
311//=============================================================================================================
312
313void DipoleFitView::addMeas(const QString& sFileName)
314{
315 m_pUi->comboBox_meas->addItem(sFileName);
316
317 // QString sName = sFileName.split(".",QString::SkipEmptyParts).at(0);
318 // if(sName.endsWith("-ave") || sName.endsWith("_ave") || sName.endsWith("-raw") || sName.endsWith("_raw")){
319 // sName.chop(4);
320 // }
321
322 // m_pUi->lineEdit_name->setText("Dipole Fit - " + sName + " - " + QDateTime::currentDateTime().toString("MMMM d yyyy hh:mm:ss"));
323}
324
325//=============================================================================================================
326
328{
329 m_pUi->comboBox_meas->clear();
330 m_pUi->comboBox_bem->clear();
331 m_pUi->comboBox_mri->clear();
332 m_pUi->comboBox_noise->clear();
333}
334
335//=============================================================================================================
336
337void DipoleFitView::removeModel(const QString& sModelName, int iType)
338{
339 switch (iType) {
340 case 1: {
341 int iIndex = m_pUi->comboBox_meas->findText(sModelName);
342 if (iIndex != -1) {
343 m_pUi->comboBox_meas->removeItem(iIndex);
344 }
345 break;
346 }
347 case 2: {
348 int iIndex = m_pUi->comboBox_bem->findText(sModelName);
349 if (iIndex != -1) {
350 m_pUi->comboBox_bem->removeItem(iIndex);
351 }
352 break;
353 }
354 case 3: {
355 int iIndex = m_pUi->comboBox_mri->findText(sModelName);
356 if (iIndex != -1) {
357 m_pUi->comboBox_mri->removeItem(iIndex);
358 }
359 break;
360 }
361 case 4: {
362 int iIndex = m_pUi->comboBox_noise->findText(sModelName);
363 if (iIndex != -1) {
364 m_pUi->comboBox_noise->removeItem(iIndex);
365 }
366 break;
367 }
368 default: {
369 qWarning() << "[DipoleFitView::removeModel] Model type not recognized";
370 break;
371 }
372 }
373}
if(w.size() > 0)
Input / output panel for the single-equivalent-current-dipole fit tool.
2-D display widgets and visualisation helpers (charts, topography, colour maps).
AbstractView(QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
void addNoise(const QString &sFileName)
void addMri(const QString &sFileName)
void noiseChanged(double dGrad, double dMag, double dEeg)
void sphereChanged(double dX, double dY, double dZ, double dRadius)
void updateGuiMode(GuiMode mode)
void addBem(const QString &sFileName)
void selectedNoise(const QString &sName)
void regChanged(double dRegGrad, double dRegMag, double dRegEeg)
void removeModel(const QString &sModelName, int iType)
void updateProcessingMode(ProcessingMode mode)
void selectedMri(const QString &sName)
void addMeas(const QString &sFileName)
void timeChanged(int iMin, int iMax, int iStep, int iInt)
void selectedBem(const QString &sName)
void baselineChanged(int iBMin, int iBMax)
void modalityChanged(bool bEEG, bool bMEG)
void setChanged(int iSet)
DipoleFitView(QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
void fittingChanged(int iMinDistance, int iSize)