123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- function a5_segmentation_raw_data(id, rootpath)
- if ismac % run if function is not pre-compiled
- id = '1'; % 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 raw data
- if ~exist(fullfile(pn.eeg_ft, [IDs{id}, '_task-xxxx_eeg_seg.mat']),'file')
- % load config
- config = [];
- load(fullfile(pn.history, [IDs{id}, '_task-xxxx_config.mat']),'config');
- %% load events file
-
- events = readtable(fullfile(pn.events, ['EMP',IDs{id}(end-1:end),'_events.csv']));
-
- %% generate segmentation structure
- % load marker file
- mrk = config.mrk;
-
- % generate trial structure
- mrk_val = {mrk(1,:).value};
- indOnset = find(strcmp(mrk_val(:),'boundary')) + 1;
- mrk_val = mrk_val(indOnset:end);
- % Stim trials
- fsample = 512;
- trl = zeros(length(mrk_val),3);
- TOI1 = 1*fsample; % segmentation before trigger (s x fsample)
- TOI2 = 2*fsample; % segmentation following trigger (s x fsample)
- for j = 1:size(trl,1)
- trl(j,1) = mrk(1,indOnset+j-1).sample - TOI1;
- trl(j,2) = mrk(1,indOnset+j-1).sample + TOI2;
- trl(j,3) = -TOI1; % offset
- end; clear j
- % add trial structure to config
- config.trl = trl;
- %% load, filter, and re-reference raw data
- % define reading & preprocessing parameters
- % read in all data first
- % load data
- cfg = [];
- cfg.datafile = ...
- fullfile(pn.eeg_BIDS, IDs{id}, 'eeg', [IDs{id}, '_task-xxxx_eeg.eeg']);
- cfg.trl = config.trl;
- cfg.channel = {'all'};
- data_eeg = ft_preprocessing(cfg);
- %% reref & filter EEG data
-
- cfg = [];
- cfg.continuous = 'yes';
- cfg.demean = 'yes';
- cfg.reref = 'yes';
- cfg.refmethod = 'avg';
- cfg.refchannel = {'M1', 'M2'};
- cfg.implicitref = 'POz';
- cfg.hpfilter = 'yes';
- cfg.hpfreq = .2;
- cfg.hpfiltord = 4;
- cfg.hpfilttype = 'but';
- cfg.lpfilter = 'yes';
- cfg.lpfreq = 125;
- cfg.lpfiltord = 4;
- cfg.lpfilttype = 'but';
- % get data
- data_eeg = ft_preprocessing(cfg, data_eeg);
- flt = cfg;
- % clear cfg structure
- clear cfg
- %% resample to 500 Hz
- % define settings for resampling
- cfg.resamplefs = 500;
- cfg.detrend = 'no';
- cfg.feedback = 'no';
- cfg.trials = 'all';
- data_eeg = ft_resampledata(cfg,data_eeg);
- resample = cfg;
- % clear variables
- clear cfg
- % update config
- config.seg.flt = flt;
- config.seg.resample = resample;
- %% save eeg data and history
-
- save(fullfile(pn.eeg_ft, [IDs{id}, '_task-xxxx_eeg_seg.mat']),'data_eeg', 'events');
- save(fullfile(pn.history, [IDs{id}, '_task-xxxx_config.mat']),'config');
- end % exist
|