123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- % Add behavioral information to the EEG data.
- % 180123 | written by JQK
- % 180327 | including OAs, check for existing data, changed behavioral matrix
- clear all; close all; pack; clc;
- %% pathdef
- if ismac
- pn.study = '/Volumes/LNDG/Projects/StateSwitch/';
- pn.eeg_root = [pn.study, 'dynamic/data/eeg/task/A_preproc/SA_preproc_study/'];
- pn.dynamic_In = [pn.eeg_root, 'B_data/B_EEG_ET_ByRun/'];
- pn.triggerTiming= [pn.eeg_root, 'C_figures/D_TriggerTiming/'];
- pn.EEG = [pn.eeg_root, 'B_data/C_EEG_FT/']; %mkdir(pn.EEG);
- pn.History = [pn.eeg_root, 'B_data/D_History/']; %mkdir(pn.History);
- pn.logs = [pn.eeg_root, 'Y_logs/H_ArtCorr/'];
- % add ConMemEEG tools
- pn.MWBtools = [pn.eeg_root, 'T_tools/fnct_MWB/']; addpath(genpath(pn.MWBtools));
- pn.THGtools = [pn.eeg_root, 'T_tools/fnct_THG/']; addpath(genpath(pn.THGtools));
- pn.commontools = [pn.eeg_root, 'T_tools/fnct_common/']; addpath(genpath(pn.commontools));
- pn.fnct_JQK = [pn.eeg_root, 'T_tools/fnct_JQK/']; addpath(genpath(pn.fnct_JQK));
- pn.FT = [pn.eeg_root, 'T_tools/fieldtrip-20170904/']; addpath(pn.FT); ft_defaults;
- pn.helper = [pn.eeg_root, 'A_scripts/helper/']; addpath(pn.helper);
- else
- pn.root = '/home/mpib/LNDG/StateSwitch/WIP_eeg/SA_preproc_study/';
- pn.EEG = [pn.root, 'B_data/C_EEG_FT/'];
- pn.History = [pn.root, 'B_data/D_History/'];
- pn.triggerTiming= [pn.root, 'C_figures/D_TriggerTiming/'];
- pn.logs = [pn.root, 'Y_logs/H_ArtCorr/'];
- end
- %% define Condition & IDs for preprocessing
- condEEG = 'dynamic';
- %% define IDs for segmentation
- % N = 47 YAs + 53 OAs;
- IDs = {'1117';'1118';'1120';'1124';'1126';'1131';'1132';'1135';'1136';'1138';...
- '1144';'1151';'1158';'1160';'1163';'1164';'1167';'1169';'1172';'1173';...
- '1178';'1182';'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';...
- '2104';'2107';'2108';'2112';'2118';'2120';'2121';'2123';'2125';'2129';...
- '2130';'2131';'2132';'2133';'2134';'2135';'2139';'2140';'2145';'2147';...
- '2149';'2157';'2160';'2201';'2202';'2203';'2205';'2206';'2209';'2210';...
- '2211';'2213';'2214';'2215';'2216';'2217';'2219';'2222';'2224';'2226';...
- '2227';'2236';'2237';'2238';'2241';'2244';'2246';'2248';'2250';'2251';...
- '2252';'2258';'2261'};
- %% load behavioral data
- behavData = load('/Volumes/LNDG/Projects/StateSwitch/dynamic/data/behavior/STSW_dynamic/A_MergeIndividualData/B_data/SS_MergedDynamic_EEG_MRI_YA_09-Mar-2018.mat');
- %% extract data by subject
- for id = 1:numel(IDs)
- if 1%~exist([pn.EEG, IDs{id}, '_', condEEG, '_EEG_Rlm_Fhl_rdSeg_Art_Cond.mat'])
- for iRun = 1:4
- %% load preprocessed EEG data
- tmp = [];
- tmp.clock = tic; % set tic for processing duration
- load([pn.History, IDs{id}, '_r',num2str(iRun), '_', condEEG, '_config'],'config');
- load([pn.EEG, IDs{id}, '_r',num2str(iRun), '_', condEEG, '_EEG_Rlm_Fhl_rdSeg_Art'],'data_EEG');
- data = data_EEG; clear data_EEG;
- %% remove extraneous channels
- rem = [];
- rem.channel = {'all','-IOR','-LHEOG','-RHEOG','-A1'};
- rem.demean = 'no';
-
- dataNew{iRun} = ft_preprocessing(rem,data); clear rem data;
-
- %% get behavioral data (incl. condition assignment)
- behavIdx = find(strcmp(behavData.IDs_all, IDs{id})); % get index of current subject in behavioral matrix
- SubjBehavData.Atts = behavData.MergedDataEEG.Atts(:,behavIdx);
- SubjBehavData.StateOrders = behavData.MergedDataEEG.StateOrders(:,behavIdx);
- SubjBehavData.RTs = behavData.MergedDataEEG.RTs(:,behavIdx);
- SubjBehavData.Accs = behavData.MergedDataEEG.Accs(:,behavIdx);
- SubjBehavData.CuedAttributes = reshape(cat(1,behavData.MergedDataEEG.expInfo{behavIdx}.AttCuesRun{:})',256,1);
-
- % create matrix with crucial condition info
- CondData = NaN(256,7);
- for indTrial = 1:256
- tmp_cuedTrial = SubjBehavData.CuedAttributes(indTrial);
- if ismember(1,tmp_cuedTrial{:})
- CondData(indTrial,1) = 1;
- end
- if ismember(2,tmp_cuedTrial{:})
- CondData(indTrial,2) = 1;
- end
- if ismember(3,tmp_cuedTrial{:})
- CondData(indTrial,3) = 1;
- end
- if ismember(4,tmp_cuedTrial{:})
- CondData(indTrial,4) = 1;
- end
- end
- CondData(:,5) = repmat(1:8,1,32)'; % serial position
- CondData(:,6) = SubjBehavData.Atts;
- CondData(:,7) = 1:256;
- CondData(:,8) = SubjBehavData.StateOrders;
- CondData(:,9) = SubjBehavData.RTs;
- CondData(:,10) = SubjBehavData.Accs;
- % select trials from current run
- CurTrials{iRun} = CondData(((iRun-1)*64)+1:iRun*64,:);
- % remove trials that were not retained during preprocessing
- removedTrials = []; removedTrials = setdiff(1:64,config.nartfree_trials);
- CurTrials{iRun}(removedTrials,:) = [];
-
- end; clear CondData;
- %% combine data across runs
- data = ft_appenddata([], dataNew{1}, dataNew{2}, dataNew{3}, dataNew{4});
- data.TrlInfo = cat(1,CurTrials{:});
- data.TrlInfoLabels = {'Att1 cued', 'Att2 cued', 'Att3 cued', 'Att4 cued', ...
- 'Serial position', 'WinningAtt', 'Continuous position', 'Cue Dimensionality',...
- 'RT', 'Acc'};
- save([pn.EEG, IDs{id}, '_', condEEG, '_EEG_Rlm_Fhl_rdSeg_Art_Cond'],'data');
- else
- disp(['Data for ID ',IDs{id}, ' already exists!']);
- end; % if exist
- end
|