MNE-CPP  beta 1.0
main.cpp
1 //=============================================================================================================
38 //*************************************************************************************************************
39 //=============================================================================================================
40 // INCLUDES
41 //=============================================================================================================
42 
43 #include <fs/label.h>
44 #include <fs/surface.h>
45 #include <fs/annotationset.h>
46 
47 #include <fiff/fiff_evoked.h>
48 #include <fiff/fiff.h>
49 #include <mne/mne.h>
50 
52 
53 #include <mne/mne_sourceestimate.h>
55 
56 #include <disp3D/inverseview.h>
57 
58 #include <utils/mnemath.h>
59 
60 #include <iostream>
61 
62 
63 //*************************************************************************************************************
64 //=============================================================================================================
65 // QT INCLUDES
66 //=============================================================================================================
67 
68 #include <QGuiApplication>
69 #include <QSet>
70 #include <QDir>
71 
72 
73 //*************************************************************************************************************
74 //=============================================================================================================
75 // USED NAMESPACES
76 //=============================================================================================================
77 
78 using namespace MNELIB;
79 using namespace FSLIB;
80 using namespace FIFFLIB;
81 using namespace INVERSELIB;
82 using namespace DISP3DLIB;
83 using namespace UTILSLIB;
84 
85 
86 //*************************************************************************************************************
87 //=============================================================================================================
88 // MAIN
89 //=============================================================================================================
90 
91 //=============================================================================================================
100 int main(int argc, char *argv[])
101 {
102  QGuiApplication a(argc, argv);
103 
104  //############################# Data location and configs - Change if necessary ############################################
105 
106  //source localization type
107  QString method("MNE"); //"MNE" | "dSPM" | "sLORETA"
108 
109  //Choose which epoch to take - i.e. for every 4th epoch set to 4
110  int averageIterator = 1;
111 
112  bool doRawTrialLocalization = false;
113 
114  //measurement data location (data location must always has same directory structure - see dropbox folder for more information)
115  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2013_12_05_Lorenz_Esch_001");
116  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_01_10_Lorenz_Esch_002");
117  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_01_14_Lorenz_Esch_003");
118  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_01_28_Lorenz_Esch_004");
119  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_02_04_Lorenz_Esch_005");
120  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_02_05_Uwe_Graichen_006");
121  QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_02_07_Lorenz_Esch_007");
122  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_02_24_Lorenz_Esch_008");
123  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_02_25_Christoph_Dinh_009");
124  //QString data_location("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_03_17_Lorenz_Esch_010");
125 
126  //Forward solution
127  //QFile t_fileFwd("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/Lorenz-131212-Duke128-fwd.fif");
128  //QFile t_fileFwd("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/Lorenz-140112-Duke128-fwd.fif");
129  //QFile t_fileFwd("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/Lorenz-140114-Duke128-fwd.fif");
130  //QFile t_fileFwd("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/Lorenz-140123-Duke128-fwd.fif");
131  QFile t_fileFwd("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/Lorenz-140128-Duke128-fwd.fif");
132 
133 
134  //Surface generated by freesurfer
135  SurfaceSet t_surfSet("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/surface/lh.white", "D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/surface/rh.white");
136 
137  //AnnotationSet (See Destrieux paper)
138  AnnotationSet t_annotationSet("D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/atlas/lh.aparc.a2009s.annot", "D:/Dropbox/Masterarbeit DB/Messdaten/Forward solutions/atlas/rh.aparc.a2009s.annot");
139 
141  //********************************** Involuntary Tapping ***********************************//
142  //time read around events - note: trigger point is the pressing of the button, not the atual
143 // float tmin = -2.0f;
144 // float tmax = 2.0f;
145 
146 // //Filtered 7-14Hz left tapping
147 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_left_tapping_filtered_7_14_raw.fif");
148 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_7_14_raw-cov.fif");
149 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_left_tapping_131_raw-eve.fif");
150 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_left_tapping_filtered_7_14_Averaged_");
151 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_left_tapping_filtered_7_14_Averaged_");
152 
153 // //Filtered 7-14Hz right tapping
154 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_right_tapping_filtered_7_14_raw.fif");
155 // QString t_sCovFileNameRel ("/Processed/covariance/EEEG_data_001_base_filtered_7_14_raw-cov.fif");
156 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_right_tapping_136_raw-eve.fif");
157 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_right_tapping_filtered_7_14_Averaged_");
158 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_right_tapping_filtered_7_14_Averaged_");
159 
160 // //Filtered 0.7-40Hz left tapping
161 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_left_tapping_filtered_07_40_raw.fif");
162 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_07_40_raw-cov.fif");
163 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_left_tapping_131_raw-eve.fif");
164 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_left_tapping_filtered_07_40_Averaged_");
165 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_left_tapping_filtered_07_40_Averaged_");
166 
167 // //Filtered 0.7-40Hz right tapping
168 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_right_tapping_filtered_07_40_raw.fif");
169 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_07_40_raw-cov.fif");
170 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_right_tapping_136_raw-eve.fif");
171 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_right_tapping_filtered_07_40_Averaged_");
172 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_right_tapping_filtered_07_40_Averaged_");
173 
175 
176  //********************************** Voluntary Tapping ***********************************//
177 
178 // //time read around events - note: trigger point is the pressing of the button, not the atual
179 // float tmin = -1.0f;
180 // float tmax = 1.0f;
181 
182 // //Original left tapping - no filtering DC still present
183 // QString t_sRawFileNameRel ("/Original/EEG_data_001_right_tapping_raw.fif");
184 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_raw-cov.fif");
185 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_right_tapping_raw-eve.fif");
186 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_right_tapping_Averaged_");
187 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_right_tapping_Averaged_");
188 
189 // //Filtered 0.6-40Hz left tapping
190 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_left_tapping_filtered_06_40_raw.fif");
191 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_left_tapping_filtered_06_40_raw-cov.fif");
192 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_left_tapping_raw-eve.fif");
193 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_left_tapping_filtered_06_40_Averaged_");
194 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_left_tapping_filtered_06_40_Averaged_");
195 
196 // //Filtered 0.6-40Hz right tapping
197 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_right_tapping_filtered_06_40_raw.fif");
198 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_right_tapping_filtered_06_40_raw-cov.fif");
199 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_right_tapping_raw-eve.fif");
200 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_right_tapping_filtered_06_40_Averaged_");
201 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_right_tapping_filtered_06_40_Averaged_");
202 
203 // //Filtered 7-14Hz left tapping
204 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_voluntary_left_tapping_filtered_7_14_raw.fif");
205 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_tapping_base_filtered_7_14_raw-cov.fif");
206 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_voluntary_left_tapping_artefact_reduction_-1_1_0.002_71_raw-eve.fif");
207 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_left_tapping_filtered_7_14_Averaged_");
208 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_voluntary_left_tapping_filtered_7_14_Averaged_");
209 
210 // //Filtered 7-14Hz right tapping
211 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_voluntary_right_tapping_filtered_7_14_raw.fif");
212 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_tapping_base_filtered_7_14_raw-cov.fif");
213 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_voluntary_right_tapping_artefact_reduction_-1_1_0.003_69_raw-eve.fif");
214 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_right_tapping_filtered_7_14_Averaged_");
215 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_voluntary_right_tapping_filtered_7_14_Averaged_");
216 
217 // //Filtered 0.7-40Hz left tapping
218 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_voluntary_left_tapping_filtered_07_40_raw.fif");
219 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_tapping_base_filtered_07_40_raw-cov.fif");
220 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_voluntary_left_tapping_222_raw-eve.fif");
221 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_left_tapping_filtered_07_40_Averaged_");
222 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_voluntary_left_tapping_filtered_07_40_Averaged_");
223 
224 // //Filtered 0.7-40Hz right tapping
225 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_voluntary_right_tapping_filtered_07_40_raw.fif");
226 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_tapping_base_filtered_07_40_raw-cov.fif");
227 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_voluntary_right_tapping_184_raw-eve.fif");
228 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_right_tapping_filtered_07_40_Averaged_");
229 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_voluntary_right_tapping_filtered_07_40_Averaged_");
230 
231  //********************************** Medianus stimulation **********************************//
232 
233 // //time read around events - note: trigger point is the pressing of the button, not the atual
234 // float tmin = -1.0f;
235 // float tmax = 1.0f;
236 
237 // //Original left medianus stimulation - no filtering DC still present
238 // QString t_sRawFileNameRel ("/Original/EEG_data_002_medianus_left_raw.fif");
239 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_medianus_base_raw-cov.fif");
240 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_medianus_left_240_raw-eve.fif");
241 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_medianus_left_Averaged_");
242 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_medianus_left_Averaged_");
243 
244 // //Original right medianus stimulation - no filtering DC still present
245 // QString t_sRawFileNameRel ("/Original/EEG_data_002_medianus_right_raw.fif");
246 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_medianus_base_raw-cov.fif");
247 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_medianus_right_295_raw-eve.fif");
248 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_medianus_right_Averaged_");
249 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_medianus_right_Averaged_");
250 
251 // //Filtered 0.7-40Hz left medianus stimulation
252 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_medianus_left_filtered_07_40_raw.fif");
253 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_medianus_base_filtered_07_40_raw-cov.fif");
254 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_medianus_left_artefact_reduction_-1_1_0.002_80_raw-eve.fif"); // ("EEG_data_002_medianus_left_raw-eve")
255 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_medianus_left_filtered_07_40_Averaged_");
256 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_medianus_left_filtered_07_40_Averaged_");
257 
258 // //Filtered 0.7-40Hz right medianus stimulation
259 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_medianus_right_filtered_07_40_raw.fif");
260 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_medianus_base_filtered_07_40_raw-cov.fif");
261 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_medianus_right_artefact_reduction_-1_1_0.0025_93_raw-eve.fif"); // ("EEG_data_002_medianus_right_raw-eve")
262 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_medianus_right_filtered_07_40_Averaged_");
263 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_medianus_right_filtered_07_40_Averaged_");
264 
265 // //Filtered 7-14Hz left medianus stimulation
266 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_medianus_left_filtered_7_14_raw.fif");
267 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_medianus_base_filtered_7_14_raw-cov.fif");
268 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_medianus_left_artefact_reduction_-1_1_0.002_80_raw-eve.fif");
269 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_medianus_left_filtered_7_14_Averaged_");
270 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_medianus_left_filtered_7_14_Averaged_");
271 
272 // //Filtered 7-14Hz right medianus stimulation
273 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_medianus_right_filtered_7_14_raw.fif");
274 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_medianus_base_filtered_7_14_raw-cov.fif");
275 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_medianus_right_artefact_reduction_-1_1_0.0025_93_raw-eve.fif");
276 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_medianus_right_filtered_7_14_Averaged_");
277 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_medianus_right_filtered_7_14_Averaged_");
278 
279  //*************************** Voluntary opposing finger movement **************************//
280 
281 // //time read around events - note: trigger point is the pressing of the button, not the atual
282 // float tmin = -0.3f;
283 // float tmax = 0.1f;
284 
285 // //Original left opposing finger movement - no filtering DC still present
286 // QString t_sRawFileNameRel ("/Original/EEG_data_001_voluntary_left_opposing_raw.fif");
287 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_base_raw-cov.fif");
288 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_left_opposing_89_raw-eve.fif");
289 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_left_Averaged_");
290 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_left_Averaged_");
291 
292 // //Original right opposing finger movement - no filtering DC still present
293 // QString t_sRawFileNameRel ("/Original/EEG_data_001_voluntary_right_opposing_raw.fif");
294 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_base_raw-cov.fif");
295 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_right_opposing_90_raw-eve.fif");
296 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_right_Averaged_");
297 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_right_Averaged_");
298 
299 // //Filtered 7-14Hz left voluntary finger opposing
300 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_voluntary_left_opposing_filtered_7_14_raw.fif");
301 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_opposing_base_filtered_7_14_raw-cov.fif");
302 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_left_opposing_154_raw-eve.fif");
303 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_left_opposing_filtered_7_14_Averaged_");
304 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_left_opposing_filtered_7_14_Averaged_");
305 
306 // //Filtered 7-14Hz right voluntary finger opposing
307 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_voluntary_right_opposing_filtered_7_14_raw.fif");
308 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_opposing_base_filtered_7_14_raw-cov.fif");
309 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_right_opposing_135_raw-eve.fif");
310 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_right_opposing_filtered_7_14_Averaged_");
311 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_right_opposing_filtered_7_14_Averaged_");
312 
313 // //Filtered 0.7-40Hz left voluntary finger opposing
314 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_voluntary_left_opposing_filtered_07_40_raw.fif");
315 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_opposing_base_filtered_07_40_raw-cov.fif");
316 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_left_opposing_137_raw-eve.fif");
317 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_left_opposing_filtered_07_40_Averaged_");
318 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_left_opposing_filtered_07_40_Averaged_");
319 
320 // //Filtered 0.7-40Hz right voluntary finger opposing
321 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_voluntary_right_opposing_filtered_07_40_raw.fif");
322 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_voluntary_opposing_base_filtered_07_40_raw-cov.fif");
323 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_right_opposing_135_raw-eve.fif");
324 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_voluntary_right_opposing_filtered_07_40_Averaged_");
325 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_right_opposing_filtered_07_40_Averaged_");
326 
327 
328  //*************************** Involuntary opposing finger movement **************************//
329 
330  //time read around events - note: trigger point is the pressing of the button
331  float tmin = -1.0f;
332  float tmax = 1.0f;
333 
334 // //Filtered 7-14Hz left involuntary finger opposing
335 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_left_opposing_filtered_7_14_raw.fif");
336 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_7_14_raw-cov.fif");
337 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_left_opposing_137_raw-eve.fif");
338 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_left_opposing_filtered_7_14_Averaged_");
339 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_left_opposing_filtered_7_14_Averaged_");
340 
341 // //Filtered 7-14Hz right involuntary finger opposing
342 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_right_opposing_filtered_7_14_raw.fif");
343 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_7_14_raw-cov.fif");
344 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_right_opposing_150_raw-eve.fif");
345 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_right_opposing_filtered_7_14_Averaged_");
346 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_right_opposing_filtered_7_14_Averaged_");
347 
348 // //Filtered 0.7-40Hz left involuntary finger opposing
349 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_left_opposing_filtered_07_40_raw.fif");
350 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_07_40_raw-cov.fif");
351 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_left_opposing_137_raw-eve.fif");
352 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_left_opposing_filtered_07_40_Averaged_");
353 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_left_opposing_filtered_07_40_Averaged_");
354 
355  //Filtered 0.7-40Hz right involuntary finger opposing
356  QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_001_involuntary_right_opposing_filtered_07_40_raw.fif");
357  QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_001_base_filtered_07_40_raw-cov.fif");
358  QString t_sEventFileNameRel("/Processed/events/EEG_data_001_involuntary_right_opposing_150_raw-eve.fif");
359  QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_involuntary_right_opposing_filtered_07_40_Averaged_");
360  QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_involuntary_right_opposing_filtered_07_40_Averaged_");
361 
362  //*************************** Motor imagery **************************//
363 
364 // //time read around events - note: trigger point is the pressing of the button, not the atual
365 // float tmin = -1.0f;
366 // float tmax = 6.0f;
367 
368 // //Filtered 7-14Hz left MI
369 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_left_MI_filtered_7_14_raw.fif");
370 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_002_base_filtered_7_14_raw-cov.fif");
371 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_left_MI_filtered_100_raw-eve.fif");
372 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_left_MI_filtered_7_14_Averaged_");
373 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_left_MI_filtered_7_14_Averaged_");
374 
375 // //Filtered 7-14Hz right MI
376 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_right_MI_filtered_7_14_raw.fif");
377 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_002_base_filtered_7_14_raw-cov.fif");
378 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_right_MI_filtered_105_raw-eve.fif");
379 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_right_MI_filtered_7_14_Averaged_");
380 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_right_MI_filtered_7_14_Averaged_");
381 
382 // //Filtered 0.7-40Hz left MI
383 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_left_MI_filtered_07_40_raw.fif");
384 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_002_base_filtered_07_40_raw-cov.fif");
385 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_left_MI_filtered_100_raw-eve.fif");
386 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_left_MI_filtered_07_40_Averaged_");
387 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_left_MI_filtered_07_40_Averaged_");
388 
389 // //Filtered 0.7-40Hz right MI
390 // QString t_sRawFileNameRel ("/Processed/filtered/EEG_data_002_right_MI_filtered_07_40_raw.fif");
391 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_002_base_filtered_07_40_raw-cov.fif");
392 // QString t_sEventFileNameRel("/Processed/events/EEG_data_002_right_MI_filtered_105_raw-eve.fif");
393 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_right_MI_filtered_07_40_Averaged_");
394 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_002_right_MI_filtered_07_40_Averaged_");
395 
396  //*************************** BCI lefti right in one file finger tapping **************************//
397 
398 // //time read around events - note: trigger point is the pressing of the button, not the atual
399 // float tmin = -1.0f;
400 // float tmax = 1.0f;
401 
402 // //Filtered 7-14Hz left MI
403 // QString t_sRawFileNameRel ("/Original/EEG_data_001_voluntary_left_right_tapping_raw.fif");
404 // QString t_sCovFileNameRel ("/Processed/covariance/EEG_data_002_base_filtered_7_14_raw-cov.fif");
405 // QString t_sEventFileNameRel("/Processed/events/EEG_data_001_voluntary_left_right_tapping_234_raw-eve.fif");
406 // QString t_sStcFileNameRel ("/Processed/stc/SourceLoc_left_MI_filtered_7_14_Averaged_");
407 // QString t_sAvrFileNameRel ("/Processed/averaged/EEG_data_001_voluntary_right_tapping_raw_Averaged_");
408 
409  //##########################################################################################################################
410 
411  //Create final location dirs and files
412  QFile t_fileRaw(t_sRawFileNameRel.prepend(data_location));
413  QFile t_fileCov(t_sCovFileNameRel.prepend(data_location));
414  QString t_sEventName = t_sEventFileNameRel.prepend(data_location);
415 
416  qint32 event = 1; //254-right trigger | 253-left trigger | 252-beep | 1-old eventfile value for trigger
417 
418  qint32 k, p;
419  fiff_int_t dest_comp = 0;
420  bool keep_comp = false;
421  bool pick_all = false;
422 
423  //
424  // Setup for reading the raw data
425  //
426  FiffRawData raw(t_fileRaw);
427 
428  RowVectorXi picks;
429  if (pick_all)
430  {
431  //
432  // Pick all
433  //
434  picks.resize(raw.info.nchan);
435 
436  for(k = 0; k < raw.info.nchan; ++k)
437  picks(k) = k;
438  //
439  }
440  else
441  {
442  QStringList include;
443  //include << "STI 014";
444  bool want_meg = false;
445  bool want_eeg = true;
446  bool want_stim = false;
447 
448  picks = raw.info.pick_types(want_meg, want_eeg, want_stim, include, raw.info.bads);//prefer member function
449  }
450 
451  QStringList ch_names;
452  for(k = 0; k < picks.cols(); ++k)
453  ch_names << raw.info.ch_names[picks(0,k)];
454 
455  //
456  // Set up projection
457  //
458  if (raw.info.projs.size() == 0)
459  printf("No projector specified for these data\n");
460  else
461  {
462  //
463  // Activate the projection items
464  //
465  for (k = 0; k < raw.info.projs.size(); ++k)
466  raw.info.projs[k].active = true;
467 
468  printf("%d projection items activated\n",raw.info.projs.size());
469 
470  //
471  // Create the projector
472  //
473  fiff_int_t nproj = raw.info.make_projector(raw.proj);
474 
475  if (nproj == 0)
476  {
477  printf("The projection vectors do not apply to these channels\n");
478  }
479  else
480  {
481  printf("Created an SSP operator (subspace dimension = %d)\n",nproj);
482  }
483  }
484 
485  //
486  // Set up the CTF compensator
487  //
488  qint32 current_comp = raw.info.get_current_comp();
489  if (current_comp > 0)
490  printf("Current compensation grade : %d\n",current_comp);
491 
492  if (keep_comp)
493  dest_comp = current_comp;
494 
495  if (current_comp != dest_comp)
496  {
497  qDebug() << "This part needs to be debugged";
498  if(MNE::make_compensator(raw.info, current_comp, dest_comp, raw.comp))
499  {
500  raw.info.set_current_comp(dest_comp);
501  printf("Appropriate compensator added to change to grade %d.\n",dest_comp);
502  }
503  else
504  {
505  printf("Could not make the compensator\n");
506  return 0;
507  }
508  }
509 
510  //
511  // Read the events
512  //
513  QFile t_EventFile;
514  MatrixXi events;
515  if (t_sEventName.size() == 0)
516  {
517  p = t_fileRaw.fileName().indexOf(".fif");
518  if (p > 0)
519  {
520  t_sEventName = t_fileRaw.fileName().replace(p, 4, "-eve.fif");
521  }
522  else
523  {
524  printf("Raw file name does not end properly\n");
525  return 0;
526  }
527 
528  t_EventFile.setFileName(t_sEventName);
529  MNE::read_events(t_EventFile, events);
530  printf("Events read from %s\n",t_sEventName.toUtf8().constData());
531  }
532  else
533  {
534  //
535  // Binary file
536  //
537  p = t_fileRaw.fileName().indexOf(".fif");
538  if (p > 0)
539  {
540  t_EventFile.setFileName(t_sEventName);
541  if(!MNE::read_events(t_EventFile, events))
542  {
543  printf("Error while read events.\n");
544  return 0;
545  }
546  printf("Binary event file %s read\n",t_sEventName.toUtf8().constData());
547  }
548  else
549  {
550  //
551  // Text file
552  //
553  printf("Text file %s is not supported jet.\n",t_sEventName.toUtf8().constData());
554  }
555  }
556 
557  //
558  // Select the desired events
559  //
560  qint32 count = 0;
561  MatrixXi selected = MatrixXi::Zero(1, events.rows());
562  for (p = 0; p < events.rows(); ++p)
563  {
564  if (events(p,1) == 0 && events(p,2) == event)
565  {
566  selected(0,count) = p;
567  ++count;
568  }
569  }
570  selected.conservativeResize(1, count);
571  if (count > 0)
572  printf("%d matching events found\n",count);
573  else
574  {
575  printf("No desired events found.\n");
576  return 0;
577  }
578 
579  fiff_int_t event_samp, from, to;
580  MatrixXd timesDummy;
581 
582  MNEEpochDataList data;
583 
584  MNEEpochData* epoch = NULL;
585 
586  MatrixXd times;
587 
588  for (p = 0; p < count; ++p)
589  {
590  //
591  // Read a data segment
592  //
593  event_samp = events(selected(p),0);
594  from = event_samp + tmin*raw.info.sfreq;
595  to = event_samp + floor(tmax*raw.info.sfreq + 0.5);
596 
597  epoch = new MNEEpochData();
598 
599  if(raw.read_raw_segment(epoch->epoch, timesDummy, from, to, picks))
600  {
601  if (p == 0)
602  {
603  times.resize(1, to-from+1);
604  for (qint32 i = 0; i < times.cols(); ++i)
605  times(0, i) = ((float)(from-event_samp+i)) / raw.info.sfreq;
606  }
607 
608  epoch->event = event;
609  epoch->tmin = ((float)(from)-(float)(raw.first_samp))/raw.info.sfreq;
610  epoch->tmax = ((float)(to)-(float)(raw.first_samp))/raw.info.sfreq;
611 
612  data.append(MNEEpochData::SPtr(epoch)); //List takes ownwership of the pointer - no delete need
613  }
614  else
615  {
616  printf("Can't read the event data segments");
617  return 0;
618  }
619  }
620 
621  if(data.size() > 0)
622  {
623  printf("Read %d epochs, %d samples each.\n",data.size(),(qint32)data[0]->epoch.cols());
624 
625  //DEBUG
626  std::cout << data[0]->epoch.block(0,0,10,10) << std::endl;
627  qDebug() << data[0]->epoch.rows() << " x " << data[0]->epoch.cols();
628 
629  std::cout << times.block(0,0,1,10) << std::endl;
630  qDebug() << times.rows() << " x " << times.cols();
631  }
632 
633  //
634  // calculate the average
635  //
636 
637  //Only take first finger movement of each tapping session (each tapping session consists of 4 seperate finger movement)
638 // VectorXi vecSel(1);
639 // vecSel << 60;
640 
641  if(count<averageIterator)
642  averageIterator = count;
643 
644  VectorXi vecSel(count/averageIterator);
645 
646  int i;
647  for(i=0; i<count/averageIterator; i++)
648  vecSel[i] = i*averageIterator;
649 
650  // Add number of averages read from the eventfile to the file name
651  t_sAvrFileNameRel.append(t_sAvrFileNameRel.number(tmin));
652  t_sAvrFileNameRel.append("_");
653  t_sAvrFileNameRel.append(t_sAvrFileNameRel.number(tmax));
654  t_sAvrFileNameRel.append("_");
655  t_sAvrFileNameRel.append(t_sAvrFileNameRel.number(i));
656  t_sAvrFileNameRel.append(".fif");
657  QString t_sAvrFileName = t_sAvrFileNameRel.prepend(data_location);
658 
659  t_sStcFileNameRel.append(t_sStcFileNameRel.number(tmin));
660  t_sStcFileNameRel.append("_");
661  t_sStcFileNameRel.append(t_sStcFileNameRel.number(tmax));
662  t_sStcFileNameRel.append("_");
663  t_sStcFileNameRel.append(t_sStcFileNameRel.number(i));
664  t_sStcFileNameRel.append("_");
665  t_sStcFileNameRel.append(method.append(".stc"));
666  QString t_sFileNameStc = t_sStcFileNameRel.prepend(data_location);
667 
668  std::cout << "Select following epochs to average:\n" << vecSel << std::endl;
669  raw.info.filename = QString(""); //this need to be done in order to write a new file. otherwise some of the info contents are not getting copied correctly from raw.info (i.e. digitizer data)
670  FiffEvoked evoked = data.average(raw.info, tmin*raw.info.sfreq, floor(tmax*raw.info.sfreq + 0.5), vecSel);
671 
672  //Write averaged data to file
673  QFile m_fileOut(t_sAvrFileName);
674  RowVectorXd m_cals;
675 
676  FiffStream::SPtr m_pOutfid = Fiff::start_writing_raw(m_fileOut, raw.info, m_cals);
677  fiff_int_t first = 0;
678  m_pOutfid->write_int(FIFF_FIRST_SAMPLE, &first);
679  //m_pOutfid->finish_writing_raw();
680 
681  Eigen::MatrixXd eData = evoked.data;
682  Eigen::MatrixXd matValue = MatrixXd::Zero(eData.rows()+10, eData.cols());
683 
684  matValue.block(0,0,128,matValue.cols()) = evoked.data;
685 
686  m_pOutfid->write_raw_buffer(matValue, m_cals);
687 
688  m_pOutfid->finish_writing_raw();
689 
690  //################################# Source Estimate start ##########################################
691 
692  double snr = 0.1f;//1.0f;//3.0f;//0.1f;//3.0f;
693 
694  QString t_sFileNameClusteredInv("");
695 
696  // Parse command line parameters
697  for(qint32 i = 0; i < argc; ++i)
698  {
699  if(strcmp(argv[i], "-snr") == 0 || strcmp(argv[i], "--snr") == 0)
700  {
701  if(i + 1 < argc)
702  snr = atof(argv[i+1]);
703  }
704  else if(strcmp(argv[i], "-method") == 0 || strcmp(argv[i], "--method") == 0)
705  {
706  if(i + 1 < argc)
707  method = QString::fromUtf8(argv[i+1]);
708  }
709  else if(strcmp(argv[i], "-inv") == 0 || strcmp(argv[i], "--inv") == 0)
710  {
711  if(i + 1 < argc)
712  t_sFileNameClusteredInv = QString::fromUtf8(argv[i+1]);
713  }
714  else if(strcmp(argv[i], "-stc") == 0 || strcmp(argv[i], "--stc") == 0)
715  {
716  if(i + 1 < argc)
717  t_sFileNameStc = QString::fromUtf8(argv[i+1]);
718  }
719  }
720 
721  double lambda2 = 1.0 / pow(snr, 2);
722 
723 
724  qDebug() << "Start calculation with: SNR" << snr << "; Lambda" << lambda2 << "; Method" << method << "; stc:" << t_sFileNameStc;
725 
726  MNEForwardSolution t_Fwd(t_fileFwd);
727  if(t_Fwd.isEmpty())
728  return 1;
729 
730  FiffCov noise_cov(t_fileCov);
731 
732  // regularize noise covariance
733  noise_cov = noise_cov.regularize(evoked.info, 0.05, 0.05, 0.1, true);
734 
735  //
736  // Cluster forward solution;
737  //
738  MNEForwardSolution t_clusteredFwd = t_Fwd.cluster_forward_solution(t_annotationSet, 20);//40); % Use multithreading
739  //MNEForwardSolution t_clusteredFwd = t_Fwd.cluster_forward_solution(t_annotationSet, 10);//40);
740 
741  //MNEForwardSolution t_clusteredFwd = t_Fwd;
742 
743  //
744  // Find rows of interest in stc files
745  //
746 
747  QFile wrtFWD ("./mne_x_plugins/resources/tmsi/fwd_clustered.txt");
748  wrtFWD.open(QIODevice::WriteOnly | QIODevice::Text);
749  QTextStream out(&wrtFWD);
750 
751  //Read vertnos
752  VectorXi vertno_left = t_clusteredFwd.src[0].vertno;
753  VectorXi vertno_right = t_clusteredFwd.src[1].vertno;
754 
755  out<<"Vertno Left Hemi:"<<endl<<endl;
756  for(int i=0; i<vertno_left.rows(); i++)
757  out<<vertno_left[i]<<endl;
758 
759  out<<endl<<"Vertno right Hemi:"<<endl<<endl;
760  for(int i=0; i<vertno_right.rows(); i++)
761  out<<vertno_right[i]<<endl;
762 
763  //Read corresponding labels
764  VectorXi labelIds_left = t_annotationSet[0].getLabelIds();
765  out<<endl<<endl<<"labelIds_left:"<<endl<<endl;
766  for(int i=0; i<labelIds_left.rows(); i++)
767  out<<labelIds_left[i]<<endl;
768 
769  VectorXi labelIds_right = t_annotationSet[1].getLabelIds();
770  out<<endl<<endl<<"labelIds_right:"<<endl<<endl;
771  for(int i=0; i<labelIds_right.rows(); i++)
772  out<<labelIds_right[i]<<endl;
773 
774  //Find interesting rows in stc files
775  // Left hemisphere
776  QFile wrtFWD_28_left ("./mne_x_plugins/resources/tmsi/fwd_clustered_postcentral_28_Left.txt");
777  wrtFWD_28_left.open(QIODevice::WriteOnly | QIODevice::Text);
778  QTextStream out_28_left(&wrtFWD_28_left);
779 
780  QFile wrtFWD_29_left ("./mne_x_plugins/resources/tmsi/fwd_clustered_precentral_29_Left.txt");
781  wrtFWD_29_left.open(QIODevice::WriteOnly | QIODevice::Text);
782  QTextStream out_29_left(&wrtFWD_29_left);
783 
784  QFile wrtFWD_45_left ("./mne_x_plugins/resources/tmsi/fwd_clustered_central_45_Left.txt");
785  wrtFWD_45_left.open(QIODevice::WriteOnly | QIODevice::Text);
786  QTextStream out_45_left(&wrtFWD_45_left);
787 
788  QVector<int> interestingRows_Left;
789  out<<endl<<endl<<"interestingRows_Left (matlab syntax):"<<endl<<endl;
790  for(int i=0; i<vertno_left.rows() ; i++)
791  {
792  //G_postcentral
793  if(labelIds_left[vertno_left[i]] == 9221140)
794  {
795  interestingRows_Left.push_back(i);
796  out<<"Region 28 - G_postcentral: "<<i+1<<endl;
797  out_28_left<<i+1<<endl;
798  }
799 
800  //G_precentral
801  if(labelIds_left[vertno_left[i]] == 11832380)
802  {
803  interestingRows_Left.push_back(i);
804  out<<"Region 29 - G_precentral: "<<i+1<<endl;
805  out_29_left<<i+1<<endl;
806  }
807 
808  //S_central
809  if(labelIds_left[vertno_left[i]] == 660701)
810  {
811  interestingRows_Left.push_back(i);
812  out<<"Region 45 - S_central: "<<i+1<<endl;
813  out_45_left<<i+1<<endl;
814  }
815  }
816 
817  // Right hemisphere
818  QFile wrtFWD_28_right ("./mne_x_plugins/resources/tmsi/fwd_clustered_postcentral_28_Right.txt");
819  wrtFWD_28_right.open(QIODevice::WriteOnly | QIODevice::Text);
820  QTextStream out_28_right(&wrtFWD_28_right);
821 
822  QFile wrtFWD_29_right ("./mne_x_plugins/resources/tmsi/fwd_clustered_precentral_29_Right.txt");
823  wrtFWD_29_right.open(QIODevice::WriteOnly | QIODevice::Text);
824  QTextStream out_29_right(&wrtFWD_29_right);
825 
826  QFile wrtFWD_45_right ("./mne_x_plugins/resources/tmsi/fwd_clustered_central_45_Right.txt");
827  wrtFWD_45_right.open(QIODevice::WriteOnly | QIODevice::Text);
828  QTextStream out_45_right(&wrtFWD_45_right);
829 
830  QVector<int> interestingRows_Right;
831  out<<endl<<endl<<"interestingRows_Right (matlab syntax):"<<endl<<endl;
832  for(int i=0; i<vertno_right.rows() ; i++)
833  {
834  //G_postcentral
835  if(labelIds_right[vertno_right[i]] == 9221140)
836  {
837  interestingRows_Right.push_back(i);
838  out<<"Region 28 - G_postcentral: "<<i+1+vertno_left.rows()<<endl;
839  out_28_right<<i+1<<endl;
840  }
841 
842  //G_precentral
843  if(labelIds_right[vertno_right[i]] == 11832380)
844  {
845  interestingRows_Right.push_back(i);
846  out<<"Region 29 - G_precentral: "<<i+1+vertno_left.rows()<<endl;
847  out_29_right<<i+1<<endl;
848  }
849 
850  //S_central
851  if(labelIds_right[vertno_right[i]] == 660701)
852  {
853  interestingRows_Right.push_back(i);
854  out<<"Region 45 - S_central: "<<i+1+vertno_left.rows()<<endl;
855  out_45_right<<i+1<<endl;
856  }
857  }
858 
859  wrtFWD_28_left.close();
860  wrtFWD_29_left.close();
861  wrtFWD_45_left.close();
862  wrtFWD_28_right.close();
863  wrtFWD_29_right.close();
864  wrtFWD_45_right.close();
865  wrtFWD.close();
866 
867  //
868  // make an inverse operators
869  //
870  FiffInfo info = evoked.info;
871 
872  MNEInverseOperator inverse_operator(info, t_clusteredFwd, noise_cov, 0.2f, 0.8f);
873 
874 // QFile t_fileInv("D:/Dropbox/Masterarbeit DB/Messdaten/EEG/2014_02_07_Lorenz_Esch_007/Processed/inverse operators/Lorenz-140128-Duke128-eeg-inv.fif");
875 // MNEInverseOperator inverse_operator(t_fileInv);
876 
877  //
878  // save clustered inverse
879  //
880  if(!t_sFileNameClusteredInv.isEmpty())
881  {
882  QFile t_fileClusteredInverse(t_sFileNameClusteredInv);
883  inverse_operator.write(t_fileClusteredInverse);
884  }
885 
886  //
887  // Compute inverse solution
888  //
889  // Calculate stc for averaged data
890  MinimumNorm minimumNorm(inverse_operator, lambda2, method);
891 
892  MNESourceEstimate sourceEstimate = minimumNorm.calculateInverse(evoked);
893 
894  if(sourceEstimate.isEmpty())
895  return 1;
896 
897  // Calculate stc for all trials and write to file - dirty
898  if(doRawTrialLocalization)
899  {
900  MNESourceEstimate sourceEstimate_trial;
901 
902  for(int i = 0; i<data.size(); i++)
903  {
904  QString file_trial_stc_orig = t_sFileNameStc;
905 
906  QString file_trial_stc_tmp = t_sFileNameStc;
907  QString stc_trial_sub_folder = file_trial_stc_tmp.remove(0,t_sFileNameStc.indexOf("/So")+1);
908 
909  stc_trial_sub_folder.remove(".stc");
910  stc_trial_sub_folder.append("-raw-trials/");
911 
912  QString dirCheck = data_location;
913  dirCheck.append("/Processed/stc/");
914  dirCheck.append(stc_trial_sub_folder);
915 
916  if(QDir(dirCheck).exists() == false)
917  QDir().mkdir(dirCheck);
918 
919  stc_trial_sub_folder.prepend("stc/");
920 
921  file_trial_stc_orig.replace("stc/", stc_trial_sub_folder);
922 
923  QString temp;
924  temp.append("_");
925  temp.append(temp.number(i));
926  temp.append(".stc");
927 
928  file_trial_stc_orig.replace(".stc",temp);
929 
930  sourceEstimate_trial = minimumNorm.calculateInverse(data[i]->epoch,0,1/info.sfreq);
931 
932  if(sourceEstimate_trial.isEmpty())
933  return 1;
934 
935  if(!t_sFileNameStc.isEmpty())
936  {
937  QFile t_fileTrialStc(file_trial_stc_orig);
938  sourceEstimate_trial.write(t_fileTrialStc);
939  }
940  }
941  }
942 
943  // View activation time-series
944  std::cout << "\nsourceEstimate:\n" << sourceEstimate.data.block(0,0,10,10) << std::endl;
945  std::cout << "time\n" << sourceEstimate.times.block(0,0,1,10) << std::endl;
946  std::cout << "timeMin\n" << sourceEstimate.times[0] << std::endl;
947  std::cout << "timeMax\n" << sourceEstimate.times[sourceEstimate.times.size()-1] << std::endl;
948  std::cout << "time step\n" << sourceEstimate.tstep << std::endl;
949 
950  VectorXd s;
951 
952  //double t_dConditionNumber = MNEMath::getConditionNumber(t_Fwd.sol->data, s);
953  //double t_dConditionNumberClustered = MNEMath::getConditionNumber(t_clusteredFwd.sol->data, s);
954 
955 // std::cout << "Condition Number:\n" << t_dConditionNumber << std::endl;
956 // std::cout << "Clustered Condition Number:\n" << t_dConditionNumberClustered << std::endl;
957 
958 // std::cout << "ForwardSolution" << t_Fwd.sol->data.block(0,0,10,10) << std::endl;
959 
960  std::cout << "Clustered ForwardSolution" << t_clusteredFwd.sol->data.block(0,0,10,10) << std::endl;
961 
962  // Write stc to file
963  if(!t_sFileNameStc.isEmpty())
964  {
965  QFile t_fileClusteredStc(t_sFileNameStc);
966  sourceEstimate.write(t_fileClusteredStc);
967  }
968 
969  //############################### Source Estimate end #########################################
970 
971  //only one time point - P100
972 // qint32 sample = 0;
973 // for(qint32 i = 0; i < sourceEstimate.times.size(); ++i)
974 // {
975 // if(sourceEstimate.times(i) >= 0)
976 // {
977 // sample = i;
978 // break;
979 // }
980 // }
981 // sample += (qint32)ceil(0.106/sourceEstimate.tstep); //100ms
982 // sourceEstimate = sourceEstimate.reduce(sample, 1);
983 
984 // sourceEstimate = sourceEstimate.reduce(253, 1); //1731
985 
986  QList<Label> t_qListLabels;
987  QList<RowVector4i> t_qListRGBAs;
988 
989  //ToDo overload toLabels using instead of t_surfSet rr of MNESourceSpace
990  t_annotationSet.toLabels(t_surfSet, t_qListLabels, t_qListRGBAs);
991 
992  InverseView view(minimumNorm.getSourceSpace(), t_qListLabels, t_qListRGBAs);
993 
994  if (view.stereoType() != QGLView::RedCyanAnaglyph)
995  view.camera()->setEyeSeparation(0.3f);
996  QStringList args = QCoreApplication::arguments();
997  int w_pos = args.indexOf("-width");
998  int h_pos = args.indexOf("-height");
999  if (w_pos >= 0 && h_pos >= 0)
1000  {
1001  bool ok = true;
1002  int w = args.at(w_pos + 1).toInt(&ok);
1003  if (!ok)
1004  {
1005  qWarning() << "Could not parse width argument:" << args;
1006  return 1;
1007  }
1008  int h = args.at(h_pos + 1).toInt(&ok);
1009  if (!ok)
1010  {
1011  qWarning() << "Could not parse height argument:" << args;
1012  return 1;
1013  }
1014  view.resize(w, h);
1015  }
1016  else
1017  {
1018  view.resize(800, 600);
1019  }
1020  view.show();
1021 
1022  //Push Estimate
1023  view.pushSourceEstimate(sourceEstimate);
1024 
1025  return a.exec();//1;//a.exec();
1026 }
static bool make_compensator(const FiffInfo &info, fiff_int_t from, fiff_int_t to, FiffCtfComp &ctf_comp, bool exclude_comp_chs=false)
Definition: mne.h:225
FIFF measurement file information.
Definition: fiff_info.h:96
MNEForwardSolution cluster_forward_solution(const AnnotationSet &p_AnnotationSet, qint32 p_iClusterSize, MatrixXd &p_D=defaultD, const FiffCov &p_pNoise_cov=defaultCov, const FiffInfo &p_pInfo=defaultInfo, QString p_sMethod="cityblock") const
MNEEpochDataList class declaration.
3D stereoscopic labels
Definition: inverseview.h:118
evoked data
Definition: fiff_evoked.h:91
static bool read_events(QIODevice &p_IODevice, MatrixXi &eventlist)
Definition: mne.cpp:68
QSharedPointer< FiffStream > SPtr
Definition: fiff_stream.h:132
FIFF raw measurement data.
Definition: fiff_raw_data.h:94
Minimum norm class declaration.
Annotation set.
Definition: annotationset.h:96
bool write(QIODevice &p_IODevice)
covariance data
Definition: fiff_cov.h:94
FiffNamedMatrix::SDPtr sol
Definition: fiff.h:98
static FiffStream::SPtr start_writing_raw(QIODevice &p_IODevice, const FiffInfo &info, RowVectorXd &cals, MatrixXi sel=defaultMatrixXi)
Definition: fiff.h:719
Surface class declaration.
MNESourceEstimate class declaration.
FiffEvoked average(FiffInfo &p_info, fiff_int_t first, fiff_int_t last, VectorXi sel=defaultVectorXi, bool proj=false)
QSharedPointer< MNEEpochData > SPtr
Minimum norm estimation.
Definition: minimumnorm.h:82
AnnotationSet class declaration.
InverseView class declaration.
Label class declaration.
MNEMath class declaration.
FIFF class declaration, which provides static wrapper functions to stay consistent with mne matlab to...
A hemisphere set of surfaces.
Definition: surfaceset.h:83