z_eegmp_old_new_ERP.m 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. function z_eegmp_old_new_ERP(rootpath, id)
  2. %% paths
  3. if ismac
  4. currentFile = mfilename('fullpath');
  5. [pathstr,~,~] = fileparts(currentFile);
  6. cd(fullfile(pathstr,'..'))
  7. rootpath = pwd;
  8. id = 'sub-011';
  9. end
  10. pn.data_eeg = fullfile(rootpath, '..', 'eegmp_preproc', 'data', 'outputs', 'eeg');
  11. pn.data_erp = fullfile(rootpath, 'data', 'test'); mkdir(pn.data_erp);
  12. pn.tools = fullfile(rootpath, '..', 'eegmp_preproc', 'tools');
  13. addpath(fullfile(pn.tools, 'fieldtrip')); ft_defaults
  14. %% load data_eeg
  15. % load preprocessed eeg data_eeg
  16. load(fullfile(pn.data_eeg, [id,'_task-xxxx_eeg_art.mat']), 'data_eeg', 'events');
  17. %% further preprocessing
  18. % apply notch filter
  19. cfg = [];
  20. cfg.dftfilter = 'yes';
  21. data_eeg = ft_preprocessing(cfg, data_eeg);
  22. %% CSD transform
  23. % csd_cfg = [];
  24. % csd_cfg.method = 'spline';
  25. % data_eeg = ft_scalpcurrentdensity(csd_cfg, data_eeg);
  26. %% single-trial baseline-correction for ERPs
  27. time = data_eeg.time{1};
  28. data_eeg_bl = data_eeg;
  29. for indTrial = 1:numel(data_eeg_bl.trial)
  30. curbl = squeeze(nanmean(data_eeg_bl.trial{indTrial}(:,time>-.2 & time<0),2));
  31. data_eeg_bl.trial{indTrial} = data_eeg_bl.trial{indTrial}-repmat(curbl,1,numel(time));
  32. end
  33. %% split tfr and time series data by condition, average across trials
  34. cfg = [];
  35. cfg.trials = ismember(events.old, 'old');
  36. erp_bl.old = ft_timelockanalysis(cfg, data_eeg_bl);
  37. cfg = [];
  38. cfg.trials = ismember(events.old, 'new');
  39. erp_bl.new = ft_timelockanalysis(cfg, data_eeg_bl);
  40. %% save data
  41. save(fullfile(pn.data_erp, [id, '_erp_bl.mat']), 'erp_bl');