📄 fmri_plot_brain_corr.m
字号:
slider_value = total_rows - top_lv_button + 1;
set(slider_hdl,'Value',slider_value);
setappdata(gcf,'TopLVButton',top_lv_button);
DisplayLVButtons;
return; % SetTopLVButton
%----------------------------------------------------------------------------
function SetupSlider()
top_lv_button = getappdata(gcf,'TopLVButton');
rows = getappdata(gcf,'NumLVRows');
curr_lv_state = getappdata(gcf,'CurrLVState');
num_lvs = length(curr_lv_state);
total_rows = num_lvs;
slider_hdl = findobj(gcf,'Tag','LVButtonSlider');
if (total_rows > 1) % don't need to update when no condition
set(slider_hdl,'Min',1,'Max',total_rows, ...
'Value',total_rows-top_lv_button+1, ...
'Sliderstep',[1/(total_rows-1)-0.00001 1/(total_rows-1)]);
end;
return; % UpdateSlider
%---------------------------------------------------------------------------
function SelectLV(selected_lv)
lv_state = getappdata(gcf,'CurrLVState');
LV_hlist = getappdata(gcf,'LV_hlist');
top_lv = getappdata(gcf,'TopLVButton');
rows = getappdata(gcf,'NumLVRows');
bottom_lv = top_lv + rows - 1;
% remove the previous selection
%
prev_selected_lv = find(lv_state == 1);
if (prev_selected_lv >= top_lv & prev_selected_lv <= bottom_lv),
row_idx = prev_selected_lv - top_lv + 1;
set(LV_hlist(row_idx),'Value',0);
end;
UpdateLVButtonList = 0;
if ~exist('selected_lv','var') % select LV interactively
curr_row = get(gcbo,'Userdata');
curr_lv = top_lv + curr_row -1;
set(LV_hlist(curr_row),'Value',1);
else % select LV by specifying the index
curr_lv = selected_lv;
if (selected_lv >= top_lv & selected_lv <= bottom_lv),
row_idx = selected_lv - top_lv + 1;
set(LV_hlist(row_idx),'Value',1);
else
UpdateLVButtonList = 1;
end;
end;
lv_state = zeros(1,length(lv_state));
lv_state(curr_lv) = 1;
setappdata(gcf,'CurrLVState',lv_state);
if (UpdateLVButtonList)
SetTopLVButton(curr_lv);
end;
return; % SelectLV
%--------------------------------------------------------------------------
%
function h = delete_fig()
link_figure = getappdata(gcbf,'LinkFigureInfo');
try
rmappdata(link_figure.hdl,link_figure.name);
end;
try
load('pls_profile');
pls_profile = which('pls_profile.mat');
fmri_plot_brain_corr_pos = get(gcbf,'position');
save(pls_profile, '-append', 'fmri_plot_brain_corr_pos');
catch
end
return; % delete_fig
%--------------------------------------------------------------------------
function set_combine_plot()
curr_state = get(gcbo,'Userdata');
if (curr_state == 1), % currently combining plots
new_state = 0;
set(gcbo,'Label','Combine plots within conditions');
else
new_state = 1;
set(gcbo,'Label','Separate plots within conditions');
end;
set(gcbo,'Userdata',new_state);
fmri_plot_cond_stim_ui('COMBINE_PLOTS',new_state);
return; % set_combine_plot
%--------------------------------------------------------------------------
function make_datamat_popup(data_option)
% data_option = 1 - plot individual ST datamat
% data_option = 2 - plot group data
% data_option = 3 - plot all data
popup_h = findobj(gcf,'Tag','STDatamatPopup');
curr_option = get(popup_h,'Userdata');
if ~isempty(curr_option) & (curr_option == data_option)
return; % no change, do nothing
end;
st_filenames = getappdata(gcf,'STFiles');
switch (data_option)
case {1} % plot individual data
num_st_datamat = length(st_filenames);
popup_list = cell(1,num_st_datamat);
for i=1:num_st_datamat,
% get rid of ".mat" extension if there is any
if strcmp(st_filenames{i}.name(end-3:end),'.mat')==1
popup_list{i} = sprintf('[%d] %s', ...
st_filenames{i}.group, st_filenames{i}.name(1:end-4));
else
popup_list{i} = sprintf('[%d] %s', ...
st_filenames{i}.group, st_filenames{i}.name);
end;
end;
alignment = 'left';
case {2} % plot group data
num_group = st_filenames{end}.group;
popup_list = cell(1,num_group);
for i=1:num_group,
popup_list{i} = sprintf('[ Group #%d ]',i);
end;
alignment = 'center';
case {3} % plot all data
popup_list{1} = '< All Data >';
alignment = 'center';
end;
set(popup_h,'String',popup_list,'Userdata',data_option, ...
'HorizontalAlignment', alignment,'Value',1);
msg = 'Press "Plot" Button or select datamat to see the response function';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return; % make_datamat_popup
%--------------------------------------------------------------------------
function condition_update(sessionFileList,with_path)
%
h = findobj(gcf,'Tag', 'CondSlider');
rows = get(h,'UserData');
max_page = get(h,'Max');
slider_value = round(get(h,'Value'));
page = max_page - slider_value +1;
set(h,'Value',slider_value);
chk_box_hlist = get(findobj(gcf,'Tag','ConditionLabel'),'UserData');
num_cond = length(chk_box_hlist);
visible_list = zeros(1,num_cond);
visible_list((page-1)*rows+1:page*rows) = 1;
for i=1:num_cond,
if(visible_list(i) == 0)
set(chk_box_hlist(i),'Visible','off');
else
set(chk_box_hlist(i),'Visible','on');
end;
end;
return;
%
%--------------------------------------------------------------------------
function get_st_datamat_filename(sessionFileList, plsResultFile)
%
% INPUT:
% sessionFileList - vector of cell structure, each element contains
% the full path of a session file.
%
load(plsResultFile, 'behavdata', 'num_subj_lst', 'cond_selection');
num_rows_lst = num_subj_lst*sum(cond_selection);
fn = sessionFileList{1}{1};
cnt = 0;
num_groups = length(sessionFileList);
for i=1:num_groups,
num_files = length(sessionFileList{i});
for j=1:num_files,
cnt = cnt + 1;
load( sessionFileList{i}{j} );
rri_changepath('fmrisession');
if findstr('BfMRIsession.mat', fn)
fname = sprintf('%s_BfMRIdatamat.mat',session_info.datamat_prefix);
else
fname = sprintf('%s_fMRIdatamat.mat',session_info.datamat_prefix);
end
st_filename{cnt}.name = fname;
st_filename{cnt}.fullname = fullfile(session_info.pls_data_path,fname);
st_filename{cnt}.group = i;
st_filename{cnt}.profile = sessionFileList{i}{j};
% get st_evt_list
%
load(st_filename{cnt}.fullname, 'st_evt_list');
deselected = find(cond_selection == 0);
for k=1:length(deselected)
st_evt_list(find( st_evt_list==deselected(k) )) = [];
end;
st_filename{cnt}.st_evt_list = st_evt_list;
end;
end;
% get org_behavdata
%
org_behavdata = [];
st_evt_list = [];
for cnt=1:length(st_filename)
st_evt_list = [st_evt_list st_filename{cnt}.st_evt_list];
end;
first = 1;
last = 0;
if 0
for g = 1:length(num_rows_lst)
last = last + num_rows_lst(g);
st = st_evt_list(first:last);
[tmp idx] = sort(st);
[tmp idx] = sort(idx);
tmp = behavdata(first:last,:);
org_behavdata = [org_behavdata; tmp(idx,:)];
first = first + num_rows_lst(g);
end;
end
first = 1;
last = 0;
for cnt=1:length(st_filename)
last = last + length(st_filename{cnt}.st_evt_list);
% st_filename{cnt}.behavdata = org_behavdata(first:last,:);
first = first + length(st_filename{cnt}.st_evt_list);
end;
setappdata(gcf,'STFiles',st_filename);
setappdata(gcf,'num_subj_lst',num_subj_lst);
return; % get_st_datamat_filename
%--------------------------------------------------------------------------
%
function [behavdata,st_datamat,st_coords,st_win_size,st_evt_list] = ...
load_plotted_datamat(selected_idx)
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
st_filename = getappdata(gcf,'STFiles');
h = findobj(gcf,'Tag','STDatamatPopup');
selected_idx = get(h,'Value');
data_option = get(h,'Userdata');
switch (data_option)
case {1},
selected_files{1} = st_filename{selected_idx}.fullname;
% selected_behav{1} = st_filename{selected_idx}.behavdata;
case {2},
cnt = 0;
for i=1:length(st_filename),
if (st_filename{i}.group == selected_idx)
cnt = cnt+1;
selected_files{cnt} = st_filename{i}.fullname;
% selected_behav{cnt} = st_filename{i}.behavdata;
end;
end;
case {3},
cnt = 0;
for i=1:length(st_filename),
selected_files{i} = st_filename{i}.fullname;
% selected_behav{i} = st_filename{i}.behavdata;
end;
end;
% merge files together
[st_datamat,st_coords,st_win_size,st_evt_list] = ...
merge_st_datamat(selected_files);
cond_selection = getappdata(gcf,'cond_selection');
[mask, st_evt_list, evt_length] = ...
fmri_mask_evt_list(st_evt_list, cond_selection);
st_datamat = st_datamat(mask,:);
% behavdata = behavdata(mask,:);
nr = length(st_evt_list);
nc = length(st_coords);
st_datamat = reshape(st_datamat,[nr,st_win_size,nc]);
pls_coords = getappdata(gcf,'PLSCoords');
dims = getappdata(gcf,'Dims');
m = zeros(dims);
m(pls_coords) = 1;
coord_idx = find (m(st_coords) == 1);
nc = length(coord_idx);
st_coords = st_coords(coord_idx);
st_datamat = st_datamat(:,:,coord_idx);
set(gcf,'Pointer',old_pointer);
if ~isequal(st_coords(:),pls_coords(:)),
st_datamat = [];
msg = 'ERROR: Incompatible coords for the st_datamat and the PLS result';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
plsResultFile = getappdata(gcf,'plsResultFile');
load(plsResultFile,'behavdata_lst');
behavdata = behavdata_lst{selected_idx};
% because fmri_plot_cond_stim_ui take unsorted data chunk, and sort it
% according to st_evt_list at that time. so the behavdata should keep
% {Group1 [Subj1 (cond1 cond2 ...) Subj2 ...] Group2 ...} order
%
% [tmp order] = sort(st_evt_list);
% [tmp order] = sort(order);
% behavdata = behavdata(order,:);
% row order of bcorr is {Group1 [Cond1 (beh1 beh2 ...) Cond2 ...] Group2 ...}
% we need to make st_datamat the same order as behavdata row order, which is
% {Group1 [Cond1 (Subj1 Subj2 ...) Cond2 ...] Group2 ...}
%
[tmp order] = sort(st_evt_list);
st_datamat = st_datamat(order,:,:);
return; % load_plotted_datamat
%--------------------------------------------------------------------------
%
function [grp_st_datamat,coords,win_size,evt_list] = ...
merge_st_datamat(selected_files, selected_behav)
num_files = length(selected_files);
% compute the common coords first and the total number of events
%
load(selected_files{1},'st_dims','st_win_size');
total_num_evt = 0;
m = zeros(st_dims);
for i=1:num_files,
load(selected_files{i},'st_coords','st_evt_list');
total_num_evt = total_num_evt + length(st_evt_list);
m(st_coords) = m(st_coords) + 1;
end;
coords = find(m == num_files);
% ready to merge the st_datamat together now ...
%
win_size = st_win_size;
num_voxels = length(coords);
num_cols = win_size * num_voxels;
grp_st_datamat = zeros(total_num_evt,num_cols);
% behav_cols = size(selected_behav{1},2);
% grp_behavdata = zeros(total_num_evt,behav_cols);
evt_list = [];
first_row = 1;
for i=1:num_files,
load(selected_files{i});
coord_idx = find(m(st_coords) == num_files);
nr = length(st_evt_list);
nc = length(st_coords);
last_row = nr + first_row - 1;
tmp_datamat = reshape(st_datamat,[nr,win_size,nc]);
tmp_datamat = reshape(tmp_datamat(:,:,coord_idx),[nr,num_cols]);
% tmp_behavdata = selected_behav{i};
% grp_behavdata(first_row:last_row,:) = tmp_behavdata;
grp_st_datamat(first_row:last_row,:) = tmp_datamat;
evt_list = [evt_list st_evt_list];
first_row = last_row + 1;
clear st_datamat tmp_datamat;
end;
return; % merge_st_datamat
%---------------------------------------------------------------------------
function [brainlv,pls_coords,dims,conditions] = load_pls_brainlv(fname)
brainlv = [];
pls_coords = [];
dims = [];
conditions = [];
% the following part will not get called during plsgui
%
if ~exist('fname','var') | isempty(fname),
f_pattern = '*_fMRIresult.mat';
[PLSresultFile,PLSresultFilePath] = uigetfile(f_pattern,'Load PLS scores');
if isequal(PLSresultFile,0),
return;
end;
fname = [PLSresultFilePath,PLSresultFile];
end;
try
load( fname,'brainlv','st_coords','st_dims','SessionProfiles' );
catch
msg = sprintf('Cannot load the PLS result from file: %s',PLSresultFile);
disp(['ERROR: ' msg]);
return;
end;
rri_changepath('fmriresult');
pls_coords = st_coords;
dims = st_dims;
load(SessionProfiles{1}{1}); % load the condition from session profile
conditions = session_info.condition;
cond_selection = getappdata(gcf,'cond_selection');
if ~isempty(cond_selection)
conditions = conditions(find(cond_selection));
end
return; % load_pls_brainlv
%--------------------------------------------------------------------------
%
function [selected_files] = get_selected_filename(select_all_flg),
st_filename = getappdata(gcf,'STFiles');
if exist('select_all_flg','var') & (select_all_flg == 1)
data_option = 3;
else
h = findobj(gcf,'Tag','STDatamatPopup');
selected_idx = get(h,'Value');
data_option = get(h,'Userdata');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -