MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
fwd_eeg_sphere_model_set.cpp
Go to the documentation of this file.
1//=============================================================================================================
37//=============================================================================================================
38// INCLUDES
39//=============================================================================================================
40
42
43//=============================================================================================================
44// QT INCLUDES
45//=============================================================================================================
46
47#include <QString>
48#include <QFile>
49
50#include <Eigen/Core>
51
52using namespace Eigen;
53
54//=============================================================================================================
55// STATIC DEFINITIONS
56//=============================================================================================================
57
58/*
59 * Basics...
60 */
61#define MALLOC_2(x,t) (t *)malloc((x)*sizeof(t))
62#define REALLOC_2(x,y,t) (t *)((x == NULL) ? malloc((y)*sizeof(t)) : realloc((x),(y)*sizeof(t)))
63#define FREE_2(x) if ((char *)(x) != NULL) free((char *)(x))
64
65#define MAXLINE 500
66
67#ifndef FAIL
68#define FAIL -1
69#endif
70
71#ifndef OK
72#define OK 0
73#endif
74
75#define SEP ":\n\r"
76
77//=============================================================================================================
78// EIGEN INCLUDES
79//=============================================================================================================
80
81//=============================================================================================================
82// USED NAMESPACES
83//=============================================================================================================
84
85using namespace FWDLIB;
86
87//=============================================================================================================
88// DEFINE MEMBER METHODS
89//=============================================================================================================
90
94
96
97//FwdEegSphereModelSet::FwdEegSphereModelSet(const FwdEegSphereModelSet &p_FwdEegSphereModelSet)
98//: m_qListModels(p_FwdEegSphereModelSet.m_qListModels)
99//{
100
101//}
102
103//=============================================================================================================
104
106{
107 for (int k = 0; k < this->nmodel(); k++)
108 delete this->models[k];
109}
110
111//=============================================================================================================
112
113//void FwdEegSphereModelSet::fwd_free_eeg_sphere_model_set(FwdEegSphereModelSet* s)
114
115//{
116// if (!s)
117// return;
118
119// return;
120//}
121
122//=============================================================================================================
123
124//FwdEegSphereModelSet* FwdEegSphereModelSet::fwd_new_eeg_sphere_model_set()
125//{
126// FwdEegSphereModelSet* s = new FwdEegSphereModelSet;
127
128// return s;
129//}
130
131//=============================================================================================================
132
133FwdEegSphereModelSet* FwdEegSphereModelSet::fwd_add_to_eeg_sphere_model_set(FwdEegSphereModelSet* s, FwdEegSphereModel* m)
134{
135 if (!s)
136 s = new FwdEegSphereModelSet;
137
138 s->models.append(m);
139 return s;
140}
141
142//=============================================================================================================
143//fwd_eeg_sphere_models.c
145{
146 static const int def_nlayer = 4;
147 VectorXf def_unit_rads(def_nlayer);
148 def_unit_rads << 0.90f,0.92f,0.97f,1.0f;
149 VectorXf def_sigmas(def_nlayer);
150 def_sigmas << 0.33f,1.0f,0.4e-2f,0.33f;
151
152 return FwdEegSphereModelSet::fwd_add_to_eeg_sphere_model_set(s,FwdEegSphereModel::fwd_create_eeg_sphere_model("Default",
153 def_nlayer,def_unit_rads,def_sigmas));
154}
155
156//=============================================================================================================
157//fwd_eeg_sphere_models.c
159{
160 char line[MAXLINE];
161 FILE *fp = NULL;
162 QString name;
163 VectorXf rads;
164 VectorXf sigmas;
165 int nlayer = 0;
166 char *one, *two;
167 QString tag;
168
169 if (!now)
171
172 if (filename.isEmpty())
173 return now;
174
175 QFile t_file(filename);
176 if (!t_file.isReadable()) /* Never mind about an unaccesible file */
177 return now;
178
179 if ((fp = fopen(filename.toUtf8().data(),"r")) == NULL) {
180 printf(filename.toUtf8().data());
181 goto bad;
182 }
183 while (fgets(line,MAXLINE,fp) != NULL) {
184 if (line[0] == '#')
185 continue;
186 one = strtok(line,SEP);
187 if (one != NULL) {
188 if (tag.isEmpty() || tag.size() == 0)
189 name = one;
190 else {
191 name = QString("%1 %2").arg(one).arg(tag);
192 }
193 while (1) {
194 one = strtok(NULL,SEP);
195 if (one == NULL)
196 break;
197 two = strtok(NULL,SEP);
198 if (two == NULL)
199 break;
200 rads.resize(nlayer+1);
201 sigmas.resize(nlayer+1);
202 if (sscanf(one,"%g",rads[nlayer]) != 1) {
203 nlayer = 0;
204 break;
205 }
206 if (sscanf(two,"%g",sigmas[nlayer]) != 1) {
207 nlayer = 0;
208 break;
209 }
210 nlayer++;
211 }
212 if (nlayer > 0)
213 now = fwd_add_to_eeg_sphere_model_set(now,FwdEegSphereModel::fwd_create_eeg_sphere_model(name,nlayer,rads,sigmas));
214 nlayer = 0;
215 }
216 }
217 if (ferror(fp)) {
218 printf(filename.toUtf8().data());
219 goto bad;
220 }
221 fclose(fp);
222 return now;
223
224bad : {
225 if (fp)
226 fclose(fp);
227 delete now;
228 return NULL;
229 }
230}
231
232//=============================================================================================================
233//fwd_eeg_sphere_models.c
235{
236 int k;
237
238 QString name("Default");
239
240 if (!p_sName.isEmpty())
241 name = p_sName;
242
243 if (this->nmodel() == 0) {
244 printf("No EEG sphere model definitions available");
245 return NULL;
246 }
247
248 for (k = 0; k < this->nmodel(); k++) {
249 if (this->models[k]->name.compare(name) == 0) {
250 printf("Selected model: %s\n",this->models[k]->name.toUtf8().constData());
251 return new FwdEegSphereModel(*(this->models[k]));
252 }
253 }
254 printf("EEG sphere model %s not found.",name.toUtf8().constData());
255 return NULL;
256}
257
258//=============================================================================================================
259//dipole_fit_setup.c
261{
262 int k,p;
263 FwdEegSphereModel* this_model;
264
265 if ( this->nmodel() < 0 )
266 return;
267 fprintf(f,"Available EEG sphere models:\n");
268 for (k = 0; k < this->nmodel(); k++) {
269 this_model = this->models[k];
270 fprintf(f,"\t%s : %d",this_model->name.toUtf8().constData(),this_model->nlayer());
271 for (p = 0; p < this_model->nlayer(); p++)
272 fprintf(f," : %7.3f : %7.3f",this_model->layers[p].rel_rad,this_model->layers[p].sigma);
273 fprintf(f,"\n");
274 }
275}
276
278
279//void FwdEegSphereModelSet::addFwdEegSphereModel(const FwdEegSphereModel &p_FwdEegSphereModel)
280//{
281// m_qListModels.append(p_FwdEegSphereModel);
282//}
283
285
286//const FwdEegSphereModel& FwdEegSphereModelSet::operator[] (qint32 idx) const
287//{
288// if (idx>=m_qListModels.length())
289// {
290// qWarning("Warning: Required FwdEegSphereModel doesn't exist! Returning FwdEegSphereModel '0'.");
291// idx=0;
292// }
293// return m_qListModels[idx];
294//}
295
297
298//FwdEegSphereModel& FwdEegSphereModelSet::operator[] (qint32 idx)
299//{
300// if (idx >= m_qListModels.length())
301// {
302// qWarning("Warning: Required FwdEegSphereModel doesn't exist! Returning FwdEegSphereModel '0'.");
303// idx = 0;
304// }
305// return m_qListModels[idx];
306//}
307
309
310//FwdEegSphereModelSet &FwdEegSphereModelSet::operator<<(const FwdEegSphereModel &p_FwdEegSphereModel)
311//{
312// this->m_qListModels.append(p_FwdEegSphereModel);
313// return *this;
314//}
int k
Definition fiff_tag.cpp:324
FwdEegSphereModelSet class declaration.
Electric Current Dipole description.
QList< FwdEegSphereLayer > layers
Holds a set of Electric Current Dipoles.
QList< FwdEegSphereModel * > models
FwdEegSphereModel * fwd_select_eeg_sphere_model(const QString &p_sName)
static FwdEegSphereModelSet * fwd_add_default_eeg_sphere_model(FwdEegSphereModelSet *s)
static FwdEegSphereModelSet * fwd_load_eeg_sphere_models(const QString &p_sFileName, FwdEegSphereModelSet *now)