📄 fmri_plot_brain_scores.m
字号:
selected_data = popup_string{selected_idx};
last_datamat = getappdata(gcf,'PlottedDatamat');
if (strcmp(last_datamat,selected_data) == 0)
set(findobj(gcf,'Tag','MessageLine'),'String','Loading data ... ');
[st_datamat, st_coords, st_win_size, st_evt_list] = ...
load_plotted_datamat(selected_idx);
if isempty(st_datamat)
set(gcf,'Pointer',old_pointer);
return;
end;
setappdata(gcf,'PlottedDatamat',selected_data);
setappdata(gcf,'STDatamat',st_datamat);
setappdata(gcf,'STWinSize',st_win_size);
setappdata(gcf,'STEvtList',st_evt_list);
set(findobj(gcf,'Tag','MessageLine'),'String','');
else
set(gcf,'Pointer',old_pointer);
status = 1;
return;
end;
brainlv = getappdata(gcf,'BrainLV');
curr_lv_state = getappdata(gcf,'CurrLVState');
pls_coords = getappdata(gcf,'PLSCoords');
num_lvs = length(curr_lv_state);
num_voxels = length(pls_coords);
num_evts = length(st_evt_list);
blv = reshape(brainlv,[st_win_size,num_voxels,num_lvs]);
bs = zeros(st_win_size,num_evts,num_lvs);
for i=1:st_win_size,
if ndims(blv)==3
bs(i,:,:) = squeeze(st_datamat(:,i,:)) * squeeze(blv(i,:,:));
else
bs(i,:,:) = squeeze(st_datamat(:,i,:)) * blv(i,:)';
end
end;
setappdata(gcf,'CurrBrainScores',bs);
status = 1;
set(gcf,'Pointer',old_pointer);
return; % get_brain_scores
%--------------------------------------------------------------------------
%
function plot_brain_scores()
if (get_brain_scores ~= 1);
return;
end;
st_evt_list = getappdata(gcf,'STEvtList');
conditions = getappdata(gcf,'Conditions');
curr_lv_state = getappdata(gcf,'CurrLVState');
select_lv = find(curr_lv_state == 1);
h = findobj(gcf,'Tag','PlotButton');
if strcmp(lower(get(h,'Enable')),'off'), return; end;
bs = getappdata(gcf,'CurrBrainScores');
plotted_data = squeeze(bs(:,:,select_lv))';
num_conditions = length(getappdata(gcf,'Conditions'));
condition = cell(1,num_conditions);
max_num_stim = 0;
for i=1:num_conditions,
condition{i}.st_row_idx = find(st_evt_list == i);
condition{i}.num_stim = length(condition{i}.st_row_idx);
condition{i}.name = conditions{i};
if (max_num_stim < condition{i}.num_stim)
max_num_stim = condition{i}.num_stim;
end;
end;
% generate the plots
%
plot_cond_idx = [1:num_conditions];
plot_dims = getappdata(gcf,'PlotDims');
if isempty(plot_dims)
if (num_conditions < 5)
num_rows = num_conditions;
else
num_rows = 5;
end;
if (max_num_stim < 4),
num_cols = max_num_stim;
else
num_cols = 4;
end;
plot_dims = [num_rows num_cols];
end;
f_pos = get(gcf,'Position');
axes_margin = [.37 .13 .15 .1];
fmri_plot_cond_stim_ui('STARTUP', plotted_data, condition, ...
axes_margin, plot_dims, plot_cond_idx);
setappdata(gcf,'PLS_PLOT_BS_ACTIVE',1);
% save('PLS_plotted_bs','plotted_data','condition');
setappdata(gcf,'PLS_BS_PLOTTED_DATA',plotted_data);
setappdata(gcf,'PLS_BS_PLOTTED_CONDITON',condition);
% set(findobj(gcf,'Tag','PlotMenu'),'Enable','on');
% set(findobj(gcf,'Tag','OptionMenu'),'Enable','on');
return;
%--------------------------------------------------------------------------
%
function save_response_fn()
if (get_brain_scores ~= 1);
return;
end;
st_evt_list = getappdata(gcf,'STEvtList');
curr_lv_state = getappdata(gcf,'CurrLVState');
select_lv = find(curr_lv_state == 1);
bs = getappdata(gcf,'CurrBrainScores');
bs_data = squeeze(bs(:,:,select_lv))';
selected_files = get_selected_filename;
[a1 b1]=sort(st_evt_list);
c1 = length(unique(st_evt_list));
b2 = reshape(b1, [length(st_evt_list)/c1, c1]);
b2 = b2';
b2 = b2(:)';
st_evt_list = st_evt_list(b2);
bs_data = bs_data(b2, :);
bs_data_mean = ones(c1, size(bs_data,2));
for i = 1:c1
bs_data_mean(i,:) = mean(bs_data(find(st_evt_list==i),:),1);
end
fn = getappdata(gcf,'STFiles');
fn = fn{1}.name;
if findstr('BfMRIdatamat.mat', fn)
[filename, pathname] = ...
uiputfile('*_BfMRI_bs_plot.mat','Save the Response Functions');
if ischar(filename) & isempty(findstr(lower(filename),'_bfmri_bs_plot'))
[tmp filename] = fileparts(filename);
filename = [filename, '_BfMRI_bs_plot.mat'];
end
else
[filename, pathname] = ...
uiputfile('*_fMRI_bs_plot.mat','Save the Response Functions');
if ischar(filename) & isempty(findstr(lower(filename),'_fmri_bs_plot'))
[tmp filename] = fileparts(filename);
filename = [filename, '_fMRI_bs_plot.mat'];
end
end
if isequal(filename,0)
return;
end;
rf_plot_file = fullfile(pathname,filename);
try
save (rf_plot_file, 'selected_files', 'bs_data', 'bs_data_mean', 'st_evt_list', 'select_lv');
catch
msg = sprintf('Cannot save the response function data to %s',rf_plot_file);
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
status = 0;
return;
end;
return; % save_response_fn
%--------------------------------------------------------------------------
%
function save_response_fn2()
if (get_brain_scores ~= 1);
return;
end;
curr_lv_state = getappdata(gcf,'CurrLVState');
select_lv = find(curr_lv_state == 1);
bs = getappdata(gcf,'CurrBrainScores');
st_data = squeeze(bs(:,:,select_lv))';
[nr nc] = size(st_data);
% 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');
selected_idx = get(popup_h,'value');
data_option = get(popup_h,'Userdata');
st_filenames = getappdata(gcf,'STFiles');
num_cond = sum(getappdata(gcf,'cond_selection'));
evt_list = getappdata(gcf,'STEvtList');
switch (data_option)
case {1} % plot individual data
all_evt_length = {}; % evt length of all datamat
% find all_evt_length
%
for i = 1:length(st_filenames)
filename = st_filenames{i}.fullname;
group = st_filenames{i}.group;
if group > length(all_evt_length)
all_evt_length {group} = [];
old_evt_length = [];
else
old_evt_length = all_evt_length{group};
end
load(filename, 'st_evt_list');
% old_evt_length = [old_evt_length, length(st_evt_list)];
cond_selection = getappdata(gcf,'cond_selection');
[tmp1 tmp2 evt_length] = ...
fmri_mask_evt_list(st_evt_list, cond_selection);
old_evt_length = [old_evt_length, evt_length];
all_evt_length{group} = old_evt_length;
end
group = st_filenames{selected_idx}.group;
% calc subj position
%
pre_group = 0;
for i = 1:group - 1
pre_group = pre_group + length(all_evt_length{i});
end
subj = selected_idx - pre_group;
pattern = ...
['<ONLY INPUT PREFIX>*_fMRI_grp',num2str(group),'_subj', ...
num2str(group),'_behavdata1.txt'];
[fn, pn] = uiputfile(pattern,'Save Behav Data');
if isequal(fn,0)
return;
end;
[tmp fn] = fileparts(fn);
first = 1;
i = group; % we know grp#
j = subj; % we know subj#
behavdata = zeros(num_cond, nc);
evt_length = all_evt_length{i}(j);
last = first + evt_length - 1;
subj_st_data = st_data(first:last,:);
run = evt_length / num_cond; % run# in subj
if run ~= 1 % avg across run
head = 1;
for k = 1:num_cond
tail = head + run - 1;
behavdata(k,:) = mean(subj_st_data(head:tail,:), 1);
head = head + run;
end
else
behavdata = subj_st_data;
end
first = first + evt_length;
% write behav data to file
%
rf_plot_file = fullfile(pn, ...
sprintf('%s_fMRI_grp%d_subj%d_behavdata1.txt',fn,i,j));
behavdata = double(behavdata);
save (rf_plot_file, '-ascii', 'behavdata');
case {2} % plot group data
pattern = ...
['<ONLY INPUT PREFIX>*_fMRI_grp',num2str(selected_idx),'_subj1_behavdata2.txt'];
[fn, pn] = uiputfile(pattern,'Save Behav Data');
if isequal(fn,0)
return;
end;
[tmp fn] = fileparts(fn);
all_evt_length = {}; % evt length of all datamat
% find all_evt_length
%
for i = 1:length(st_filenames)
filename = st_filenames{i}.fullname;
group = st_filenames{i}.group;
if group > length(all_evt_length)
all_evt_length {group} = [];
old_evt_length = [];
else
old_evt_length = all_evt_length{group};
end
load(filename, 'st_evt_list');
% old_evt_length = [old_evt_length, length(st_evt_list)];
cond_selection = getappdata(gcf,'cond_selection');
[tmp1 tmp2 evt_length] = ...
fmri_mask_evt_list(st_evt_list, cond_selection);
old_evt_length = [old_evt_length, evt_length];
all_evt_length{group} = old_evt_length;
end
% find st_data for the subj
%
first = 1;
i = selected_idx; % we know grp#
for j = 1:length(all_evt_length{i}) % all subj
behavdata = zeros(num_cond, nc);
evt_length = all_evt_length{i}(j);
last = first + evt_length - 1;
subj_st_data = st_data(first:last,:);
run = evt_length / num_cond; % run# in subj
if run ~= 1 % avg across run
head = 1;
for k = 1:num_cond
tail = head + run - 1;
behavdata(k,:) = mean(subj_st_data(head:tail,:), 1);
head = head + run;
end
else
behavdata = subj_st_data;
end
first = first + evt_length;
% write behav data to file
%
rf_plot_file = fullfile(pn, ...
sprintf('%s_fMRI_grp%d_subj%d_behavdata2.txt',fn,i,j));
behavdata = double(behavdata);
save (rf_plot_file, '-ascii', 'behavdata');
end
case {3} % plot all data
pattern = ...
['<ONLY INPUT PREFIX>*_fMRI_grp1_subj1_behavdata3.txt'];
[fn, pn] = uiputfile(pattern,'Save Behav Data');
if isequal(fn,0)
return;
end;
[tmp fn] = fileparts(fn);
all_evt_length = {}; % evt length of all datamat
% find all_evt_length
%
for i = 1:length(st_filenames)
filename = st_filenames{i}.fullname;
group = st_filenames{i}.group;
if group > length(all_evt_length)
all_evt_length {group} = [];
old_evt_length = [];
else
old_evt_length = all_evt_length{group};
end
load(filename, 'st_evt_list');
% old_evt_length = [old_evt_length, length(st_evt_list)];
cond_selection = getappdata(gcf,'cond_selection');
[tmp1 tmp2 evt_length] = ...
fmri_mask_evt_list(st_evt_list, cond_selection);
old_evt_length = [old_evt_length, evt_length];
all_evt_length{group} = old_evt_length;
end
% find st_data for the subj
%
first = 1;
for i = 1:length(all_evt_length) % all grp
for j = 1:length(all_evt_length{i}) % all subj
behavdata = zeros(num_cond, nc);
evt_length = all_evt_length{i}(j);
last = first + evt_length - 1;
subj_st_data = st_data(first:last,:);
run = evt_length / num_cond; % run# in subj
if run ~= 1 % avg across run
head = 1;
for k = 1:num_cond
tail = head + run - 1;
behavdata(k,:) = mean(subj_st_data(head:tail,:), 1);
head = head + run;
end
else
behavdata = subj_st_data;
end
first = first + evt_length;
% write behav data to file
%
rf_plot_file = fullfile(pn, ...
sprintf('%s_fMRI_grp%d_subj%d_behavdata3.txt',fn,i,j));
behavdata = double(behavdata);
save (rf_plot_file, '-ascii', 'behavdata');
end
end
end;
return; % save_response_fn2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -