v2.0.0
Loading...
Searching...
No Matches
fwd_eeg_sphere_model_set.cpp
Go to the documentation of this file.
1//=============================================================================================================
15
16//=============================================================================================================
17// INCLUDES
18//=============================================================================================================
19
21
22//=============================================================================================================
23// QT INCLUDES
24//=============================================================================================================
25
26#include <QString>
27#include <QFile>
28#include <QRegularExpression>
29#include <QTextStream>
30
31#include <Eigen/Core>
32
33using namespace Eigen;
34
35//=============================================================================================================
36// USED NAMESPACES
37//=============================================================================================================
38
39using namespace FWDLIB;
40
41//=============================================================================================================
42// DEFINE MEMBER METHODS
43//=============================================================================================================
44
48
49//=============================================================================================================
50
54
55//=============================================================================================================
56
65
66//=============================================================================================================
67//fwd_eeg_sphere_models.c
69{
70 static const int def_nlayer = 4;
71 VectorXf def_unit_rads(def_nlayer);
72 def_unit_rads << 0.90f, 0.92f, 0.97f, 1.0f;
73 VectorXf def_sigmas(def_nlayer);
74 def_sigmas << 0.33f, 1.0f, 0.4e-2f, 0.33f;
75
76 return FwdEegSphereModelSet::fwd_add_to_eeg_sphere_model_set(s, FwdEegSphereModel::fwd_create_eeg_sphere_model("Default", def_nlayer, def_unit_rads, def_sigmas));
77}
78
79//=============================================================================================================
80//fwd_eeg_sphere_models.c
82{
83 if (!now)
85
86 if (filename.isEmpty())
87 return now;
88
89 QFile file(filename);
90 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
91 return now;
92
93 QTextStream in(&file);
94 QString name;
95 VectorXf rads;
96 VectorXf sigmas;
97 int nlayer = 0;
98
99 while (!in.atEnd()) {
100 QString line = in.readLine().trimmed();
101 if (line.isEmpty() || line.startsWith('#'))
102 continue;
103
104 QStringList parts = line.split(QRegularExpression("[:\\n\\r]"), Qt::SkipEmptyParts);
105 if (parts.isEmpty())
106 continue;
107
108 name = parts[0].trimmed();
109 nlayer = 0;
110
111 for (int i = 1; i + 1 < parts.size(); i += 2) {
112 bool okRad = false, okSig = false;
113 float r = parts[i].trimmed().toFloat(&okRad);
114 float s = parts[i + 1].trimmed().toFloat(&okSig);
115 if (!okRad || !okSig) {
116 nlayer = 0;
117 break;
118 }
119 rads.conservativeResize(nlayer + 1);
120 sigmas.conservativeResize(nlayer + 1);
121 rads[nlayer] = r;
122 sigmas[nlayer] = s;
123 nlayer++;
124 }
125 if (nlayer > 0)
127 }
128 return now;
129}
130
131//=============================================================================================================
132//fwd_eeg_sphere_models.c
134{
135 QString name("Default");
136
137 if (!p_sName.isEmpty())
138 name = p_sName;
139
140 if (this->nmodel() == 0) {
141 qWarning("No EEG sphere model definitions available");
142 return nullptr;
143 }
144
145 for (int k = 0; k < this->nmodel(); k++) {
146 if (this->models[k]->name.compare(name) == 0) {
147 qInfo("Selected model: %s", this->models[k]->name.toUtf8().constData());
148 return new FwdEegSphereModel(*(this->models[k]));
149 }
150 }
151 qWarning("EEG sphere model %s not found.", name.toUtf8().constData());
152 return nullptr;
153}
154
155//=============================================================================================================
156//dipole_fit_setup.c
158{
159 if (this->nmodel() <= 0)
160 return;
161 qInfo("Available EEG sphere models:");
162 for (int k = 0; k < this->nmodel(); k++) {
163 FwdEegSphereModel* this_model = this->models[k].get();
164 QString line = QString("\t%1 : %2").arg(this_model->name).arg(this_model->nlayer());
165 for (int p = 0; p < this_model->nlayer(); p++)
166 line += QString(" : %1 : %2").arg(this_model->layers[p].rel_rad, 7, 'f', 3).arg(this_model->layers[p].sigma, 7, 'f', 3);
167 qInfo("%s", line.toUtf8().constData());
168 }
169}
Named container of FwdEegSphereModel objects loaded from an mne_setup_eeg_sphere_model parameter file...
Forward modelling — BEM solver, spherical models, sensor/coil definitions and the lead-field assembly...
Definition compute_fwd.h:85
Multi-shell concentric-sphere head model holding the Berg-Scherg equivalent-source parameters that ac...
static FwdEegSphereModel::UPtr fwd_create_eeg_sphere_model(const QString &name, int nlayer, const Eigen::VectorXf &rads, const Eigen::VectorXf &sigmas)
std::vector< FwdEegSphereLayer > layers
std::unique_ptr< FwdEegSphereModel > UPtr
FwdEegSphereModel * fwd_select_eeg_sphere_model(const QString &p_sName)
static FwdEegSphereModelSet * fwd_add_default_eeg_sphere_model(FwdEegSphereModelSet *s)
static FwdEegSphereModelSet * fwd_add_to_eeg_sphere_model_set(FwdEegSphereModelSet *s, FwdEegSphereModel::UPtr m)
static FwdEegSphereModelSet * fwd_load_eeg_sphere_models(const QString &p_sFileName, FwdEegSphereModelSet *now)
std::vector< FwdEegSphereModel::UPtr > models