From 2271a837da707a4b325c04e9eb54de727ed51e50 Mon Sep 17 00:00:00 2001 From: douwehorsthuis Date: Thu, 1 Dec 2022 14:22:35 -0500 Subject: [PATCH] Major update --- src/A_merge_sets.m | 19 +- src/B_downs_filter_chaninfo_exclchan.m | 38 +- src/C_manual_check.m | 15 +- ...ef_exclextrn_interp_avgref_ica_autoexcom.m | 27 +- src/E_epoching.m | 45 +- src/a_xdf_import.m | 415 +++++++++++ src/binlist_main_rts.txt | 35 + src/functions/eBridge.m | 612 ++++++++++++++++ src/functions/edf_to_figure.m | 84 +++ src/functions/eyetracking/@Edf2Mat/.gitignore | 1 + src/functions/eyetracking/@Edf2Mat/Edf2Mat.m | 663 ++++++++++++++++++ .../eyetracking/@Edf2Mat/getPupilSize.m | 21 + src/functions/eyetracking/@Edf2Mat/heatmap.m | 84 +++ src/functions/eyetracking/@Edf2Mat/plot.m | 117 ++++ .../eyetracking/@Edf2Mat/plotBlinkData.m | 44 ++ .../eyetracking/@Edf2Mat/plotHeatmap.m | 64 ++ .../eyetracking/@Edf2Mat/private/.gitignore | 1 + .../@Edf2Mat/private/createGauss.m | 8 + .../eyetracking/@Edf2Mat/private/edf2asc.exe | Bin 0 -> 102400 bytes .../eyetracking/@Edf2Mat/private/edfapi.dll | Bin 0 -> 110592 bytes .../@Edf2Mat/private/edfapi.framework.zip | Bin 0 -> 151888 bytes .../eyetracking/@Edf2Mat/private/edfapi64.dll | Bin 0 -> 100864 bytes .../@Edf2Mat/private/edfimporter.mexmaci64 | Bin 0 -> 27916 bytes .../@Edf2Mat/private/edfimporter.mexw32 | Bin 0 -> 20992 bytes .../@Edf2Mat/private/edfimporter.mexw64 | Bin 0 -> 26624 bytes .../private/edfimporter_pre11.mexmaci64 | Bin 0 -> 27088 bytes .../@Edf2Mat/private/mouseClicked.m | 40 ++ .../eyetracking/@Edf2Mat/private/mouseMove.m | 56 ++ .../@Edf2Mat/private/processEvents.m | 374 ++++++++++ src/functions/eyetracking/LICENSE | 21 + src/functions/plot_deleted_chan_location.m | 29 + src/functions/plotting_bridged_channels.m | 38 + src/functions/readme_to_EEG.m | 287 ++++++++ testing/scripts/A_merge_sets.m | 6 +- .../B_downs_filter_chaninfo_exclchan.m | 32 +- testing/scripts/C_manual_check.m | 15 +- ...ef_exclextrn_interp_avgref_ica_autoexcom.m | 25 +- testing/scripts/E_epoching.m | 4 +- .../functions/plot_deleted_chan_location.m | 4 +- .../functions/plotting_bridged_channels.m | 2 +- testing/scripts/functions/readme_to_EEG.m | 2 + 41 files changed, 3103 insertions(+), 125 deletions(-) create mode 100644 src/a_xdf_import.m create mode 100644 src/binlist_main_rts.txt create mode 100644 src/functions/eBridge.m create mode 100644 src/functions/edf_to_figure.m create mode 100644 src/functions/eyetracking/@Edf2Mat/.gitignore create mode 100644 src/functions/eyetracking/@Edf2Mat/Edf2Mat.m create mode 100644 src/functions/eyetracking/@Edf2Mat/getPupilSize.m create mode 100644 src/functions/eyetracking/@Edf2Mat/heatmap.m create mode 100644 src/functions/eyetracking/@Edf2Mat/plot.m create mode 100644 src/functions/eyetracking/@Edf2Mat/plotBlinkData.m create mode 100644 src/functions/eyetracking/@Edf2Mat/plotHeatmap.m create mode 100644 src/functions/eyetracking/@Edf2Mat/private/.gitignore create mode 100644 src/functions/eyetracking/@Edf2Mat/private/createGauss.m create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edf2asc.exe create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfapi.dll create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfapi.framework.zip create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfapi64.dll create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexmaci64 create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexw32 create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexw64 create mode 100644 src/functions/eyetracking/@Edf2Mat/private/edfimporter_pre11.mexmaci64 create mode 100644 src/functions/eyetracking/@Edf2Mat/private/mouseClicked.m create mode 100644 src/functions/eyetracking/@Edf2Mat/private/mouseMove.m create mode 100644 src/functions/eyetracking/@Edf2Mat/private/processEvents.m create mode 100644 src/functions/eyetracking/LICENSE create mode 100644 src/functions/plot_deleted_chan_location.m create mode 100644 src/functions/plotting_bridged_channels.m create mode 100644 src/functions/readme_to_EEG.m diff --git a/src/A_merge_sets.m b/src/A_merge_sets.m index 872e827..1d2d3c8 100644 --- a/src/A_merge_sets.m +++ b/src/A_merge_sets.m @@ -1,10 +1,11 @@ % EEGLAB merge sets, and creates .set file % by Douwe Horsthuis updated on 6/21/2021 % ------------------------------------------------ -subject_list = {'some sort of ID' 'a different id for a different particpant'}; %all the IDs for the indivual particpants -filename = 'the_rest_of_the_file_name'; % if your bdf file has a name besides the ID of the participant (e.g. oddball_paradigm) -home_path = 'path_where_to_load_in_pc'; %place data is (something like 'C:\data\') -blocks = 5; % the amount of BDF files. if different participant have different amounts of blocks, run those participant separate +subject_list = {'ID_participant1' 'ID_participant2' 'ID_etc'}; %all the IDs for the indivual particpants +home_path = 'C:\Users\dohorsth\Desktop\cued-boss\'; %place data is (something like 'C:\data\') +save_path = 'C:\Users\dohorsth\Desktop\cystinosis\cued boss\data\'; %only for the first script, in case you load your data from somewhere special but want to save it somewhere else +filename = 'cued_boss'; % if your bdf file has a name besides the ID of the participant (e.g. oddball_paradigm) +blocks = 1; % the amount of BDF files. if different participant have different amounts of blocks, run those participant separate readme_file ='yes';%'yes' or 'no', if yes using [EEG]= readme_to_EEG(EEG, data_path) to read readme file eye_tracking ='no';%'yes' or 'no', if yes using edf_to_figure(data_path)to create a figure with avg gaze if strcmpi(readme_file,'yes') || strcmpi(eye_tracking,'yes')% if yes we need to add the functions to the file path @@ -17,15 +18,17 @@ close all data_path = [home_path subject_list{s} '\']; disp([data_path subject_list{s} '_' filename '.bdf']) + save_path_indv=[save_path subject_list{s} '\']; if blocks == 1 %if participants have only 1 block, load only this one file - EEG = pop_biosig([data_path subject_list{s} '_' filename '.bdf']); - else + EEG = pop_biosig([data_path subject_list{s} '_' filename '_1.bdf']); + else for bdf_bl = 1:blocks %if participants have more than one block, load the blocks in a row %your files need to have the same name, except for a increasing number at the end (e.g. id#_file_1.bdf id#_file_2) EEG = pop_biosig([data_path subject_list{s} '_' filename '_' num2str(bdf_bl) '.bdf']); [ALLEEG, ~] = eeg_store(ALLEEG, EEG, CURRENTSET); + mkdir(save_path_indv) %if individual folders do not exist end %since there are more than 1 files, they need to be merged to one big .set file. EEG = pop_mergeset( ALLEEG, 1:blocks, 0); @@ -37,7 +40,9 @@ EEG.subject = subject_list{s}; %subject ID end if strcmpi(eye_tracking,'yes') - edf_to_figure(data_path) + edf_to_figure(data_path); + saveas(gcf,[data_path subject_list{s} '_ET']) + close all end %save the bdf as a .set file diff --git a/src/B_downs_filter_chaninfo_exclchan.m b/src/B_downs_filter_chaninfo_exclchan.m index 5c45762..16a0e81 100644 --- a/src/B_downs_filter_chaninfo_exclchan.m +++ b/src/B_downs_filter_chaninfo_exclchan.m @@ -1,19 +1,16 @@ % Combination of EEGLAB downsample and filter, and reject channel script by Ana on 2017-07-11 % Combined and updated by Douwe Horsthuis last update 11/5/2021 % ------------------------------------------------ - +clear variables % This defines the set of subjects -subject_list = {'some sort of ID' 'a different id for a different particpant'}; -home_path = 'the main folder where you store your data'; -scripts_location = 'C:\\Scripts\'; %needed if using 160channel data +subject_list = {'6209' '6239' '8103' '8110' '8110-01' '8113' '8117' '8119' '8121' '8121-01' '8128' '8128-01'}; %all the IDs for the indivual particpants +home_path = 'C:\Users\dohorsth\Desktop\cued-boss\'; %place data is (something like 'C:\data\') downsample_to=256; % what is the sample rate you want to downsample to lowpass_filter_hz=45; %45hz filter highpass_filter_hz=1; %1hz filter +avg_deleted_data=zeros(1, length(subject_list)); clean_data={'y'}; % if 'y' not only channels but also noisy moments in thedata get cleaned individual_plots='yes'; -%% variables that need to be created -eeglab_location = fileparts(which('eeglab')); %needed if using a 10-5-cap -avg_deleted_data=zeros(1, length(subject_list)); % Loop through all subjects for s=1:length(subject_list) fprintf('\n******\nProcessing subject %s\n******\n\n', subject_list{s}); @@ -34,18 +31,20 @@ EEG = eeg_checkset( EEG ); EEG = pop_eegfiltnew(EEG, 'hicutoff',lowpass_filter_hz); EEG = eeg_checkset( EEG ); - EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_downft.set'],'filepath', data_path); - %looking for bridged channels - if strcmpi(individual_plots,'yes') - EEG=plotting_bridged_channels(EEG, data_path); %plotting the location of bridged chan - end close all + EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_downft.set'],'filepath', data_path); + EEG.old_n_chan = EEG.nbchan; old_samples=EEG.pnts; %adding channel location if EEG.nbchan >63 && EEG.nbchan < 95 %64chan cap (can be a lot of externals, this makes sure that it includes a everything that is under 96 channels, which could be an extra ribbon) - EEG=pop_chanedit(EEG, 'lookup',[eeglab_location '\plugins\dipfit\standard_BESA\standard-10-5-cap385.elp'],'rplurchanloc',[1]); %make sure you put here the location of this file for your computer + EEG=pop_chanedit(EEG, 'lookup',[fileparts(which('eeglab')) '\plugins\dipfit\standard_BESA\standard-10-5-cap385.elp'],'rplurchanloc',[1]); %make sure you put here the location of this file for your computer EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_info.set'],'filepath', data_path); + %looking for bridged channel + if strcmpi(individual_plots,'yes') + EEG=plotting_bridged_channels(EEG, data_path); %plotting the location of bridged chan + end + close all %deleting bad channels %EEG = pop_rejchan(EEG,'elec', [1:64],'threshold',5,'norm','on','measure','kurt'); EEG = pop_select( EEG, 'nochannel',{'EXG1','EXG2','EXG3','EXG4','EXG5','EXG6','EXG7','EXG8'}); @@ -56,7 +55,7 @@ end EEG.deleteddata_wboundries=100-EEG.pnts/old_samples*100; elseif EEG.nbchan >159 && EEG.nbchan < 191 %160chan cap - EEG=pop_chanedit(EEG, 'lookup',[scripts_location 'BioSemi160.sfp']); %make sure you put here the location of this file for your computer + EEG=pop_chanedit(EEG, 'lookup',[[fileparts(matlab.desktop.editor.getActiveFilename),filesep] 'BioSemi160.sfp']); %make sure you put here the location of this file for your computer EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_info.set'],'filepath', data_path); %deleting bad channels %EEG = pop_rejchan(EEG,'elec', [1:160],'threshold',5,'norm','on','measure','kurt'); @@ -68,15 +67,8 @@ end EEG.deleteddata_wboundries=100-EEG.pnts/old_samples*100; end - disp([num2str(EEG.deleteddata_wboundries) '% of the data got deleted for this participant']); + disp([num2str(EEG.deleteddata_wboundries) '% of the data got deleted for this participant']); avg_deleted_data(s)=EEG.deleteddata_wboundries; - - - %% creating figures with deleted and bridged channels - if strcmpi(individual_plots,'yes') - EEG=plot_deleted_chan_location(EEG,data_path); %plotting the location of deleted chan - end - EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); - + EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); end disp(['on averages ' num2str(sum(avg_deleted_data)/length(subject_list)) ' % of the data got deleted']); diff --git a/src/C_manual_check.m b/src/C_manual_check.m index 872cf1d..5031c56 100644 --- a/src/C_manual_check.m +++ b/src/C_manual_check.m @@ -3,6 +3,8 @@ % ------------------------------------------------ subject_list = {'some sort of ID' 'a different id for a different particpant'}; home_path = 'the main folder where you store your data'; + +group_del_channel=[]; %needed for the plot_group_deleted_chan_location function for s=1:length(subject_list) clear bad_chan; fprintf('\n******\nProcessing subject %s\n******\n\n', subject_list{s}); @@ -12,8 +14,17 @@ prompt = 'Delete channels? If yes, input them all as strings inside {}. If none hit enter '; bad_chan = input(prompt); % if isempty(bad_chan) ~=1 - EEG = pop_select( EEG, 'nochannel',bad_chan); - EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); + EEG = pop_select( EEG, 'nochannel',bad_chan); + EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); end close all + + %% creating figures with deleted and bridged channels + EEG=plot_deleted_chan_location(EEG,data_path); %plotting the location of deleted chan + % plotting a topoplot with how many channels get for everyone + [EEG, group_del_channel]=plot_group_deleted_chan_location(EEG,group_del_channel,home_path); +%% group quality info, ID / % deleted data / seconds of data left / N - deleted channels + quality(s,:)=[str2double(subject_list{s}), EEG.deleteddata_wboundries,round(EEG.xmax), length(EEG.del_chan)]; end +load([home_path 'participant_info']) %so we can add +save([home_path 'participant_info'], 'participant_badchan', 'quality'); diff --git a/src/D_reref_exclextrn_interp_avgref_ica_autoexcom.m b/src/D_reref_exclextrn_interp_avgref_ica_autoexcom.m index 1cd6a06..f363603 100644 --- a/src/D_reref_exclextrn_interp_avgref_ica_autoexcom.m +++ b/src/D_reref_exclextrn_interp_avgref_ica_autoexcom.m @@ -9,8 +9,8 @@ clear variables eeglab %% Subject info for each script -subject_list = {'some sort of ID' 'a different id for a different particpant'};% This defines the set of subjects -home_path = 'the main folder where you store your data';% Path to the parent folder, which contains the data folders for all subjects +subject_list = {'some sort of ID' 'a different id for a different particpant'}; +home_path = 'the main folder where you store your data'; %% info needed for this script specific components = num2cell(zeros(length(subject_list), 8)); %prealocationg space for speed refchan = { }; %if you want to re-ref to a channel add the name of the channel here, if empty won't re-ref to any specific channel (for example {'EXG3' 'EXG4'} or {'Cz'}) @@ -95,27 +95,6 @@ pop_topoplot(EEG, 0, 1:size(EEG.icaweights,1) ,subject_list{s},[ceil(sqrt(size(EEG.icaweights,1))) ceil(sqrt(size(EEG.icaweights,1)))] ,0,'electrodes','on'); print([data_path subject_list{s} '_remaining_ICs_topos'], '-dpng' ,'-r300'); close all - %putting both figures in 1 plot saving it, deleting the other 2. - figure('units','normalized','outerposition',[0 0 1 1]) - if EEG.nbchan<65 - subplot(1,5,1); - else - subplot(1,10,1); - end - imshow([data_path subject_list{s} '_Bad_ICs_topos.png']); - title('Deleted components') - if EEG.nbchan<65 - subplot(1,5,2:5); - else - subplot(1,10,2:10); - end - imshow([data_path subject_list{s} '_remaining_ICs_topos.png']); - title('Remaining components') - print([data_path subject_list{s} '_ICs_topos'], '-dpng' ,'-r300'); - %deleting two original files - delete([data_path subject_list{s} '_Bad_ICs_topos.png']) - delete([data_path subject_list{s} '_remaining_ICs_topos.png']) - close all EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_excom.set'],'filepath', data_path);%save %this part saves all the bad channels + ID numbers lables_del = setdiff(labels_all,labels_good); %only stores the deleted channels @@ -124,4 +103,4 @@ data_subj = [ID, All_bad_chan]; %combines IDs and Bad channels participant_badchan(s,:) = data_subj;%combine new data with old data end -save([home_path 'participant_info'], 'participant_badchan'); \ No newline at end of file +save([home_path 'participant_info'], 'participant_badchan'); diff --git a/src/E_epoching.m b/src/E_epoching.m index edadad3..0215039 100644 --- a/src/E_epoching.m +++ b/src/E_epoching.m @@ -7,33 +7,41 @@ clear variables eeglab %% Subject info for each script -% This defines the set of subjects subject_list = {'some sort of ID' 'a different id for a different particpant'}; -% Path to the parent folder, which contains the data folders for all subjects -home_path = 'the main folder where you store your data'; +home_path = 'the main folder where you store your data'; %place data is (something like 'C:\data\') %% info needed for this script specific -name_paradigm = 'name'; % this is needed for saving the table at the end +name_paradigm = 'cued_boss'; % this is needed for saving the table at the end %participant_info_temp = []; % needed for creating matrix at the end -binlist_location = 'the folder where you stored your binlist\'; %binlist should be named binlist.txt -epoch_time = [-50 400]; +binlist_location = 'C:\Users\dohorsth\Documents\GitHub\EEG_to_ERP_pipeline_stats_R\testing\scripts\'; %binlist should be named binlist.txt +binlist_name='binlist_main_rts.txt'; +epoch_time = [-50 800]; baseline_time = [-50 0]; -n_bins=3;% enter here the number of bins in your binlist -participant_info_temp = string(zeros(length(subject_list), 2+n_bins)); %prealocationg space for speed +n_bins=9;% enter here the number of bins in your binlist +load([home_path 'participant_info'], 'participant_badchan'); +participant_info_temp = string(zeros(length(subject_list), 3+n_bins)); %prealocationg space for speed %% Loop through all subjects for s=1:length(subject_list) fprintf('\n******\nProcessing subject %s\n******\n\n', subject_list{s}); - clear data_subj % Path to the folder containing the current subject's data data_path = [home_path subject_list{s} '/']; - % Load original dataset fprintf('\n\n\n**** %s: Loading dataset ****\n\n\n', subject_list{s}); EEG = pop_loadset('filename', [subject_list{s} '_excom.set'], 'filepath', data_path); %epoching + for i =1:length(EEG.event)%something odd, where eeg.event is irregular + if contains(EEG.event(i).type, 'boundary') %skipping the boundary events + continue + elseif ~isempty(EEG.event(i).edftype) + EEG.event(i).type = char(num2str(EEG.event(i).edftype)); %making sure that the edf are fixed first + else + new=EEG.event(i).type; + EEG.event(i).edftype=str2double(new); %fixing edftype + end + end EEG = eeg_checkset( EEG ); EEG = pop_creabasiceventlist( EEG , 'AlphanumericCleaning', 'on', 'BoundaryNumeric', { -99 }, 'BoundaryString', { 'boundary' } ); EEG = eeg_checkset( EEG ); - EEG = pop_binlister( EEG , 'BDF', [binlist_location '\binlist.txt'], 'IndexEL', 1, 'SendEL2', 'EEG', 'Voutput', 'EEG' ); + EEG = pop_binlister( EEG , 'BDF', [binlist_location binlist_name], 'IndexEL', 1, 'SendEL2', 'EEG', 'Voutput', 'EEG' ); EEG = eeg_checkset( EEG ); EEG = pop_epochbin( EEG , epoch_time, baseline_time); %epoch size and baseline size EEG = eeg_checkset( EEG ); @@ -46,15 +54,16 @@ EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_epoched.set'],'filepath', data_path); ERP = pop_savemyerp(ERP, 'erpname', [subject_list{s} '.erp'], 'filename', [subject_list{s} '.erp'], 'filepath', data_path); %saving a.ERP file %the following line creates an excel with RTs. For this to be possible make sure you have the right events in your eventlist. - %values = pop_rt2text(ERP, 'eventlist',1, 'filename', [home_path '\All RT files\' subject_list{s} '_rt.xls'], 'header', 'on', 'listformat', 'basic' ); - - ID = string(subject_list{s}); - data_subj = [ID, percent_deleted, ERP.ntrials.accepted ]; %ERP.ntrials.accepted gives all the trials per bin - participant_info_temp(s,:) = data_subj; + RT = pop_rt2text(ERP, 'eventlist',1, 'filename', [data_path subject_list{s} '_rt.xls'], 'header', 'on', 'listformat', 'basic' ); + for i=1:length(participant_badchan) + if strcmpi(participant_badchan(i,1),subject_list{s}) + participant_info_temp(i,:)= [participant_badchan(i,:),percent_deleted, ERP.ntrials.accepted ]; + end + end end -colNames = [{'ID','%data deleted'} ERP.bindescr]; %adding names for columns [ERP.bindescr] adds all the name of the bins +colNames = [{'ID','Deleted channels', '%data deleted'} ERP.bindescr]; %adding names for columns [ERP.bindescr] adds all the name of the bins participant_info = array2table( participant_info_temp,'VariableNames',colNames); %creating table with column names -save([home_path name_paradigm '_participant_epoching_cleaing_bin_info'], 'participant_info'); +save([home_path name_paradigm '_participant_info'], 'participant_info'); diff --git a/src/a_xdf_import.m b/src/a_xdf_import.m new file mode 100644 index 0000000..3925f8c --- /dev/null +++ b/src/a_xdf_import.m @@ -0,0 +1,415 @@ +%created by Pierfilippo De Sanctis +%on 2/28/2022 this script is edited so it works for the SFARI project by Douwe +%this script imports .xdf files and adds gait triggers to the data +%needs the xdfimport plugin (works with v1.18) +clear variables + +eeglab +%% you need to add the path of the subfolder of the xdf plugin, otherwise eeglab will +%% not find the function (because we are not using pop_loadxdf, but a function inside the plugin) +addpath('C:\Users\douwe\OneDrive\Documents\MATLAB\eeglab2021.1\plugins\xdfimport1.18\xdf\') + + +data_path = 'D:\OpticalFlow_sfari\'; %load +save_fig_path = 'D:\OpticalFlow_sfari\figures\'; %save path for non-.set files + +subj = {'12377' '12494' '12565' '12666' '12675'}; + + +Cond = {'flow' 'no_flow' 'stand_no_flow'}; + +for cnd=1:length(Cond) + switch Cond{cnd} + case 'flow' + cond = {'_flow_1' '_flow_2' '_flow_3'}; + Runs = {... %number of blocks + [1 2 3]... % '12377' + [1 2 3 ]... % '12494' % keeps crashing + [1 2 3]... % '12565' + [1 2 3]... % '12666' + [1 2 3]... % '12675' + }; + case 'no_flow' + cond = {'_no_flow_1' '_no_flow_2' '_no_flow_3'}; + Runs = {... %number of blocks + [1 2 3]... % '12377' + [1 2 3]... % '12494' + [1 2 3]... % '12565' + [1 2 3]... % '12666' + [1 2 3]... % '12675' + }; + + case 'stand_no_flow' + cond = {'_stand_no_flow_1' '_stand_no_flow_2' '_stand_no_flow_3'}; + Runs = {... %number of blocks + [1 2]... % '12377' has 3, but only using 2 since that's the norm + [1 2]... % '12494' + [1 2]... % '12565' + [1 2]... % '12666' + [1]... % '12675' + }; + + % case 'stand_flow' + % cond = {'_stand_flow_1' '_stand_flow_2' '_stand_flow_3'}; + % Runs = {... %number of blocks + % [1 2]... % + % }; + end + + % %use all the markers for now + % optichans = {... %number of chan per foot?? R & L? + % {[2 3] [1 2 3 4]}... % '12009' removed marker 1 right foot + % {[2 3] [2 3]}... % '12022' removed marker 4 right foot + % {[2 3] [2 3 4]}... % '12023' + % {[2 3] [2 3]}... % '12031' removed marker 4 right foot + % {[3] [2 3 4]}... % '12094' removed marker 2 right foot + % {[2 3] [2 3]}... % '12335' removed marker 4 right foot + % {[3] [1 3]}... % '12364' removed marker 2 and 4 right foot + % {[2 3] [1 3]}... % '12390' removed marker 4 right foot + % {[1 4] [2 3]}... % '12407' + % {[1 4] [2 3]}... % '12408' removed marker 3 right foot + % {[2 3] [1 3]}... % '12451' removed marker 4 right foot + % {[2 3 4] [1 3]}... % '12457' + % {[2 3] [2 3]}... % '12458' + % {[2 3] [2 3]}... % '12459' removed marker 4 right foot + % {[4 6] [5 6]}... % '12468' + % {[2 3] [2 3]}... % '12478' removed marker 4 right foot + % }; + + + for subj_count = 1:length(subj) + %mkdir([dire1 subj{subj_count} '\']); + for al = Runs{subj_count} + %a variable was causing the script not to run mulitple blocks in a + %row, not sure which one, so deleting all + clear velocityZleft3 FileHeader Streams t0 Optitime_stamps Optitime_series StepWidth_msec StepWidth_mm xdf_file xdf Optisrate sname imarkers aa ans bb C EDGES idx ik ind_edgeL ind_edgeR ind_edgeVZL ind_edgeVZR ind_outL ind_outR ind_temp indconst indJD indleftHS indLX indLY indLZ indo indpL indpR indpYL indpYR indrightHS indRX indRY indRZ iStepWidth JL JR leftHS leftToeoff loc markers MPD MPHL MPHR MUHAT N ol Opti_rel_timing Optitime_series3 rightHS rightToeoff SIGMAHAT StepWidth StepWidthLH StepWidthRH sw TFLX TFLY TFLZ TFRX TFRY TFRZ ThresholdL ThresholdR val_edgeL val_edgeR val_edgeVYL val_edgeVYR val_edgeVZL val_edgeVZR valJD valL valR valYL valYR velocityYleft3 velocityYright3 velocityZright3 VYL VYR VZL VZR Xleft Xright Yleft3 Yright3 Zleft3 Zright3 + + xdf_file = [data_path subj{subj_count} '\' subj{subj_count} cond{al} '.xdf']; + disp([ 'processing ' subj{subj_count} cond{al}]) + %% load xdf data streams and get relative timing using first Biosemi timestamp + [Streams,FileHeader] = load_xdf(xdf_file); + + %% rename streams to identify biosemi and optitrack stream + clear xdf + for i = 1:length(Streams) + sname = Streams{i}.info.name; + xdf.(sname) = Streams{i}; + end + t0 = xdf.BioSemi.time_stamps(1); % time 0 - first Biosemi timestamp + + %% resample optitrack timeseries to Biosemi sampling rate + [Optitime_series,Optitime_stamps] = resample(xdf.OptiTrack.time_series',xdf.OptiTrack.time_stamps,str2double(xdf.BioSemi.info.nominal_srate)); + Optitime_series = Optitime_series'; + Optisrate = str2double(xdf.BioSemi.info.nominal_srate); + % plot RF and LF xyz for subj + subplot(3,1,1) + plot(Optitime_series(13,:)); hold on + plot(Optitime_series(14,:)); hold on + plot(Optitime_series(15,:)); hold on + plot(Optitime_series(25,:)); hold on + plot(Optitime_series(26,:)); hold on + plot(Optitime_series(27,:)) + legend ('L X', 'L Z', 'L Y', 'R X', 'R Z', 'R Y') + set(gca,'fontsize', 18); + subplot(3,1,2) + plot(Optitime_series(13,:) - mean(Optitime_series(13,:),2)); hold on + plot(Optitime_series(14,:) - mean(Optitime_series(14,:),2)); hold on + plot(Optitime_series(15,:) - mean(Optitime_series(15,:),2)); hold on + plot(Optitime_series(25,:) - mean(Optitime_series(25,:),2)); hold on + plot(Optitime_series(26,:) - mean(Optitime_series(26,:),2)); hold on + plot(Optitime_series(27,:) - mean(Optitime_series(27,:),2)); + subplot(3,1,3) + plot(Optitime_series(13,:)); hold on + plot(Optitime_series(25,:)); + set(gcf, 'Position', [100, 100, 1000, 1000]) + saveas(gcf, [save_fig_path (subj{subj_count}) cond{al} '.tiff']); + close all + + + %% subtract first Biosemi timestamp from Optitrack timestamps to get latencies rel to EEG + Opti_rel_timing = Optitime_stamps-t0; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get heelstrikes and toe offs from optitrack data + %% find channels corresponding to left and right foot + + clear chanlabels + for indo = 1:length(xdf.OptiTrack.info.desc.channels.channel) + chanlabels{indo} = xdf.OptiTrack.info.desc.channels.channel{indo}.label; + end + if isrow(chanlabels); chanlabels = chanlabels'; end + T = table(chanlabels); + filename = [data_path 'All_sfari_chanlabels_Optitrack.xlsx']; + + writetable(T,filename,'Sheet',subj{subj_count}) % excel sheets all in one excel file + + + + TFRY = []; + TFRZ = []; + TFRX = []; + TFLY = []; + TFLZ = []; + TFLX = []; + + for ik = 1:length(chanlabels) + TFRY(ik) = (contains(chanlabels{ik}, 'Right_Foot') || contains(chanlabels{ik}, 'Right_foot')) && contains(chanlabels{ik}, 'Y'); + TFRZ(ik) = (contains(chanlabels{ik}, 'Right_Foot') || contains(chanlabels{ik}, 'Right_foot')) && contains(chanlabels{ik}, 'Z'); + TFRX(ik) = (contains(chanlabels{ik}, 'Right_Foot') || contains(chanlabels{ik}, 'Right_foot')) && contains(chanlabels{ik}, 'X'); + + TFLY(ik) = (contains(chanlabels{ik}, 'Left_Foot') || contains(chanlabels{ik}, 'Left_foot')) && contains(chanlabels{ik}, 'Y'); + TFLZ(ik) = (contains(chanlabels{ik}, 'Left_Foot') || contains(chanlabels{ik}, 'Left_foot')) && contains(chanlabels{ik}, 'Z'); + TFLX(ik) = (contains(chanlabels{ik}, 'Left_Foot') || contains(chanlabels{ik}, 'Left_foot')) && contains(chanlabels{ik}, 'X'); + + end + indRZ = find(TFRZ == 1); + indRY = find(TFRY == 1); + indRX = find(TFRX == 1); + indLZ = find(TFLZ == 1); + indLY = find(TFLY == 1); + indLX = find(TFLX == 1); + + %% Filter Optitrack data + data = []; + clear aa bb + [bb,aa] = butter (4, [10] ./ (Optisrate / 2), 'low' ); + data= filtfilt(bb, aa, double(Optitime_series)'); + %figure;freqz(bb,aa,Optisrate, Optisrate) ; + Optitime_series3 = data'; + + data = []; + clear aa bb + [bb,aa] = butter (4, [0.1] ./ (Optisrate / 2), 'high' ); + data= filtfilt(bb, aa, double(Optitime_series3)'); + %figure;freqz(bb,aa,Optisrate, Optisrate) ; + Optitime_series3 = data'; + + %% select channels for left and right foot (not used?) + %Yright = mean(Optitime_series(indRY(optichans{subj_count}{1}),:), 1); + %Zright = mean(Optitime_series(indRZ(optichans{subj_count}{1}),:), 1); + %Yleft = mean(Optitime_series(indLY(optichans{subj_count}{2}),:), 1); + %Zleft = mean(Optitime_series(indLZ(optichans{subj_count}{2}),:), 1); + + + %% calculate velocity data for vertical and A-P position data: displacement/time + %% Right + + %only using selected optichans + %Zright3 = mean(Optitime_series3(indRZ(optichans{subj_count}{1}),:), 1); + %velocityZright3 = diff([Zright3(1) Zright3])./(1/Optisrate); + %Yright3 = mean(Optitime_series3(indRY(optichans{subj_count}{1}),:), 1); + %velocityYright3 = diff([Yright3(1) Yright3])./(1/Optisrate); + + %use all markers per foot + Zright3 = mean(Optitime_series3(indRZ,:), 1); + velocityZright3 = diff([Zright3(1) Zright3])./(1/Optisrate); + Yright3 = mean(Optitime_series3(indRY,:), 1); + velocityYright3 = diff([Yright3(1) Yright3])./(1/Optisrate); + %% Left + + %only using selected optichans + %Zleft3 = mean(Optitime_series3(indLZ(optichans{subj_count}{2}),:), 1); + %velocityZleft3 = diff([Zleft3(1) Zleft3])./(1/Optisrate); + %Yleft3 = mean(Optitime_series3(indLY(optichans{subj_count}{2}),:), 1); + %velocityYleft3 = diff([Yleft3(1) Yleft3])./(1/Optisrate); + + %use all markers per foot + Zleft3 = mean(Optitime_series3(indLZ,:), 1); + velocityZleft3 = diff([Zleft3(1) Zleft3])./(1/Optisrate); + Yleft3 = mean(Optitime_series3(indLY,:), 1); + velocityYleft3 = diff([Yleft3(1) Yleft3])./(1/Optisrate); + + VZR = velocityZright3; + VYR = velocityYright3; + VZL = velocityZleft3; + VYL = velocityYleft3; + %plot(Optitime_series(13,:)); hold on + %plot(Optitime_series3(13,:)) + %plot(Xleft3); hold on + %plot(Xright3) + + %% get thresholds for finding peaks using the distribution of the vertical velocity data + [MUHAT,SIGMAHAT] = normfit(VYR); + MPHR = MUHAT+SIGMAHAT; + + [MUHAT,SIGMAHAT] = normfit(VYL); + MPHL = MUHAT+SIGMAHAT; + + + MPD = 250; %sample points? peaks must be at least this far apart + % get peaks in vertical velocity data for toe-off + [valYR, indpYR] = findpeaks(VYR,'MinPeakHeight', MPHR, 'MinPeakDistance',MPD); + [valYL, indpYL] = findpeaks(VYL,'MinPeakHeight', MPHL, 'MinPeakDistance',MPD); + + % get peaks in A-P velocity data for later detection of plateaus + [valR, indpR] = findpeaks(VZR,'MinPeakHeight', MPHR, 'MinPeakDistance',MPD); + [valL, indpL] = findpeaks(VZL,'MinPeakHeight', MPHL, 'MinPeakDistance',MPD); + + + %% find plateaus in the velocity profile of the A-P data + JR = stdfilt(VZR, [ones((7*6)+1,1)']); + JL = stdfilt(VZL, [ones((7*6)+1,1)']); + + + [N,EDGES] = histcounts(JR, 100);round(size(JR,2)/10); + [valJD, indJD] = max(N); + ThresholdR = EDGES(indJD+1); + + [N,EDGES] = histcounts(JL, 100);round(size(JL,2)/10); + [valJD, indJD] = max(N); + ThresholdL = EDGES(indJD+1); + % + + %% find indexes for Heelstrikes + % right HS + ind_edgeR = []; + + for ol = 1:length(indpYR)-1 + ind_temp = indpYR(ol):indpYR(ol+1); + indconst = find(JR(indpYR(ol):indpYR(ol+1)) < ThresholdR); + if isempty(indconst) + ind_edgeR(ol) = ind_temp(1); + else + ind_edgeR(ol) = ind_temp(indconst(1));%ind_temp(indconst(indconst_temp(indedge))+1); + end + end + + %left HS + ind_edgeL = []; + + for ol = 1:length(indpYL)-1 + ind_temp = indpYL(ol):indpYL(ol+1); + indconst = find(JL(indpYL(ol):indpYL(ol+1)) < ThresholdL); + if isempty(indconst) + ind_edgeL(ol) = ind_temp(1); + else + ind_edgeL(ol) = ind_temp(indconst(1));%ind_temp(indconst(indconst_temp(indedge))+1); + end + end + + + + val_edgeR = JR(ind_edgeR); + val_edgeVZR = VZR(ind_edgeR-(6*7/2)); + + ind_edgeVZR = ind_edgeR-(6*7/2); + val_edgeVYR = VYR(ind_edgeR-(6*7/2)); + + val_edgeL = JL(ind_edgeL); + val_edgeVZL = VZL(ind_edgeL-(6*7/2)); + ind_edgeVZL = ind_edgeL-(6*7/2); + val_edgeVYL = VYL(ind_edgeL-(6*7/2)); + % + %% get index for heelstrikes to remove + ind_outR = find((ind_edgeVZR-indpYR(1:end-1) > median(ind_edgeVZR-indpYR(1:end-1))+3*(std(ind_edgeVZR-indpYR(1:end-1))))... + | (ind_edgeVZR-indpYR(1:end-1) < median(ind_edgeVZR-indpYR(1:end-1))-3*(std(ind_edgeVZR-indpYR(1:end-1))))... + | (VYR(ind_edgeVZR) < median(VYR(ind_edgeVZR))-2*std(VYR(ind_edgeVZR)))... + | (VYR(ind_edgeVZR) > median(VYR(ind_edgeVZR))+2*std(VYR(ind_edgeVZR)))... + | (VZR(ind_edgeVZR) > 0)); + + ind_outL = find((ind_edgeVZL-indpYL(1:end-1) > median(ind_edgeVZL-indpYL(1:end-1))+3*(std(ind_edgeVZL-indpYL(1:end-1))))... + | (ind_edgeVZL-indpYL(1:end-1) < median(ind_edgeVZL-indpYL(1:end-1))-3*(std(ind_edgeVZL-indpYL(1:end-1))))... + | (VYL(ind_edgeVZL) < median(VYL(ind_edgeVZL))-2*std(VYL(ind_edgeVZL)))... + | (VYL(ind_edgeVZL) > median(VYL(ind_edgeVZL))+2*std(VYL(ind_edgeVZL)))... + | (VZL(ind_edgeVZL) > 0)); + + %% get index for heelstrikes to keep + indrightHS = find(ismember(ind_edgeVZR,ind_outR) == 0) ; + indleftHS = find(ismember(ind_edgeVZL,ind_outL) == 0) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get latency of heelstrikes from relative timing to Biosemi data + + %% create marker structure and get latency from relative timing to Biosemi data + + %%CHANGE THE EVENT CODES TO GET UNIQUE #s FOR EVERY CONDITION + + if strcmp(Cond{cnd},'flow') + rightHS = [Opti_rel_timing(ind_edgeVZR(indrightHS))' ones(size(ind_edgeVZR(indrightHS)))'*100]; + leftHS = [Opti_rel_timing(ind_edgeVZL(indleftHS))' ones(size(ind_edgeVZL(indleftHS)))'*101]; + rightToeoff = [Opti_rel_timing(indpYR)' ones(size(indpYR))'*102]; + leftToeoff = [Opti_rel_timing(indpYL)' ones(size(indpYL))'*103]; + markers = [rightHS;leftHS;rightToeoff;leftToeoff]; + elseif strcmp(Cond{cnd},'no_flow') + rightHS = [Opti_rel_timing(ind_edgeVZR(indrightHS))' ones(size(ind_edgeVZR(indrightHS)))'*200]; + leftHS = [Opti_rel_timing(ind_edgeVZL(indleftHS))' ones(size(ind_edgeVZL(indleftHS)))'*201]; + rightToeoff = [Opti_rel_timing(indpYR)' ones(size(indpYR))'*202]; + leftToeoff = [Opti_rel_timing(indpYL)' ones(size(indpYL))'*203]; + markers = [rightHS;leftHS;rightToeoff;leftToeoff]; + + elseif strcmp(Cond{cnd},'stand_no_flow') + rightHS = [Opti_rel_timing(ind_edgeVZR(indrightHS))' ones(size(ind_edgeVZR(indrightHS)))'*300]; + leftHS = [Opti_rel_timing(ind_edgeVZL(indleftHS))' ones(size(ind_edgeVZL(indleftHS)))'*301]; + rightToeoff = [Opti_rel_timing(indpYR)' ones(size(indpYR))'*302]; + leftToeoff = [Opti_rel_timing(indpYL)' ones(size(indpYL))'*303]; + markers = [rightHS;leftHS;rightToeoff;leftToeoff]; + elseif strcmp(Cond{cnd},'stand_flow') + rightHS = [Opti_rel_timing(ind_edgeVZR(indrightHS))' ones(size(ind_edgeVZR(indrightHS)))'*400]; + leftHS = [Opti_rel_timing(ind_edgeVZL(indleftHS))' ones(size(ind_edgeVZL(indleftHS)))'*401]; + rightToeoff = [Opti_rel_timing(indpYR)' ones(size(indpYR))'*402]; + leftToeoff = [Opti_rel_timing(indpYL)' ones(size(indpYL))'*403]; + markers = [rightHS;leftHS;rightToeoff;leftToeoff]; + end + %% Step width + Xright = mean(Optitime_series(indRX,:), 1); + Xleft = mean(Optitime_series(indLX,:), 1); + for sw = indrightHS + StepWidthRH(sw) = Xright(ind_edgeVZR(sw)) - Xleft(ind_edgeVZR(sw)); + end + for sw = indleftHS + StepWidthLH(sw) = Xleft(ind_edgeVZL(sw)) - Xright(ind_edgeVZL(sw)); + end + stem(StepWidthRH); hold on + stem(StepWidthLH) + legend('StepW RHeelSt', 'StepW LHeelSt') + set(gca,'fontsize',18); + saveas(gcf, [ save_fig_path (subj{subj_count}) cond{al} '_StepWidth.tiff']); + close all + + StepWidth_mm = [abs(StepWidthRH), StepWidthLH]; + StepWidth_msec = [Opti_rel_timing(ind_edgeVZR), Opti_rel_timing(ind_edgeVZL)]; + StepWidth = [StepWidth_msec; StepWidth_mm]'; + StepWidth = sortrows(StepWidth); + %% merge marker with StepWidth matrix + [~,imarkers,iStepWidth] = intersect(markers(:,1),StepWidth(:,1)); + C = [markers(imarkers,1:2),StepWidth(iStepWidth,2)]; + [idx,loc]=ismember(markers(:,1),StepWidth(:,1)); + markers(idx,3)=StepWidth(loc(idx),2); + %% load EEG data + EEG = pop_loadxdf(xdf_file, 'streamtype', 'EEG', 'exclude_markerstreams', {}); + EEG = eeg_checkset( EEG ); + + %% remove channels from EEG data + %64 channels + EEG = pop_select ( EEG, 'channel',{'A1' 'A2' 'A3' 'A4' 'A5' 'A6' 'A7' 'A8' 'A9' 'A10' 'A11' 'A12' 'A13' 'A14' 'A15' 'A16' 'A17' 'A18' 'A19' 'A20' 'A21' 'A22' 'A23' 'A24' 'A25' 'A26' 'A27' 'A28' 'A29' 'A30' 'A31' 'A32' 'B1' 'B2' 'B3' 'B4' 'B5' 'B6' 'B7' 'B8' 'B9' 'B10' 'B11' 'B12' 'B13' 'B14' 'B15' 'B16' 'B17' 'B18' 'B19' 'B20' 'B21' 'B22' 'B23' 'B24' 'B25' 'B26' 'B27' 'B28' 'B29' 'B30' 'B31' 'B32'}); + EEG = eeg_checkset( EEG ); + %%%%%%%%%%%%%%%%%%%%%%%%%% import markers to eeglab + %% import markers to eeglab + [EEG] = pop_importevent(EEG, 'event', ... + markers, 'fields', {'latency', 'type', 'StepWidth'}, ... + 'append', 'yes', 'timeunit', 1); + + %save in ind ss folders + pop_saveset( EEG, 'filename',[ subj{subj_count} cond{al} '.set'],... + 'filepath', [data_path subj{subj_count}]); + + end + end +end +%% Combining the separate .set files in one big continues file +for subj_count = 1:length(subj) + eeglab + folder_index=dir([data_path subj{subj_count}]); + block_info= []; + for i=length(folder_index):-1:3 + if strcmp(folder_index(i).name(end-2:end),'set') + disp(['************************************** loading ' folder_index(i).name ' **************************************']) + EEG = pop_loadset('filename',folder_index(i).name, 'filepath', [data_path subj{subj_count} '\']); + block_info= [block_info; string(EEG.filename(7:end-4)), round(EEG.xmax)]; + [ALLEEG, ~] = eeg_store(ALLEEG, EEG, CURRENTSET); + end + end + EEG = pop_mergeset( ALLEEG, 1:length(ALLEEG), 0); + EEG.subject = subj{subj_count}; + EEG.mobi_info= block_info; + EEG.setname='MoBI optical flow sfari'; + EEG = pop_saveset( EEG, 'filename',[subj{subj_count} '.set'],'filepath',[data_path subj{subj_count} '\']); +end diff --git a/src/binlist_main_rts.txt b/src/binlist_main_rts.txt new file mode 100644 index 0000000..5f223f6 --- /dev/null +++ b/src/binlist_main_rts.txt @@ -0,0 +1,35 @@ +bin 1 +hit +{2}{101}{102}{1}{2}{101}.{102}{1:rt<"hit">} + +bin 2 +correct rejection active +{2}{101}{102}{1}{2}{111}.{112}{~1} + +bin 3 +correct rejection o-o +{2}{101}{102}{1}{2}{121}.{122}{~1} + +bin 4 +correct rejection o-a +{2}{101}{102}{1}{2}{131}.{132}{~1} + +bin 5 +correct rejection both passive +{2}{101}{102}{1}{2}{121;131}.{122;132}{~1} + +bin6 +miss +{2}.{101}{102}{~1} + +bin7 +False alarm active +{2}{101}{102}{1}{2}{111}.{112}{1:rt<"fa active">} + +bin 8 +False alarm o-a +{2}{101}{102}{1}{2}{131}.{132}{1:rt<"fa o-a">} + +bin 9 +False alarm both passive +{2}{101}{102}{1}{2}{121;131}.{122;132}{1:rt<"fa passive">} \ No newline at end of file diff --git a/src/functions/eBridge.m b/src/functions/eBridge.m new file mode 100644 index 0000000..2e28ff2 --- /dev/null +++ b/src/functions/eBridge.m @@ -0,0 +1,612 @@ +function varargout = eBridge(varargin) +%eBridge.m +%Identify channels within an EEG montage forming a low-impedance +%electrical bridge. +% +%Please cite as: Alschuler et al (2014). Clin Neurophysiol, 125(3), 484-490. +% +%Usage: [EB, ED] = eBridge(EEG, {'e#1'...'e#n'}, '',...'',); +% +%Input arguments: EEG - EEGLAB epoched or continuous data structure +% (required). +% {'e#1'...'e#n'} - Optional cell array containing labels of any EEG +% channels to be excluded. +% '', - Optional argument pairs (see detailed info). +% +%Output arguments: EB - Summary of identified electrical bridges and EEG +% data information (Matlab structure). +% ED - Electrical distance (ED) matrix for unique +% pairwise differences. +% +%For more detailed information, use "eBridge /?" or "eBridge /h". +% +%The latest version of this function, along with additional information and +%help, are available at http://psychophysiology.cpmc.columbia.edu/eBridge. +% +%Copyright © 2013 by Daniel Alschuler +%Email: dmaadm@outlook.com +%GNU General Public License (http://www.gnu.org/licenses/gpl.txt) +% +%Valuable advice, testing, and feedback were provided by Jürgen Kayser and +%Craig Tenke. +% +%History: +% v0.1.01 10/04/2013 by DA +% -First open beta version. +% -Only count epochs with EDs < EDcutoff. +% -Bugfixes. + +%%%%%%%%%%%%%%%%%%%%%%% +%Set initial variables. +%%%%%%%%%%%%%%%%%%%%%%% +%Version number. +EB.Info.Version = '0.1.01'; +%Beginning of messages. +mBeg = 'eBridge: '; +%Series of spaces that can be used to replace mBeg. +begSpace = repmat(sprintf(' '), 1, length(mBeg)); + +%%%%%%%%%%%%%%%%%%%%%%%%% +%Additional help section. +%%%%%%%%%%%%%%%%%%%%%%%%% +if any(strcmpi('/?',varargin)) || any(strcmpi('/h',varargin)) || any(strcmpi('help',varargin)) + %Page the output. + moreSetting = get(0,'more'); + if strcmpi(moreSetting,'off'), more on; end + %Display the help. + help eBridge + %Display the additional help. + fprintf(['This function uses EEG data to compute an electrical distance (ED) matrix.\n',... + ' The ED values are then plotted in a frequency distribution, which is\n',... + ' scaled, spline interpolated, and used to determine which channels, if\n',... + ' any, are electrically bridged.\n',... + '\n',... + 'This function will provide more accurate results if the EEG data are\n',... + ' filtered. The ''FiltMode'' input parameter can be used to automatically\n',... + ' filter the data within the function; otherwise, a 0.5-30 Hz bandpass, 24\n',... + ' dB/octave, FIR filter is recommended.\n',... + '\n',... + 'Downsampling the data before using this function will speed up creation of\n',... + ' the ED matrix creation, but can decrease the number of extracted epochs\n',... + ' and thus decrease the accuracy of the function. \n',... + '\n',... + 'Input EEG data can be continuous or epoched. If continuous, the function\n',... + ' will extract epochs with a length that is automatically determined by\n',... + ' the function. For this function to work, input data must consist of 30 \n',... + ' epochs (or continuous data from which 30 epochs can be extracted.).\n',... + ' 30 s of data is recommended as the bare minimum at which reliable\n',... + ' results may be obtained, although more data will further improve\n',... + ' reliability. 1500 s of data is recommended as a good upper limit beyond\n',... + ' which reliability and accuracy will probably not significantly improve.\n',... + '\n',... + 'Any changes to the EEG data within this function will not be applied to\n',... + ' the data in the main MATLAB workspace (i.e., even if this function\n',... + ' epochs and filters the data, the original EEG data structure will remain\n',... + ' unaffected).\n',... + '\n',... + 'Usage: [EB, ED] = eBridge(EEG, {''e#1''...''e#n''}, '''',...'''',);\n',... + '\n',... + 'Only EEG (EEGLAB epoched or continuous data structure) is required for input.\n',... + '\n',... + 'INPUT:\n',... + ' EEG: A continuous or epoched EEGLAB epoched data structure, containing\n',... + ' at least the following two fields:\n',... + ' - .data: Matrix of channels x samples, or channels x samples\n',... + ' x epochs.\n',... + ' - .chanlocs: Structure containing channel labels under the\n',... + ' subfields .chanlocs.labels.\n',... + '\n',... + 'Optional input arguments:\n',... + 'Enter with flag in single quotes ('''' above), followed by\n',... + 'the corresponding argument ( above).\n',... + ' {ExChans} Cell array containing labels of any channels to be\n',... + ' excluded. Does not require a flag.\n',... + ' ''BinSize'' Size of bins in ED frequency distribution, before spline\n',... + ' interpolation. Only a number whose multiplicative inverse\n',... + ' (i.e., 1/BinSize) is an integer can be used.\n',... + ' ''BCT'' Bridge classification threshold. Number between 0 and 1.\n',... + ' Fraction of epochs that must be less than or equal to the\n',... + ' automatically-calculated electrical distance cutoff for a\n',... + ' channel to be flagged as bridged. Default is 0.5.\n',... + ' ''PlotMode'' 0 Do not plot spline-interpolated ED distribution and ED\n',... + ' cutoff.\n',... + ' 1 Plot only if bridged channels are found (default).\n',... + ' 2 Plot.\n',... + ' ''Verbose'' 0 Very little screen output.\n',... + ' 1 Medium amount of screen output (default).\n',... + ' 2 High screen output.\n',... + '\n',... + 'The following input arguments are only relevant for continuous input data.\n',... + ' ''EpLength'' Epoch length, in sample points. If set to 0 (default),\n',... + ' epoch length will be determined automatically.\n',... + 'In addition to requiring continuous input data, the following input\n',... + 'argument also requires EEGLAB to be initialized and the MATLAB Signal\n',... + 'Processing Toolbox to be installed.\n',... + ' ''FiltMode'' 0 Do not filter continuous data (default).\n',... + ' 1 Bandpass filter continuous data using the EEGLAB\n',... + ' pop_eegfilt function.\n',... + '\n',... + 'OUTPUT:\n',... + 'EB: Structure containing the following fields:\n',... + ' .Bridged: Structure containing the following fields:\n',... + ' .Count: Number of bridged channels.\n',... + ' .Indices: Row vector containing the indices of bridged channels.\n',... + ' .Labels: Cell vector containing the labels of bridged channels.\n',... + ' .Pairs: 2-row cell array containing the pairs of channels that were\n',... + ' bridged together (each column contains a bridged pair).\n',... + ' .Info: Structure containing the following fields:\n',... + ' .ExChans: Cell array containing the labels of excluded channels.\n',... + ' .Binsize: BinSize (see input section).\n',... + ' .BCT: BCT (see input section).\n',... + ' .EDcutoff: Automatically-calculated electrical distance cutoff. If not\n',... + ' applicable, set to -1.\n',... + ' .FigHandle: Handle of figure containing plot of ED distribution.\n',... + ' .FiltLower: Lower cutoff for bandpass filter. If filter was not\n',... + ' applied, set to -1.\n',... + ' .FiltUpper: Upper cutoff for bandpass filter. If filter was not\n',... + ' applied, set to -1.\n',... + ' .EEGtype: Type of EEG data submitted as input. Either ''Continuous''\n',... + ' or ''Epoched''.\n',... + ' .NumChansOrg: Original number of channels (before excluded channels\n',... + ' subtracted).\n',... + ' .NumChans: New number of channels (with excluded channels\n',... + ' subtracted).\n',... + ' .NumEpochs: Number of epochs.\n',... + ' .NumPts: Number of sample points per epoch.\n',... + ' .EDscale: Factor by which all ED values are scaled \n',... + ' (EDscale = 100 / [median ED]) \n',... + ' .Version: Version number of this function.\n',... + '\n',...' + 'ED: Triangular matrix of size channels x channels. It contains all of the\n',... + ' unscaled pairwise electrical distance values for non-excluded channels.\n',... + ' It will not be returned if only one output variable is assigned for\n',... + ' the function.\n',... + '\n',... + 'EXAMPLES:\n',... + '[a, b] = eBridge(EEG,{''Cz'' ''Fz''},''BCT'',.5,''PlotMode'',2,''Verbosity'',0,''EpLength'',128,''FiltMode'',1);\n',... + 'This will create an output structure named "a" containing the bridging\n',... + ' information and an output ED matrix named "b". The input structure "EEG"\n',... + ' will be used, with Cz and Fz excluded. BCT will be set to ".5". The ED\n',... + ' ED frequency will be plotted distribution even if no channels are\n',... + ' bridged. Screen output will be sparse. If data are continuous, they will\n',... + ' be filtered, and epochs with a length of 128 sample points will be\n',... + ' extracted.\n',... + '\n',... + 'a = eBridge(EEG);\n',... + 'This will create an output structure named "a" containing the bridging\n',... + ' information; an output ED matrix will not be returned. The input\n',... + ' structure "EEG" will be used with no excluded channels and all options\n',... + ' set to their default values.\n']); + %Return to original "more" setting. + if strcmpi(moreSetting,'off'), more off; end + clear moreSetting + return +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Configure and check all arguments. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +fprintf([mBeg 'Configuring inputs.\n']); +%Check EEG structure. +AllEEGStructs = cellfun(@isstruct,varargin); +assert(sum(AllEEGStructs) <= 1,'Only one EEG structure can be entered as an input.','') +assert(sum(AllEEGStructs) >= 1,'An EEG structure must be entered as an input.','') +EEGStructInd = find(AllEEGStructs == 1); +EEG = varargin{EEGStructInd}; +assert(~isempty(fieldnames(EEG)),'Input EEG data structure "%s" is empty.', inputname(EEGStructInd)) +assert(all(isfield(EEG,{'data','chanlocs','srate'})) && isfield(EEG.chanlocs,'labels'),['Problem with fields in input structure "%s". Must contain fields .data,\n',... + '.chanlocs, and .srate.'],inputname(EEGStructInd)) +assert((ndims(EEG.data) == 3) || (ndims(EEG.data) == 2),['Input EEG data matrix "%s.data" must be an epoched 3-dimensional channels\n',... + 'x samples x epochs matrix or a continuous 2-dimensional channels x samples\n',... + 'matrix.'], inputname(EEGStructInd)) +if ndims(EEG.data) == 2 + EBinput.EEGtype = 'Continuous'; +else + EBinput.EEGtype = 'Epoched'; +end +%Check ExChan. +AllExChanCells = cellfun(@iscell,varargin); +assert(sum(AllExChanCells) <= 1,'Only one cell array can be entered as an input for excluded channels.','') +if ~any(AllExChanCells) + EBinput.ExChans = {}; +else + EBinput.ExChans = varargin{AllExChanCells == 1}; +end +clear AllEEGStructs EEGStructInd AllExChanCells +%Check flag inputs. +%flagCell contains flag names on first row and the corresponding defaults +%on the second row. +flagCell = {'BinSize','BCT','PlotMode','Verbose','EpLength','FiltMode';0.25,0.5,1,1,0,0}; +for a = 1:length(flagCell) + flagName = flagCell{1,a}; + AllFlagSize = strcmpi(flagName,varargin); + assert(sum(AllFlagSize) <= 1,'Only one %s value can be entered as an input.',flagName) + if ~any(AllFlagSize) + EBinput.(flagName) = flagCell{2,a}; + else + EBinput.(flagName) = varargin{find(AllFlagSize == 1) + 1}; + assert(isnumeric(EBinput.(flagName)) && sum(length(EBinput.(flagName))) <= 2,'%s input must be a 1x1 numeric variable.\n',flagName) + end +end +clear flagCell flagFields flagName AllFlagSize +%Additional flag variable checks. +assert((0 < EBinput.BinSize) && (EBinput.BinSize < 100),'BinSize input must be a number greater than 0 and less than 100.\n','') +assert((0 < EBinput.BinSize) && (EBinput.BinSize < 100),'BinSize input must be a number greater than 0 and less than 100.\n','') +assert(~logical(mod((1/EBinput.BinSize),1)),'Multiplicative inverse of BinSize must be an integer.\n','') +assert((0 < EBinput.BCT) && (EBinput.BCT < 1), 'BCT input must be a number greater than 0 and less than 1.','') +assert((EBinput.PlotMode == 0) || (EBinput.PlotMode == 1) || (EBinput.PlotMode == 2),'PlotMode input must be "0", "1", or "2".','') +assert((EBinput.Verbose == 0) || (EBinput.Verbose == 1) || (EBinput.Verbose == 2),'Verbose input must be "0", "1", or "2".','') +if strcmpi(EBinput.EEGtype,'Continuous') + assert((0 <= EBinput.EpLength) && ~logical(mod(EBinput.EpLength,1)),'EpLength input must be an integer greater than or equal to 0.','') + assert((EBinput.FiltMode == 0) || (EBinput.FiltMode == 1),'FiltMode input must be "0" or "1".','') + %Check that EEGLAB is initialized and Signal Processing Toolbox is installed. + if EBinput.FiltMode == 1 + assert(logical(exist('fir1','file')),['Cannot process continuous data. The fir1 function or Signal Processing\n',... + 'Toolbox is missing.'],'') + try + evalin('base','ALLEEG; CURRENTSET;'); + catch ceException + error(['EEGLAB is not active. EEGLAB must be initialized for filterng of\n',... + 'continuous data. Run "eeglab" function on command line, then try again.\n'],'') + end + end +end +%Check outputs. +assert(nargout <= 2,'A maximum of two output variables can be assigned to this function.','') + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Display citation information. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if EBinput.Verbose == 2, fprintf('Please cite: Alschuler et al. (2013). Clin Neurophysiol, 2014, 125(3):484-490.\n'); end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Process continuous EEG data. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%If EEG.data is continuous, optionally use EEGLAB pop_eegfilt to filter the +%data then create new epoched data matrix. +if strcmpi(EBinput.EEGtype,'Continuous') + %Bandpass filter data using pop_eegfilt.m function twice, once for lower + %bound and once for upper bound (as recommended by the function + %documentation). + if EBinput.FiltMode == 1 + EB.Info.FiltUpper = 30; + EB.Info.FiltLower = 0.5; + %Check that there is enough data for bandpass filtering. + hpordersec = 3 / EB.Info.FiltLower; + hporder = ceil(hpordersec * EEG.srate); + assert(hporder <= size(EEG.data,2),['Not enough continuous data. At least %i seconds needed for bandpass\n',... + 'filtering. Try again with more data or with ''FiltMode'' option set to 0.'],hpordersec) + %Actually filter the data. + try + EEG = pop_eegfilt(EEG,0,EB.Info.FiltUpper,[],0,0,0,'fir1',0); + EEG = pop_eegfilt(EEG,EB.Info.FiltLower,0,[],0,0,0,'fir1',0); + catch filtException + error('Filtering failed. Exception: %s\n',filtException.message) + end + else + EB.Info.FiltUpper = -1; + EB.Info.FiltLower = -1; + end + %Epoch data. + %Set variables for epoching data. + [tmpChans,tmpPts] = size(EEG.data); + if EBinput.EpLength == 0 + %Cutoffs to follow when epoching automatically. + maxEpochs = 1500; + minPts = 64; + minSecs = 0.5; + maxSecs = 1.0; + %Conversion of cutoffs to epoch length. + epsEL = floor(tmpPts / maxEpochs); + ptsEL = minPts; + minSecsEL = floor(minSecs * EEG.srate); + maxSecsEL = floor(maxSecs * EEG.srate); + %Find epoch length. + if ptsEL > maxSecsEL + newEpLen = ptsEL; + elseif epsEL > maxSecsEL + newEpLen = maxSecsEL; + else + newEpLen = max([epsEL,ptsEL,minSecsEL]); + end + else + newEpLen = EBinput.EpLength; + end + delPts = mod(tmpPts,newEpLen); + newEpochs = floor(tmpPts / newEpLen); + %Remove the last few points from the data if necessary. + if delPts >= 1, EEG.data(:,end-delPts+1:end) = []; end + %Epoch the data. + EEG.data = reshape(EEG.data,tmpChans,newEpLen,newEpochs); + if EBinput.Verbose > 0, fprintf([mBeg 'Epoch length set to %i sample points. %i epochs extracted.\n'],newEpLen,newEpochs); end + clear tmpChans tmpPts maxEpochs minPts minSecs epsEL ptsEL secsEL newEpLen delPts newEpochs +else + EB.Info.FiltUpper = -1; + EB.Info.FiltLower = -1; +end +EB.Info.sRate = EEG.srate; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Get input data info. +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%Get dimensions of data matrix and check that there is enough data. +[EB.Info.NumChansOrg,EB.Info.NumPts,EB.Info.NumEpochs] = size(EEG.data); +%Minimum number of epochs of input data for function to run. +minEpLimit = 30; +assert(EB.Info.NumEpochs >= minEpLimit,['Only %i epochs with length %i points of input data. At least %i epochs\n',... + 'are required. Try again with a shorter epoch length or more data.\n'],EB.Info.NumEpochs,EB.Info.NumPts,minEpLimit) +clear minEpLimit + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Get channel names and indices of excluded channels. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Make list of channel names, AllChans (1 x .NumChansOrg cell array). +AllChans = {EEG.chanlocs.labels}; +%Get excluded channel indices and EB.NumChans. +if ~isempty(EBinput.ExChans) + corrEx=~ismember(upper(EBinput.ExChans),upper(AllChans)); + if ~all(ismember(upper(EBinput.ExChans),upper(AllChans))) + fprintf([mBeg 'The following channels flagged for exclusion are not listed in\n',... + begSpace '%s.chanlocs.labels:'],inputname(1)); + fprintf(' ''%s''',EBinput.ExChans{corrEx}); + fprintf(['.\n' begSpace 'These unrecognized channels will not be excluded.\n']); + end + ExChanInd = find(ismember(upper(AllChans),upper(EBinput.ExChans)) == 1); + EB.Info.NumChans = EB.Info.NumChansOrg - length(ExChanInd); + clear corrEx +else + EB.Info.NumChans = EB.Info.NumChansOrg; +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Make electrical difference matrix. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Initialize ED (.NumChans x .NumChans-1 x .NumEpochs). +ED = zeros(EB.Info.NumChans,EB.Info.NumChans,EB.Info.NumEpochs); +ED(:,:,:) = NaN; +%Lists of channel indices to loop through, without excluded channels. +EDloop = 1:EB.Info.NumChans; +if ~isempty(EBinput.ExChans), EDloop(ismember(EDloop,ExChanInd)) = []; end +LoopLen = length(EDloop); +%Variables for number of status dots. Must be divisible by 2. +numDots = 50; +totLoops = ((EB.Info.NumChans.^2) - EB.Info.NumChans) / 2; +LoopCount = 0; +DotCount = 1; +DotHalf = (numDots - 4) / 2; +%Variables for status percentage +numPer = 100; +PerCount = 0; +%Display status bar. +dotStr1 = ''; +dotStr2 = ''; +spStr1 = repmat(sprintf(' '), 1, DotHalf); +spStr2 = repmat(sprintf(' '), 1, DotHalf); +fprintf([mBeg 'Computing EDs for %i/%i chans, %i epochs, and %i points/epoch.\n'],EB.Info.NumChans,EB.Info.NumChansOrg,EB.Info.NumEpochs,EB.Info.NumPts); +fprintf([begSpace '[' dotStr1 spStr1 '%3i%%' dotStr2 spStr2 ']'],PerCount); +%Loop to actually create the ED matrix. +for a = 1:(LoopLen-1) + for b = (a+1):LoopLen + %Increment status bar. + LoopCount = LoopCount + 1; + if LoopCount > ((totLoops / numPer) * PerCount) + if LoopCount > ((totLoops / numDots) * DotCount) + DotCount = DotCount + 1; + if DotCount <= DotHalf + dotStr1 = repmat(sprintf('.'), 1, DotCount); + dotStr2 = ''; + spStr1 = repmat(sprintf(' '), 1, DotHalf-DotCount); + spStr2 = repmat(sprintf(' '), 1, DotHalf); + elseif DotCount >= (DotHalf + 4) + dotStr1 = repmat(sprintf('.'), 1, DotHalf); + dotStr2 = repmat(sprintf('.'), 1, DotCount-DotHalf-4); + spStr1 = ''; + spStr2 = repmat(sprintf(' '), 1, numDots-DotCount); + end + end + PerCount = PerCount + 1; + revStr = repmat(sprintf('\b'), 1, numDots+1); + if (DotCount < DotHalf ) || (PerCount == 100) + fprintf([revStr dotStr1 spStr1 '%3i%%' dotStr2 spStr2 ']'],PerCount); + else + fprintf([revStr dotStr1 spStr1 '.%2i%%' dotStr2 spStr2 ']'],PerCount); + end + end + %Make difference matrix, diffE (.NumChans x .NumChans). + diffE = squeeze(EEG.data(EDloop(a),:,:) - EEG.data(EDloop(b),:,:)); + %Create ED values and add to ED. + ED(EDloop(a),EDloop(b),:) = var(diffE,1,1); + end +end +fprintf([repmat(sprintf('\b'), 1, numDots+2+length(mBeg))]); +clear a b ExChanInd EDloop compLoop LoopLen numDots totLoops LoopCount DotCount DotHalf +clear numPer PerCount revStr dotStr1 dotStr2 spStr1 spStr2 + +%%%%%%%%%%%%%%%%%%%%%%%%% +%Vectorize and scale EDs. +%%%%%%%%%%%%%%%%%%%%%%%%% +%Get vectorized upper triangular part of ED matrix, EDvect, then create +%copy of ED, ScaledED. then create scaling factor and apply to +%EDvect and ScaledED. +if EBinput.Verbose == 2, fprintf([mBeg 'Creating ED vector and scaling ED values.\n']); end +if EBinput.Verbose < 2, fprintf([mBeg 'Creating ED frequency distribution and finding bridged channels.\n']); end +%Create EDvect. +EDvect = transpose(ED(~isnan(ED))); +%Create copy of ED, ScaledED. +ScaledED = ED; +%Get scaling factor. +EB.Info.EDscale = 100 / median(EDvect); +%Apply scaling factor. +EDvect = EDvect * EB.Info.EDscale; +ScaledED = ScaledED * EB.Info.EDscale; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Create ED frequency distribution. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if EBinput.Verbose == 2, fprintf([mBeg 'Creating ED frequency distribution.\n']); end +if EBinput.PlotMode == 0 + binMax = 12; +else + binMax = 500; +end +halfBinSize = (EBinput.BinSize / 2); +binEdges = 0:EBinput.BinSize:binMax; +binCenters = halfBinSize:EBinput.BinSize:(binMax - halfBinSize); +EDcounts = histc(EDvect,binEdges); +EDcounts = EDcounts(:,1:end-1); +%Run spline interpolation. +BinSizeSPL = 0.05; +binCentersSPL = 0:BinSizeSPL:binMax; +EDcountsSPL = interp1(binCenters,EDcounts,binCentersSPL,'spline'); +clear halfBinSize binEdges binCenters EDcounts + +%%%%%%%%%%%%%%%%% +%Find local peak. +%%%%%%%%%%%%%%%%% +%%%Find first peak between 0 and LPcutoff. +LPcutoff = 3; +if EBinput.Verbose == 2, fprintf([mBeg 'Finding ED cutoff.\n']); end +%Size of peak search window. +PeakSpan = 1 / BinSizeSPL; +%Create vector consisting of zero-padded early (0 to 5) part of ED +%distribution to search for peaks. +fPeakVect = [zeros(1,PeakSpan) EDcountsSPL(1,1:(LPcutoff+1)/BinSizeSPL)]; +%Variable to hold index of peak. +PeakBinMin = []; +for a = (PeakSpan+1):LPcutoff/BinSizeSPL + if all(fPeakVect(1,a) > fPeakVect(1,[(a - PeakSpan):(a - 1) (a + 1):(a + PeakSpan)])) + PeakBinMin = a - PeakSpan; + break + end +end +clear PeakSpan fPeakVect + +%%%%%%%%%%%%%%% +%Find EDcutoff. +%%%%%%%%%%%%%%% +%X-value of min between peak and LMcutoff is EDcutoff. +LMcutoff = 5; +if isempty(PeakBinMin) + EB.Info.EDcutoff = -1; +else + EDbinIndsMin = (PeakBinMin + 1):(LMcutoff / BinSizeSPL); + [~,EDcoAllIndsMin] = min(EDcountsSPL(1,EDbinIndsMin)); + EDcoIndMin = PeakBinMin + EDcoAllIndsMin(1,1); + EB.Info.EDcutoff = binCentersSPL(EDcoIndMin); +end +clear PeakBinMin EDbinIndsMin EDcoAllIndsMin EDcoIndMin + +%%%%%%%%%%%%%%%%%%%%%%% +%Find bridged channels. +%%%%%%%%%%%%%%%%%%%%%%% +if EBinput.Verbose == 2, fprintf([mBeg 'Finding bridged channels.\n']); end +%No ED cutoff. +if EB.Info.EDcutoff == -1 + EB.Bridged.Labels = cell(1,1); + EB.Bridged.Pairs= cell(2,1); + EB.Bridged.Indices = []; + EB.Bridged.Count = 0; +else + preBridged = ScaledED < EB.Info.EDcutoff; + finBridged = squeeze(sum(preBridged,3)); + [BRrow,BRcol] = find(finBridged >= (EBinput.BCT * EB.Info.NumEpochs)); + BRrow = squeeze(transpose(BRrow)); + BRcol = squeeze(transpose(BRcol)); + BRallIndsUnq = unique([BRrow BRcol]); + if ~isempty(BRallIndsUnq) + %ED cutoff exists, there are bridged channels. + EB.Bridged.Labels = AllChans(BRallIndsUnq); + EB.Bridged.Pairs(1,:) = AllChans(BRrow); + EB.Bridged.Pairs(2,:) = AllChans(BRcol); + EB.Bridged.Indices = BRallIndsUnq; + EB.Bridged.Count = length(BRallIndsUnq); + else + %ED cutoff exists, no bridged channels. + EB.Bridged.Labels = cell(1,1); + EB.Bridged.Pairs = cell(2,1); + EB.Bridged.Indices = []; + EB.Bridged.Count = 0; + end + clear ScaledED preBridged finBridged BRrow BRcol BRallIndsUnq +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Plot distribution and EDcutoff. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if (EBinput.PlotMode == 2) || ((EBinput.PlotMode == 1) && (EB.Bridged.Count ~= 0)) + if EBinput.Verbose > 0, fprintf([mBeg 'Plotting ED frequency distribution and cutoff.\n']); end + %Close previous figures created by this function. + preEBfig = findobj('Type','Figure'); + for a = 1:length(preEBfig) + if strcmpi(get(get(gca(preEBfig(a)),'title'),'string'), 'Spline-interpolated ED distribution'); + close(preEBfig(a)); + end + end + %Plot the distribution. + EB.Info.FigHandle = figure('Name',[mBeg inputname(1)]); + plot(binCentersSPL, EDcountsSPL, 'b-') + set(gca,'XLim',[0 binMax]); + %Plot EDcutoff. + if EB.Info.EDcutoff ~= -1 + oldYLim = get(gca,'YLim'); + hold on + plot([EB.Info.EDcutoff EB.Info.EDcutoff], [0 oldYLim(1,2) * 2], 'g-'); + hold off + set(gca,'YLim',[0 oldYLim(1,2)]); + end + %Add title and axis labels. + title('Spline-interpolated ED distribution'); + xlabel('Electrical Distance (ED)'); + ylabel('Number of epochs'); + %Add annotation. + EDplotText = cell(5,1); + EDplotText(1,1) = cellstr(['eBridge.m ', char(169), 'D. Alschuler 2013']); + EDplotText(2,1) = cellstr('Alschuler et al. (2014)'); + EDplotText(3,1) = cellstr('Clin Neurophysiol 125(3):484-490'); + PlotChanStr = [num2str(EB.Info.NumChans), '/' num2str(EB.Info.NumChansOrg)]; + PlotEpStr = num2str(EB.Info.NumEpochs); + PlotStrLen = max([length(PlotChanStr), length(PlotEpStr)]); + PlotChanSp = repmat(' ',1,PlotStrLen-length(PlotChanStr)); + PlotEpSp = repmat(' ',1,PlotStrLen-length(PlotEpStr)); + EDplotText(4,1) = cellstr(['Channels: ' PlotChanSp PlotChanStr]); + EDplotText(5,1) = cellstr(['Epochs: ' PlotEpSp PlotEpStr]); + text(0.97,0.97,EDplotText,'Units','Normalized','HorizontalAlignment','Right','VerticalAlignment','Top','FontSize',8,'FontName','FixedWidth'); + clear OldYLim PlotChanStr PlotEpStr PlotStrLen PlotChanSp PlotEpSp EDplotText +else + EB.Info.FigHandle = []; +end +clear binMax binCentersSPL EDcountsSPL + +%%%%%%%%%%%%%% +%Finalization. +%%%%%%%%%%%%%% +EB.Info.BCT = EBinput.BCT; +EB.Info.BinSize = EBinput.BinSize; +EB.Info.EEGtype = EBinput.EEGtype; +EB.Info.ExChans = EBinput.ExChans; +EB.Bridged = orderfields(EB.Bridged); +EB.Info = orderfields(EB.Info); +EB = orderfields(EB); +varargout{1} = EB; +if nargout == 2, varargout{2} = ED; end +fprintf([mBeg 'Number of bridged channels: %i\n'], EB.Bridged.Count); +if EBinput.Verbose > 0 + fprintf([mBeg 'Bridged channel labels: ']); + if isempty(EB.Bridged.Labels{1,1}); + fprintf(' NONE'); + else + labelspace = sprintf(' %s', EB.Bridged.Labels{1,:}); + fprintf('%s',labelspace); + end + fprintf('\n'); +end +if EBinput.Verbose == 2 + fprintf([mBeg 'Bridged channel pairs: ']); + if isempty(EB.Bridged.Pairs{1,1}) + fprintf(' NONE'); + else + for a = 1:size(EB.Bridged.Pairs,2), fprintf(' (%s,%s)', EB.Bridged.Pairs{1,a}, EB.Bridged.Pairs{2,a}); end + end + fprintf('\n') +end +clear a EB ED \ No newline at end of file diff --git a/src/functions/edf_to_figure.m b/src/functions/edf_to_figure.m new file mode 100644 index 0000000..881cb4b --- /dev/null +++ b/src/functions/edf_to_figure.m @@ -0,0 +1,84 @@ +function [eyetrHeatMap] = edf_to_figure(data_path) +%% edf_to_figure is a combination of functions from @EDF2Mat. +% Edf2Mat is created by 'Adrian Etter, Marc Biedermann' +% edf_to_figure is created by Douwe John Horsthuis (2022) +% This function generates one figure with the heatmap of the gazepositions of all the data that. +% It needs the data_path (where the .EDF files are of each participant) +% +% It only uses the Edf2Mat function and the edfimporter files in the private folder. +% However, if you want to plot something else, you might need other files +% from the original Edf2Mat folder, so they still exist but are not used +%% first we merge all the data into one file +data_folder=dir(data_path); +obj.Samples.posX=[]; obj.Samples.posY=[];amount=0; + for i=1:length(data_folder) + if endsWith(data_folder(i).name,'.edf') + amount=amount+1; + edf_temp=Edf2Mat([data_path data_folder(i).name]); %reading the eye tracking files + obj.Samples.posX=[obj.Samples.posX;edf_temp.Samples.posX]; %combining all of them + obj.Samples.posY=[obj.Samples.posY;edf_temp.Samples.posY]; %combining all of them + end + end +%% we now do the rest (from Edf2Mat) +startIdx = 1; +endIdx = numel(obj.Samples.posX); +eye = 1; + +range = startIdx:endIdx; +assert(numel(range) > 0, 'Edf2Mat:plot:range', ... + 'Start Index == End Index, nothing do be plotted'); + +%% variables +gaussSize = 80; +gaussSigma = 20; + +posX = obj.Samples.posX(range, eye); +posY = obj.Samples.posY(range, eye); + +%% generating data for heatmap +gazedata = [posY, posX]; +gazedata = gazedata(~isnan(gazedata(:, 1)), :); + +% set minimum x and y to zero +for i=1:size(gazedata, 2) + gazedata(:, i) = gazedata(:, i) - min(gazedata(:, i)); +end + +gazedata = ceil(gazedata) + 1; +data = accumarray(gazedata, 1); +data = flipud(data); + +%% smoothing the Data +gaze = zeros(size(data)); +cut = mean(data(:)); +data(data > cut) = cut; + +size_1=gaussSize; +sigma=gaussSigma; +[Xm, Ym] = meshgrid(linspace(-.5, .5, size_1)); + +s = sigma / size_1; % gaussian width as fraction of imageSize +kernel = exp( -(((Xm.^2)+(Ym.^2)) ./ (2* s^2)) ); % formula for 2D gaussian + + +eyetrHeatMap = conv2(data, kernel, 'same'); + +% map with gazepoints on the value of the mean of the heatmap +gaze(data > 0) = mean(eyetrHeatMap(:)); + +% calculated plotrange (min to max on each axes) +plotRange = [min(posX), max(posX), min(posY), max(posY)]; +if plotRange(1) < 0 + plotRange(1:2) = [0, max(posX) + abs(plotRange(1))]; +end +if plotRange(3) < 0 + plotRange(3:4) = [0, max(posY) + abs(plotRange(3))]; +end +plotRange = floor(plotRange); + +obj.imhandle = imagesc(eyetrHeatMap); + +axis(plotRange); +colorbar; +title(['Heat map of the eye movement for all ' num2str(amount) ' blocks']); +end \ No newline at end of file diff --git a/src/functions/eyetracking/@Edf2Mat/.gitignore b/src/functions/eyetracking/@Edf2Mat/.gitignore new file mode 100644 index 0000000..7083690 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/.gitignore @@ -0,0 +1 @@ +/*.asv diff --git a/src/functions/eyetracking/@Edf2Mat/Edf2Mat.m b/src/functions/eyetracking/@Edf2Mat/Edf2Mat.m new file mode 100644 index 0000000..6918fe3 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/Edf2Mat.m @@ -0,0 +1,663 @@ +classdef Edf2Mat < handle + % Edf2Mat is a converter to convert Eyetracker data files to + % Matlab file and perform some tasks on the data + % + % The new procedure uses code from SR-Research that returns all info of + % the edf and not just part of it. The new routine is based on the work + % of C. Kovach 2007 and is only for non-commercial use! + % + % + % Syntax: Edf2Mat(filename); + % Edf2Mat(filename, verbose); + % + % Inputs: + % filename: must be of type *.edf + % useOldProcedure: If you want to use the old procedure with + % edf2asc.exe, you can set this argument to + % true, default is false + % verbose: logical, can be true or false, default is true. + % If you want to suppress output to console, + % verbose has to be false + % + % Outputs: + % The Edf2Mat Object + % + % Example: + % Give here some examples on how to use the class, eg: + % edf = Edf2Mat('example.edf'); + % edf = Edf2Mat('example.edf', true); % to activate the old + % procedure set this + % argument to true. + % Instead of using the + % SR-Research mex file, + % a edf to ascii + % converter is used and + % then processed. Only + % avaliable for windows. + % edf = Edf2Mat('example.edf', true, true); % verbose mode = false: + % no ouput is generated + % to the matlab command + % window. This option is + % only available if the + % old procedure is active + % + % Other m-files required: + % everything in the @folder & private folder is required, + % private/edf2asc.exe and private/processEvents.m, the mex files and + % the dll's/frameworks. On Mac the edfapi.framework must be copied to + % /Library/Framworks/ !!!Not the personal Library but to the root + % Library + % + % Other Classes required: + % no + % + % + % See also: Edf2Mat.plot(), Edf2Mat.save(), Edf2Mat.heatmap() + % Edf2Mat.Events, Edf2Mat.Samples, Edf2Mat.Header + % Edf2Mat.about(), Edf2Mat.version() + % + % Copyright & Info + + % License: + % Copyright (c) 2013, Adrian Etter + % All rights reserved. + % + % Redistribution and use in source and binary forms, with or + % without modification, are permitted provided that the following + % conditions are met: + % + % Redistributions of source code must retain the above copyright + % notice, this list of conditions and the following disclaimer. + % Redistributions in binary form must reproduce the above copyright + % notice, this list of conditions and the following disclaimer in + % the documentation and/or other materials provided with the + % distribution. Neither the name of the UNIVERSITY OF ZURICH nor the + % names of its contributors may be used to endorse or promote + % products derived from this software without specific prior + % written permission. + % + % THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + % CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + % INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + % MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + % DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + % CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + % SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + % LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + % USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + % AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + % LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + % ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + % POSSIBILITY OF SUCH DAMAGE. + + % Event structure from SR-Research: + % float px[2], py[2]; /* pupil xy */ + % float hx[2], hy[2]; /* headref xy */ + % float pa[2]; /* pupil size or area */ + % + % float gx[2], gy[2]; /* screen gaze xy */ + % float rx, ry; /* screen pixels per degree */ + % UINT32 time; /* effective time of event */ + % INT16 type; /* event type */ + % UINT16 read; /* flags which items were included */ + % INT16 eye; /* eye: 0=left, 1=right */ + % UINT32 sttime; /* start time of the event */ + % UINT32 entime; /* end time of the event */ + % float hstx, hsty; /* headref starting points */ + % float gstx, gsty; /* gaze starting points */ + % float sta; // Undocumented by sr-research, adrian etters + % assumption: start area of pupil + % float henx, heny; /* headref ending points */ + % float genx, geny; /* gaze ending points */ + % float ena; // Undocumented by sr-research, adrian etters + % assumption: end area of pupil + % float havx, havy; /* headref averages */ + % float gavx, gavy; /* gaze averages */ + % float ava; // Undocumented by sr-research, adrian etters + % assumption: average area of pupil + % float avel; /* accumulated average velocity */ + % float pvel; /* accumulated peak velocity */ + % float svel, evel; /* start, end velocity */ + % float supd_x, eupd_x; /* start, end units-per-degree */ + % float supd_y, eupd_y; /* start, end units-per-degree */ + % UINT16 status; /* error, warning flags */ + % UINT16 flags; /* error, warning flags */ + % UINT16 input; + % UINT16 buttons; + % UINT16 parsedby; /* 7 bits of flags: PARSEDBY codes*/ + % LSTRING *message; /* any message string + + % CONSTANT AND HIDDEN VARIABLES + properties (Constant, Hidden) + HEADERSTART = 316; + end + + % CONSTANT VARIABLES + properties (Constant) + % Here we add the Version, Author, Copyright Info and the Change + % Log + AUTHOR = 'Adrian Etter, Marc Biedermann'; % Author of the Class + AUTHOREMAIL = 'engineering@econ.uzh.ch'; % Email of the Author + COPYRIGHT = {'Department of Economics'; 'University of Zurich'}; % Copyright Info + VERSION = 1.20; % Number of the latest Version + VERSIONDATE = '2018/May/22'; % Date of the latest Version + CHANGELOG = {eval([mfilename '.VERSIONDATE']), 'fix heatmap for binocular data'; + '2016/August/12', 'Add new Feature heatmap to the class'; ... + '2016/June/15', 'Add backwards compatibility with older macs'; ... + '2016/June/14', 'fix version mess'; ... + '2016/Jan/11', 'added new function for timeline and normalized timeline and blinktimeline'; ... + '2013/April/11', 'Complete backward compatibility added'; ... + '2013/May/07', 'Bug fixes and renaming of variable. Old names persist! All event types defined'; ... + '2013/April/11', 'Changed to mex instead of using edf.asc.exe'; ... + '2012/Aug/10', 'Finished'; ... + '2012/Aug/9', 'created'}; + + EVENT_TYPES = struct('STARTPARSE', 1, ... % /* these only have time and eye data */ + 'ENDPARSE', 2, ... + 'BREAKPARSE', 10, ... + ... + ... % /* EYE DATA: contents determined by evt_data */ + 'STARTBLINK', 3, ... % /* and by "read" data item */ + 'ENDBLINK', 4, ... % /* all use IEVENT format */ + 'STARTSACC', 5, ... + 'ENDSACC', 6, ... + 'STARTFIX', 7, ... + 'ENDFIX', 8, ... + 'FIXUPDATE', 9, ... + ... % + ... % /* buffer = (none, directly affects state), btype = CONTROL_BUFFER */ + ... % + ... % /* control events: all put data into */ + ... % /* the EDF_FILE or ILINKDATA status */ + 'STARTSAMPLES', 15, ... % /* start of events in block */ + 'ENDSAMPLES', 16, ... % /* end of samples in block */ + 'STARTEVENTS', 17, ... % /* start of events in block */ + 'ENDEVENTS', 18, ... % /* end of events in block */ + ... % + ... % + ... % + ... % /* buffer = IMESSAGE, btype = IMESSAGE_BUFFER */ + ... % + 'MESSAGEEVENT', 24, ... % /* user-definable text or data */ + ... % + ... % + ... % /* buffer = IOEVENT, btype = IOEVENT_BUFFER */ + ... % + 'BUTTONEVENT', 25, ... % /* button state change */ + 'INPUTEVENT', 28, ... % /* change of input port */ + ... + 'LOST_DATA_EVENT', hex2dec('3F')); %/* NEW: Event flags gap in data stream */ + + RECORDING_STATES = struct('START', 1, 'END', 0); + EYES = struct('LEFT', 1, 'RIGHT', 2, 'BINOCULAR', 3); + PUPIL = struct('AREA', 0, 'DIAMETER', 1); + MISSING_DATA_VALUE = -32768; + EMPTY_VALUE = 1e08; % only for backward compatibility with old Edf2Mat ... + + end + + % PRIVATE VARIABLES + properties(SetAccess = private, GetAccess = private) + % Here come the properties, which only can be read and written from + % the class itself AND aren't visible from the outside + + % Description of the variable can also be above the variable. + oldProcedure = false; + verbose = false; + output; + cases = struct('samples', 'Samples', 'events', 'Events'); + imhandle; + end + + % PRIVATE WRITABLE VARIABLES + properties(SetAccess = private, GetAccess = public) + + filename; % The name of the EDF File converted + + % The Header of the Eyetrackerdata, Information about the Eyetrackerdata + Header = struct('date', [], ... + 'type', [], ... + 'version', [], ... + 'source', [], ... + 'system', [], ... + 'camera', [], ... + 'serial_number', [], ... + 'camera_config', [] ... + ); + + % The Samples of the Eyetrackerdata + Samples = struct('time', [], 'posX', [], 'posY', [], 'pupilSize', []); + + % The Events of the Eyetrackerdata + Events = struct('Messages', [], ... + 'Start', [], ... + 'Input', [], ... + 'Buttons', [], ... + 'prescaler', [], ... + 'vprescaler', [], ... + 'pupilInfo', [], ... + 'Sfix', [], ... + 'Efix', [], ... + 'Ssacc', [], ... + 'Esacc', [], ... + 'Sblink', [], ... + 'Eblink', [], ... + 'End', [] ... + ); + % The converted Edf structure generated by the edfmex mex routine + RawEdf = struct(); + + end + + properties (Dependent) + samplesFilename; % The file name of ASCII Files which stores all samples + eventsFilename; % The file name of ASCII Files which stores all events + matFilename; % The file name of MAT File which stores all Header, Samples and Events + fails; % If preparing a folder, it stores all files, who couldn't be converted + timeline; + normalizedTimeline; + end + + % PUBLIC METHODS + methods % Here come all the public functions + function obj = Edf2Mat(filename, useOLDProcedure, verbose) + %assert(ispc || ismac, 'Edf2Mat:computer', 'This class is only available on windows or mac!'); + assert(exist('filename', 'var') ... + && ischar(filename) ... + || isdir(filename) ... + && size(filename, 2) >= 4 ... + && strcmp(filename(end - 3:end), '.edf'), ... + 'EdfConverter:filename', ... + 'Bad Filename, Filename must be given and be of type .edf!'); + + assert(logical(exist(filename, 'file')),... + 'EdfConverter:filenotfound', ... + ['File ' filename ' not found!']); + + obj.filename = filename; + + islinux = strfind(computer(), 'GLNX'); + if islinux + useOLDProcedure = true; + end + % + + if exist('useOLDProcedure', 'var') + try + obj.oldProcedure = logical(useOLDProcedure); + catch e + e = e.addCause(MException('Edf2Mat:oldProcedure', 'Bad Argument: 2nd argument has to be of type logical!')); + rethrow(e); + end + + [nowine, ~] = system('wine --version'); + if obj.oldProcedure + if isunix && nowine + error('Edf2Mat:computer', 'The old procedure requires wine on non-windows machines.'); + end + end + + if exist('verbose', 'var') + try + obj.verbose = logical(verbose); + catch e + e = e.addCause(MException('Edf2Mat:verbose', 'Bad Argument: 3rd argument has to be of type logical!')); + rethrow(e); + end + end + end + + if isdir(obj.filename) + obj.processFolder(); + else + obj.processFile(); + end + end + + function processFolder(obj) + % working directiory (.edf data folder) + workfolder = obj.filename; + + % variables + filenames = dir([workfolder, filesep, '*.edf']); + allNames = {filenames.name}'; + folder = [filenames(1).folder]; + nrFiles = numel(allNames); + + isFail = false(nrFiles,1); + + for currentfile = 1:nrFiles + file = [folder, filesep(), allNames{currentfile}]; + try + edf = Edf2Mat(file); + + edf.plot() + fig = gcf(); + fig.PaperOrientation = 'landscape'; + print([workfolder, filesep(), allNames{currentfile}(1:end-4)], '-dpdf', '-fillpage'); + close(fig); + + isFail(currentfile) = false; + fprintf('Convertion status: %d out of %d done\n', currentfile, nrFiles); + catch me + isFail(currentfile) = true; + fprintf('Convertion status: %s convertion failed\n', allNames{currentfile}); + end + end + + if any(isFail == 1) + obj.fails = allNames(isFail); + end + fprintf('Convertion status: FINISHED\n'); + end + + function processFile(obj) + importer = @(varargin)edfimporter(varargin{:}); + if ~obj.oldProcedure + if ismac + [~, version] = unix('sw_vers -productVersion'); + version = strsplit(version, '.'); + version = str2double(version{2}); + if (version < 11) + importer = @(varargin)edfimporter_pre11(varargin{:}); + end + end + obj.RawEdf = importer(obj.filename); + obj.Header.raw = obj.RawEdf.HEADER; + obj.Samples = obj.RawEdf.FSAMPLE; + end + + obj.convertSamples(); + obj.createHeader(); + obj.convertEvents(); + if obj.verbose + disp('Edf succesfully converted, processed.!'); + end + + end + + function samplesFilename = get.samplesFilename(obj) + if obj.oldProcedure + samplesFilename = strrep(obj.filename, '.edf', ['_' lower(obj.cases.samples) '.asc']); + else + samplesFilename = 'not available for new procedure!'; + end + end + + function eventsFilename = get.eventsFilename(obj) + if obj.oldProcedure + eventsFilename = strrep(obj.filename, '.edf', ['_' lower(obj.cases.events) '.asc']); + else + eventsFilename = 'not available for new procedure!'; + end + end + + function matFilename = get.matFilename(obj) + matFilename = strrep(obj.filename, '.edf', '.mat'); + end + + function timeline = get.timeline(obj) + timeline = obj.getTimeline(); + end + + function timeline = get.normalizedTimeline(obj) + timeline = obj.getNormalizedTimeline(); + end + + function convertSamples(obj) + if obj.oldProcedure + obj.convertFile(obj.cases.samples); + end + obj.processSamples(); + end + + function convertEvents(obj) + if obj.oldProcedure + obj.convertFile(obj.cases.events); + end + obj.processEvents(); + end + + function save(obj) + % some how we need to make new copies to store them in a + % file ... + header = obj.Header; + samples = obj.Samples; + events = obj.Events; + edf = obj.RawEdf; + thisobj = obj; + vname = @(x) inputname(1); + builtin('save', obj.matFilename, vname(header), vname(samples), vname(events), vname(edf), vname(thisobj)); + end + + function [timeline, offset] = getTimeline(obj) + timeline = (obj.Events.Start.time:obj.Events.End.time).'; + offset = timeline(1); + end + + function [timeline, offset] = getNormalizedTimeline(obj) + [timeline, offset] = obj.getTimeline(); + timeline = timeline - offset; + end + + function blinkTimeline = getBlinkTimeline(obj) + startIndecies = arrayfun(@(x)find(obj.Samples.time == x), ... + obj.Events.Eblink.start).'; + endIndecies = arrayfun(@(x)find(obj.Samples.time == x), ... + obj.Events.Eblink.end).'; + + blinks = mat2cell([startIndecies, endIndecies], ones(numel(startIndecies), 1)); + blinkTimeline = zeros(numel(obj.timeline), 1); + blinkTimeline(cell2mat(cellfun(@(x)colon(x(1), x(2)).', ... + blinks, 'UniformOutput', false))) = 1; + end + + function messageTimeline = getMessageTimeline(obj) + messageTimes = unique(obj.Events.Messages.time); + extendedTimeline = unique([obj.timeline(:); messageTimes(:)]).'; + messageTimeline = nan(numel(extendedTimeline), 1); + messageTimeline(ismember(extendedTimeline, messageTimes)) = 1; + end + + end + + % PRIVATE METHODS + methods (Access = private) + + function convertFile(obj, kind) + if obj.oldProcedure + if obj.verbose + disp('Trying to convert!') + disp(['Processing ' kind '. Please wait ...']); + end + [path, ~, ~] = fileparts(which(mfilename)); + + if ispc + command = ['"' path '\private\edf2asc.exe" -miss nan -y ']; + else + command = ['wine', ' ', path, '/private/edf2asc.exe', ' ', '-miss nan -y ']; + end + + switch kind + case obj.cases.samples + command = [command '-s ']; + case obj.cases.events + command = [command '-e -t ']; + otherwise + return; + end + + + [~, obj.output] = system([command obj.filename]); + + if isempty(strfind(obj.output, 'Converted successfully:')) + throw(MException('EdfConverter:Edf2Asc',['Something went wrong, check log:\n' obj.output])); + end + + if obj.verbose + disp([kind ' successfully converted!']); + end + + obj.movefile(kind); + end + end + + function createHeader(obj) + names = fieldnames(obj.Header); + names = names(1:end - 1); % we skip the raw entry + if obj.oldProcedure + lineNrs = strfind(obj.output, 'Processed'); + header = obj.output(1 : lineNrs(1) - 1); + header = header(obj.HEADERSTART:end); + else % create old header elements for backward compatibility + header = obj.Header.raw; + end + header = textscan(header, '%s', 'delimiter', sprintf('\n')); + header{1} = strrep(header{1}, '**', ''); + header{1} = strrep(header{1}, '|', ''); + header{1} = strrep(header{1}, '=', ''); + for i = 1 : size(names, 1) + line = i; + if line > size(header{1}, 1), break; end + obj.Header.(names{i}) = strtrim(strrep(header{1}{line}, [upper(names{i}) ': '], '')); + end + obj.Header.raw = header{:}; + + % sometimes we don't have all fields, especially when tracker + % records in dummy mode + if ~isempty(obj.Header.serial_number) + obj.Header.serial_number = strrep(obj.Header.serial_number, 'SERIAL NUMBER: ', ''); + end + + end + + function movefile(obj, kind) + asciiname = strrep(obj.filename, '.edf', '.asc'); + switch kind + case obj.cases.samples + newfilename = obj.samplesFilename; + case obj.cases.events + newfilename = obj.eventsFilename; + otherwise + return; + end + movefile(asciiname, newfilename, 'f'); + end + + function processSamples(obj) + if obj.oldProcedure + fID = fopen(obj.samplesFilename, 'r'); + % Read ASCII-Samples File + samples = textscan(fID, '%f %f %f %f %*s', 'delimiter', '\t', ... + 'EmptyValue', nan); + obj.Samples = cell2struct(samples', fieldnames(obj.Samples)); + % Close ASCII-Samples File + fclose(fID); + else % create old header elements for backward compatibility + names = fieldnames(obj.Samples); + % make values double for easier computation + for i = 1 : size(names, 1) + samples = double(obj.Samples.(names{i})).'; + samples(samples == obj.EMPTY_VALUE) = nan; + obj.Samples.(names{i}) = samples; + end + + recNr = nan(size(obj.Samples.time, 1), 1); + endRecordings = obj.RawEdf.RECORDINGS([obj.RawEdf.RECORDINGS.state].' == obj.RECORDING_STATES.END); + if isempty(endRecordings) + warning('Edf2Mat:processSamples:noend', 'Recording was not ended properly! Assuming recorded eye stayed the same for this trial!'); + startRec = obj.RawEdf.RECORDINGS([obj.RawEdf.RECORDINGS.state].' == obj.RECORDING_STATES.START); + eye_used = zeros(size(obj.Samples.time, 1), 1) + double(startRec(1).eye); + else + for i = 1 : numel(endRecordings) + recNr(obj.Samples.time < endRecordings(i).time) = i; + end + eye_used = double([obj.RawEdf.RECORDINGS(recNr).eye]).'; + end + + + if any(eye_used == obj.EYES.BINOCULAR) + obj.Samples.posX = obj.Samples.gx; + obj.Samples.posY = obj.Samples.gy; + obj.Samples.pupilSize = obj.Samples.pa; + else + % add old fields + obj.Samples.posX = obj.Samples.gx(sub2ind(size(obj.Samples.gx), 1:numel(eye_used), eye_used(:)')).'; % select column depending on the eye used! + obj.Samples.posY = obj.Samples.gy(sub2ind(size(obj.Samples.gy), 1:numel(eye_used), eye_used(:)')).'; + obj.Samples.pupilSize = obj.Samples.pa(sub2ind(size(obj.Samples.pa), 1:numel(eye_used), eye_used(:)')).'; + end + + end + end + + % function proccessEvents is in private/processEvents + end + + % STATIC METHODS + methods (Static) + function ver = version() + % Edf2Mat.version returns the version of the class + % + % Syntax: Edf2Mat.version() + % + % Inputs: + % No Inputs + % + % Outputs: + % version + % + % Example: Edf2Mat.version(); + % + % See also: Edf2Mat.plot(), Edf2Mat.save() + % Edf2Mat.Events, Edf2Mat.Samples, Edf2Mat.Header + % Edf2Mat.about(), Edf2Mat.version() + + ver = eval([class(eval(mfilename)) '.VERSION']); + + end + function about() + % Edf2Mat.about prints everything about the class + % + % Syntax: Edf2Mat.about() + % + % Inputs: + % No Inputs + % + % Outputs: + % No Outputs + % + % Example: Edf2Mat.about(); + % + % See also: Edf2Mat.plot(), Edf2Mat.save() + % Edf2Mat.Events, Edf2Mat.Samples, Edf2Mat.Header + % Edf2Mat.about(), Edf2Mat.version() + + className = mfilename; + fprintf('\n\n\t About the %s:\n\n', className, className); + fprintf('\t\tAuthor: \t%s\n', eval([className '.AUTHOR'])); + fprintf('\t\tE-Mail: \t%s\n', eval([className '.AUTHOREMAIL']), eval([className '.AUTHOREMAIL'])); + + fprintf('\t\tCopyright:'); + fprintf('\t%s\n', eval([className '.COPYRIGHT{1}'])); + for i = 2 : size(eval([className '.COPYRIGHT']), 1) + fprintf('\t\t\t\t\t%s\n', eval([className '.COPYRIGHT{i}'])); + end + fprintf('\n'); + fprintf('\t\tVersion: \t%1.1f - %s\n', eval([className '.VERSION']), eval([className '.VERSIONDATE'])); + fprintf('\n'); + fprintf('\t\tLast revision: \t%s\n', eval([className '.CHANGELOG{1, 1}'])); + fprintf('\t\t\t\t\t\t-%s\n', eval([className '.CHANGELOG{1, 2}'])); + + for i = 2 : size(eval([className '.CHANGELOG']), 1) + fprintf('\t\t\t\t\t\t%s\n', eval([className '.CHANGELOG{i, 1}'])); + fprintf('\t\t\t\t\t\t-%s\n', eval([className '.CHANGELOG{i, 2}'])); + end + fprintf('\n\n'); + + end + end + methods (Static, Access = private) + gauss = createGauss(size, sigma); + end + +end diff --git a/src/functions/eyetracking/@Edf2Mat/getPupilSize.m b/src/functions/eyetracking/@Edf2Mat/getPupilSize.m new file mode 100644 index 0000000..a4d1733 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/getPupilSize.m @@ -0,0 +1,21 @@ +function [timeRange, pupilSize] = getPupilSize(obj, startIdx, endIdx) + + assert(isa(obj, 'Edf2Mat'), 'Edf2Mat:plot', ... + 'Only objects of type Edf2Mat can be plotted!'); + + if ~exist('startIdx', 'var') + startIdx = 1; + end + + if ~exist('endIdx', 'var') + endIdx = numel(obj.Samples.posX); + end + + range = startIdx:endIdx; + + assert(numel(range) > 0, ... + 'Edf2Mat:plot:range','Start Index == End Index, nothing do be plotted'); + + pupilSize = obj.Samples.pupilSize(range); + timeRange = obj.Samples.time(range); +end diff --git a/src/functions/eyetracking/@Edf2Mat/heatmap.m b/src/functions/eyetracking/@Edf2Mat/heatmap.m new file mode 100644 index 0000000..af0daed --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/heatmap.m @@ -0,0 +1,84 @@ +function [heatMap, gaze, plotRange] = heatmap(obj, startIdx, endIdx, eye) +%% heatMap +% generating heatMap data +% +%% Syntax +%# heatMap(obj); +%# obj.heatMap(); +%# [h, g] = heatMap(obj, startIdx, endIdx); +% +%% Description +% This function generates the data array (heatMap) for visualize a heatmap of the +% eyetracker. As a second output it returns an array (gaze) with all +% positions rated the same. +% +% +%% Example +%# [h, g] = edf.heatMap(); +% +%% see also +%# Edf2Mat.plotHeatmap() +%# Edf2Mat.plot() + +%% Initialization,checking +assert(isa(obj, 'Edf2Mat'), 'Edf2Mat:plot', ... + 'Only objects of type Edf2Mat can be plotted!'); + +if ~exist('startIdx', 'var') + startIdx = 1; +end + +if ~exist('endIdx', 'var') + endIdx = size(obj.Samples.posX, 1); +end + +if ~exist('eye', 'var') + eye = 1; +end + +range = startIdx:endIdx; +assert(numel(range) > 0, 'Edf2Mat:plot:range', ... + 'Start Index == End Index, nothing do be plotted'); + +%% variables +gaussSize = 80; +gaussSigma = 20; + +posX = obj.Samples.posX(range, eye); +posY = obj.Samples.posY(range, eye); + +%% generating data for heatmap +gazedata = [posY, posX]; +gazedata = gazedata(~isnan(gazedata(:, 1)), :); + +% set minimum x and y to zero +for i=1:size(gazedata, 2) + gazedata(:, i) = gazedata(:, i) - min(gazedata(:, i)); +end + +gazedata = ceil(gazedata) + 1; +data = accumarray(gazedata, 1); +data = flipud(data); + +%% smoothing the Data +gaze = zeros(size(data)); +cut = mean(data(:)); +data(data > cut) = cut; + +kernel = createGauss(gaussSize, gaussSigma); +heatMap = conv2(data, kernel, 'same'); + +% map with gazepoints on the value of the mean of the heatmap +gaze(data > 0) = mean(heatMap(:)); + +% calculated plotrange (min to max on each axes) +plotRange = [min(posX), max(posX), min(posY), max(posY)]; +if plotRange(1) < 0 + plotRange(1:2) = [0, max(posX) + abs(plotRange(1))]; +end +if plotRange(3) < 0 + plotRange(3:4) = [0, max(posY) + abs(plotRange(3))]; +end +plotRange = floor(plotRange); +end + diff --git a/src/functions/eyetracking/@Edf2Mat/plot.m b/src/functions/eyetracking/@Edf2Mat/plot.m new file mode 100644 index 0000000..6f1696b --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/plot.m @@ -0,0 +1,117 @@ +function plot(obj, startIdx, endIdx) +%PLOT plots the edf content to verify if they are useful. For all other +% post processing you should rather define your own plots +% +% Syntax: obj.plot(); +% or +% plot(obj); +%clear +% See also: Edf2Mat.plot(), Edf2Mat.save() +% Edf2Mat.Events, Edf2Mat.Samples, Edf2Mat.Header +% Edf2Mat.about(), Edf2Mat.version() +% +% About and Copyright + +% AVAILABLE Types: see edf_data.h +% just a few examples: +% #define STARTPARSE 1 /* these only have time and eye data */ +% #define ENDPARSE 2 +% #define BREAKPARSE 10 +% +% /* EYE DATA: contents determined by evt_data */ +% #define STARTBLINK 3 /* and by "read" data item */ +% #define ENDBLINK 4 /* all use IEVENT format */ +% #define STARTSACC 5 +% #define ENDSACC 6 +% #define STARTFIX 7 +% #define ENDFIX 8 +% #define FIXUPDATE 9 +% +% /* buffer = (none, directly affects state), btype = CONTROL_BUFFER */ +% +% /* control events: all put data into */ +% /* the EDF_FILE or ILINKDATA status */ +% #define STARTSAMPLES 15 /* start of events in block */ +% #define ENDSAMPLES 16 /* end of samples in block */ +% #define STARTEVENTS 17 /* start of events in block */ +% #define ENDEVENTS 18 /* end of events in block */ +% +% +% +% /* buffer = IMESSAGE, btype = IMESSAGE_BUFFER */ +% +% #define MESSAGEEVENT 24 /* user-definable text or data */ +% +% +% /* buffer = IOEVENT, btype = IOEVENT_BUFFER */ +% +% #define BUTTONEVENT 25 /* button state change */ +% #define INPUTEVENT 28 /* change of input port */ + + assert(isa(obj, 'Edf2Mat'), 'Edf2Mat:plot', ... + 'Only objects of type Edf2Mat can be plotted!'); + + if ~exist('startIdx', 'var') + startIdx = 1; + end + + if ~exist('endIdx', 'var') + endIdx = size(obj.Samples.posX, 1); + end + + range = startIdx:endIdx; + + assert(numel(range) > 0, ... + 'Edf2Mat:plot:range','Start Index == End Index, nothing do be plotted'); + + screenSize = get(0,'ScreenSize'); + figure( 'Position', [screenSize(3)/4 screenSize(4)/4 2*screenSize(3)/3 2*screenSize(4)/3], ... + 'Name', ['Plotting ' obj.filename], ... + 'NumberTitle', 'off', ... + 'Menubar','none'); + + + posX = obj.Samples.posX(range); + % Y must be inverted, because eyetracker origin + % is upper left corner in a graph its the lower left + posY = obj.Samples.posY(range) * -1; + + + % Ploting Eye Movement + subplot(2,2,[1 3]); + plot(posX, posY, 'o', 'Color','blue'); + + title('Plot of the eye movement'); + axis([min(posX) - 1 max(posX) + 1 min(posY) - 1 max(posY) + 1]); + axis('square'); + xlabel('x-Position'); + ylabel('y-Position'); + + % Ploting pupil size + subplot(2,2,2); + [tRange, pupil] = obj.getPupilSize(startIdx, endIdx); + plot(tRange, pupil); + + title('Pupil Size'); + axis('auto'); + xlabel('time [ms]'); + + % Ploting heatmap + subplot(2,2,4); + [heatmap, ~, axisRange] = obj.heatmap(startIdx, endIdx); + obj.imhandle = imagesc(heatmap); + % Register the click callbacks: + % register mouse down function handle + obj.imhandle.Parent.Parent.WindowButtonDownFcn = @(object, eventdata)obj.mouseClicked(true); + % register mouse up mouse + obj.imhandle.Parent.Parent.WindowButtonUpFcn = @(object, eventdata)obj.mouseClicked(false); + + set(obj.imhandle.Parent, 'YDir','normal'); + axis(axisRange); + axis square; + colorbar; + title('HeatMap of the eye movement'); + xlabel('x-Position (shifted zero)'); + ylabel('y-Position (shifted zero)'); + +end \ No newline at end of file diff --git a/src/functions/eyetracking/@Edf2Mat/plotBlinkData.m b/src/functions/eyetracking/@Edf2Mat/plotBlinkData.m new file mode 100644 index 0000000..38d8f2b --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/plotBlinkData.m @@ -0,0 +1,44 @@ +function plotBlinkData(obj, startIdx, endIdx) + + assert(isa(obj, 'Edf2Mat'), 'Edf2Mat:plot', ... + 'Only objects of type Edf2Mat can be plotted!'); + + if ~exist('startIdx', 'var') + startIdx = 1; + end + + if ~exist('endIdx', 'var') + endIdx = numel(obj.Samples.posX); + end + + range = startIdx:endIdx; + + assert(numel(range) > 0, ... + 'Edf2Mat:plot:range','Start Index == End Index, nothing do be plotted'); + + timeRange = obj.Samples.time(range); + + + [timeline, startPoint] = obj.getTimeline(); + timeLineRange = timeline >= min(timeRange) & ... + timeline <= max(timeRange); + timeline = timeline(timeLineRange); + timeline = timeline - startPoint; + + legendString = {}; + blinkTimeline = obj.getBlinkTimeline(); + + if ~isempty(blinkTimeline) && numel(blinkTimeline) > 0 + blinkTimeline = blinkTimeline(timeLineRange); + plot(timeline, blinkTimeline, 'r-', 'DisplayName','Blinks'); + legendString{end+1, 1} = 'Blinks'; + hold on; + end + messageTimeline = obj.getMessageTimeline(); + if ~isempty(messageTimeline) && numel(messageTimeline) > 0 + messageTimeline = messageTimeline(timeLineRange); + plot(timeline, messageTimeline, 'bo', 'DisplayName','Message Occurrence'); + legendString{end+1, 1} = 'Message Occurrence'; + end + legend(legendString{:}); +end \ No newline at end of file diff --git a/src/functions/eyetracking/@Edf2Mat/plotHeatmap.m b/src/functions/eyetracking/@Edf2Mat/plotHeatmap.m new file mode 100644 index 0000000..d0cb9c5 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/plotHeatmap.m @@ -0,0 +1,64 @@ +function plotHeatmap(obj, startIdx, endIdx, image) +% This function generates one figure with the heatmap of the gazepositions. +% The Colorbar can be adapt with click into the figure and move the cursor +% up and down or sideways. To get back to the default values for the +% colorbar, click the right mouse button. + + % clear persistent variables in used function + clear mouseMove + + % validate the input data + assert(isa(obj, 'Edf2Mat'), 'Edf2Mat:plot', ... + 'Only objects of type Edf2Mat can be plotted!'); + + if ~exist('startIdx', 'var') + startIdx = 1; + end + + if ~exist('endIdx', 'var') + endIdx = numel(obj.Samples.posX); + end + + range = startIdx:endIdx; + + assert(numel(range) > 0, ... + 'Edf2Mat:plot:range','Start Index == End Index, nothing do be plotted'); + + % create the heatmap figure + figure; + hold on; + [heatmap, ~, axisRange] = obj.heatmap(startIdx, endIdx); + obj.imhandle = imagesc(heatmap); + + axis(axisRange); + colorbar; + title('HeatMap of the eye movement'); + + % load image for layering with heatmap + if exist('image', 'var') + imageI = imread(image); + + % validate image + assert(any(strcmp(image(end - 3:end), {'.jpg', '.png', '.bmp', '.gif'})), ... + 'Edf2Mat:plotHeatmap:validateIMG', ... + 'Filename must be of type jpg, jpeg, png, bmp, gif!'); + assert(obj.imhandle.XData(2) == size(imageI,1), ... + 'Edf2Mat:plot:image:XData', 'Nummber of pixels in x direction is not equal'); + assert(obj.imhandle.YData(2) == size(imageI,2), ... + 'Edf2Mat:plot:image:XData', 'Nummber of pixels in x direction is not equal'); + + %visualize image + imageNew = imagesc(imageI); + set(imageNew, 'AlphaData', 0.3); + else + % if no image will be imported, it returns just the heatmap + end + + % Register the click callbacks: + % register mouse down function handle + obj.imhandle.Parent.Parent.WindowButtonDownFcn = @(object, eventdata)obj.mouseClicked(true); + % register mouse up mouse + obj.imhandle.Parent.Parent.WindowButtonUpFcn = @(object, eventdata)obj.mouseClicked(false); + + hold off; +end \ No newline at end of file diff --git a/src/functions/eyetracking/@Edf2Mat/private/.gitignore b/src/functions/eyetracking/@Edf2Mat/private/.gitignore new file mode 100644 index 0000000..7083690 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/private/.gitignore @@ -0,0 +1 @@ +/*.asv diff --git a/src/functions/eyetracking/@Edf2Mat/private/createGauss.m b/src/functions/eyetracking/@Edf2Mat/private/createGauss.m new file mode 100644 index 0000000..d2a9757 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/private/createGauss.m @@ -0,0 +1,8 @@ +function gauss = createGauss(size, sigma) + +[Xm, Ym] = meshgrid(linspace(-.5, .5, size)); + +s = sigma / size; % gaussian width as fraction of imageSize +gauss = exp( -(((Xm.^2)+(Ym.^2)) ./ (2* s^2)) ); % formula for 2D gaussian + +end diff --git a/src/functions/eyetracking/@Edf2Mat/private/edf2asc.exe b/src/functions/eyetracking/@Edf2Mat/private/edf2asc.exe new file mode 100644 index 0000000000000000000000000000000000000000..652299eb8a594748457b7cf17aaa15b00abc4b1c GIT binary patch literal 102400 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Ⓢ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 literal 0 HcmV?d00001 diff --git a/src/functions/eyetracking/@Edf2Mat/private/edfapi.framework.zip b/src/functions/eyetracking/@Edf2Mat/private/edfapi.framework.zip new file mode 100644 index 0000000000000000000000000000000000000000..feb592f8838dfd4dd8322a28441a3dad7b0fb6e8 GIT binary patch literal 151888 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 VS%LY8fk6xi=K|CDT%aZf1^{DbZyW#s literal 0 HcmV?d00001 diff --git a/src/functions/eyetracking/@Edf2Mat/private/edfapi64.dll b/src/functions/eyetracking/@Edf2Mat/private/edfapi64.dll new file mode 100644 index 0000000000000000000000000000000000000000..541d68f01ecec4d6ba64b00bfedccd3592628b52 GIT binary patch literal 100864 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 Qu%UVb1^?^*cUs^-08(mMcK`qY literal 0 HcmV?d00001 diff --git a/src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexmaci64 b/src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexmaci64 new file mode 100644 index 0000000000000000000000000000000000000000..3fce71e91b0126cf022eba8876856e1a49a731e1 GIT binary patch literal 27916 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 KrY%|w3!i_lU{+t?0;DyY>|se6C#J2RWvkhb^v z?(^K|dv5PM&pGco@1NhC_sp5|zB4;X+2?i$NrE64P@+*m=mn*tkn4X@B?!XA8-6@d zczWC`H})o!zH(!gzoE_C8f@7RtZOpY*EKh{gv{%F=3uzl+|X<;URG&tYVrE!rlyY1 zQlVR4TQfcThn5npeEaW@m)Oz2eeU;598AAjk_-CsBiYHcGi-KtoOAN zE7R|)_TOV#(NOOv?0@8m=oW<1gk)jgvL=tFGaw}1I3Z!YAUMI9qHu360yUwC+&6JM zQ4o>^Oacy#3OmrjWPa}fK}Zw|A%qdx#i-Ifv|148gjcEsp`FC7g7CBgMZMvpLl9Ev z0{x5QQq_oSCIb7P*vt+2+Cz}H<)EVRk*~A}bcb0G*3J!j>q2#ckdO)iFolUIE)?BS zh*Qs1)Pw^x*0m^@8{rNV-BBnAeRG3t!Fur6SNP0&r8*@v3kfgiYixm{m+(4JXl&&u zx}#7K7V5hHzxiL7f#uT0K-6zuBAC4U$Xx8am{M82V&9Clg30!x*zNwnyPxZMI%nhoi0l5lnT)kDNl*qe?`81jv#a%OOJHz#ahnm4^Q&%T`riq z%Px8%_g|C?AnkWwiQ>3$o!{aSO!C03WMELay}NK@9hGpJ-2_k}pH;+>#YS77RQ7>4 zLd#HCS-WPH^!8mxOu|X&g?`}*fcgs!LrjbxFiE+@#B`BKy38bVkjabzCgyWYvd%D> zeTvDP<4i1lOtO2KI1e##JkAlhuAEYu7UI)-dsl zOd3l-j-HGi(v|~oToR<62SKZ)CtbLaB8J^6e`g`O(vu`xA+;MKuJ@!uW2E>!gDP)N zk#-ixR9I}%i_@i@CGp}+y?BPSvov08){C>GonpLrwq86(+F2DZw&=y#($1QAv6IC+ z+2abAw1wP~o?H#3NP3s*QDLDn71EPyi65JZ_F`$LHy*A;f3{L-r$1gS>cv&k&c=9g zjb6N3+SwW}UaJ>-rJbR8v0pE4lyLkhF7iytrL2-Yo6xh!b~o&5H-XUwZx!lhaY~1gzCE3!@~5% zG0R?^<=&B&Kh{|u7-{*e&hl~9GRmi^we_vh-H!VGMXsQ2#yG$v<5`Rw=;2dFez+jQrya<#LuME%S2qwq^gQZO(~Pr z#Z1<^n0T|9_~$Tb%wp1NW)jL|(ynYsn|VXx)x~>K2d%3V(&(VYWI*dE;)CQimMrK8 zBkhYvsD7qHoGO^2S=+8m5lp=$Rf6fRBL<<@r8O*CBTH*!YK;`FA!v=EO4a?p zXSBv~tC<$t0)htiL-ALSIvS(FPXzeg!V`2a;oNK7&$j~QzmmyTongp^dG=@Zk^(@p7< zxcyJ6$^S(5e^qpi7LaiLE32i;E4q75VsnR+55Vv^a&WX4($dD=%9^J0@2Fa#0;33C2T z*nhenhd13_9P5wL+43>2s zD48)5@NC~V8uWZncqe{#T)Cv=-W*q)@)S8O zW-bP>7%Jo;v)*yAMENbSMERE_AjczJl)TUw6690FR2?5j=0A#=2hbPg{cQVX#a8b) zB|7p>o%wh&zi-$aeNpzZd5vNobKFa|%VW0e_yjV~8#YH@lxMN|v=QchGM^GN7Xv9| z8@)mAI9Q_mN3cZs*Qg_1jW7!E1kmKmZ;-a?cq*Cq#mocfi}Dj}`wim8FLg?}vJt&tY@(2y@EU+ zeZUgszg$m_{|>db)af3ld`^Con5yHG$h@Bz%3X%OC_l-zk14kLD^B^I{GU4W$z;BL z*c^RP4zl@r#XRQtR&S5#wchau$^30%s*Y!n`Ok@=IF7z3_pVh+bA@U~1TrW}abvg1?9TpTt>UzF#w`P>oalxxbj#>~Y)CfTOPY-yNaiSj2i z$nkekD~>B?r)*TdNKDo7X=MH@VknNIFUrre?GF{(nB&-CC|{Mor!&8n%y$o)qc6%G zY#vg~V~!sn+k0ZR?D%vtUomWsz9<*5xm__w%!6Hb*Fn@`;3iCAf0y>gNxm66{whRE zG1AqW0QirmBT9EYizXeFQnfLVRDoShfMVyd5>2;{bbk(AX|ZudV1h`X$5bQvb?`OC z0&uZr}V+G~`zWFqj z`$(mSqNH*qpaS1$Iu>dwcaaLmcjYWl!AJvwN4`N*$tIQE6fc#_$0y>*dgWRgG{!QO zRC;(Ue98Gl9E{IuD(|2nby3*Vod^NeBR`|5yhBfxm60BCkRGe4%pjF63a2`c5O_WE;52n! zqG()ojW{;HpsAcDl^%+!I*&LWe?wFG5vh#y2r3@=^P0*IQrS%rR_76i;Tlb)jZ{W@ z#KGIHsoX&-T@+(=9w8umd9I5Q4psVwU!*iFWvX4|odc+aEUQ=l&6^_C>j}WCja-pWOid05=#DV-eO=TXb z^iT-adBpMiLF#(PY>=izHcxLr4mvXDnz-5A*ip7gr4we zB+Za?9?Kl@_U`0KX$$?3fTv8zSK`H9^$Mg9sR;fF(q;KJhU0-NUSOCWc@lAVvs0W4 zNzc&>YMexrFHI(_LDUkqn!tF%i5TU#iNO|>i%D!1NPzxJB+MOSI%ojaF^G`)lfp7Yn!s4qLFSB{tYlz)Wpu1$V6`(=BV*xm z$FP_aH>fcH5{H3!zG<4qc$7t1AxQ|`h$rad;_(# zER)VLjP*J(Lu>gtHB7YFEf_JSTl4$%o#aZ@mV zW=`Co#slc4QGv*v@xY3vk&o}AmX>Ad#>JdCtO>w+gY>R;Z~}myVW1}%Xm-j3 zmP|8LN@8s&rV)iNl%-EOAti zYpo88IdOx!7CA<>aRII>s03|ZehxiakTIN?K zON;pL6EhBL2C&{B?$r*?0M;`Q;htx#Mhr>|_skhNS=Rwe8XfC8Uh6`i3Xv7zEoD0Ju_A_!^ zzWGzANIjJ9BDbSNnDfnj#NEw#aTlk;!}(?hM4}ub1%195j#*%$0Yz4vZ&s5)mtw1_ zE9IMZhPs&);_^-A@YyvW$~RL-1)|GJ`R4htG_2pEmX?jdgpTPvW}+GT#qVf_{z`m3 zqBcW6gCNR&56@8C{Cu4(dnmofSSa`B`PssF!;b>Ge0(iLqFhA^G(TF3xjbf}%nu>* z{5VL^!%(~VDPlMu&tRx=q!2eh%-KyQ7!w20{QPCiXh7QhoPbo6e@Z&b@bW2kvlEB& z@nL6xwQp1`&c{0#D8xYH30=TXN6ItDJ;aO~7v8~K=|fy?SL) zKK>JkMEM7dg_lBsacVx!oVYCXE+@%4z>ohL#N z^zR^*!&!Zvl8^ z5!q(KkN>y+t$Qg%Dceqjlk*lEHyiU_Nb7zP8rsKuQ(zhygJ1pefgkqTlw3ATd$5~y z_zOW%9#1-52e1;PG05Hw{GrLcmb7QKpUkC?OuBnPu(b@H!8e1`(8#-l264XmF&bmh z_|Yf$5TV?7Ynf5%|H?;y%RBmo+wbo4O2>O|*mlA5(fJoXPL__mAm5O5MD!nkPx2;s z>)%7I2DI>Me^HbNCUM=_?>+xne4wZ};g_M(-JK41G5huCC~r0VyI?QMujBoUDwRLw zH$IQkM!`~gD{+S3-w@BgoelOAqddhUpVDcQh_s&ouk%>3e=Cjcm!wd31yfSH#`cP> zZz2Q`Trgam^j!H~%9e^No~zsHfJeS1Pw z`9Af|;qOzoTs()X5L>O6uv&+|QkBB#(nNfa>WR3w+oHDL$e+j5BSMbpUj88NtqtfQ zRCNv|gj4;;XqM}kW9Yo!l(;!VDmQrK1>pP^S_b(tTGAPak|3%!R>(7BqSGWAg2=Er zQ(BDQhQ`K3KS6810bkETnha^V$s?b~rBE=xPEw;H9Rq1~dWHOQO!@#xQy|?(08%O` zN*TluJr&*V2gUC0OsqtC!?|d5MWxcgm$P)GWg7&l`0+t3-)+5rN8Q~=_44gvWW4%` zt^6>w;ogX^Y0ECzUXdSy2rKO9$>^*PMBII|E^&R4Ynkgot_Qe2$MqSmU+4N1*C)9? z&h;^_pXIuj>!-Os$o1n~AK-c~*L%2rlxr{Qywn+RKb-jf(eq!&lE%pV;7U=fix1t# z#1+!tLbIyD9 zGY@p05}=me`I>NHjw)67XB7Ugg$wDV@X-;{4)>m2os~)D#8D|)?e73kG@}($vQoNK z9nC02YyYG0VE-;u+dd2@+xiOE9PRv!AV=Y||C(Yf`Zv+)H)P$s2<_KsCg`mxPpQXK zY3r+Ak?T$g&&y4&!OVZ*CNKR0B}7xHC)F4_eOCm@Zozq;-+@z{|1*TPzVnoVcHWD&Bz8wK&V_1J-w|j{HF_J``sz974|&{ z+(6-lo}12s-t0JG=tbtcKtlvw*PdvS7O8M z97+tOVz6#H@%ckAjN0ikNOl*_89j{&z%aLVvVbm4^t5ya8&$+@iri)FykN+?D=<*>2GcFI8tVclmXNz zow@KtG@KI62mx!Qg1}3H7l*BHKTS=p`%2g-s`G+%g0JdN97z!ZCVx#e=H^Mvjr2F^ zJ?Sodd|w!G586&d%C1E0g;)qk6Y?&HO}V@(!p2D1;Q7NeTbDw~ou4L#=k6Q8?wa>P z$he}qGI|QOo%at4XygAy&#s;Ng9JrCbYr zhQy^BL!9WTZ6DI9lERA!uK;owCEci;D5RVp%CofdUzjerFG@yfT%>FO4|e;pm#kcQ zRPxE4zCnT3G`7c2v4~_m-U*U>P#%KD(f(v|7VM~Uf6xjKC(9Wa7Z!{1>7#rSb}R3~ z#PKb(<>G9_r~UpqOj4?s>WsBiU$>fSdkxhKs!*?gFr$M>D*nC(z3W6K$)!wYl`y%j z7-Y{w$?YJLTiD;o)Udx5wA*dmznS{m2C(<{C--8g2||LfkA(Xh(d$oMi+Y?v=<84R zvQ&+nk!@#Svd;`&WZOA3qZu=>Q1%}J18+)RrP&E!V=;s2AH=1MW@Mq+xquXeFuhIr z9_jcAJDM>YGBKJl2js-j=&VN2K)Sz!7EvQ6gQhoHW@?|0Jn~j7&oX0ldHRLF;DX?S zW3DA!_yNg1u*F&5)-({B(CBOxWv4AXdRmkNXPX}gX{N046(ABsITtP)q!@wCH5>6O)Khwm9H`u`v@j`E=?26saU7?{C3z zQjIa`Y~Clq@e4cqX6Ky_%C2j8*q=2SwLfdJx`+5Ln=Wa8 z*+i?07Mvf&B;SH5Lwc59Rj%-zG4d_+8M~JOVJFYN>i9(bkH-Ap8Erv`;zTa-bdlF&n*M;1=F_o zX#+@|w1ocp#5Cbj#7^V-=yb$RXIWFb>ICJq55hP)YX{eBxn9k64cAp%i(HqWR%R5b zm$7?cigd@I?YP|X*J!kN5O>A-TC`X}Nx9Ge2i|;Xs$Zg~MQ9g6N4nz*S~+BwjTL$R zvuM$!`EPSbnTaw5#fb7@jUfCQb2F zcfp~$P#6RDZSo1eaI3c#+%}bRANJe_^|1%&tF%?6bun5eY^dAFxS+7WIMhBU_kGRK z@ii+tzGg*7?fca}#w2WL3n@BnAw@^+`_;a$S@EhZq|l(R&P(T0FN>f~ztGy!R;%%F z5ktP9(hd6RTY}z(<_)#%^if<4ysBzhxzcf$7jvT$_?1;f z6^c%!0DfgrnON$EfcdeWAe6Z)D~p!6RWw0ZytHPyh;zAt0XuY68*VYLvS`sF4F@ge zEi7GHekYm=pL=FuVTHTsPO+$>5@5hmTdI!QQ-)GowGuJE9y8Y#3StuRepj0VjCtuY zWq6C#Q7%@D1U#5yyru5)qB0t;P~t8sc30pjGFW$SbIZMg5yvcB!>n15Eoy1r=nIB` zJzrx9<@hfHb>@wAjSXJ2c3vlT>1Pn22yZQ7KraflOQ`xU9u!kLfSWYJJ`4O(@HIB2 znybA=#{`y+L8?JwO7!g58$)w`lXF@zv@ieM|&={y3!Z~Ip zKQayJq0omm@lL7ZLX!_o*93fOYxo)_QgA+~Ux+txghzUF)bXg|7$F%wOA+IgO11v= zMT!r9E)-0kQc>k6b$Xv)D3}hQki8~th}d>92ANre+i; z?g{PiuM~u1BI22j_YLr#1}{a&djh;i!FzUvW+@222M-y85Yq9!i5QBcX4K=~Ip*Gy z)YM+&^)7DkHDX`>0eVY(pI_x{`Y_=mNs|*Fh^&y=|2uBm;lx3N*MA>OvTgTb=44OR3nII_8q-Ah3c z+|(BV7+TL(KE+J%dDqvqHZX)RKcTjEQG5Gh{F@bDNnNwI(HFD{!i@>Utnvq2?sd1< z`&vT{EzO7wmDP(XtQL!6=@SYHY=tX}YQ&-%%Db|YYMbgB@vk;&>w_UdN?srI`2=BF zVy&;4wsCK5a~NYjlvvx)+z>*PY!aRvZrA#R7ZYmhn%Xwh`q~@diR&ga6$boEqCLeek2qSRzowcTp^97=5xY3LIHBS@KofM;9}fE;h;~Gy(ttowAHO^ z^kFd}fhuiS7px0zT7-qtCVV@|6ZQo+iN4_amS9s|bG>g-OPG8Y9!bQQs~YO>W`=;Z zG3Q`RqSsM`PP`91bn zEp`z-gZ?>`0hGP-1>vut$WFcM8=6{Mf*9dk+*$Y9=FttdINV&X+#jU#?|Wq8ow0!X1Ff$x%p5IpQ_chhE-PY7lA8cuB zSs%I$yX*YAwx+ootuxKoOB&YW!J*n0Y(wN)Fw;8MGBZDQyxHtR0B;K|MO^sbM6)S& zux#_yhl35FO^jp4;R^ch3F9n2FJkOQY%&{sZ84!<>~4oCZ4ssPd~0r`dcn-Pwx!J* zTkiG+XPUzeMfJ2g=xD?TMw63tOvHGly);8;X)-Bd7`>pnQ_FQ|ReTlu?zTCdrUT+WB z@3FVrAFy}XyY0K|U$cMH{vG=v`(gWY_809Z?Z34D+WtGcY=77Oq5bdnv5rZO=?=TY z!7$JZPO9N%+1<9Ob2-0`a8*N#6pE;_C_gd9VTF()O* zl#`y5nKL8DoRgI^J7-RgB_}(_nd8bS%qh+($tle#bFOgKIoq8NIJ=zP&Rx#0Ilt-r zj`NW7u=6?R3Fj&28_qYKSm0(}`$CGviMen%>zzBC_`ZS{{&A40wna8y_FFmQo!2_Q z>fGmi$2sJ5=2qu6kF=}t}nTExOThtxW4In%Jq_K@`AYw zUR>~t1+OnSyWrggpDdV>e@lK&zAJxS{@wYT^LOQcC;$8TPv@V^e>MNN`G3iOKmX(W zNd;32ZY@|;u&SW0AXKoc;IV>31-%6W1%E2ISa7*us6Z&hGY)+b-Kav`x*P zk$oonx7qJzr`m6{f7afEweVH@Ui*{wpW0uwzhlpH6gpNo?sI(6@d&Q-e#Z|SXB-2# zzVA7P9G^N2IpcACr{v7b3FKh#BA%N;jMfzEne21fgV}QS9J|F{Y%j6bV9j~$o9zef zPurih57;l-Kd`4b(j6A8sa8k3W3ywI<55R1&_4h&K-S_}7eug_ELj$6{QDjM3nmPm At^fc4 literal 0 HcmV?d00001 diff --git a/src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexw64 b/src/functions/eyetracking/@Edf2Mat/private/edfimporter.mexw64 new file mode 100644 index 0000000000000000000000000000000000000000..3651354f80a693e9351243fa7d3fc19f392dc9fb GIT binary patch literal 26624 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 literal 0 HcmV?d00001 diff --git a/src/functions/eyetracking/@Edf2Mat/private/edfimporter_pre11.mexmaci64 b/src/functions/eyetracking/@Edf2Mat/private/edfimporter_pre11.mexmaci64 new file mode 100644 index 0000000000000000000000000000000000000000..eb5f6e177470571aca638fd7e783a424b8b6a38c GIT binary patch literal 27088 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 Q(UF-*?^dKz$r%6s2ZId?p8x;= literal 0 HcmV?d00001 diff --git a/src/functions/eyetracking/@Edf2Mat/private/mouseClicked.m b/src/functions/eyetracking/@Edf2Mat/private/mouseClicked.m new file mode 100644 index 0000000..c3d8766 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/private/mouseClicked.m @@ -0,0 +1,40 @@ +% This function is how to use mouse click callbacks on a figure +% figure +% To use this function, register the two callbacks by executing the two +% lines below +% obj.imhandle.Parent.WindowButtonUpFcn = @(object, eventdata)mouseClicked(false); +% obj.imhandle.Parent.WindowButtonDownFcn = @(object, eventdata)mouseClicked(true); + +function mouseClicked(obj, isDown) + if isDown + switch obj.imhandle.Parent.Parent.SelectionType + case {'normal', 'extend'} + obj.mouseMove(true); + obj.imhandle.Parent.Parent.WindowButtonMotionFcn = @(object, eventdata)obj.mouseMove(); + case 'alt' + obj.mouseMove(false, true); + case 'open' + otherwise + end + else + obj.imhandle.Parent.Parent.WindowButtonMotionFcn = ''; + end +end + +% if you want to react on a certain button extend the switch as following +% +% switch get(gcf,'SelectionType') +% case 'normal' +% % do something for left-click +% case 'extend' +% % do something for center-click +% case 'alt' +% % do something for right-click +% case 'open' +% % do something for double-click +% otherwise +% % never happens +% end + +% see also: +% http://www.mathworks.ch/ch/help/matlab/ref/figure_props.html#SelectionType \ No newline at end of file diff --git a/src/functions/eyetracking/@Edf2Mat/private/mouseMove.m b/src/functions/eyetracking/@Edf2Mat/private/mouseMove.m new file mode 100644 index 0000000..fbda046 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/private/mouseMove.m @@ -0,0 +1,56 @@ +function mouseMove(obj, firstClick, reset) + + persistent fullRange prevPoint range width height ; + + if ~exist('reset', 'var') + reset = false; + end + + if ~exist('firstClick', 'var') + firstClick = false; + end + + % get mouse position + point = obj.imhandle.Parent.CurrentPoint; + point = [point(1, 1), point(1, 2)]; + + if firstClick + prevPoint = point; + end + + if isempty(fullRange) + clim = obj.imhandle.Parent.CLim; + fullRange = [clim(1), clim(2)]; + range = [0, 1]; + xlim = obj.imhandle.Parent.XLim; + ylim = obj.imhandle.Parent.YLim; + width = abs(diff(xlim)); + height = abs(diff(ylim)); + end + if reset + boundaries = fullRange; + prevPoint = point; + range = [0, 1]; + else + delta = point - prevPoint; % mouse movement change + delta = delta .* [1, -1]; % invert y change to make it similar like the philips console + prevPoint = point; % store acutal point to previous point + + imRange = abs(diff(fullRange)); + + delta = delta ./ 1000; % normed delta - Range between 0 and 1; + range = range + delta; % update range with delta + range = min(1, max(0, range)); % scale between 0 and 1 + + % update boundaries in range 0 - to full range + boundaries(1) = min(imRange - 1, max(0, range(1) * imRange)); % value between 0 and imRange - 1 + boundaries(2) = min(imRange, max(boundaries(1) + 1, max(1, range(2) * imRange))); % value between boundaries(1) + 1 and imRange + + % display range + plotTitle = sprintf('range =[%1.2f, %1.2f]', boundaries); + obj.imhandle.Parent.Title.String = plotTitle; + + end + % set set dynamic range + obj.imhandle.Parent.CLim = boundaries; +end \ No newline at end of file diff --git a/src/functions/eyetracking/@Edf2Mat/private/processEvents.m b/src/functions/eyetracking/@Edf2Mat/private/processEvents.m new file mode 100644 index 0000000..d1df3e0 --- /dev/null +++ b/src/functions/eyetracking/@Edf2Mat/private/processEvents.m @@ -0,0 +1,374 @@ +function processEvents(obj) +%PROCESSEVENTS Summary of this function goes here +% Detailed explanation goes here + + if obj.oldProcedure + fID = fopen(obj.eventsFilename, 'r'); + + %% Read ASCII-Events File - split all up in single lines + lines = textscan(fID, '%s', 'delimiter', '\t', 'EmptyValue', nan, ... + 'commentStyle', '**', 'HeaderLines', 11); + + %% Close ASCII-Events File + fclose(fID); + + %% Flatten lines + lines = lines{1}; + + %% We have some structs that we have to define: + Msg = struct('time', [], 'info', []); + Start = struct('time', [], 'eye', [], 'info', []); + End = struct('time', [], 'info', [], 'info2', [], 'value1', [], 'value2', []); + prescaler = nan(sum(cell2mat(strfind(lines, 'PRESCALER')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + vprescaler = nan(sum(cell2mat(strfind(lines, 'VPRESCALER')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + pupilInfo = cell(sum(cell2mat(strfind(lines, 'PUPIL')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Sfix = struct('eye', [], 'time', []); + Efix = struct('eye', [], 'start', [], 'end', [], 'duration', [], ... + 'posX', [], 'posY', [], 'pupilSize', []); + Ssacc = struct('eye', [], 'time', []); + Esacc = struct('eye', [], 'start', [], 'end', [], 'duration', [], ... + 'posX', [], 'posY', [], 'posXend', [], 'posYend', [], ... + 'hypot', [], 'pvel', []); + Sblink = struct('eye', [], 'time', []); + Eblink = struct('eye', [], 'start', [], 'end', [], 'duration', []); + Input = struct('time', [], 'value', []); + Button = struct('time', [], 'value1', [], 'value2', [], 'value3', []); + + %% Allocate Memory for our structures: + Msg = repmat(Msg, sum(cell2mat(strfind(lines, 'MSG')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Start = repmat(Start, sum(cell2mat(strfind(lines, 'START')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Sfix = repmat(Sfix, sum(cell2mat(strfind(lines, 'SFIX')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Efix = repmat(Efix, sum(cell2mat(strfind(lines, 'EFIX')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Ssacc = repmat(Ssacc, sum(cell2mat(strfind(lines, 'SSACC')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Esacc = repmat(Esacc, sum(cell2mat(strfind(lines, 'ESACC')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Sblink = repmat(Sblink, sum(cell2mat(strfind(lines, 'SBLINK')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Eblink = repmat(Eblink, sum(cell2mat(strfind(lines, 'EBLINK')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + End = repmat(End, sum(cell2mat(strfind(lines, 'END')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Input = repmat(Input, sum(cell2mat(strfind(lines, 'INPUT')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + Button = repmat(Button, sum(cell2mat(strfind(lines, 'BUTTON')) == 1), 1); % == 1 because we want only to find lines, where the line start with the specified tag + + %% Process all possible Events + nMsg = 1; + nStart = 1; + nEnd = 1; + nInput = 1; + nButton = 1; + nPrescaler = 1; + nVprescaler = 1; + nPupil = 1; + nSfix = 1; + nEfix = 1; + nSsacc = 1; + nEsacc = 1; + nSblink = 1; + nEblink = 1; + + row = 1; + + while row < size(lines, 1) + switch lines{row} + case 'MSG' + Msg(nMsg).time = str2double(lines{ row + 1}); + Msg(nMsg).info = lines{ row + 2}; + nMsg = nMsg + 1; + row = row + 3; + case 'START' + Start(nStart).time = str2double(lines{ row + 1}); + Start(nStart).eye = lines{ row + 2}; + Start(nStart).info = lines{ row + 2}; % unnecessary, will be removed in the next version + nStart = nStart + 1; + row = row + 4; + case 'PRESCALER' + prescaler(nPrescaler) = str2double(lines{ row + 1}); + nPrescaler = nPrescaler + 1; + row = row + 2; + case 'BUTTON' + Button(nButton).time = str2double(lines{ row + 1}); + Button(nButton).value1 = str2double(lines{ row + 2}); + Button(nButton).value2 = str2double(lines{ row + 3}); + Button(nButton).value3 = str2double(lines{ row + 4}); + nButton = nButton + 1; + row = row + 5; + case 'INPUT' + Input(nInput).time = str2double(lines{ row + 1}); + Input(nInput).value = str2double(lines{ row + 2}); + nInput = nInput + 1; + row = row + 3; + case 'VPRESCALER' + vprescaler(nVprescaler) = str2double(lines{ row + 1}); + nVprescaler = nVprescaler + 1; + row = row + 2; + case 'PUPIL' + pupilInfo{nPupil} = lines{ row + 1}; + nPupil = nPupil + 1; + row = row + 2; + case 'EVENTS' + % ignore % + row = row + 9; + case 'SFIX' + Sfix(nSfix).eye = lines{ row + 1}; + Sfix(nSfix).time = str2double(lines{ row + 2}); + nSfix = nSfix + 1; + row = row + 3; + case 'EFIX' + Efix(nEfix).eye = lines{ row + 1}; + Efix(nEfix).start = str2double(lines{ row + 2}); + Efix(nEfix).end = str2double(lines{ row + 3}); + Efix(nEfix).duration = str2double(lines{ row + 4}); + Efix(nEfix).posX = str2double(lines{ row + 5}); + Efix(nEfix).posY = str2double(lines{ row + 6}); + Efix(nEfix).pupilSize = str2double(lines{ row + 7}); + nEfix = nEfix + 1; + row = row + 8; + case 'SSACC' + Ssacc(nSsacc).eye = lines{ row + 1}; + Ssacc(nSsacc).time = str2double(lines{ row + 2}); + nSsacc = nSsacc + 1; + row = row + 3; + case 'ESACC' + Esacc(nEsacc).eye = lines{ row + 1}; + Esacc(nEsacc).start = str2double(lines{ row + 2}); + Esacc(nEsacc).end = str2double(lines{ row + 3}); + Esacc(nEsacc).duration = str2double(lines{ row + 4}); + Esacc(nEsacc).posX = str2double(lines{ row + 5}); + Esacc(nEsacc).posY = str2double(lines{ row + 6}); + Esacc(nEsacc).posXend = str2double(lines{ row + 7}); + Esacc(nEsacc).posYend = str2double(lines{ row + 8}); + Esacc(nEsacc).hypot = str2double(lines{ row + 9}); + Esacc(nEsacc).pvel = str2double(lines{ row + 10}); + nEsacc = nEsacc + 1; + row = row + 11; + case 'SBLINK' + Sblink(nSblink).eye = lines{ row + 1}; + Sblink(nSblink).time = str2double(lines{ row + 2}); + nSblink = nSblink + 1; + row = row + 3; + case 'EBLINK' + Eblink(nEblink).eye = lines{ row + 1}; + Eblink(nEblink).start = str2double(lines{ row + 2}); + Eblink(nEblink).end = str2double(lines{ row + 3}); + Eblink(nEblink).duration = str2double(lines{ row + 4}); + nEblink = nEblink + 1; + row = row + 5; + case 'END' + End(nEnd).time = str2double(lines{row + 1}); + End(nEnd).info = lines{ row + 2}; + End(nEnd).info2 = lines{ row + 3}; + End(nEnd).value1 = str2double(lines{ row + 4}); + End(nEnd).value2 = str2double(lines{ row + 5}); + nEblink = nEblink + 1; + row = row + 6; + case '' + % Todo get Calibration data% + row = row + 1; + otherwise + + if strfind(lines{row}, '>>>>>>> CALIBRATION') + % ignore + else + coordinates = []; + try + coordinates = sscanf(lines{row}, '%d %d %d %d'); + catch e + if isa(e, 'MException') + else + rethrow(e); + end + end + if isempty(coordinates); + disp(row); + disp(['Unknown Event, please send edf file to ' obj.AUTHOREMAIL ' of this script!']); + end + end + + row = row + 1; + end + end + + %% Reshape the structures to more useful variables + + Msg(1).time = [Msg.time]; + Msg(1).info = {Msg.info}; + Msg = Msg(1); + + Start(1).time = [Start.time]; + Start(1).eye = {Start.eye}; + Start(1).info = {Start.info}; + Start = Start(1); + + Input(1).time = [Input.time]; + Input(1).value = [Input.value]; + Input = Input(1); + + Button(1).time = [Button.time]; + Button(1).value1 = [Button.value1]; + Button(1).value2 = [Button.value2]; + Button(1).value3 = [Button.value3]; + Button = Button(1); + + Sfix(1).eye = {Sfix.eye}; + Sfix(1).time = [Sfix.time]; + Sfix = Sfix(1); + + Efix(1).eye = {Efix.eye}; + Efix(1).start = [Efix.start]; + Efix(1).end = [Efix.end]; + Efix(1).duration = [Efix.duration]; + Efix(1).posX = [Efix.posX]; + Efix(1).posY = [Efix.posY]; + Efix(1).pupilSize = [Efix.pupilSize]; + Efix = Efix(1); + + Ssacc(1).eye = {Ssacc.eye}; + Ssacc(1).time = [Ssacc.time]; + Ssacc = Ssacc(1); + + Esacc(1).eye = {Esacc.eye}; + Esacc(1).start = [Esacc.start]; + Esacc(1).end = [Esacc.end]; + Esacc(1).duration = [Esacc.duration]; + Esacc(1).posX = [Esacc.posX]; + Esacc(1).posY = [Esacc.posY]; + Esacc(1).posXend = [Esacc.posXend]; + Esacc(1).posYend = [Esacc.posYend]; + Esacc(1).hypot = [Esacc.hypot]; + Esacc(1).pvel = [Esacc.pvel]; + + Esacc = Esacc(1); + % Keep previouse unknown variables + Esacc.value1 = Esacc.hypot; + Esacc.value2 = Esacc.pvel; + + Sblink(1).eye = {Sblink.eye}; + Sblink(1).time = [Sblink.time]; + Sblink = Sblink(1); + + Eblink(1).eye = {Eblink.eye}; + Eblink(1).start = [Eblink.start]; + Eblink(1).end = [Eblink.end]; + Eblink(1).duration = [Eblink.duration]; + Eblink = Eblink(1); + + End(1).time = [End.time]; + End(1).info = {End.info}; + End(1).info2 = {End.info2}; + End(1).value1 = [End.value1]; + End(1).value2 = [End.value2]; + End = End(1); + + else % create old header elements for backward compatibility + eyeNames = fieldnames(obj.EYES); + + Messages = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.MESSAGEEVENT); + Msg.time = double([Messages.sttime]); + Msg.info = {Messages.message}; + +% Start of recording + startRecordings = obj.RawEdf.RECORDINGS([obj.RawEdf.RECORDINGS.state].' == obj.RECORDING_STATES.START); + Start.time = double([startRecordings.time]); + eyes = [startRecordings.eye]; % here not plus one as SR_RESEARCH can't follow it's own convention and start in recording with 1 whereas in events with 0!!!! + + Start.eye = eyeNames(eyes).'; + Start.info = eyeNames(eyes).'; + + buttons = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.BUTTONEVENT); + Button.time = double([buttons.sttime]); + Button.value1 = 0; % no idea where it should come from + Button.value2 = 0; % no idea where it should come from + Button.value3 = double([buttons.input]); + + inputs = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.INPUTEVENT); + Input.time = double([inputs.sttime]); + Input.value = double([inputs.input]); + + % prescaler + prescaler = 1; % Undocummented but from C-Code its always 1! print("PRESCALER\t1\n"); + + % vprescaler + vprescaler = 1; % Undocummented but from C-Code its always 1! print("PRESCALER\t1\n"); + + % Pupil Info + pupilTypeNames = fieldnames(obj.PUPIL); + pupilInfo = pupilTypeNames(double(cat(1, startRecordings.pupil_type) + 1)); +% + startfix = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.STARTFIX); + Sfix.eye = eyeNames(double([startfix.eye]) + 1).'; % + 1 because in c indexing start with 0 whereas in matlab with 1 + Sfix.time = double([startfix.sttime]); +% + endfix = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.ENDFIX); + Efix.eye = eyeNames(double([endfix.eye]) + 1).'; % + 1 because in c indexing start with 0 whereas in matlab with 1 + Efix.start = double([endfix.sttime]); + Efix.end = double([endfix.entime]); + Efix.duration = Efix.end - Efix.start; + Efix.posX = double([endfix.gavx]); + Efix.posY = double([endfix.gavy]); + Efix.pupilSize = double([endfix.ava]); + +% + startSaccade = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.STARTSACC); + Ssacc.eye = eyeNames(double([startSaccade.eye]) + 1).'; % + 1 because in c indexing start with 0 whereas in matlab with 1 + Ssacc.time = double([startSaccade.sttime]); +% + endSaccade = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.ENDSACC); + Esacc.eye = eyeNames(double([endSaccade.eye]) + 1).'; % + 1 because in c indexing start with 0 whereas in matlab with 1 + Esacc.start = double([endSaccade.sttime]); % == double([startSaccade.sttime])!!!!!! + Esacc.end = double([endSaccade.entime]); % != double([startSaccade.entime]) => 0 !!! + Esacc.duration = Esacc.end - Esacc.start; + Esacc.posX = double([endSaccade.gstx]); + Esacc.posY = double([endSaccade.gsty]); + Esacc.posXend = double([endSaccade.genx]); + Esacc.posYend = double([endSaccade.geny]); + + Esacc.hypot = hypot((double([endSaccade.gstx]) - double([endSaccade.genx])) ... + ./((double([endSaccade.supd_x]) + double([endSaccade.eupd_x]))/2.0), ... + (double([endSaccade.gsty]) - double([endSaccade.geny])) ... + ./((double([endSaccade.supd_y]) + double([endSaccade.eupd_y]))/2.0)); % Hypotenouse of something ... ???? + + Esacc.pvel = double([endSaccade.pvel]); + % Keep old namings after figuring out where they come from + Esacc.value1 = Esacc.hypot; + Esacc.value2 = Esacc.pvel; + + +% + startBlink = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.STARTBLINK); + Sblink.eye = eyeNames(double([startBlink.eye]) + 1).'; % + 1 because in c indexing start with 0 whereas in matlab with 1 + Sblink.time = double([startBlink.sttime]); + +% + endBlink = obj.RawEdf.FEVENT([obj.RawEdf.FEVENT.type].' == obj.EVENT_TYPES.ENDBLINK); + Eblink.eye = eyeNames(double([endBlink.eye]) + 1).'; % + 1 because in c indexing start with 0 whereas in matlab with 1 + Eblink.start = double([endBlink.sttime]); % == double([startSaccade.sttime])!!!!!! + Eblink.end = double([endBlink.entime]); % != double([startSaccade.entime]) => 0 !!! + Eblink.duration = Eblink.end - Eblink.start; +% + + endRecordings = obj.RawEdf.RECORDINGS([obj.RawEdf.RECORDINGS.state].' == obj.RECORDING_STATES.END); + End.time = double([endRecordings.time]); + End.info = {'EVENTS'}; + End.info2 = {'RES'}; + End.ppd_x_ppd_total = sum(obj.Samples.rx)/numel(obj.Samples.rx); % What does it significate? Sum of all screen pixels per degree divided by number of samples => What does it tell? + End.ppd_y_ppd_total = sum(obj.Samples.ry)/numel(obj.Samples.ry); % What does it significate? Sum of all screen pixels per degree divided by number of samples => What does it tell? + End.value1 = End.ppd_x_ppd_total; + End.value2 = End.ppd_x_ppd_total; + + end + + + %% Create the Event Structure + obj.Events.Messages = Msg; + obj.Events.Start = Start; + obj.Events.Input = Input; + obj.Events.Buttons = Button; + obj.Events.prescaler = prescaler; + obj.Events.vprescaler = vprescaler; + obj.Events.pupilInfo = pupilInfo; + obj.Events.Sfix = Sfix; + obj.Events.Ssacc = Ssacc; + obj.Events.Esacc = Esacc; + obj.Events.Efix = Efix; + obj.Events.Sblink = Sblink; + obj.Events.Eblink = Eblink; + obj.Events.End = End; +end + diff --git a/src/functions/eyetracking/LICENSE b/src/functions/eyetracking/LICENSE new file mode 100644 index 0000000..9da405a --- /dev/null +++ b/src/functions/eyetracking/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 University of Zurich, Departement of Economics, Engineering + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/functions/plot_deleted_chan_location.m b/src/functions/plot_deleted_chan_location.m new file mode 100644 index 0000000..45e76c9 --- /dev/null +++ b/src/functions/plot_deleted_chan_location.m @@ -0,0 +1,29 @@ +function [EEG]= plot_deleted_chan_location(EEG,save_path) +%this function plots all the deleted channel locations in on a scalp map +%Requires a EEGLAB EEG matrix, with the locations of all channels (before some got delted) +%The EEG.urchanlocs can be created using EEGLAB's chan location function. +labels_all = {EEG.urchanlocs(1:64).labels}.'; %stores all the labels in a new matrix +labels_good = {EEG.chanlocs.labels}.'; %saves all the channels that are in the excom file +del_chan=setdiff(labels_all,labels_good); +EEG.del_chan=[]; +for chan=1:length(del_chan) + for del=1:64 + if strcmp(del_chan{chan},EEG.urchanlocs(del).labels) + EEG.del_chan = [EEG.del_chan;EEG.urchanlocs(del)]; + end + end +end +if isempty(EEG.del_chan) + figure('Renderer', 'painters', 'Position', [10 10 375 225]); %this is just an empty figure +elseif length(EEG.del_chan)==1 + EEG.del_chan=[EEG.del_chan;EEG.del_chan]; %need 2 to have the function work, but will just plot 2 the same one + figure; topoplot([],EEG.del_chan, 'style', 'fill', 'electrodes', 'labelpoint', 'chaninfo', EEG.chaninfo); + EEG.del_chan=EEG.del_chan(1); +else + figure; topoplot([],EEG.del_chan, 'style', 'fill', 'electrodes', 'labelpoint', 'chaninfo', EEG.chaninfo); +end + + saveas(gcf,[save_path EEG.subject '_deleted_channels']) + +close all +end \ No newline at end of file diff --git a/src/functions/plotting_bridged_channels.m b/src/functions/plotting_bridged_channels.m new file mode 100644 index 0000000..001da1b --- /dev/null +++ b/src/functions/plotting_bridged_channels.m @@ -0,0 +1,38 @@ +function [EEG]=plotting_bridged_channels(EEG, save_path) +%function plots the locations of all bridged channels and saves it as a png file +%Requires a EEGLAB EEG matrix, with the locations of all channels +%Requires a path where it should save the figure +%should be ran before you delete bad channels +EEG_temp=EEG; +for i=1:length(EEG.nbchan)%delete the externals + EEG_temp = pop_select( EEG_temp, 'nochannel',{'EXG1','EXG2','EXG3','EXG4','EXG5','EXG6','EXG7','EXG8'}); +end +bridge=eBridge(EEG_temp); %uses this functions to calculated bridges +EEG_temp.bridged=[]; +for chan=1:bridge.Bridged.Count + for del=1:length(EEG_temp.chanlocs) + if ~contains(bridge.Bridged.Labels{1, chan},'EXG') %skipping externals + if strcmp(bridge.Bridged.Labels{1, chan} ,EEG_temp.chanlocs(del).labels) + EEG_temp.bridged = [EEG_temp.bridged;EEG_temp.chanlocs(del)]; + end + end + end +end +if isempty(EEG_temp.bridged) + figure('Renderer', 'painters', 'Position', [10 10 375 225])%this is just an empty figure +elseif length(EEG_temp.bridged)==1 + EEG_temp.bridged = [EEG_temp.bridged;EEG_temp.bridged]; %need 2 to have the function work, but will just plot 2 the same one + figure; topoplot([],EEG_temp.bridged, 'style', 'fill', 'electrodes', 'labelpoint', 'chaninfo', EEG_temp.chaninfo); + EEG_temp.bridged=EEG_temp.bridged(1); +else + figure; topoplot([],EEG_temp.bridged, 'style', 'fill', 'electrodes', 'labelpoint', 'chaninfo', EEG_temp.chaninfo); +end +if isempty(bridge.Bridged.Labels{1, 1}) + bridge.Bridged.Labels='Nothing is bridged'; +else + bridge.Bridged.Labels=strjoin(bridge.Bridged.Labels); +end +saveas(gcf,[save_path EEG_temp.subject '_bridged_channels']) +close all +EEG.bridged=EEG_temp.bridged; +end \ No newline at end of file diff --git a/src/functions/readme_to_EEG.m b/src/functions/readme_to_EEG.m new file mode 100644 index 0000000..cf9a87a --- /dev/null +++ b/src/functions/readme_to_EEG.m @@ -0,0 +1,287 @@ +function [EEG]= readme_to_EEG(EEG, data_path) +% readme_to_EEG reads a readme file if availible, and adds the data to the EEG +% file, if readme file not availibe questions will be prompted to get the same info +% Usage: [EEG]= readme_to_EEG(EEG, data_path) +% If EEG is [], function still works but will create this file for you +% if data_path is [] or if there is no readme file in that folder +% function will instead prompt the questions to the user +% the structuture EEG will have the following added info: +% EEG.notes=Notes from readme file; +% EEG.vision_info=" Left Right Both (vision scores)"; +% EEG.vision=Vision scores from readme file +% EEG.hearing_info=" Frequency Left Right"; +% EEG.hz500=Results from readme file +% EEG.hz1000=Results from readme file +% EEG.hz2000=Results from readme file +% EEG.hz4000=Results from readme file +% EEG.age=Results from readme file +% EEG.sex=Results from readme file +% EEG.date=Results from readme file +% EEG.Hand=Results from readme file +% EEG.hearing=Results from readme file +% EEG.vision=Results from readme file +% EEG.glasses=Results from readme file +% EEG.Medication=Results from readme file +% EEG.Exp=Results from readme file +% EEG.Externals=Results from readme file +% EEG.Light=Results from readme file +% EEG.Screen=Results from readme file +% EEG.Cap=Results from readme file +% *note: when "Results from readme file", readme_to_EEG will either find it in the readme file and use it +% or if it doesn't find it, it will promt for the answer. +readme_yn='no'; + notes=[];date_1=[]; Age=[]; Sex=[]; Handedness=[]; glasses=[]; Medication=[]; Exp=[]; Externals=[]; Light=[]; Screen=[];Cap=[]; pres_version=[]; + readme_1=["this is a string to set it up","this is the second string to set it up","this is the 3rd string to set it up","this is the 4rd string to set it up", "this is the last string to set it up"]; + +if ~isempty(data_path) + data_folder=dir(data_path); + for i = 1:length(data_folder) + endsWith(data_folder(i).name,'README.txt'); + readme_yn='yes'; + end + if strcmpi(readme_yn,'yes') + for read=1:length(data_folder) + if endsWith( data_folder(read).name , 'README.txt' ) + readme_1 = fileread([data_path data_folder(read).name]); + end + end + if size(readme_1)==[1,1] + sprintf('\n \n \n Readme file is loaded wrong, need manual input \n \n \n') + else + if contains(readme_1,' Presentation V') + pres_version=extractBetween(readme_1, '~Run in ', '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'); + end + % for i=1:length(readme_1) + if contains(readme_1,'Date') && contains(readme_1,'Gender') + date_1 = extractBetween(readme_1,'Date:', 'Gender'); + date_1 = strtrim(date_1); %deleting tabs, then deleting spaces + date_1=strcat('Date: ',date_1); + end + if contains(readme_1,'Age:') && contains(readme_1,'Hand') + Age=extractBetween(readme_1, 'Age:', 'Hand'); + Age = strtrim(Age);% deleting tabs, then deleting spaces + Age=strcat('Age: ',Age); + end + if contains(readme_1,'Gender:') && contains(readme_1,'Age:') + Sex=extractBetween(readme_1, 'Gender:', 'Age:'); + Sex = strtrim(Sex);% deleting tabs, then deleting spaces + Sex = strcat('Sex: ',Sex); + end + if contains(readme_1,'Sex:') && contains(readme_1,'Age:') + Sex=extractBetween(readme_1, 'Sex:', 'Age:'); + Sex = strtrim(Sex);% deleting tabs, then deleting spaces + Sex = strcat('Sex: ',Sex); + end + if contains(readme_1,'Glasses') && contains(readme_1,'Medic') + glasses=extractBetween(readme_1, 'contacts:', 'Medic'); + glasses = strtrim(glasses);% deleting tabs, then deleting spaces + glasses=strcat('Glasses or contacts: ',glasses); + end + if contains(readme_1,'Handedness:') && contains(readme_1,'Tempe') + Handedness=extractBetween(readme_1, 'Handedness:', 'Tempe'); + Handedness = strtrim(Handedness);% deleting tabs, then deleting spaces + Handedness=strcat('Handedness: ',Handedness); + end + if contains(readme_1,'Medication:') && contains(readme_1,'Height') + Medication=extractBetween(readme_1, 'Medication:', 'Height'); + Medication = strtrim(Medication);% deleting tabs, then deleting spaces + Medication=strcat('Medication: ',Medication); + end + if contains(readme_1,'Exp:') && contains(readme_1,'booth') + Exp=extractBetween(readme_1, 'Exp:', 'booth'); + Exp = strtrim(Exp);% deleting tabs, then deleting spaces + Exp=strcat('Experimenter: ',Exp); + end + if contains(readme_1,'Externals:')&& contains(readme_1,'(normal') + Externals=extractBetween(readme_1, 'Externals:', '(normal'); + if strlength(Externals)>25 + Externals=extractBetween(readme_1, 'Externals:', 'External location'); + end + Externals = strtrim(Externals);% deleting tabs, then deleting spaces + Externals=strcat('Externals: ',Externals); + end + if contains(readme_1,'Light:') && contains(readme_1,'(normal') + Light=extractBetween(readme_1, 'Light:', '(normal'); + Light = strtrim(Light);% deleting tabs, then deleting spaces + Light=strcat('Light: ',Light); + end + if contains(readme_1,'Screen:') && contains(readme_1,'(') + Screen=extractBetween(readme_1, 'Screen:', '('); + Screen = strtrim(Screen);% deleting tabs, then deleting spaces + Screen=strcat('Screen distance (cm): ',Screen); + end + if contains(readme_1,'Cap:') && contains(readme_1,'(color + channels)') + Cap=extractBetween(readme_1, 'Cap:', '(color + channels)'); + Cap = strtrim(Cap);% deleting tabs, then deleting spaces + Cap=strcat('Cap size and #channels : ',Cap); + end + if contains(readme_1,'notes:') && contains(readme_1,'Save as') + notes = extractBetween(readme_1,'notes:', 'Save as'); + notes = strtrim(notes); %deleting tabs, then deleting spaces + notes=strcat('Notes: ',notes); + end + + end + end +end +if isempty(pres_version) + prompt = "What Version of Presentation was used?"; + pres_version= input(prompt,"s"); pres_version=strcat('Presentation Version:',cellstr(pres_version)); +end +if isempty(date_1) || strcmpi(date_1,'Date:') || strlength(date_1)>20 + prompt = "Date of data collection (mm/dd/yyyy): "; + date_1= input(prompt,"s"); date_1=strcat('Date:',cellstr(date_1)); +end +if isempty(Age) || strcmpi(Age,'Age:') || strlength(Age)>10 + prompt = "Age of participant: "; + Age= input(prompt,"s"); Age=strcat('Age: ',cellstr(Age)); +end +if isempty(Sex) ||strcmpi(Sex,'Sex:') || strlength(Sex)>15 + prompt = "Sex of participant: "; + Sex= input(prompt,"s"); Sex=strcat('Gender: ', cellstr(Sex)); +end +if isempty(Handedness) || strcmpi(Handedness,'Handedness:') || strlength(Handedness)>25 + prompt = "Handedness: "; + Handedness= input(prompt,"s"); Handedness=strcat('Handedness: ',cellstr(Handedness)); +end +if isempty(glasses) || strcmpi(glasses,'Glasses or contacts:') || strlength(glasses)>35 + prompt = "glasses or contacts: "; + glasses= input(prompt,"s"); glasses=strcat('Glasses or contacts: ', cellstr(glasses)); +end + +if isempty(Medication) || strcmpi(Medication,'Medication:') || strlength(Medication)>40 + prompt = "Medication:"; + Medication= input(prompt,"s"); + if strlength(Medication)>40 %checking if it fits in the figure (+40 chr goes over the edge) + start=1;med_temp=cellstr(Medication')';med_temp_2={};length_med=ceil(strlength(Medication)/40)*40; + for i=1:length(med_temp) %to stop the spaces from being deleted + if isempty(med_temp{i}) + med_temp{i}={' '}; + end + end + for ii=40:40:length_med %looks for 80 chr increments + if start==1 + med_temp_2=[med_temp_2,strcat('Medication: ', strcat(med_temp{start:ii}))]; + + start=ii+1; + elseif ii>strlength(Medication) + med_temp_2=[med_temp_2,strcat(med_temp{start:end})]; + else + med_temp_2=[med_temp_2,strcat(med_temp{start:ii})]; + start=ii+1; + end + end + Medication=med_temp_2; %Notes are now 80chr but with enters at the end so it still fits + elseif strcmpi(Medication,"") + Medication='Medication: not filled out'; + end +else + % Medication=['Medication: ',Medication]; +end +if isempty(Exp) || strcmpi(Exp,'Exp:') || strlength(Exp)>20 + prompt = "Experimenter: "; + Exp= input(prompt,"s"); Exp=strcat('Experimenter: ',cellstr(Exp)); +end +if isempty(Externals) || strcmpi(Externals,'Externals:') || strlength(Externals)>25 + prompt = "Externals: "; + Externals= input(prompt,"s"); Externals=strcat('Externals: ',cellstr(Externals)); +end +if isempty(Light)|| strcmpi(Light,'Light:') || strlength(Light)>10 + prompt = "Light on/off: "; + Light= input(prompt,"s"); Light=strcat('Light: ',cellstr(Light)); +end +if isempty(Screen)|| strcmpi(Screen,'Screen:') || strlength(Screen)>30 + prompt = "Screen distance (cm): "; + Screen= input(prompt,"s"); Screen=strcat('Screen distance (cm): ',cellstr(Screen)); +end +if isempty(Cap)|| strcmpi(Cap,'Cap:') || strlength(Cap)>50 + prompt = "Cap size and # channels: "; + Cap= input(prompt,"s"); Cap=strcat('Cap size and #channels : ',cellstr(Cap)); +end +%% notes +if isempty(notes)|| strcmpi(notes,'Notes:') || strlength(notes)>45 + prompt = "Please copy past all the text from the Notes here: "; + notes= input(prompt,"s"); + if strlength(notes)>45 %checking if it fits in the figure (+90 chr goes over the edge) + start=1;notes_temp=cellstr(notes')';notes_temp_2={};length_notes=ceil(strlength(notes)/50)*50; + for i=1:length(notes_temp) %to stop the spaces from being deleted + if isempty(notes_temp{i}) + notes_temp{i}={' '}; + end + end + if ~(rem(45,length_notes)==0) + length_notes= (ceil(length_notes/45))*45; + end + for ii=45:45:length_notes+1 %looks for 80 chr increments + if start==1 + notes_temp_2=[notes_temp_2,strcat('Notes: ', strcat(notes_temp{start:ii}))]; + start=ii+1; + elseif ii>strlength(notes) %making sure it will include the last bit + notes_temp_2=[notes_temp_2,strcat(notes_temp{start:end})]; + break + else + notes_temp_2=[notes_temp_2,strcat(notes_temp{start:ii})]; + start=ii+1; + end + end + notes=notes_temp_2; %Notes are now 80chr but with enters at the end so it still fits, if more than 10 lines, it won't fit + else + notes=['Notes: ', notes]; + end +end +%% vision and hearing +vision=[];hz500=' 500 Hz: dB dB ';hz1000=' 1000 Hz: dB dB';hz2000=' 2000 Hz: dB dB';hz4000=' 4000 Hz: dB dB'; + +if contains(readme_1,'Hearingtest') & contains(readme_1,'500hz') & contains(readme_1,'1000hz') & contains(readme_1,'2000hz') & contains(readme_1,'4000hz') + hz500=extractBetween(readme_1, '500hz', '1000hz'); + hz500=regexprep(strtrim(hz500), '\t', ' ');% deleting whitespace, tabs, etc + hz500=strcat('500Hz: ',hz500); + hz1000=extractBetween(readme_1, '1000hz', '2000hz'); + hz1000=regexprep(strtrim(hz1000), '\t', ' ');% deleting whitespace, tabs, etc + hz1000=strcat('1000Hz: ',hz1000); + hz2000=extractBetween(readme_1, '2000hz', '4000hz'); + hz2000=regexprep(strtrim(hz2000), '\t', ' ');% deleting whitespace, tabs, etc + hz2000=strcat('2000Hz: ',hz2000); + hz4000=extractBetween(readme_1, '4000hz', 'Vision'); + hz4000=regexprep(strtrim(hz4000), '\t', ' ');% deleting whitespace, tabs, etc + hz4000=strcat('4000Hz: ',hz4000); +end +if contains(readme_1,'Vision Test:') & contains(readme_1,'notes:') & contains(readme_1,'vision test is not done on EEG day)') + vision=extractBetween(readme_1, 'vision test is not done on EEG day)', 'notes:'); + vision = strtrim(vision);% deleting tabs, then deleting spaces + vision = regexprep(vision, '\t', ' '); vision = regexprep(vision, ' ', ' '); %cell {' 20/12 20/32 20/14 '} + vision=string(vision); +end + +if isempty(vision) || contains(readme_1,'20/ 20/') || strlength(vision)>20 + prompt = "Vision score left eye: "; + left_eye= input(prompt,"s"); + prompt = "Vision score right eye: "; + right_eye= input(prompt,"s"); + prompt = "Vision score both eyes: "; + both_eye= input(prompt,"s"); + vision=strcat(left_eye, " ",right_eye," ",both_eye); +end + if isempty(hz500) || strcmp(string(hz500), " 500 Hz: dB dB ") || strlength(hz500)>20 + prompt = "500hz hearing test results (left ear/ Right ear): "; + hz500= input(prompt,"s"); hz500=strcat(' 500 Hz : ',cellstr(hz500)); + end + if isempty(hz1000) ||strcmp(string(hz1000), " 1000 Hz: dB dB") || strlength(hz1000)>24 + prompt = "1000hz hearing test results (left ear/ Right ear): "; + hz1000= input(prompt,"s"); hz1000=strcat(' 1000 Hz : ',cellstr(hz1000)); + end + if isempty(hz2000) || strcmp(string(hz2000), " 2000 Hz: dB dB") || strlength(hz2000)>24 + prompt = "2000hz hearing test results (left ear/ Right ear): "; + hz2000= input(prompt,"s"); hz2000=strcat(' 2000 Hz : ',cellstr(hz2000)); + end + if isempty(hz4000) || strcmp(string(hz4000), " 4000 Hz: dB dB") || strlength(hz4000)>24 + prompt = "4000hz hearing test results (left ear/ Right ear): "; + hz4000= input(prompt,"s"); hz4000=strcat(' 4000 Hz : ',cellstr(hz4000)); + end + +EEG.notes=notes; +EEG.vision_info=" Left Right Both (vision scores)";hearing_info= " Frequency Left Right"; +EEG.vision=vision; EEG.hearing_info=hearing_info; EEG.hz500=hz500; EEG.hz1000=hz1000; EEG.hz2000=hz2000; EEG.hz4000=hz4000; +EEG.age=Age; EEG.sex=Sex; EEG.date=date_1; EEG.Hand=Handedness; EEG.hearing=hz1000; EEG.vision=vision; +EEG.glasses=glasses;EEG.Medication=Medication; EEG.Exp=Exp;EEG.Externals=Externals;EEG.Light=Light; EEG.Screen=Screen; EEG.Cap=Cap; +%end \ No newline at end of file diff --git a/testing/scripts/A_merge_sets.m b/testing/scripts/A_merge_sets.m index e1f9dea..1d2d3c8 100644 --- a/testing/scripts/A_merge_sets.m +++ b/testing/scripts/A_merge_sets.m @@ -1,9 +1,9 @@ % EEGLAB merge sets, and creates .set file % by Douwe Horsthuis updated on 6/21/2021 % ------------------------------------------------ -subject_list = {'6209' '6239' '8103' '8103-01' '8110' '8110-01' '8113' '8117' '8119' '8121' '8121-01' '8128' '8128-01'}; %all the IDs for the indivual particpants -subject_list ={ '8128-01'} +subject_list = {'ID_participant1' 'ID_participant2' 'ID_etc'}; %all the IDs for the indivual particpants home_path = 'C:\Users\dohorsth\Desktop\cued-boss\'; %place data is (something like 'C:\data\') +save_path = 'C:\Users\dohorsth\Desktop\cystinosis\cued boss\data\'; %only for the first script, in case you load your data from somewhere special but want to save it somewhere else filename = 'cued_boss'; % if your bdf file has a name besides the ID of the participant (e.g. oddball_paradigm) blocks = 1; % the amount of BDF files. if different participant have different amounts of blocks, run those participant separate readme_file ='yes';%'yes' or 'no', if yes using [EEG]= readme_to_EEG(EEG, data_path) to read readme file @@ -18,6 +18,7 @@ close all data_path = [home_path subject_list{s} '\']; disp([data_path subject_list{s} '_' filename '.bdf']) + save_path_indv=[save_path subject_list{s} '\']; if blocks == 1 %if participants have only 1 block, load only this one file EEG = pop_biosig([data_path subject_list{s} '_' filename '_1.bdf']); @@ -27,6 +28,7 @@ %your files need to have the same name, except for a increasing number at the end (e.g. id#_file_1.bdf id#_file_2) EEG = pop_biosig([data_path subject_list{s} '_' filename '_' num2str(bdf_bl) '.bdf']); [ALLEEG, ~] = eeg_store(ALLEEG, EEG, CURRENTSET); + mkdir(save_path_indv) %if individual folders do not exist end %since there are more than 1 files, they need to be merged to one big .set file. EEG = pop_mergeset( ALLEEG, 1:blocks, 0); diff --git a/testing/scripts/B_downs_filter_chaninfo_exclchan.m b/testing/scripts/B_downs_filter_chaninfo_exclchan.m index 4a97a1f..16a0e81 100644 --- a/testing/scripts/B_downs_filter_chaninfo_exclchan.m +++ b/testing/scripts/B_downs_filter_chaninfo_exclchan.m @@ -1,13 +1,10 @@ % Combination of EEGLAB downsample and filter, and reject channel script by Ana on 2017-07-11 % Combined and updated by Douwe Horsthuis last update 11/5/2021 % ------------------------------------------------ -clear variables +clear variables % This defines the set of subjects subject_list = {'6209' '6239' '8103' '8110' '8110-01' '8113' '8117' '8119' '8121' '8121-01' '8128' '8128-01'}; %all the IDs for the indivual particpants home_path = 'C:\Users\dohorsth\Desktop\cued-boss\'; %place data is (something like 'C:\data\') - -eeglab_location = fileparts(which('eeglab')); %needed if using a 10-5-cap -scripts_location = 'C:\\Scripts\'; %needed if using 160channel data downsample_to=256; % what is the sample rate you want to downsample to lowpass_filter_hz=45; %45hz filter highpass_filter_hz=1; %1hz filter @@ -34,18 +31,20 @@ EEG = eeg_checkset( EEG ); EEG = pop_eegfiltnew(EEG, 'hicutoff',lowpass_filter_hz); EEG = eeg_checkset( EEG ); - EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_downft.set'],'filepath', data_path); - %looking for bridged channels - if strcmpi(individual_plots,'yes') - EEG=plotting_bridged_channels(EEG, data_path); %plotting the location of bridged chan - end close all + EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_downft.set'],'filepath', data_path); + EEG.old_n_chan = EEG.nbchan; old_samples=EEG.pnts; %adding channel location if EEG.nbchan >63 && EEG.nbchan < 95 %64chan cap (can be a lot of externals, this makes sure that it includes a everything that is under 96 channels, which could be an extra ribbon) - EEG=pop_chanedit(EEG, 'lookup',[eeglab_location '\plugins\dipfit\standard_BESA\standard-10-5-cap385.elp'],'rplurchanloc',[1]); %make sure you put here the location of this file for your computer + EEG=pop_chanedit(EEG, 'lookup',[fileparts(which('eeglab')) '\plugins\dipfit\standard_BESA\standard-10-5-cap385.elp'],'rplurchanloc',[1]); %make sure you put here the location of this file for your computer EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_info.set'],'filepath', data_path); + %looking for bridged channel + if strcmpi(individual_plots,'yes') + EEG=plotting_bridged_channels(EEG, data_path); %plotting the location of bridged chan + end + close all %deleting bad channels %EEG = pop_rejchan(EEG,'elec', [1:64],'threshold',5,'norm','on','measure','kurt'); EEG = pop_select( EEG, 'nochannel',{'EXG1','EXG2','EXG3','EXG4','EXG5','EXG6','EXG7','EXG8'}); @@ -56,7 +55,7 @@ end EEG.deleteddata_wboundries=100-EEG.pnts/old_samples*100; elseif EEG.nbchan >159 && EEG.nbchan < 191 %160chan cap - EEG=pop_chanedit(EEG, 'lookup',[scripts_location 'BioSemi160.sfp']); %make sure you put here the location of this file for your computer + EEG=pop_chanedit(EEG, 'lookup',[[fileparts(matlab.desktop.editor.getActiveFilename),filesep] 'BioSemi160.sfp']); %make sure you put here the location of this file for your computer EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_info.set'],'filepath', data_path); %deleting bad channels %EEG = pop_rejchan(EEG,'elec', [1:160],'threshold',5,'norm','on','measure','kurt'); @@ -68,15 +67,8 @@ end EEG.deleteddata_wboundries=100-EEG.pnts/old_samples*100; end - disp([num2str(EEG.deleteddata_wboundries) '% of the data got deleted for this participant']); + disp([num2str(EEG.deleteddata_wboundries) '% of the data got deleted for this participant']); avg_deleted_data(s)=EEG.deleteddata_wboundries; - - - %% creating figures with deleted and bridged channels - if strcmpi(individual_plots,'yes') - EEG=plot_deleted_chan_location(EEG,data_path); %plotting the location of deleted chan - end - EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); - + EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); end disp(['on averages ' num2str(sum(avg_deleted_data)/length(subject_list)) ' % of the data got deleted']); diff --git a/testing/scripts/C_manual_check.m b/testing/scripts/C_manual_check.m index 872cf1d..5031c56 100644 --- a/testing/scripts/C_manual_check.m +++ b/testing/scripts/C_manual_check.m @@ -3,6 +3,8 @@ % ------------------------------------------------ subject_list = {'some sort of ID' 'a different id for a different particpant'}; home_path = 'the main folder where you store your data'; + +group_del_channel=[]; %needed for the plot_group_deleted_chan_location function for s=1:length(subject_list) clear bad_chan; fprintf('\n******\nProcessing subject %s\n******\n\n', subject_list{s}); @@ -12,8 +14,17 @@ prompt = 'Delete channels? If yes, input them all as strings inside {}. If none hit enter '; bad_chan = input(prompt); % if isempty(bad_chan) ~=1 - EEG = pop_select( EEG, 'nochannel',bad_chan); - EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); + EEG = pop_select( EEG, 'nochannel',bad_chan); + EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_exchn.set'],'filepath', data_path); end close all + + %% creating figures with deleted and bridged channels + EEG=plot_deleted_chan_location(EEG,data_path); %plotting the location of deleted chan + % plotting a topoplot with how many channels get for everyone + [EEG, group_del_channel]=plot_group_deleted_chan_location(EEG,group_del_channel,home_path); +%% group quality info, ID / % deleted data / seconds of data left / N - deleted channels + quality(s,:)=[str2double(subject_list{s}), EEG.deleteddata_wboundries,round(EEG.xmax), length(EEG.del_chan)]; end +load([home_path 'participant_info']) %so we can add +save([home_path 'participant_info'], 'participant_badchan', 'quality'); diff --git a/testing/scripts/D_reref_exclextrn_interp_avgref_ica_autoexcom.m b/testing/scripts/D_reref_exclextrn_interp_avgref_ica_autoexcom.m index 1cf9107..f363603 100644 --- a/testing/scripts/D_reref_exclextrn_interp_avgref_ica_autoexcom.m +++ b/testing/scripts/D_reref_exclextrn_interp_avgref_ica_autoexcom.m @@ -9,8 +9,8 @@ clear variables eeglab %% Subject info for each script -subject_list = {'6209' '6239' '8103' '8110' '8110-01' '8113' '8117' '8119' '8121' '8121-01' '8128' '8128-01'}; %all the IDs for the indivual particpants -home_path = 'C:\Users\dohorsth\Desktop\cued-boss\'; %place data is (something like 'C:\data\') +subject_list = {'some sort of ID' 'a different id for a different particpant'}; +home_path = 'the main folder where you store your data'; %% info needed for this script specific components = num2cell(zeros(length(subject_list), 8)); %prealocationg space for speed refchan = { }; %if you want to re-ref to a channel add the name of the channel here, if empty won't re-ref to any specific channel (for example {'EXG3' 'EXG4'} or {'Cz'}) @@ -95,27 +95,6 @@ pop_topoplot(EEG, 0, 1:size(EEG.icaweights,1) ,subject_list{s},[ceil(sqrt(size(EEG.icaweights,1))) ceil(sqrt(size(EEG.icaweights,1)))] ,0,'electrodes','on'); print([data_path subject_list{s} '_remaining_ICs_topos'], '-dpng' ,'-r300'); close all - %putting both figures in 1 plot saving it, deleting the other 2. - figure('units','normalized','outerposition',[0 0 1 1]) - if EEG.nbchan<65 - subplot(1,5,1); - else - subplot(1,10,1); - end - imshow([data_path subject_list{s} '_Bad_ICs_topos.png']); - title('Deleted components') - if EEG.nbchan<65 - subplot(1,5,2:5); - else - subplot(1,10,2:10); - end - imshow([data_path subject_list{s} '_remaining_ICs_topos.png']); - title('Remaining components') - print([data_path subject_list{s} '_ICs_topos'], '-dpng' ,'-r300'); - %deleting two original files - delete([data_path subject_list{s} '_Bad_ICs_topos.png']) - delete([data_path subject_list{s} '_remaining_ICs_topos.png']) - close all EEG = pop_saveset( EEG, 'filename',[subject_list{s} '_excom.set'],'filepath', data_path);%save %this part saves all the bad channels + ID numbers lables_del = setdiff(labels_all,labels_good); %only stores the deleted channels diff --git a/testing/scripts/E_epoching.m b/testing/scripts/E_epoching.m index c4cc90a..0215039 100644 --- a/testing/scripts/E_epoching.m +++ b/testing/scripts/E_epoching.m @@ -7,8 +7,8 @@ clear variables eeglab %% Subject info for each script -subject_list = {'6209' '6239' '8103' '8110' '8110-01' '8113' '8117' '8119' '8121' '8121-01' '8128' '8128-01'}; %all the IDs for the indivual particpants -home_path = 'C:\Users\dohorsth\Desktop\cued-boss\'; %place data is (something like 'C:\data\') +subject_list = {'some sort of ID' 'a different id for a different particpant'}; +home_path = 'the main folder where you store your data'; %place data is (something like 'C:\data\') %% info needed for this script specific name_paradigm = 'cued_boss'; % this is needed for saving the table at the end %participant_info_temp = []; % needed for creating matrix at the end diff --git a/testing/scripts/functions/plot_deleted_chan_location.m b/testing/scripts/functions/plot_deleted_chan_location.m index 982e57f..45e76c9 100644 --- a/testing/scripts/functions/plot_deleted_chan_location.m +++ b/testing/scripts/functions/plot_deleted_chan_location.m @@ -22,6 +22,8 @@ else figure; topoplot([],EEG.del_chan, 'style', 'fill', 'electrodes', 'labelpoint', 'chaninfo', EEG.chaninfo); end -print([save_path EEG.subject '_deleted_channels'], '-dpng' ,'-r300'); + + saveas(gcf,[save_path EEG.subject '_deleted_channels']) + close all end \ No newline at end of file diff --git a/testing/scripts/functions/plotting_bridged_channels.m b/testing/scripts/functions/plotting_bridged_channels.m index b2a6078..001da1b 100644 --- a/testing/scripts/functions/plotting_bridged_channels.m +++ b/testing/scripts/functions/plotting_bridged_channels.m @@ -32,7 +32,7 @@ else bridge.Bridged.Labels=strjoin(bridge.Bridged.Labels); end -print([save_path EEG_temp.subject '_bridged_channels'], '-dpng' ,'-r300'); +saveas(gcf,[save_path EEG_temp.subject '_bridged_channels']) close all EEG.bridged=EEG_temp.bridged; end \ No newline at end of file diff --git a/testing/scripts/functions/readme_to_EEG.m b/testing/scripts/functions/readme_to_EEG.m index 1ac4ff7..cf9a87a 100644 --- a/testing/scripts/functions/readme_to_EEG.m +++ b/testing/scripts/functions/readme_to_EEG.m @@ -172,6 +172,8 @@ end end Medication=med_temp_2; %Notes are now 80chr but with enters at the end so it still fits + elseif strcmpi(Medication,"") + Medication='Medication: not filled out'; end else % Medication=['Medication: ',Medication];