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