v2.0.0
Loading...
Searching...
No Matches
fwd_eeg_sphere_model_set.cpp
Go to the documentation of this file.
1//=============================================================================================================
36
37//=============================================================================================================
38// INCLUDES
39//=============================================================================================================
40
42
43//=============================================================================================================
44// QT INCLUDES
45//=============================================================================================================
46
47#include <QString>
48#include <QFile>
49#include <QRegularExpression>
50#include <QTextStream>
51
52#include <Eigen/Core>
53
54using namespace Eigen;
55
56//=============================================================================================================
57// USED NAMESPACES
58//=============================================================================================================
59
60using namespace FWDLIB;
61
62//=============================================================================================================
63// DEFINE MEMBER METHODS
64//=============================================================================================================
65
69
70//=============================================================================================================
71
75
76//=============================================================================================================
77
86
87//=============================================================================================================
88//fwd_eeg_sphere_models.c
90{
91 static const int def_nlayer = 4;
92 VectorXf def_unit_rads(def_nlayer);
93 def_unit_rads << 0.90f,0.92f,0.97f,1.0f;
94 VectorXf def_sigmas(def_nlayer);
95 def_sigmas << 0.33f,1.0f,0.4e-2f,0.33f;
96
98 def_nlayer,def_unit_rads,def_sigmas));
99}
100
101//=============================================================================================================
102//fwd_eeg_sphere_models.c
104{
105 if (!now)
107
108 if (filename.isEmpty())
109 return now;
110
111 QFile file(filename);
112 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
113 return now;
114
115 QTextStream in(&file);
116 QString name;
117 VectorXf rads;
118 VectorXf sigmas;
119 int nlayer = 0;
120
121 while (!in.atEnd()) {
122 QString line = in.readLine().trimmed();
123 if (line.isEmpty() || line.startsWith('#'))
124 continue;
125
126 QStringList parts = line.split(QRegularExpression("[:\\n\\r]"), Qt::SkipEmptyParts);
127 if (parts.isEmpty())
128 continue;
129
130 name = parts[0].trimmed();
131 nlayer = 0;
132
133 for (int i = 1; i + 1 < parts.size(); i += 2) {
134 bool okRad = false, okSig = false;
135 float r = parts[i].trimmed().toFloat(&okRad);
136 float s = parts[i + 1].trimmed().toFloat(&okSig);
137 if (!okRad || !okSig)
138 break;
139 rads.conservativeResize(nlayer + 1);
140 sigmas.conservativeResize(nlayer + 1);
141 rads[nlayer] = r;
142 sigmas[nlayer] = s;
143 nlayer++;
144 }
145 if (nlayer > 0)
147 }
148 return now;
149}
150
151//=============================================================================================================
152//fwd_eeg_sphere_models.c
154{
155 QString name("Default");
156
157 if (!p_sName.isEmpty())
158 name = p_sName;
159
160 if (this->nmodel() == 0) {
161 qWarning("No EEG sphere model definitions available");
162 return nullptr;
163 }
164
165 for (int k = 0; k < this->nmodel(); k++) {
166 if (this->models[k]->name.compare(name) == 0) {
167 qInfo("Selected model: %s",this->models[k]->name.toUtf8().constData());
168 return new FwdEegSphereModel(*(this->models[k]));
169 }
170 }
171 qWarning("EEG sphere model %s not found.",name.toUtf8().constData());
172 return nullptr;
173}
174
175//=============================================================================================================
176//dipole_fit_setup.c
178{
179 if (this->nmodel() <= 0)
180 return;
181 qInfo("Available EEG sphere models:");
182 for (int k = 0; k < this->nmodel(); k++) {
183 FwdEegSphereModel* this_model = this->models[k].get();
184 QString line = QString("\t%1 : %2").arg(this_model->name).arg(this_model->nlayer());
185 for (int p = 0; p < this_model->nlayer(); p++)
186 line += QString(" : %1 : %2").arg(this_model->layers[p].rel_rad, 7, 'f', 3).arg(this_model->layers[p].sigma, 7, 'f', 3);
187 qInfo("%s", line.toUtf8().constData());
188 }
189}
190
FwdEegSphereModelSet class declaration.
Forward modelling (BEM, MEG/EEG lead fields).
Definition compute_fwd.h:91
Multi-layer spherical head model for EEG forward computation.
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