📄 bfm_plot_datamatcorrs_3v.m
字号:
%--------------------------------------------------------------------------
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);
return;
end;
h = findobj(gcf,'Tag','BSLVIndexEdit');
bs_lv_idx = get(h,'Userdata');
bs_ratio = getappdata(gcf,'BSRatio');
curr_bs_ratio = bs_ratio(:,bs_lv_idx);
curr_bs_ratio = curr_bs_ratio(find(isnan(curr_bs_ratio) == 0));
idx = find(abs(curr_bs_ratio) < std(curr_bs_ratio) * 5); % avoid the outliers
std_ratio = std(curr_bs_ratio(idx));
p_value = ratio2p(bootstrap_ratio,0,1); %std_ratio);
set(findobj(gcf,'Tag','PValue'), 'String',sprintf('%7.4f',p_value));
return; % UpdatePValue
%--------------------------------------------------------------------------
function LoadResultFile()
[PLSresultFile,PLSresultFilePath] = ...
uigetfile('*_BfMRIresult.mat','Open PLS Result');
if isequal(PLSresultFilePath,0), return; end;
PLSResultFile = [PLSresultFilePath,PLSresultFile];
DeleteLinkedFigure;
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','arrow');
h = findobj(gcf,'Tag','ResultFile');
[r_path, r_file, r_ext] = fileparts(PLSResultFile);
set(h,'UserData', PLSResultFile,'String',r_file);
% set(gcf,'Name',sprintf('PLS Brain Latent Variable Plot: %s',PLSResultFile));
load_pls_result;
ShowResult(0,1);
% reset 'Checked' mark for new result file
%
h = findobj(gcf,'Tag','Rotate0Menu');
set(h,'Checked','on');
h = findobj(gcf,'Tag','Rotate90Menu');
set(h,'Checked','off');
h = findobj(gcf,'Tag','Rotate180Menu');
set(h,'Checked','off');
h = findobj(gcf,'Tag','Rotate270Menu');
set(h,'Checked','off');
set(gcf,'Pointer',old_pointer);
return; % LoadResultFile
%--------------------------------------------------------------------------
function LoadBackgroundImage()
[bg_img_file,bg_img_path] = ...
uigetfile('*.img','Load background image');
if (bg_img_path == 0), return; end;
BgImgFile = [bg_img_path,bg_img_file];
% make sure the dimension of the bg image is same as the raw images
try
bg_dims = rri_imginfo(BgImgFile);
bg_dims = [bg_dims(1) bg_dims(2) 1 bg_dims(3)];
catch
msg =sprintf('ERROR: Cannot load the background image "%s".',BgImgFile);
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
if ~isequal(bg_dims,getappdata(gcf,'STDims'))
msg = 'The dimensions of the background and data images are not matched';
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
return;
end;
bg_img = load_nii(BgImgFile, 1);
bg_img = reshape(double(bg_img.img), [bg_img.hdr.dime.dim(2:3) 1 bg_img.hdr.dime.dim(4)]);
setappdata(gcf,'BackgroundImg',bg_img);
ShowResult(0,1);
return; % LoadBackgroundImage
%--------------------------------------------------------------------------
function SaveBackgroundImage()
%
h = findobj(gcf,'Ta
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -