a8_assign_conditions_to_data.m 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. % Add behavioral information to the EEG data.
  2. % 180123 | written by JQK
  3. % 180327 | including OAs, check for existing data, changed behavioral matrix
  4. clear all; close all; pack; clc;
  5. %% pathdef
  6. if ismac
  7. pn.study = '/Volumes/LNDG/Projects/StateSwitch/';
  8. pn.eeg_root = [pn.study, 'dynamic/data/eeg/task/A_preproc/SA_preproc_study/'];
  9. pn.dynamic_In = [pn.eeg_root, 'B_data/B_EEG_ET_ByRun/'];
  10. pn.triggerTiming= [pn.eeg_root, 'C_figures/D_TriggerTiming/'];
  11. pn.EEG = [pn.eeg_root, 'B_data/C_EEG_FT/']; %mkdir(pn.EEG);
  12. pn.History = [pn.eeg_root, 'B_data/D_History/']; %mkdir(pn.History);
  13. pn.logs = [pn.eeg_root, 'Y_logs/H_ArtCorr/'];
  14. % add ConMemEEG tools
  15. pn.MWBtools = [pn.eeg_root, 'T_tools/fnct_MWB/']; addpath(genpath(pn.MWBtools));
  16. pn.THGtools = [pn.eeg_root, 'T_tools/fnct_THG/']; addpath(genpath(pn.THGtools));
  17. pn.commontools = [pn.eeg_root, 'T_tools/fnct_common/']; addpath(genpath(pn.commontools));
  18. pn.fnct_JQK = [pn.eeg_root, 'T_tools/fnct_JQK/']; addpath(genpath(pn.fnct_JQK));
  19. pn.FT = [pn.eeg_root, 'T_tools/fieldtrip-20170904/']; addpath(pn.FT); ft_defaults;
  20. pn.helper = [pn.eeg_root, 'A_scripts/helper/']; addpath(pn.helper);
  21. else
  22. pn.root = '/home/mpib/LNDG/StateSwitch/WIP_eeg/SA_preproc_study/';
  23. pn.EEG = [pn.root, 'B_data/C_EEG_FT/'];
  24. pn.History = [pn.root, 'B_data/D_History/'];
  25. pn.triggerTiming= [pn.root, 'C_figures/D_TriggerTiming/'];
  26. pn.logs = [pn.root, 'Y_logs/H_ArtCorr/'];
  27. end
  28. %% define Condition & IDs for preprocessing
  29. condEEG = 'dynamic';
  30. %% define IDs for segmentation
  31. % N = 47 YAs + 53 OAs;
  32. IDs = {'1117';'1118';'1120';'1124';'1126';'1131';'1132';'1135';'1136';'1138';...
  33. '1144';'1151';'1158';'1160';'1163';'1164';'1167';'1169';'1172';'1173';...
  34. '1178';'1182';'1215';'1216';'1219';'1221';'1223';'1227';'1228';'1233';...
  35. '1234';'1237';'1239';'1240';'1243';'1245';'1247';'1250';'1252';'1257';...
  36. '1261';'1265';'1266';'1268';'1270';'1276';'1281';...
  37. '2104';'2107';'2108';'2112';'2118';'2120';'2121';'2123';'2125';'2129';...
  38. '2130';'2131';'2132';'2133';'2134';'2135';'2139';'2140';'2145';'2147';...
  39. '2149';'2157';'2160';'2201';'2202';'2203';'2205';'2206';'2209';'2210';...
  40. '2211';'2213';'2214';'2215';'2216';'2217';'2219';'2222';'2224';'2226';...
  41. '2227';'2236';'2237';'2238';'2241';'2244';'2246';'2248';'2250';'2251';...
  42. '2252';'2258';'2261'};
  43. %% load behavioral data
  44. behavData = load('/Volumes/LNDG/Projects/StateSwitch/dynamic/data/behavior/STSW_dynamic/A_MergeIndividualData/B_data/SS_MergedDynamic_EEG_MRI_YA_09-Mar-2018.mat');
  45. %% extract data by subject
  46. for id = 1:numel(IDs)
  47. if 1%~exist([pn.EEG, IDs{id}, '_', condEEG, '_EEG_Rlm_Fhl_rdSeg_Art_Cond.mat'])
  48. for iRun = 1:4
  49. %% load preprocessed EEG data
  50. tmp = [];
  51. tmp.clock = tic; % set tic for processing duration
  52. load([pn.History, IDs{id}, '_r',num2str(iRun), '_', condEEG, '_config'],'config');
  53. load([pn.EEG, IDs{id}, '_r',num2str(iRun), '_', condEEG, '_EEG_Rlm_Fhl_rdSeg_Art'],'data_EEG');
  54. data = data_EEG; clear data_EEG;
  55. %% remove extraneous channels
  56. rem = [];
  57. rem.channel = {'all','-IOR','-LHEOG','-RHEOG','-A1'};
  58. rem.demean = 'no';
  59. dataNew{iRun} = ft_preprocessing(rem,data); clear rem data;
  60. %% get behavioral data (incl. condition assignment)
  61. behavIdx = find(strcmp(behavData.IDs_all, IDs{id})); % get index of current subject in behavioral matrix
  62. SubjBehavData.Atts = behavData.MergedDataEEG.Atts(:,behavIdx);
  63. SubjBehavData.StateOrders = behavData.MergedDataEEG.StateOrders(:,behavIdx);
  64. SubjBehavData.RTs = behavData.MergedDataEEG.RTs(:,behavIdx);
  65. SubjBehavData.Accs = behavData.MergedDataEEG.Accs(:,behavIdx);
  66. SubjBehavData.CuedAttributes = reshape(cat(1,behavData.MergedDataEEG.expInfo{behavIdx}.AttCuesRun{:})',256,1);
  67. % create matrix with crucial condition info
  68. CondData = NaN(256,7);
  69. for indTrial = 1:256
  70. tmp_cuedTrial = SubjBehavData.CuedAttributes(indTrial);
  71. if ismember(1,tmp_cuedTrial{:})
  72. CondData(indTrial,1) = 1;
  73. end
  74. if ismember(2,tmp_cuedTrial{:})
  75. CondData(indTrial,2) = 1;
  76. end
  77. if ismember(3,tmp_cuedTrial{:})
  78. CondData(indTrial,3) = 1;
  79. end
  80. if ismember(4,tmp_cuedTrial{:})
  81. CondData(indTrial,4) = 1;
  82. end
  83. end
  84. CondData(:,5) = repmat(1:8,1,32)'; % serial position
  85. CondData(:,6) = SubjBehavData.Atts;
  86. CondData(:,7) = 1:256;
  87. CondData(:,8) = SubjBehavData.StateOrders;
  88. CondData(:,9) = SubjBehavData.RTs;
  89. CondData(:,10) = SubjBehavData.Accs;
  90. % select trials from current run
  91. CurTrials{iRun} = CondData(((iRun-1)*64)+1:iRun*64,:);
  92. % remove trials that were not retained during preprocessing
  93. removedTrials = []; removedTrials = setdiff(1:64,config.nartfree_trials);
  94. CurTrials{iRun}(removedTrials,:) = [];
  95. end; clear CondData;
  96. %% combine data across runs
  97. data = ft_appenddata([], dataNew{1}, dataNew{2}, dataNew{3}, dataNew{4});
  98. data.TrlInfo = cat(1,CurTrials{:});
  99. data.TrlInfoLabels = {'Att1 cued', 'Att2 cued', 'Att3 cued', 'Att4 cued', ...
  100. 'Serial position', 'WinningAtt', 'Continuous position', 'Cue Dimensionality',...
  101. 'RT', 'Acc'};
  102. save([pn.EEG, IDs{id}, '_', condEEG, '_EEG_Rlm_Fhl_rdSeg_Art_Cond'],'data');
  103. else
  104. disp(['Data for ID ',IDs{id}, ' already exists!']);
  105. end; % if exist
  106. end