function a7_prep_data_for_analysis(id, rootpath) if ismac % run if function is not pre-compiled id = '11'; % test for example subject currentFile = mfilename('fullpath'); [pathstr,~,~] = fileparts(currentFile); cd(fullfile(pathstr,'..', '..')) rootpath = pwd; end % inputs pn.eeg_BIDS = fullfile(rootpath, 'data', 'inputs', 'rawdata', 'eeg_BIDS'); pn.channel_locations = fullfile(rootpath, 'data', 'inputs', 'rawdata', 'channel_locations'); pn.events = fullfile(rootpath, 'data', 'inputs', 'rawdata', 'events'); pn.tools = fullfile(rootpath, 'tools'); % outputs pn.eeg_ft = fullfile(rootpath, 'data', 'outputs', 'eeg'); pn.history = fullfile(rootpath, 'data', 'outputs', 'history'); if ismac % run if function is not pre-compiled addpath(fullfile(pn.tools, 'fieldtrip')); ft_defaults; addpath(fullfile(pn.tools, 'helpers')); end % N = 33 IDs = tdfread(fullfile(pn.eeg_BIDS, 'participants.tsv')); IDs = cellstr(IDs.participant_id); id = str2num(id); display(['processing ID ' num2str(IDs{id})]); %% load files % load data load(fullfile(pn.eeg_ft, [IDs{id}, '_task-xxxx_eeg_seg.mat']),'data_eeg', 'events'); data_ica = load(fullfile(pn.eeg_ft, [IDs{id}, '_task-xxxx_eeg_ica.mat']),'data'); data = data_eeg; clear data_eeg; data.elec = data_ica.data.elec; data.chanlocs = data_ica.data.chanlocs; clear data_ica; % load config load(fullfile(pn.history, [IDs{id}, '_task-xxxx_config.mat']),'config'); % cache original number of trials Ntrial = numel(data.trial); %% define parameter % ICs to reject iclabels = config.ica1.iclabels.manual; ics2reject = [iclabels.bli(:); iclabels.mov(:); iclabels.hrt(:); iclabels.ref(:); iclabels.art(:); iclabels.emg(:)]; clear iclabels % trials to remove trls2remove = config.ArtDect.trials; % channels to interpolate chns2interp = config.ArtDect.channels; %% ICA (from weights) % ica config cfg.method = 'runica'; cfg.channel = {'all'}; cfg.trials = 'all'; cfg.numcomponent = 'all'; cfg.demean = 'yes'; cfg.runica.extended = 1; % ICA solution cfg.unmixing = config.ica1.unmixing; cfg.topolabel = config.ica1.topolabel; % components comp = ft_componentanalysis(cfg,data); % clear cfg clear cfg data %% remove components % cfg for rejecting components (reject: blinks, eye movements, ecg, ref) cfg.component = sortrows(ics2reject)'; cfg.demean = 'yes'; % reject components data = ft_rejectcomponent(cfg,comp); % clear cfg clear cfg comp ics2reject %% remove trials % define trials to keep trials = 1:Ntrial; trials(trls2remove) = []; % config for deleting trials cfg.trials = trials; % remove trials data = ft_preprocessing(cfg,data); nartfree_trials = trials; config.nartfree_trials = nartfree_trials; % clear variables clear cfg trials trls2remove %% remove eye & reference channels (before interpolation) cfg.channel = {'all','-IO1','-IO2','-M1', '-M2','-VEOG','-HEOG'}; cfg.demean = 'yes'; % remove channels data = ft_preprocessing(cfg,data); % clear cfg clear cfg if ~isempty(chns2interp) % interpolation cfg cfg = []; cfg.method = 'spline'; cfg.badchannel = data.label(chns2interp); cfg.trials = 'all'; cfg.lambda = 1e-5; cfg.order = 4; cfg.elec = config.elec; % interpolate data = ft_channelrepair(cfg,data); % clear cfg clear cfg chns2interp end %% keep channel x trial artifacts data.ArtDect.channels_x_trials = config.ArtDect.channels_x_trials; %% create overview of percentage of excluded trials, update config.trl tmp_trialNumbers(1,1) = length(data.trial); tmp_trialNumbers(2,1) = 1200; % maximum amount of trials tmp_trialNumbers(3,1) = (100-((tmp_trialNumbers(1,1)/tmp_trialNumbers(2,1))*100)); % percentage of excluded trials config.overview_trial_numbers = tmp_trialNumbers; %% update config.trl with trigger codes % add info whether trial is included in final set; 1 = trial containing no artifact config.trl(1:Ntrial,4) = 0; config.trl(nartfree_trials, 4) = 1; % add trial number config.trl(1:Ntrial,5) = 0; config.trl(nartfree_trials, 5) = nartfree_trials; % load marker file mrk = config.mrk; for i = 1:size(mrk,2) mrk_val{i,1} = mrk(1,i).value; end % save config save(fullfile(pn.history, [IDs{id}, '_task-xxxx_config.mat']),'config'); %% update event table % remove trials that were not retained during preprocessing events(config.trl(:,5)==0,:) = []; %% save data data_eeg = data; clear data; save(fullfile(pn.eeg_ft, [IDs{id}, '_task-xxxx_eeg_art.mat']),'data_eeg', 'events');