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