📄 bfm_plot_datamatcorrs.m
字号:
img_file = [pathname, filesep, filename];
if isequal(filename,0)
return;
end;
% load the result file
%
load(PLSresultFile,'st_dims','st_win_size','st_coords', ...
'st_voxel_size','st_origin');
dims = st_dims([1 2 4]);
newcoords = st_coords;
blv = getappdata(gcbf,'BLVData');
brainlv = blv{grp_idx, behav_idx};
% save background to img
%
brainlv = brainlv(:,lv_idx);
bs = getappdata(gcbf,'BSRatio');
h = findobj(gcf,'Tag','BSLVIndexEdit'); bs_lv_idx = str2num(get(h,'String'));
h = findobj(gcf,'Tag','BSThreshold'); bs_thresh = str2num(get(h,'String'));
bs = bs(:, bs_lv_idx);
bs_strong = zeros(size(bs));
bs_idx = [find(bs <=- bs_thresh); find(bs >= bs_thresh)];
bs_strong(bs_idx) = 1;
brainlv = brainlv .* bs_strong;
bg_img = getappdata(gcf,'BackgroundImg');
cmap = getappdata(gcf,'cmap');
num_blv_colors = 25;
brain_region_color_idx = 51;
first_lower_color_idx = 101;
first_upper_color_idx = 126;
h = findobj(gcf,'Tag','MaxValue'); max_blv = str2num(get(h,'String'));
h = findobj(gcf,'Tag','MinValue'); min_blv = str2num(get(h,'String'));
too_large = find(brainlv > max_blv); brainlv(too_large) = max_blv;
too_small = find(brainlv < min_blv); brainlv(too_small) = min_blv;
% Create the image slices in which voxels are set to be within certain range
%
lower_interval = (abs(min_blv) - thresh_ratio) / (num_blv_colors-1);
upper_interval = (max_blv - thresh_ratio) / (num_blv_colors-1);
blv = zeros(1,length(newcoords)) + brain_region_color_idx;
lower_idx = find(brainlv <= -thresh_ratio);
blv_offset = brainlv(lower_idx) - min_blv;
lower_color_idx = round(blv_offset/lower_interval)+first_lower_color_idx;
blv(lower_idx) = lower_color_idx;
upper_idx = find(brainlv >= thresh_ratio);
blv_offset = max_blv - brainlv(upper_idx);
upper_color_idx = num_blv_colors - round(blv_offset/upper_interval);
upper_color_idx = upper_color_idx + first_upper_color_idx - 1;
blv(upper_idx) = upper_color_idx;
if isempty(bg_img)
non_brain_region_color_idx = size(cmap,1);
img = zeros(1,dims(1)*dims(2)*dims(3)) + non_brain_region_color_idx;
img(newcoords) = blv;
img = reshape(img,dims);
else
max_bg = max(bg_img(:));
min_bg = min(bg_img(:));
img = (bg_img - min_bg) / (max_bg - min_bg) * 100;
img(newcoords(lower_idx)) = blv(lower_idx);
img(newcoords(upper_idx)) = blv(upper_idx);
img = reshape(img,dims);
end
% img = zeros(dims);
% blv = brainlv(1,lv_idx);
% blv(abs(blv) < thresh_ratio) = 0;
% img(st_coords) = blv;
descrip = sprintf('DatamatCorrelation from %s, Group: %d, Condition: %d, Behavior: %d, Threshold: %8.5f', ...
PLSresultFile,grp_idx,lv_idx,behav_idx,thresh_ratio);
rri_write_img(img_file,img,0,dims,st_voxel_size,16,st_origin,descrip);
% save background to img
%
[tmp filename] = fileparts(filename);
save(filename,'cmap');
return; % create_st_brainlv_disp
%--------------------------------------------------------------------------
function create_st_brainlv_img(PLSresultFile,lv_idx,thresh_ratio,grp_idx,behav_idx);
% get the output IMG filename first
%
[pn fn] = fileparts(PLSresultFile);
resultfile_prefix = fn(1:end-11);
image_fn = sprintf('%sBfMRIdatcorr_grp%d_cond%d_beh%d.img',resultfile_prefix,grp_idx,lv_idx,behav_idx);
[filename, pathname] = uiputfile(image_fn,'Datamat Correlation IMG file');
img_file = [pathname, filesep, filename];
if isequal(filename,0)
return;
end;
% load the result file
%
load(PLSresultFile,'st_dims','st_win_size','st_coords', ...
'st_voxel_size','st_origin');
dims = st_dims([1 2 4]);
img = zeros(dims);
blv = getappdata(gcbf,'BLVData');
brainlv = blv{grp_idx, behav_idx};
blv = brainlv(:,lv_idx);
bs = getappdata(gcbf,'BSRatio');
h = findobj(gcf,'Tag','BSLVIndexEdit'); bs_lv_idx = str2num(get(h,'String'));
h = findobj(gcf,'Tag','BSThreshold'); bs_thresh = str2num(get(h,'String'));
bs = bs(:, bs_lv_idx);
bs_strong = zeros(size(bs));
bs_idx = [find(bs <=- bs_thresh); find(bs >= bs_thresh)];
bs_strong(bs_idx) = 1;
blv = blv .* bs_strong;
blv(abs(blv) < thresh_ratio) = 0;
img(st_coords) = blv;
descrip = sprintf('DatamatCorrelation from %s, Group: %d, Condition: %d, Behavior: %d, Threshold: %8.5f', ...
PLSresultFile,grp_idx,lv_idx,behav_idx,thresh_ratio);
rri_write_img(img_file,img,0,dims,st_voxel_size,16,st_origin,descrip);
return; % create_st_brainlv_img
%--------------------------------------------------------------------------
function create_bs_ratio_img(PLSresultFile,lv_idx,thresh_ratio);
% get the output IMG filename first
%
[pn fn] = fileparts(PLSresultFile);
resultfile_prefix = fn(1:end-11);
image_fn = [resultfile_prefix, 'BfMRIbsr.img'];
[filename, pathname] = uiputfile(image_fn,'Bootstrap Result IMG file');
img_file = [pathname, filesep, filename];
if isequal(filename,0)
return;
end;
% load the result file
%
load(PLSresultFile,'boot_result','st_dims','st_win_size','st_coords', ...
'st_voxel_size','st_origin');
if isfield(boot_result,'compare')
boot_result.compare_brain = boot_result.compare;
end
bs_ratio = boot_result.compare_brain;
dims = st_dims([1 2 4]);
img = zeros(dims);
bsr = bs_ratio(1,lv_idx);
bsr(abs(bsr) < thresh_ratio) = 0;
img(st_coords) = bsr;
descrip = sprintf('Bootstrap ratio from %s, LV: %d, Threshold: %8.5f', ...
PLSresultFile,lv_idx,thresh_ratio);
rri_write_img(img_file,img,0,dims,st_voxel_size,16,st_origin,descrip);
return; % create_bs_ratio_img
%--------------------------------------------------------------------------
function [st_filename] = get_st_datamat_filename(sessionFileList,with_path)
%
% INPUT:
% sessionFileList - vector of cell structure, each element contains
% the full path of a session file.
% with_path - whether including path in the constructed the filename
% of the st_datamat.
% with_path = 0 : no path
% with_path = 1 : including path
%
num_files = length(sessionFileList);
st_filename = cell(1,num_files);
for i=1:num_files,
load( sessionFileList{i} );
if with_path,
st_filename{i} = sprintf('%s/%s_BfMRIdatamat.mat', ...
session_info.pls_data_path, session_info.datamat_prefix);
else
st_filename{i} = sprintf('%s_BfMRIdatamat.mat', ...
session_info.datamat_prefix);
end;
end;
return; % get_st_datamat_name
%--------------------------------------------------------------------------
%
function ToggleView(view_state)
if ~exist('view_state','var') | isempty(view_state),
view_state = ~(getappdata(gcf,'ViewBootstrapRatio'));
end;
if (view_state == 0) % view brain lv
setappdata(gcf,'ViewBootstrapRatio',0);
bs_visibility = 'off';
else % view bootstrap ratio
setappdata(gcf,'ViewBootstrapRatio',1);
bs_visibility = 'on';
end;
% set visibility of the bootstrap fields
%
set(findobj(gcf,'Tag','BSLVIndexLabel'),'enable',bs_visibility);
set(findobj(gcf,'Tag','BSLVIndexEdit'),'enable',bs_visibility);
set(findobj(gcf,'Tag','BSLVNumberLabel'),'enable',bs_visibility);
set(findobj(gcf,'Tag','BSLVNumberEdit'),'enable',bs_visibility);
set(findobj(gcf,'Tag','BSThresholdLabel'),'enable',bs_visibility);
set(findobj(gcf,'Tag','BSThreshold'),'enable',bs_visibility);
set(findobj(gcf,'Tag','MinRatioLabel'),'enable',bs_visibility);
set(findobj(gcf,'Tag','MinRatio'),'enable',bs_visibility);
set(findobj(gcf,'Tag','MaxRatioLabel'),'enable',bs_visibility);
set(findobj(gcf,'Tag','MaxRatio'),'enable',bs_visibility);
% update menu labels
%
PLSResultFile = get(findobj(gcf,'Tag','ResultFile'),'UserData');
fig_title = sprintf('Blocked fMRI Datamat Correlations Plot: %s',PLSResultFile);
set(gcf,'Name',fig_title);
EditXYZ;
return; % ToggleView
%--------------------------------------------------------------------------
function EditGroup()
old_grp_idx = getappdata(gcf,'CurrGroupIdx'); % save old grp_idx
grp_idx_hdl = findobj(gcbf,'Tag','GroupIndexEdit');
grp_idx = str2num(get(grp_idx_hdl,'String'));
behav_idx_hdl = findobj(gcbf,'Tag','BehavIndexEdit');
behav_idx = str2num(get(behav_idx_hdl,'String'));
lv_idx_hdl = findobj(gcbf,'Tag','LVIndexEdit');
lv_idx = str2num(get(lv_idx_hdl,'String'));
if isempty(grp_idx),
msg = 'ERROR: Invalid input for the Group index.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(grp_idx_hdl,'String',num2str(old_grp_idx));
return;
end;
if ( grp_idx == old_grp_idx) % LV does not changed do nothing
return;
end;
num_grp = getappdata(gcf,'NumGroup');
if (grp_idx < 1 | grp_idx > num_grp)
msg = 'ERROR: Input Group index is out of range.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(grp_idx_hdl,'String',num2str(old_grp_idx));
return;
end;
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
% update the brainlv and bootstrap ratio fields
%
set_blv_fields(grp_idx,behav_idx,lv_idx);
set(grp_idx_hdl,'Userdata',grp_idx);
setappdata(gcf,'CurrGroupIdx',grp_idx);
set(gcf,'Pointer',old_pointer);
EditXYZ;
return; % EditGroup
%--------------------------------------------------------------------------
function EditBehav()
old_behav_idx = getappdata(gcf,'CurrBehavIdx'); % save old behav_idx
behav_idx_hdl = findobj(gcbf,'Tag','BehavIndexEdit');
behav_idx = str2num(get(behav_idx_hdl,'String'));
grp_idx_hdl = findobj(gcbf,'Tag','GroupIndexEdit');
grp_idx = str2num(get(grp_idx_hdl,'String'));
lv_idx_hdl = findobj(gcbf,'Tag','LVIndexEdit');
lv_idx = str2num(get(lv_idx_hdl,'String'));
if isempty(behav_idx),
msg = 'ERROR: Invalid input for the Behavior index.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(behav_idx_hdl,'String',num2str(old_behav_idx));
return;
end;
if ( behav_idx == old_behav_idx)
return;
end;
num_behav = getappdata(gcf,'NumBehav');
if (behav_idx < 1 | behav_idx > num_behav)
msg = 'ERROR: Input Behavior index is out of range.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(behav_idx_hdl,'String',num2str(old_behav_idx));
return;
end;
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
% update the brainlv and bootstrap ratio fields
%
set_blv_fields(grp_idx,behav_idx,lv_idx);
set(behav_idx_hdl,'Userdata',behav_idx);
setappdata(gcf,'CurrBehavIdx',behav_idx);
set(gcf,'Pointer',old_pointer);
EditXYZ;
return; % EditBehav
%--------------------------------------------------------------------------
function EditLV()
grp_idx_hdl = findobj(gcbf,'Tag','GroupIndexEdit');
grp_idx = str2num(get(grp_idx_hdl,'String'));
behav_idx_hdl = findobj(gcbf,'Tag','BehavIndexEdit');
behav_idx = str2num(get(behav_idx_hdl,'String'));
old_lv_idx = getappdata(gcf,'CurrLVIdx'); % save old lv_idx
lv_idx_hdl = findobj(gcbf,'Tag','LVIndexEdit');
lv_idx = str2num(get(lv_idx_hdl,'String'));
if isempty(lv_idx),
msg = 'ERROR: Invalid input for Condition index.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(lv_idx_hdl,'String',num2str(old_lv_idx));
return;
end;
if ( lv_idx == old_lv_idx) % LV does not changed do nothing
return;
end;
num_lv = getappdata(gcf,'NumLVs');
if (lv_idx < 1 | lv_idx > num_lv)
msg = 'ERROR: Input Condition index is out of range.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(lv_idx_hdl,'String',num2str(old_lv_idx));
return;
end;
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
% update the brainlv and bootstrap ratio fields
%
set_blv_fields(grp_idx,behav_idx,lv_idx);
set(lv_idx_hdl,'Userdata',lv_idx);
setappdata(gcf,'CurrLVIdx',lv_idx);
set(gcf,'Pointer',old_pointer);
EditXYZ;
return; % EditLV
%--------------------------------------------------------------------------
function EditBSLV()
old_lv_idx = getappdata(gcf,'CurrBSLVIdx'); % save old lv_idx
lv_idx_hdl = findobj(gcbf,'Tag','BSLVIndexEdit');
lv_idx = str2num(get(lv_idx_hdl,'String'));
if isempty(lv_idx),
msg = 'ERROR: Invalid input for the LV index.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(lv_idx_hdl,'String',num2str(old_lv_idx));
return;
end;
if ( lv_idx == old_lv_idx) % LV does not changed do nothing
return;
end;
num_lv = getappdata(gcf,'NumBSLVs');
if (lv_idx < 1 | lv_idx > num_lv)
msg = 'ERROR: Input LV index is out of range.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(lv_idx_hdl,'String',num2str(old_lv_idx));
return;
end;
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
% update the brainlv and bootstrap ratio fields
%
set_bs_fields(lv_idx);
set(lv_idx_hdl,'Userdata',lv_idx);
setappdata(gcf,'CurrBSLVIdx',lv_idx);
set(gcf,'Pointer',old_pointer);
UpdatePValue;
return; % EditBSLV
%--------------------------------------------------------------------------
function UpdatePValue()
h = findobj(gcf,'Tag','BSThreshold');
bootstrap_ratio = str2num(get(h,'String'));
if isempty(bootstrap_ratio),
msg = 'ERROR: Invalid input for bootstrap ratio.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -