📄 fmri_plot_datamatcorrs_3v.m
字号:
h_pls = uimenu('Parent',h0, ...
'Label','&Report', ...
'Tag','WindowsMenu', ...
'Visible','off');
h2 = uimenu(h_pls, ...
'Label','&Set Cluster Report Options', ...
'Tag','SetClusterReportOptions', ...
'Callback','fmri_plot_datamatcorrs_3v(''SetClusterReportOptions'')');
h2 = uimenu(h_pls, ...
'Label','&Load Cluster Report', ...
'Tag','LoadClsuterReport', ...
'Callback','fmri_plot_datamatcorrs_3v(''LoadClusterReport'')');
h2 = uimenu(h_pls, ...
'Label','&Create Cluster Report', ...
'Tag','OpenClusterReport', ...
'Callback','fmri_plot_datamatcorrs_3v(''OpenClusterReport'')');
% Help submenu
%
Hm_topHelp = uimenu('Parent',h0, ...
'Label', '&Help', ...
'visible', 'off', ...
'Tag', 'Help');
Hm_how = uimenu('Parent',Hm_topHelp, ...
'Label', '&How to use this window?', ...
'Callback','rri_helpfile_ui(''fmri_result_hlp.txt'',''How to use PLS RESULT'');', ...
'visible', 'off', ...
'Tag', 'How');
Hm_new = uimenu('Parent',Hm_topHelp, ...
'Label', '&What''s new', ...
'Callback','rri_helpfile_ui(''whatsnew.txt'',''What''''s new'');', ...
'Tag', 'New');
Hm_about = uimenu('Parent',Hm_topHelp, ...
'Label', '&About this program', ...
'Tag', 'About', ...
'CallBack', 'plsgui_version');
set(gcf,'Name',sprintf('fMRI BLV Plot: %s',PLSResultFile));
set(colorbar_h,'units','normal');
setappdata(gcf,'Colorbar',colorbar_h);
setappdata(gcf,'BlvAxes',axes_h);
setappdata(gcf,'ClusterMinSize',5);
setappdata(gcf,'ClusterMinDist',10);
setappdata(gcf,'setting',setting);
setappdata(gcf,'old_setting',setting);
setappdata(gcf,'img_xhair',[]);
return; % init
%---------------------------------------------------------------------------
%
function DeleteLinkedFigure()
rf_plot = getappdata(gcbf,'RFPlotHdl');
if ~isempty(rf_plot) & ishandle(rf_plot)
close(rf_plot);
end;
scores_fig = getappdata(gcbf,'ScorePlotHdl');
if ~isempty(scores_fig)
close(scores_fig);
end;
bscores_fig = getappdata(gcbf,'BSPlotHdl');
if ~isempty(bscores_fig) & ishandle(bscores_fig)
close(bscores_fig);
end;
eigen_fig = getappdata(gcbf,'EigenPlotHdl');
if ~isempty(eigen_fig) & ishandle(eigen_fig)
close(eigen_fig);
end;
brain_fig = getappdata(gcbf,'brain_plot');
if ~isempty(brain_fig) & ishandle(brain_fig)
close(brain_fig);
end;
contrast_fig = getappdata(gcbf,'ContrastFigHdl');
if ~isempty(contrast_fig) & ishandle(contrast_fig)
close(contrast_fig);
end;
return; % DeleteLinkedFigure
%---------------------------------------------------------------------------
%
function rot_amount = load_pls_result()
% wait message
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
msg = 'Loading PLS result ... please wait';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
h = findobj(gcf,'Tag','ResultFile');
PLSresultFile = get(h,'UserData');
load(PLSresultFile);
if exist('bscan','var') & ~isempty(bscan)
num_conditions = length(bscan);
end
if(0)
if exist('datamatcorrs_lst','var')
setappdata(gcf,'isbehav',1);
set(findobj(gcf,'tag','OpenRFPlot'), 'visible', 'off');
else
setappdata(gcf,'isbehav',0);
set(findobj(gcf,'tag','OpenRF1Plot'), 'visible', 'off');
end
if isfield(boot_result,'compare')
boot_result.compare_brain = boot_result.compare;
end
end
num_slices = st_dims(4);
if (num_slices > 10)
slice_step = ceil(num_slices / 10);
else
slice_step = 1;
end;
setting = getappdata(gcf,'setting');
if isempty(setting) | ~isfield(setting,'lag_idx')
lag_idx = 0;
else
lag_idx = setting.lag_idx;
end;
if isempty(setting)
grp_idx = 1; % group idx
lv_idx = 1; % condition idx
bs_lv_idx = 1;
behav_idx = 1; % behavior idx
rot_amount = 1;
first_slice = 1;
last_slice = num_slices;
else
grp_idx = setting.grp_idx;
lv_idx = setting.lv_idx;
if isfield(setting, 'bs_lv_idx')
bs_lv_idx = setting.bs_lv_idx;
else
bs_lv_idx = 1;
end
behav_idx = setting.behav_idx;
rot_amount = setting.rot_amount;
first_slice = setting.first_slice;
slice_step = setting.slice_step;
last_slice = setting.last_slice;
end;
num_grp = length(num_subj_lst);
num_lv = num_conditions;
num_lag = st_win_size - 1;
bs_num_lv = size(brainlv,2);
brainlv = datamatcorrs_lst{grp_idx};
num_behav = size(brainlv, 1) / num_conditions;
if exist('behavlv','var')
set(findobj(gcf,'Tag','OpenBehavPlot'), 'Visible', 'Off');
set(findobj(gcf,'Tag','OpenDesignPlot'), 'Visible', 'Off');
set(findobj(gcf,'Tag','OpenBrainPlot'), 'Visible', 'On');
elseif exist('designlv','var')
set(findobj(gcf,'Tag','OpenBehavPlot'), 'Visible', 'Off');
set(findobj(gcf,'Tag','OpenDesignPlot'), 'Visible', 'On');
set(findobj(gcf,'Tag','OpenBrainPlot'), 'Visible', 'Off');
end
h = findobj(gcf,'Tag','GroupIndexEdit');
set(h,'String',num2str(grp_idx),'Userdata',grp_idx);
h = findobj(gcf,'Tag','GroupNumberEdit');
set(h,'String',num2str(num_grp),'Userdata',num_grp);
h = findobj(gcf,'Tag','LVIndexEdit');
set(h,'String',num2str(lv_idx),'Userdata',lv_idx);
h = findobj(gcf,'Tag','LVNumberEdit');
set(h,'String',num2str(num_lv),'Userdata',num_lv);
h = findobj(gcf,'Tag','LagIndexEdit');
set(h,'String',num2str(lag_idx),'Userdata',lag_idx);
h = findobj(gcf,'Tag','LagNumberEdit');
set(h,'String',num2str(num_lag),'Userdata',num_lag);
h = findobj(gcf,'Tag','BSLVIndexEdit');
set(h,'String',num2str(bs_lv_idx),'Userdata',bs_lv_idx);
h = findobj(gcf,'Tag','BSLVNumberEdit');
set(h,'String',num2str(bs_num_lv),'Userdata',bs_num_lv);
h = findobj(gcf,'Tag','FirstSlice');
set(h,'String',num2str(first_slice),'Userdata',num_slices);
h = findobj(gcf,'Tag','SliceStep');
set(h,'String',num2str(slice_step),'Userdata',num_slices);
h = findobj(gcf,'Tag','LastSlice');
set(h,'String',num2str(last_slice),'Userdata',num_slices);
h = findobj(gcf,'Tag','BehavIndexEdit');
set(h,'String',num2str(behav_idx),'Userdata',behav_idx);
h = findobj(gcf,'Tag','BehavNumberEdit');
set(h,'String',num2str(num_behav),'Userdata',num_behav);
brainlv_lst = {};
for g = 1:num_grp
brainlv = datamatcorrs_lst{g}; % borrow 'blv' name to reuse code
r = size(brainlv, 1) / num_conditions;
c = size(brainlv, 2);
for b = 1:num_behav
mask = [0:(num_conditions-1)]*num_behav + b;
tmp = brainlv(mask, :);
tmp = tmp';
brainlv_lst{g,b} = tmp;
% for i = 1:num_conditions
% tmp{i} = brainlv(r*(i-1)+1:r*i, :);
% end
%
% brainlv = ones(num_conditions, c);
%
% for i = 1:num_conditions
% brainlv(i,:) = mean(tmp{i},1);
% end
%
% brainlv = brainlv';
% brainlv_lst{g} = brainlv;
end
end
setappdata(gcf,'BLVData',brainlv_lst);
set_blv_fields(grp_idx,behav_idx,lv_idx);
if ~exist('boot_result','var') | isempty(boot_result)
ToggleView(0);
set(findobj(gcf,'Tag','ViewMenu'),'Visible','off');
else % show bootstrap ratio if exist
ToggleView(1);
set(findobj(gcf,'Tag','ViewMenu'),'Visible','on');
% set the bootstrap ratio field values
%
setappdata(gcf,'BSRatio',boot_result.compare);
set_bs_fields(bs_lv_idx, 0.05);
UpdatePValue;
end;
h = findobj(gcf,'Tag','OpenContrastWindow');
if 1 % isequal(ContrastFile,'NONE') | isequal(ContrastFile,'BEHAV')
set(h,'Visible','off');
else
set(h,'Visible','on');
end;
set(gcf,'Pointer',old_pointer);
set(findobj(gcf,'Tag','MessageLine'),'String','');
setappdata(gcf,'SessionFileList', SessionProfiles);
setappdata(gcf,'RotateAmount',rot_amount);
setappdata(gcf,'CurrGroupIdx',grp_idx);
setappdata(gcf,'CurrBehavIdx',behav_idx);
setappdata(gcf,'NumGroup',num_grp);
setappdata(gcf,'CurrLVIdx',lv_idx);
setappdata(gcf,'CurrLagIdx',lag_idx);
setappdata(gcf,'CurrBSLVIdx',bs_lv_idx);
setappdata(gcf,'STDims',st_dims);
setappdata(gcf,'NumBSLVs',bs_num_lv)
return; % load_pls_result
%-------------------------------------------------------------------------
%
function OpenResponseFnPlot()
sessionFileList = getappdata(gcbf,'SessionFileList');
rf_plot = getappdata(gcf,'RFPlotHdl');
if ~isempty(rf_plot)
msg = 'ERROR: Response function plot is already been opened';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
rf_plot = fmri_plot_rf('LINK',sessionFileList);
link_info.hdl = gcbf;
link_info.name = 'RFPlotHdl';
setappdata(rf_plot,'LinkFigureInfo',link_info);
setappdata(gcbf,'RFPlotHdl',rf_plot);
% make sure the Coord of the Response Function Plot contains
% the current point in the Response
%
cur_coord = getappdata(gcf,'Coord');
setappdata(rf_plot,'Coord',cur_coord);
return; % PlotResponseFn
%-------------------------------------------------------------------------
%
function OpenBrainScoresPlot()
bs_plot = getappdata(gcf,'BSPlotHdl');
if ~isempty(bs_plot)
msg = 'ERROR: Brain score plot is already been opened';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
sessionFileList = getappdata(gcbf,'SessionFileList');
h = findobj(gcbf,'Tag','ResultFile');
PLSresultFile = get(h,'UserData');
bs_plot = fmri_plot_brain_scores('LINK',sessionFileList,PLSresultFile);
link_info.hdl = gcbf;
link_info.name = 'BSPlotHdl';
setappdata(bs_plot,'LinkFigureInfo',link_info);
setappdata(gcbf,'BSPlotHdl',bs_plot);
return; % OpenBrainScoresPlot
%-------------------------------------------------------------------------
%
function OpenDesignPlot()
scores_fig = getappdata(gcbf,'ScorePlotHdl');
if ~isempty(scores_fig)
msg = 'ERROR: Design Scores Plot is already been opened';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
h = findobj(gcbf,'Tag','ResultFile');
PLSresultFile = get(h,'UserData');
scores_fig = fmri_plot_scores('LINK',PLSresultFile);
lv_idx = getappdata(gcbf,'CurrLVIdx');
if (lv_idx ~= 1)
fmri_plot_scores('UPDATE_LV_SELECTION',scores_fig,lv_idx);
end;
link_info.hdl = gcbf;
link_info.name = 'ScorePlotHdl';
setappdata(scores_fig,'LinkFigureInfo',link_info);
setappdata(gcbf,'ScorePlotHdl',scores_fig);
return; % OpenDesignPlot
%-------------------------------------------------------------------------
%
function OpenEigenPlot()
num_lv = getappdata(gcf,'NumLVs');
eigen_plot = getappdata(gcbf,'EigenPlotHdl');
if ~isempty(eigen_plot) & ishandle(eigen_plot)
msg = 'ERROR: Singular Values are already been plotted';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
h = findobj(gcbf,'Tag','ResultFile');
PLSresultFile = get(h,'UserData');
eigen = load(PLSresultFile,'s','perm_result');
eigen_fig = rri_plot_eigen_ui({eigen.s, eigen.perm_result});
link_info.hdl = gcbf;
link_info.name = 'EigenPlotHdl';
setappdata(eigen_fig,'LinkFigureInfo',link_info);
setappdata(gcbf,'EigenPlotHdl',eigen_fig);
return; % OpenEigenPlot
%-------------------------------------------------------------------------
%
function SetClusterReportOptions()
st_origin = getappdata(gcbf,'STOrigin');
st_dims = getappdata(gcbf,'STDims');
cluster_min_size = getappdata(gcbf,'ClusterMinSize');
cluster_min_dist = getappdata(gcbf,'ClusterMinDist');
if isempty(st_origin) | all(st_origin == 0)
st_voxel_size = getappdata(gcf,'STVoxelSize');
if all(st_dims == [40 48 1 34]) & all(st_voxel_size == [4 4 4])
st_origin = [20 29 12];
elseif all(st_dims == [91 109 1 91]) & all(st_voxel_size == [2 2 2])
st_origin = [46 64 37];
else
% according to SPM: if the origin field contains 0, then the origin is
% assumed to be at the center of the volume.
%
st_origin = floor((dims([1 2 4])+1)/2);
% st_origin = round(st_dims([1 2 4])/2);
end;
end;
prompt = {'Minimum cluster size (in voxels)', ...
'Minimum distance (in mm) between cluster peaks', ...
'Origin location (in voxels)' };
defValues = { num2str(cluster_min_size), ...
num2str(cluster_min_dist), ...
num2str(st_origin)};
dlgTitle='Cluster Report Options';
lineNo = 1;
answer = inputdlg(prompt,dlgTitle,lineNo,defValues);
if isempty(answer),
return;
end;
invalid_options = 0;
min_size = str2num(answer{1});
min_dist = str2num(answer{2});
origin_xyz = str2num(answer{3});
if isempty(min_size) | isempty(min_dist) | isempty(origin_xyz)
invalid_options = 1;
elseif (min_size <= 0) | (min_dist <= 0) | (sum(origin_xyz<= 0) ~= 0)
invalid_options = 1;
end;
if (invalid_options)
msg = 'Invalid cluster report options. Options do not changed';
set(findobj(gcbf,'Tag','MessageLine'),'String',msg);
return;
end;
setappdata(gcbf,'STOrigin',origin_xyz);
setappdata(gcbf,'ClusterMinSize',min_size);
setappdata(gcbf,'ClusterMinDist',min_dist);
return; % SetClusterReportOptions
%-------------------------------------------------------------------------
%
function OpenClusterReport()
% wait message
old_pointer = get(gcbf,'Pointer');
set(gcbf,'Pointer','watch');
msg = 'Generating Cluster Report ... please wait';
h = rri_wait_box(msg, [0.5 0.1]);
cluster_min_size = getappdata(gcbf,'ClusterMinSize');
cluster_min_dist = getappdata(gcbf,'ClusterMinDist');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -