diff --git a/README.md b/README.md index 23ca757..5a03be9 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ git clone https://github.com/arnodelorme/roiconnect.git ``` That's it! If you want to run the plugin, please start [EEGLAB](https://github.com/sccn/eeglab#to-use-eeglab) first. You may need to add EEGLAB to the [MATLAB path](https://de.mathworks.com/help/matlab/ref/addpath.html). +📌 `test_pipes/` includes some test pipelines which can be used to get started. + # Key features The features of the toolbox are implemented in the following three main functions: `pop_roi_activity`, `pop_roi_connect` and `pop_roi_connectplot`. @@ -66,12 +68,12 @@ The function computes all FC metrics in a frequency-resolved way, i.e., the outp You can visualize power and FC in different modes by calling `pop_roi_connectplot`. Below, we show results of a single subject from the real data example in [[1]](#1). You can find the MATLAB code and corresponding analyses [here](https://github.com/fpellegrini/MotorImag). The plots show power or FC in left motor imagery condition. Due to the nature of the task, we show results in the 8 to 13 Hz frequency band but you are free to choose any frequency or frequency band you want. :pushpin: If any of the images are too small for you, simply click on them, they will open in full size in another tab.
-:round_pushpin: Plotting is particularly optimized for PSD, MIM/MIC and GC/TRGC. The matrix plots are only available for the Desikan-Killiany atlas (68 ROIs). We are currently working on a generalized solution for all atlases. +:round_pushpin: Plotting is particularly optimized for PSD, MIM/MIC and GC/TRGC. ### Power as a region-wise bar plot If you wish to visualize power as a barplot only, please make sure to explicitely turn `plotcortex` off because it is turned on by default. ```matlab -EEG = pop_roi_connectplot(EEG, 'measure', 'roipsd', 'plotcortex', 'off', 'plotbarplot', on, 'freqrange', [8 13]) % alpha band; +EEG = pop_roi_connectplot(EEG, 'measure', 'roipsd', 'plotcortex', 'off', 'plotbarplot', 'on', 'freqrange', [8 13]) % alpha band; ```

@@ -93,7 +95,7 @@ Again, if you do not wish to see the cortex plot, you should explicitely turn `p EEG = pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'freqrange', [8 13]); ```

- +    

@@ -103,17 +105,17 @@ pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'o ```

- +    

You can additionally filter by hemispheres and regions belonging to specific brain lobes. As an example, let us see how FC of the left hemisphere looks like. ```matlab -pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'freqrange', [8 13], 'hemisphere', 'left') % left hemisphere, left motor imagery; +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'freqrange', [8 13], 'hemisphere', 'left'); ```

- +    

diff --git a/pop_roi_connectplot.m b/pop_roi_connectplot.m index 109b664..7bf7a91 100644 --- a/pop_roi_connectplot.m +++ b/pop_roi_connectplot.m @@ -416,13 +416,14 @@ % plot on matrix if strcmpi(g.plotmatrix, 'on') && ~isempty(matrix) - matrix = matrix.*seedMask; - try - roi_plotcoloredlobes(EEG, matrix, titleStr, g.measure, g.hemisphere, g.grouphemispheres, g.region); - catch - warning('Functionalities only available for the Desikan-Killiany atlas (68 ROIs).') - figure; imagesc(matrix); - end + matrix = matrix.*seedMask; + roi_plotcoloredlobes(EEG, matrix, titleStr, g.measure, g.hemisphere, g.grouphemispheres, g.region); +% try +% roi_plotcoloredlobes(EEG, matrix, titleStr, g.measure, g.hemisphere, g.grouphemispheres, g.region); +% catch +% warning('Functionalities only available for the Desikan-Killiany atlas (68 ROIs).') +% figure; imagesc(matrix); +% end end % plot on cortical surface @@ -440,6 +441,8 @@ end h = textsc(cortexTitle, 'title'); set(h, 'fontsize', 20); + elseif cortexFlag == -1 + warning('EEG.roi.cortex does not contain the field "Faces" required to plot surface topographies.') end % plot 3D @@ -477,15 +480,24 @@ end end -function [colors, color_idxx, roi_idxx, labels_dk_cell_idx, roi_loc] = get_colored_labels(EEG) - % retrieve labels from atlas +function labels = get_labels(EEG) +% retrieve labels from atlas labels = strings(1,length(EEG.roi.atlas.Scouts)); for i = 1:length(labels) scout = struct2cell(EEG.roi.atlas.Scouts(i)); labels(i) = char(scout(1)); end labels = cellstr(labels); - +end + +function new_labels = replace_underscores(labels) + % remove underscores in label names to avoid bug + new_labels = strrep(labels, '_', ' '); +end + +function [colors, color_idxx, roi_idxx, labels_sorted, roi_loc] = get_colored_labels(EEG) + labels = get_labels(EEG); + colors = {[0,0,0]/255, [163, 107, 64]/255, [171, 163, 71]/255, [217, 37, 88]/255, [113, 15, 82]/255,[35, 103, 81]/255,[2, 45, 126]/255,}; % assign labels to colors roi_loc ={'LT';'RT';'LL';'RL';'LF';'RF';'LO';'RO';'LT';'RT';'LPF';'RPF';'LT';'RT';'LP';'RP';'LT';'RT';'LT';'RT';'LL';'RL';'LO';'RO';'LPF';'RPF';'LO';'RO';'LPF';'RPF';'LT';'RT';'LC';'RC';'LT';'RT';'LF';'RF';'LPF';'RPF';'LF';'RF';'LO';'RO';'LC';'RC';'LL';'RL';'LC';'RC';'LP';'RP';'LL';'RL';'LF';'RF';'LF';'RF';'LP';'RP';'LT';'RT';'LP';'RP';'LT';'RT';'LT';'RT'}; @@ -502,21 +514,21 @@ roi_loc = strrep(roi_loc, 'R', ''); try [color_idxx,roi_idxx] = sort(str2double(roi_loc)); - labels_dk_cell_idx = labels(roi_idxx); + labels_sorted = labels(roi_idxx); catch roi_idxx = 1:length(labels); color_idxx = mod(roi_idxx, length(colors))+1; - labels_dk_cell_idx = labels; + labels_sorted = labels; end end function roi_plotpower(EEG, source_roi_power_norm_dB, titleStr) - [colors, color_idxx, roi_idxx, labels_dk_cell_idx, ~] = get_colored_labels(EEG); - n_roi_labels = size(labels_dk_cell_idx, 2); + [colors, color_idxx, roi_idxx, labels_sorted, ~] = get_colored_labels(EEG); + n_roi_labels = size(labels_sorted, 2); barh(source_roi_power_norm_dB(roi_idxx)); set(gca, 'YDir', 'reverse'); - set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_dk_cell_idx(1:end), 'fontweight','bold','fontsize', 9, 'TickLength',[0.015, 0.02], 'LineWidth',0.7); + set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_sorted(1:end), 'fontweight','bold','fontsize', 9, 'TickLength',[0.015, 0.02], 'LineWidth',0.7); h = title([ 'ROI source power' ' (' titleStr ')' ]); set(h, 'fontsize', 16); ylabel('power [dB]') @@ -542,7 +554,7 @@ function roi_plotcoloredlobes( EEG, matrix, titleStr, measure, hemisphere, group error('Region plotting is only supported for the Desikan-Killiany atlas.'); end - % plot matrix with colored labels sorted by region according to the Desikan-Killiany atlas + % plot matrix with colored labels load cm18 switch lower(measure) case {'mim', 'mic', 'coh'} @@ -550,35 +562,54 @@ function roi_plotcoloredlobes( EEG, matrix, titleStr, measure, hemisphere, group otherwise cmap = cm18; end - [colors, color_idxx, roi_idxx, labels_dk_cell_idx, roi_loc] = get_colored_labels(EEG); - clim_min = min(matrix, [], 'all'); clim_max = max(matrix, [], 'all'); - - % assign region input to an index - [GC, GR] = groupcounts(roi_loc); - switch lower(region) - case 'cingulate' - region_idx = 1; - case 'prefrontal' - region_idx = 2; - case 'frontal' - region_idx = 3; - case 'temporal' - region_idx = 4; - case 'parietal' - region_idx = 5; - case 'central' - region_idx = 6; - case 'occipital' - region_idx = 7; - otherwise - region_idx = 99; + + % hemisphere parameters to determine which labels to use + last_char = EEG.roi.atlas.Scouts(1).Label(end); + if strcmpi(hemisphere, 'left') + if strcmpi(last_char, 'R') + hem_idx = {2 2 2}; % use labels 2:2:end (first two values), only use 1/2 of the labels (3rd value) + else + hem_idx = {1 2 2}; % use labels 1:2:end (first two values), only use 1/2 of the labels (3rd value) + end + elseif strcmpi(hemisphere, 'right') + if strcmpi(last_char, 'L') + hem_idx = {1 2 2}; + else + hem_idx = {2 2 2}; + end + else + hem_idx = {1 1 1}; end % sort matrix according to color scheme % reduce matrix to only keep components corresponding to selected region if isDKatlas == 1 + [colors, color_idxx, roi_idxx, labels_sorted, roi_loc] = get_colored_labels(EEG); + labels = labels_sorted; + + % assign region input to an index + [GC, ~] = groupcounts(roi_loc); + switch lower(region) + case 'cingulate' + region_idx = 1; + case 'prefrontal' + region_idx = 2; + case 'frontal' + region_idx = 3; + case 'temporal' + region_idx = 4; + case 'parietal' + region_idx = 5; + case 'central' + region_idx = 6; + case 'occipital' + region_idx = 7; + otherwise + region_idx = 99; + end + matrix = matrix(roi_idxx, roi_idxx); if not(region_idx == 99) if region_idx == 1 @@ -588,44 +619,40 @@ function roi_plotcoloredlobes( EEG, matrix, titleStr, measure, hemisphere, group end end_idx = start_idx + GC(region_idx) - 1; matrix = matrix(start_idx:end_idx, start_idx:end_idx); - labels_dk_cell_idx = labels_dk_cell_idx(start_idx:end_idx); + labels = labels(start_idx:end_idx); color_idxx = color_idxx(start_idx:end_idx); end n_roi_labels = size(matrix, 1); - end - - % hemisphere parameters to determine which labels to use - if strcmpi(hemisphere, 'left') - hem_idx = {1 2 2}; % use labels 1:2:end (first two values), only use 1/2 of the labels (3rd value) - elseif strcmpi(hemisphere, 'right') - hem_idx = {2 2 2}; % use labels 2:2:end (first two values), only use 1/2 of the labels (3rd value) else - hem_idx = {1 1 1}; % use labels 1:1:end (first two values, all labels), use 1/1 of the labels (3rd value, all labels) + labels = get_labels(EEG); end + % remove underscores in labels to avoid plotting bug + labels = replace_underscores(labels); + % create dummy plot and add custom legend f = figure(); %f.WindowState = 'maximized'; hold on n_dummy_labels = 7; x = 1:10; - for k=1:n_dummy_labels - plot(x, x*k, '-', 'LineWidth', 9, 'Color', colors{k}); - end % labels on dummy plot for positioning xlim([0 n_roi_labels]) ylim([0 n_roi_labels]) - set(gca,'xtick',[1:n_roi_labels],'xticklabel',labels_dk_cell_idx(hem_idx{1}:hem_idx{2}:n_roi_labels));%, 'TickLabelInterpreter','none'); + set(gca,'xtick',1:n_roi_labels,'xticklabel',labels(hem_idx{1}:hem_idx{2}:n_roi_labels));%, 'TickLabelInterpreter','none'); ax = gca; - for i=hem_idx{1}:hem_idx{2}:n_roi_labels - ax.XTickLabel{ceil(i/hem_idx{3})} = sprintf('\\color[rgb]{%f,%f,%f}%s', colors{color_idxx(i)}, ax.XTickLabel{ceil(i/2)}); - end - xtickangle(90) - pos = get(gca, 'Position'); if isDKatlas == 1 + for k=1:n_dummy_labels + plot(x, x*k, '-', 'LineWidth', 9, 'Color', colors{k}); + end + for i=hem_idx{1}:hem_idx{2}:n_roi_labels + ax.XTickLabel{ceil(i/hem_idx{3})} = sprintf('\\color[rgb]{%f,%f,%f}%s', colors{color_idxx(i)}, ax.XTickLabel{ceil(i/2)}); + end legend('Cingulate', 'Prefrontal', 'Frontal', 'Temporal', 'Parietal', 'Central', 'Occipital', 'Location', 'southeastoutside'); % modify legend position end + xtickangle(90) + pos = get(gca, 'Position'); set(gca, 'Position', pos, 'DataAspectRatio',[1 1 1], 'visible', 'off') axes('pos', [pos(1) pos(2) pos(3) pos(4)]) % plot matrix over the dummy plot and keep the legend @@ -640,14 +667,20 @@ function roi_plotcoloredlobes( EEG, matrix, titleStr, measure, hemisphere, group matrix = horzcat(mat_left_col, mat_right_col); % sort columns % sort labels - lc = {labels_dk_cell_idx; transpose(color_idxx)}; - for i = 1:length(lc) - left = lc{i}(1:2:end); - right = lc{i}(2:2:end); - lc{i} = [left right]; + try % if color can be assigned + lc = {labels; transpose(color_idxx)}; + for i = 1:length(lc) + left = lc{i}(1:2:end); + right = lc{i}(2:2:end); + lc{i} = [left right]; + end + labels = lc{1}; + color_idxx = transpose(lc{2}); + catch + left = labels(1:2:end); + right = labels(2:2:end); + labels = [left right]; end - labels_dk_cell_idx = lc{1}; - color_idxx = transpose(lc{2}); end % reduce matrix to keep only one hemisphere @@ -677,16 +710,16 @@ function roi_plotcoloredlobes( EEG, matrix, titleStr, measure, hemisphere, group set(gca, 'Position', pos, 'DataAspectRatio',[1 1 1], 'visible', 'on') % add colored labels with display option + ax = gca; + set(gca,'xtick',1:n_roi_labels,'xticklabel',labels(hem_idx{1}:hem_idx{2}:n_roi_labels)); if isDKatlas == 1 - set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_dk_cell_idx(hem_idx{1}:hem_idx{2}:n_roi_labels), 'fontweight','bold', 'fontsize', 9, 'TickLength',[0.015, 0.02], 'LineWidth',0.75); + set(gca,'ytick',1:n_roi_labels,'yticklabel',labels(hem_idx{1}:hem_idx{2}:n_roi_labels), 'fontsize', 9, 'TickLength',[0.015, 0.02], 'LineWidth',0.75); + for i=hem_idx{1}:hem_idx{2}:n_roi_labels + ax.XTickLabel{ceil(i/hem_idx{3})} = sprintf('\\color[rgb]{%f,%f,%f}%s', colors{color_idxx(i)}, ax.XTickLabel{ceil(i/hem_idx{3})}); + ax.YTickLabel{ceil(i/hem_idx{3})} = sprintf('\\color[rgb]{%f,%f,%f}%s', colors{color_idxx(i)}, ax.YTickLabel{ceil(i/hem_idx{3})}); + end else - set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_dk_cell_idx(hem_idx{1}:hem_idx{2}:n_roi_labels), 'fontsize', 7, 'TickLength',[0.015, 0.02], 'LineWidth',0.75); - end - set(gca,'xtick',[1:n_roi_labels],'xticklabel',labels_dk_cell_idx(hem_idx{1}:hem_idx{2}:n_roi_labels)); - ax = gca; - for i=hem_idx{1}:hem_idx{2}:n_roi_labels - ax.XTickLabel{ceil(i/hem_idx{3})} = sprintf('\\color[rgb]{%f,%f,%f}%s', colors{color_idxx(i)}, ax.XTickLabel{ceil(i/hem_idx{3})}); - ax.YTickLabel{ceil(i/hem_idx{3})} = sprintf('\\color[rgb]{%f,%f,%f}%s', colors{color_idxx(i)}, ax.YTickLabel{ceil(i/hem_idx{3})}); + set(gca,'ytick',1:n_roi_labels,'yticklabel',labels(hem_idx{1}:hem_idx{2}:n_roi_labels), 'fontsize', 7, 'TickLength',[0.015, 0.02], 'LineWidth',0.75); end h = title([ 'ROI to ROI ' upper(measure) ' (' titleStr ')' ]); set(h, 'fontsize', 16); @@ -696,8 +729,8 @@ function roi_plotcoloredlobes( EEG, matrix, titleStr, measure, hemisphere, group function roi_largeplot(EEG, mim, trgc, roipsd, titleStr) % plot MIM, TRGC and power (barplot) in a single large figure load cm18 - [colors, color_idxx, roi_idxx, labels_dk_cell_idx, ~] = get_colored_labels(EEG); - n_roi_labels = size(labels_dk_cell_idx, 2); + [colors, color_idxx, roi_idxx, labels_sorted, ~] = get_colored_labels(EEG); + n_roi_labels = size(labels_sorted, 2); f = figure(); f.WindowState = 'maximized'; @@ -713,8 +746,8 @@ function roi_largeplot(EEG, mim, trgc, roipsd, titleStr) img_sorted = img(roi_idxx, roi_idxx); imagesc(img_sorted) - set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_dk_cell_idx(1:end), 'fontsize', 5, 'TickLength',[0.015, 0.02], 'LineWidth',0.75); - set(gca,'xtick',[1:n_roi_labels],'xticklabel',labels_dk_cell_idx(1:end)); + set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_sorted(1:end), 'fontsize', 5, 'TickLength',[0.015, 0.02], 'LineWidth',0.75); + set(gca,'xtick',[1:n_roi_labels],'xticklabel',labels_sorted(1:end)); h = title([ 'ROI to ROI ' fc_names{k} ' (' titleStr ')' ]); set(h, 'fontsize', 16); hcb = colorbar; @@ -735,7 +768,7 @@ function roi_largeplot(EEG, mim, trgc, roipsd, titleStr) barh(roipsd(roi_idxx)); set(gca, 'YDir', 'reverse'); - set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_dk_cell_idx(1:end), 'fontweight','bold','fontsize', 9, 'TickLength',[0.015, 0.02], 'LineWidth',0.7); + set(gca,'ytick',[1:n_roi_labels],'yticklabel',labels_sorted(1:end), 'fontsize', 9, 'TickLength',[0.015, 0.02], 'LineWidth',0.7); h = title([ 'ROI source power' ' (' titleStr ')' ]); set(h, 'fontsize', 16); ylabel('power [dB]') diff --git a/resources/FC_MIM_matrix.png b/resources/FC_MIM_matrix.png new file mode 100644 index 0000000..9c4495c Binary files /dev/null and b/resources/FC_MIM_matrix.png differ diff --git a/resources/FC_MIM_matrix_groupedhems.png b/resources/FC_MIM_matrix_groupedhems.png new file mode 100644 index 0000000..02b233c Binary files /dev/null and b/resources/FC_MIM_matrix_groupedhems.png differ diff --git a/resources/FC_MIM_matrix_left.png b/resources/FC_MIM_matrix_left.png new file mode 100644 index 0000000..4ea9399 Binary files /dev/null and b/resources/FC_MIM_matrix_left.png differ diff --git a/pipeline_connectivity.m b/test_pipes/pipeline_connectivity.m similarity index 96% rename from pipeline_connectivity.m rename to test_pipes/pipeline_connectivity.m index 2fe5d0e..a4b5159 100644 --- a/pipeline_connectivity.m +++ b/test_pipes/pipeline_connectivity.m @@ -46,6 +46,4 @@ tic EEG = pop_roi_connect(EEG, 'methods', measures(iMeasure)); t(iMeasure) = toc; -end - -pop_roi_connectplot(EEG, 'measure', 'MIM', 'plotmatrix', 'on', 'plotcortex', 'on'); \ No newline at end of file +end \ No newline at end of file diff --git a/test_pipes/test_brainplots_dkatlas.m b/test_pipes/test_brainplots_dkatlas.m new file mode 100644 index 0000000..247ddc3 --- /dev/null +++ b/test_pipes/test_brainplots_dkatlas.m @@ -0,0 +1,33 @@ +% Test cortical surface topographies with different parameters. Here, the Desikan-Killiany atlas with 68 ROIs is used as the source model. +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 1.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'functions','supportfiles','head_modelColin27_5003_Standard-10-5-Cap339.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','LORETA-Talairach-BAs','nPCA',3); +EEG = pop_roi_connect(EEG, 'methods', {'MIM'}); + +%% Plot brain plot with different parameters +% brain plot without any filters +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'on'); + +% frequency band specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'on', 'freqrange', [8 13]); + +% seed voxel specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'on', 'plotcortexseedregion', 49); \ No newline at end of file diff --git a/test_pipes/test_brainplots_loretaatlas.m b/test_pipes/test_brainplots_loretaatlas.m new file mode 100644 index 0000000..7c9a490 --- /dev/null +++ b/test_pipes/test_brainplots_loretaatlas.m @@ -0,0 +1,33 @@ +% Test cortical surface topographies with different parameters. Here, the LORETA-Talairach-BAs atlas with 90 ROIs is used as the source model. +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 1.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'plugins','dipfit','LORETA-Talairach-BAs.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','LORETA-Talairach-BAs','nPCA',3); +EEG = pop_roi_connect(EEG, 'methods', {'MIM'}); + +%% Plot brain plot with different parameters +% brain plot without any filters +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'on'); + +% frequency band specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'on', 'freqrange', [8 13]); + +% seed voxel specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'on', 'plotcortexseedregion', 49); \ No newline at end of file diff --git a/test_pipes/test_flex_epochlength.m b/test_pipes/test_flex_epochlength.m new file mode 100644 index 0000000..ca06458 --- /dev/null +++ b/test_pipes/test_flex_epochlength.m @@ -0,0 +1,31 @@ +% Test pipeline with an epoch length other than 2 seconds (test with 1 second epoch length). +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 0.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'functions','supportfiles','head_modelColin27_5003_Standard-10-5-Cap339.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','LORETA-Talairach-BAs','nPCA',1); + +measures = { 'MIM' 'wPLI' }; +for iMeasure = 1:length(measures) + tic + EEG = pop_roi_connect(EEG, 'methods', measures(iMeasure)); + t(iMeasure) = toc; +end + + diff --git a/test_pipes/test_largebarplot_dkatlas.m b/test_pipes/test_largebarplot_dkatlas.m new file mode 100644 index 0000000..a9b177f --- /dev/null +++ b/test_pipes/test_largebarplot_dkatlas.m @@ -0,0 +1,27 @@ +% Test region-to-region power bar plot. Here, the Desikan-Killiany atlas with 68 ROIs is used as the source model. +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 1.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'functions','supportfiles','head_modelColin27_5003_Standard-10-5-Cap339.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','LORETA-Talairach-BAs','nPCA',3); +EEG = pop_roi_connect(EEG, 'methods', {'MIM', 'TRGC'}); + +%% Plot barplot +% plot barplot with specified frequency band +EEG = pop_roi_connectplot(EEG, 'measure', 'roipsd', 'plotcortex', 'off', 'plotbarplot', 'on', 'freqrange', [4 8]); \ No newline at end of file diff --git a/test_pipes/test_matrixplots_brainregions.m b/test_pipes/test_matrixplots_brainregions.m new file mode 100644 index 0000000..39b89a2 --- /dev/null +++ b/test_pipes/test_matrixplots_brainregions.m @@ -0,0 +1,45 @@ +% Test region-to-region FC matrices (MIM) with different parameters. Here, the grouped LORETA-Talairach-BAs ('Brain-Regions') atlas with 34 ROIs is used as the source model. +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 1.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'plugins','dipfit','LORETA-Talairach-BAs.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','Brain-Regions','nPCA',3); +EEG = pop_roi_connect(EEG, 'methods', {'MIM'}); + +%% Plot matrix with different parameters +% matrix without any filters +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on'); + +% group by hemispheres +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'grouphemispheres', 'on'); + +% frequency band specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'freqrange', [4 8]'); + +% hemisphere specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'hemisphere', 'right'); + +% cortical region specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'region', 'occipital'); + + + + + + diff --git a/test_pipes/test_matrixplots_dkatlas.m b/test_pipes/test_matrixplots_dkatlas.m new file mode 100644 index 0000000..c9ae221 --- /dev/null +++ b/test_pipes/test_matrixplots_dkatlas.m @@ -0,0 +1,45 @@ +% Test region-to-region FC matrices (MIM) with different parameters. Here, the Desikan-Killiany atlas with 68 ROIs is used as the source model. +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 1.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'functions','supportfiles','head_modelColin27_5003_Standard-10-5-Cap339.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','LORETA-Talairach-BAs','nPCA',3); +EEG = pop_roi_connect(EEG, 'methods', {'MIM'}); + +%% Plot matrix with different parameters +% matrix without any filters +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on'); + +% group by hemispheres +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'grouphemispheres', 'on'); + +% frequency band specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'freqrange', [4 8]'); + +% hemisphere specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'hemisphere', 'right'); + +% cortical region specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'region', 'occipital'); + + + + + + diff --git a/test_pipes/test_matrixplots_loretaatlas.m b/test_pipes/test_matrixplots_loretaatlas.m new file mode 100644 index 0000000..9ab5d24 --- /dev/null +++ b/test_pipes/test_matrixplots_loretaatlas.m @@ -0,0 +1,45 @@ +% Test region-to-region FC matrices (MIM) with different parameters. Here, the LORETA-Talairach-BAs atlas with 90 ROIs is used as the source model. +%% Run pipeline +clear +eeglab + +eeglabp = fileparts(which('eeglab.m')); +EEG = pop_loadset('filename','eeglab_data_epochs_ica.set','filepath',fullfile(eeglabp, 'sample_data/')); +EEG = pop_resample( EEG, 100); +EEG = pop_epoch( EEG, { }, [-0.5 1.5], 'newname', 'EEG Data epochs epochs', 'epochinfo', 'yes'); +EEG = pop_select( EEG, 'trial',1:30); +[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG); +eeglab redraw; + +EEG = pop_dipfit_settings( EEG, 'hdmfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_vol.mat'), ... + 'coordformat','MNI','mrifile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','standard_mri.mat'),... + 'chanfile',fullfile(eeglabp, 'plugins','dipfit','standard_BEM','elec', 'standard_1005.elc'),... + 'coord_transform',[0.83215 -15.6287 2.4114 0.081214 0.00093739 -1.5732 1.1742 1.0601 1.1485] ,'chansel',[1:32] ); + +EEG = pop_leadfield(EEG, 'sourcemodel',fullfile(eeglabp,'plugins','dipfit','LORETA-Talairach-BAs.mat'), ... + 'sourcemodel2mni',[0 -24 -45 0 0 -1.5708 1000 1000 1000] ,'downsample',1); + +EEG = pop_roi_activity(EEG, 'leadfield',EEG.dipfit.sourcemodel,'model','LCMV','modelparams',{0.05},'atlas','LORETA-Talairach-BAs','nPCA',3); +EEG = pop_roi_connect(EEG, 'methods', {'MIM'}); + +%% Plot matrix with different parameters +% matrix without any filters +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on'); + +% group by hemispheres +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'grouphemispheres', 'on'); + +% frequency band specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'freqrange', [4 8]'); + +% hemisphere specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'hemisphere', 'right'); + +% cortical region specified +pop_roi_connectplot(EEG, 'measure', 'mim', 'plotcortex', 'off', 'plotmatrix', 'on', 'region', 'occipital'); + + + + + +