%% Data conversion
clc;clear;
data_root = 'E:\meditation\2\data\';
sub_names = dir(data_root);
sub_names = dir([data_root, filesep, '*.xdf']);
save_data='E:\meditation\2\data1\';
mkdir(save_data);
for i=1:length(sub_names)
    name=sub_names(i).name;
   
    EEG = pop_loadxdf([data_root,name], 'streamtype','EEG','effective_rate',1);
    EEG = eeg_checkset( EEG );
    
    EEG = eeg_checkset( EEG );
    EEG=pop_chanedit(EEG, 'lookup','D:\\matlab_toolbox\\eeglab_current\\eeglab2021.0\\plugins\\dipfit\\standard_BEM\\elec\\standard_1005.elc');
    EEG = eeg_checkset( EEG );
    EEG = pop_saveset( EEG, 'filename', name,'filepath',save_data);
end

 %% Filter bandpass: 0.1-100hz, depression: 48-52hz 
clc;clear;
data_root = 'E:\meditation\2\data1'; 
sub_names = dir([data_root, filesep, '*.set']);
save_data='E:\meditation\2\data2';
mkdir(save_data);
for i=1:length(sub_names)
sub_name = sub_names(i).name;
EEG = pop_loadset('filename',sub_name,'filepath',data_root);
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'hicutoff',100);
EEG = eeg_checkset( EEG );
EEG = pop_eegfiltnew(EEG, 'locutoff',48,'hicutoff',52,'revfilt',1,'plotfreqz',1);
EEG = eeg_checkset( EEG );   
EEG = pop_saveset( EEG, 'filename', sub_name,'filepath',save_data);
end

%%  Divided into the resting state and meditation
clc;clear;
data_root = 'E:\meditation\2\data2'; 
sub_names = dir([data_root, filesep, '*.set']);
save_data='E:\meditation\2\data3';
mkdir(save_data);
for i=1:length(sub_names)
sub_name = sub_names(i).name;
EEG = pop_loadset('filename',sub_name,'filepath',data_root);
EEG = pop_select( EEG, 'time',[mark_time(i,1) mark_time(i,2)] );
EEG = eeg_checkset( EEG );
new_name=[sub_name(1:end-4),'_rest','.set'];
EEG = pop_saveset( EEG, 'filename', new_name,'filepath',save_data);
clear EEG
EEG = pop_loadset('filename',sub_name,'filepath',data_root);
EEG = pop_select( EEG, 'time',[mark_time(i,3) mark_time(i,4)] );
EEG = eeg_checkset( EEG );
new_name1=[sub_name(1:end-4),'_meditation','.set'];
EEG = pop_saveset( EEG, 'filename', new_name1,'filepath',save_data);
end



%% Segment 2s a segment is convenient for preprocessing
clc;clear;
data_root = 'E:\meditation\2\data3'; 
sub_names = dir([data_root, filesep, '*.set']);
save_data='E:\meditation\2\data4';
mkdir(save_data);
for i=1:length(sub_names)
sub_name = sub_names(i).name;
EEG = pop_loadset('filename',sub_name,'filepath',data_root);
EEG = eeg_regepochs(EEG, 'recurrence', 2, 'limits',[0 2], 'rmbase',NaN);%Segment 2s 
EEG = eeg_checkset( EEG );
EEG = pop_saveset( EEG, 'filename', sub_name,'filepath',save_data);
end


%% Manually remove the bad segments and interpolate the bad leads
clear;clc
m =22;
data_root ='E:\meditation\2\data4';
save_path ='E:\meditation\2\data5';
mkdir(save_path)
cd(data_root)
a = dir('*.set');
b = {a.name};
%
setname = b{m};
eeglab
EEG = pop_loadset( 'filename',setname,'filepath',data_root);
close all
eeglab redraw 
pop_eegplot( EEG, 1, 1, 1);

%
EEG = pop_saveset( EEG, 'filename',setname,'filepath',save_path);
m = m + 1;
close all
%% Run ICA
clc;clear;
data_root = 'E:\meditation\2\data5'; 
sub_names = dir([data_root, filesep, '*.set']);
save_data='E:\meditation\2\data6';
mkdir(save_data);
parfor i=1:length(sub_names)
sub_name = sub_names(i).name;
EEG = pop_loadset('filename',sub_name,'filepath',data_root);
EEG = pop_runica(EEG, 'extended',1,'pca',30,'interupt','on');
EEG = eeg_checkset( EEG );
EEG = pop_saveset( EEG, 'filename', sub_name,'filepath',save_data);
end
 

%% ICA de-spoofing check data
clear;clc
m = 1;
data_root ='E:\meditation\2\data6';
save_path = 'E:\meditation\2\data7';
mkdir(save_path)
cd(data_root)
a = dir('*.set');
b = {a.name};
%
setname = b{m};
eeglab
EEG = pop_loadset( 'filename',setname,'filepath',data_root);
close all
eeglab redraw 
EEG = pop_iclabel(EEG, 'lite');
EEG = eeg_checkset( EEG )

%
EEG = pop_saveset( EEG, 'filename',setname,'filepath',save_path);
m = m + 1;
close all
%% Re-reference & Average whole brain
clc;clear;
data_root = 'E:\meditation\2\data7'; 
sub_names = dir([data_root, filesep, '*.set']);
save_data='E:\meditation\2\data8';
mkdir(save_data);
parfor i=1:length(sub_names)
sub_name = sub_names(i).name;
EEG = pop_loadset('filename',sub_name,'filepath',data_root);
EEG = pop_reref( EEG, []);
EEG = eeg_checkset( EEG );
EEG = pop_saveset( EEG, 'filename', sub_name,'filepath',save_data);
end

