E_STSW_ica1_180108.m 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. function E_STSW_ica1_180108(id)
  2. % 170915 | JQK adapted from MD script
  3. % 180103 | adapted for STSW Study
  4. % 180108 | adapted for tardis
  5. %% initialize
  6. %restoredefaultpath;
  7. %clear all; close all; pack; clc;
  8. %% pathdef
  9. if ismac
  10. pn.study = '/Volumes/LNDG/Projects/StateSwitch/';
  11. pn.eeg_root = [pn.study, 'dynamic/data/eeg/task/A_preproc/SA_preproc_study_YA/'];
  12. pn.dynamic_In = [pn.eeg_root, 'B_data/B_EEG_ET_ByRun/'];
  13. pn.eyePlots = [pn.eeg_root, 'C_figures/B_EyeChannels/']; mkdir(pn.eyePlots);
  14. pn.EEG = [pn.eeg_root, 'B_data/C_EEG_FT/']; mkdir(pn.EEG);
  15. pn.History = [pn.eeg_root, 'B_data/D_History/']; mkdir(pn.History);
  16. % add ConMemEEG tools
  17. pn.MWBtools = [pn.eeg_root, 'T_tools/fnct_MWB/']; addpath(genpath(pn.MWBtools));
  18. pn.THGtools = [pn.eeg_root, 'T_tools/fnct_THG/']; addpath(genpath(pn.THGtools));
  19. pn.commontools = [pn.eeg_root, 'T_tools/fnct_common/']; addpath(genpath(pn.commontools));
  20. pn.fnct_JQK = [pn.eeg_root, 'T_tools/fnct_JQK/']; addpath(genpath(pn.fnct_JQK));
  21. pn.FT = [pn.eeg_root, 'T_tools/fieldtrip-20170904/']; addpath(pn.FT); ft_defaults;
  22. else
  23. pn.root = '/home/mpib/LNDG/StateSwitch/WIP_eeg/SA_preproc_study_YA/';
  24. pn.EEG = [pn.root, 'B_data/C_EEG_FT/']; mkdir(pn.EEG);
  25. pn.History = [pn.root, 'B_data/D_History/']; mkdir(pn.History);
  26. pn.THGtools = [pn.root, 'T_tools/fnct_THG/'];
  27. pn.commontools = [pn.root, 'T_tools/fnct_common/'];
  28. % add external tools (need to be compiled in)
  29. %pn.commontools = [pn.root, 'T_Tools/fnct_common']; addpath(genpath(pn.commontools));
  30. %pn.FT = [pn.root, 'T_Tools/fieldtrip-20170904/']; addpath(pn.FT); ft_defaults;
  31. end
  32. %% define Condition & IDs for preprocessing
  33. condEEG = 'dynamic';
  34. %% define IDs for visual screening
  35. % N = 48;
  36. IDs = {'1117';'1118';'1120';'1124';'1126';'1131';'1132';'1135';'1136';'1138';'1144';'1151';'1158';'1160';'1163';'1164';'1167';'1169';'1172';'1173';'1178';'1182';'1213';'1215';'1216';'1219';'1221';'1223';'1227';'1228';'1233';'1234';'1237';'1239';'1240';'1243';'1245';'1247';'1250';'1252';'1257';'1261';'1265';'1266';'1268';'1270';'1276';'1281'};
  37. id = str2num(id);
  38. %% loop IDs
  39. %for id = 1:length(IDs)
  40. display(['processing ID ' num2str(IDs{id})]);
  41. try
  42. if 1%~exist([pn.EEG, IDs{id}, '_r',num2str(indRun), '_', condEEG, '_EEG_Rlm_Fhl_Ica.mat'],'file')
  43. for iRun = 1:4
  44. %% load raw data & exclude parts containing artifacts
  45. % load config
  46. config = [];
  47. load([pn.History, IDs{id}, '_r',num2str(iRun), '_', condEEG, '_config.mat'],'config');
  48. config_tmp.(['trl_', num2str(iRun)]) = config.trl_ica1;
  49. config_tmp.(['visual_inspection_', num2str(iRun)]) = config.visual_inspection;
  50. % define segment(s) to be read by fieldtrip
  51. cfg.trl = config.trl_ica1;
  52. % load data
  53. dataByRun{iRun} = load([pn.EEG, IDs{id}, '_r',num2str(iRun), '_', condEEG, '_EEG_Raw_Rlm_Flh_Res.mat'],'data_EEG');
  54. % adjust final length
  55. cfg.trl(end,2) = size(dataByRun{iRun}.data_EEG.trial{1},2);
  56. % "segment" data
  57. dataByRun{iRun}.data = cm_segmentation_of_continuous_data_fieldtrip_20150825(dataByRun{iRun}.data_EEG,cfg);
  58. % clear cfg structure
  59. clear cfg
  60. %% segmentation for ICA
  61. % define settings
  62. cfg.length = 2;
  63. cfg.n = 5000; % keep all possible trials
  64. cfg.type = 'rnd'; % select trials randomly if > 1500 trials available
  65. cfg.seed = 20170915 + str2num(IDs{id});
  66. % arbitrary segmentation - segments a 2 sec
  67. % NOTE original segments will be overwritten
  68. dataByRun{iRun}.data = cm_arbitrary_segmentation_fieldtrip_20150210(dataByRun{iRun}.data,cfg);
  69. % data = ft_checkdata(data,'feedback','yes');
  70. end
  71. % combine data into one structure for ICA
  72. data = ft_appenddata(cfg, dataByRun{1}.data, dataByRun{2}.data, dataByRun{3}.data, dataByRun{4}.data);
  73. %% ICA
  74. % date
  75. dt = date;
  76. % ica config
  77. cfg.method = 'runica';
  78. cfg.channel = {'all','-ECG','-A2'}; % additional channel should be excluded already...
  79. cfg.trials = 'all';
  80. cfg.numcomponent = 'all';
  81. cfg.demean = 'no';
  82. cfg.runica.extended = 1;
  83. cfg.runica.logfile = [pn.History 'log_' IDs{id} '_' condEEG '_ICA1_' dt '.txt'];
  84. % run ICA
  85. icadat = ft_componentanalysis(cfg,data);
  86. %% automatic ICA labeling
  87. [iclabels] = cm_automatic_IC_detection_20170919(data,icadat);
  88. %% save data for ICA labeling
  89. config.trl_1 = config_tmp.trl_1;
  90. config.trl_2 = config_tmp.trl_2;
  91. config.trl_3 = config_tmp.trl_3;
  92. config.trl_4 = config_tmp.trl_4;
  93. config.visual_inspection_1 = config_tmp.visual_inspection_1;
  94. config.visual_inspection_2 = config_tmp.visual_inspection_2;
  95. config.visual_inspection_3 = config_tmp.visual_inspection_3;
  96. config.visual_inspection_4 = config_tmp.visual_inspection_4;
  97. % - include ICA solution in data
  98. data.topo = icadat.topo;
  99. data.unmixing = icadat.unmixing;
  100. data.topolabel = icadat.topolabel;
  101. data.cfg = icadat.cfg;
  102. % - include ICA solution in config
  103. config.ica1.date = dt;
  104. config.ica1.topo = icadat.topo;
  105. config.ica1.unmixing = icadat.unmixing;
  106. config.ica1.topolabel = icadat.topolabel;
  107. config.ica1.cfg = icadat.cfg;
  108. config.ica1.iclabels.auto = iclabels;
  109. % fieldtrip format electrode information
  110. load([pn.THGtools, 'electrodelayouts/realistic_1005.mat'])
  111. data.elec = cm_elec2dataelec_20170919(realistic_1005,data);
  112. % EEGLAB format electrode information
  113. load([pn.THGtools 'electrodelayouts/chanlocs_eeglab_MPIB_64_electrodes.mat'])
  114. data = cm_chanlocs2MPIB64_20140126(data,chanlocs);
  115. % - include channel information in config
  116. config.elec = data.elec;
  117. config.chanlocs = data.chanlocs;
  118. % keep ICA labels
  119. data.iclabels = iclabels;
  120. % save data
  121. save([pn.EEG, IDs{id}, '_', condEEG, '_EEG_Rlm_Fhl_Ica.mat'],'data')
  122. % save config
  123. config.preproc_version = '20170915';
  124. save([pn.History, IDs{id}, '_', condEEG, '_config.mat'],'config')
  125. % clear variables
  126. clear chanlocs cfg config data dt icadat iclabels realistic_1005
  127. end % file available
  128. catch ME
  129. warning('Error occured. Please check.');
  130. rethrow(ME)
  131. end % try..catch
  132. %end; clear id