I have to analyze some EEG data and I am trying to automatize the pre-processing procedure.
I have 40 participants. Every participants has 4 different files for 4 conditions.
So the files are saved as
1-1
1-2
1-3
1-4
2-1
2-2
2-3
2-4
...
up to 40-4
The files are from BioSemi (.bdf)
I have been able to automatize the pre-processing procedure, but every time I have to chose a different file, run the script, and save it.
I would like to run a for loop that does it all by itself (take 1-1, run the pre-processing, save, take 1-2...etc).
Following I am pasting what I've got so far.
I've been trying all day to write a for loop, but it is just not working.
I would really appreciate any help.
This is the current pre-processing script:
subject = '1-1.bdf'
%Open EEGLAB and inizialize several EEGLAB variables (listed in the output
%function
[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;
%Load a file
%EEG=pop_loadset; % pop up window to input arguments
EEG = pop_biosig(subject) %Reads in the dataset frin a BIOSEMI file
% Stores the dataset into EEGLAB
[ALLEEG EEG CURRENTSET ] = eeg_store(ALLEEG, EEG);
%Change sampling rate to 512
EEG = eeg_checkset( EEG );
EEG = pop_resample( EEG, 512);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, CURRENTSET); %save it as a new dataset
% Edit Channel Location
EEG = eeg_checkset( EEG );
EEG=pop_chanedit(EEG, 'lookup','D:\\Matlab\\eeglab_current\\eeglab13_5_4b\\plugins\\dipfit2.3\\standard_BESA\\standard-10-5-cap385.elp');
% Store the dataset into EEGLAB
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off');
% Add some comments
EEG.comments = pop_comments(EEG.comments,'','Sampling rate was changed to 512.',1);
% You can see the comments stored with the dataset either by typing >> EEG.comments or selecting the menu option Edit->About this dataset.
%Select Data. Remove EXG5:EXG8
EEG = eeg_checkset( EEG );
EEG = pop_select( EEG,'nochannel',{'EXG5' 'EXG6' 'EXG7' 'EXG8'});
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off');
%HighPassFilter 0.5
EEG = eeg_checkset( EEG );
EEG = pop_eegfilt( EEG, 0.5, 0, [], [0], 0, 0, 'fir1', 0);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off');
%LowPassFilter 50
EEG = eeg_checkset( EEG );
EEG = pop_eegfilt( EEG, 0, 50, [], [0], 0, 0, 'fir1', 0);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off');
%ReReference to 35 36 (EXG3. EXG4)
EEG = eeg_checkset( EEG );
EEG = pop_reref( EEG, [35 36] );
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off');
% Reject Continuous By Eye
EEG = eeg_checkset( EEG );
pop_eegplot( EEG, 1, 0, 1);
eeglab redraw % Update the EEGLAB window to view changes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Automatic Channel Rejection
EEG = eeg_checkset( EEG );
EEG = pop_rejchan(EEG, 'elec',[1:34] ,'threshold',5,'norm','on','measure','prob');
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off');
eeglab redraw % Update the EEGLAB window to view changes
Here's how you can access the filenames in a loop, so that you can run your MATLAB script. The simplest thing to do is put your .bdf files in a folder by themselves. Then write a function that wraps the functionality you want, like this:
A few comments:
I'm trying to be platform agnostic with the use of
filesep()
so this should work on linux / mac/ windows. If you're running the code in the same directory as the data files, you can certainly simplify thisMake sure you use curly braces
{}
when dereferencingsubject
. If you use the standard matlab array reference withsubject(1)
, then you will get a cell-array containing the filename string, instead of just the plain filename stringThe
dir()
command in MATLAB works just likedir
in windows, orls
in Linux, and you can use wildcards to get customized lists of files, likedir('1-*.bdf')
to only get a list of subject 1's data files