📄 struct_plot_rf.m
字号:
set(h,'Min',1,'Max',pages, ...
'Position',s_pos, ...
'Value',pages, ...
'Sliderstep',[1/(pages-1)-0.00001 1/(pages-1)] );
set(h,'Visible','on');
set(h,'UserData',rows);
end;
end;
return; % get_obj_pos
%--------------------------------------------------------------------------
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 = 'Click a voxel to see the plot';
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(DatamatFileList)
%
% INPUT:
% sessionFileList - vector of cell structure, each element contains
% the full path of a session file.
%
num_groups = length(DatamatFileList);
cond_selection = getappdata(gcf,'cond_selection');
for i=1:num_groups,
fn = DatamatFileList{i};
load( fn, 'session_info');
[pname, fname] = fileparts(fn);
st_filename{i}.name = fname;
st_filename{i}.fullname = fn;
st_filename{i}.group = i;
st_filename{i}.profile = session_info;
if isempty(cond_selection)
st_filename{i}.selected_conditions = ones(1,session_info.num_conditions);
else
st_filename{i}.selected_conditions = cond_selection;
end
end;
setappdata(gcf,'STFiles',st_filename);
return; % get_st_datamat_filename
%--------------------------------------------------------------------------
%
function [datamat,coords,num_subj,subj_name,cond_name,behavname] = ...
load_plotted_datamat
old_pointer = get(gcf,'Pointer');
set(gcf,'Pointer','watch');
selected_files = get_selected_filename;
warning off;
% load(selected_files{1},'datamat','coords','session_info', ...
% 'behavdata','behavname');
load(selected_files{1},'datafile','coords','session_info', ...
'selected_subjects','behavdata','behavname');
warning on;
load(datafile);
datamat_row = zeros(session_info.num_subjects, session_info.num_conditions);
datamat_row(find(selected_subjects),:) = 1;
datamat_row = datamat_row(:);
datamat = datamat(find(datamat_row),:);
if ~exist('behavname','var')
behavname = {};
if exist('behavdata','var')
for i=1:size(behavdata, 2)
behavname = [behavname, {['behav', num2str(i)]}];
end
end
end
% num_subj = session_info.num_subjects;
num_subj = sum(selected_subjects);
subj_name = session_info.subj_name(find(selected_subjects));
cond_name = session_info.condition;
% apply origin_pattern here
%
mainfig = getappdata(gcf,'CallBackFig');
origin_pattern = getappdata(mainfig,'origin_pattern');
if ~isempty(origin_pattern)
dims = getappdata(mainfig,'STDims');
new_coord = zeros(dims);
new_coord(coords) = 1;
new_coord = find(new_coord(origin_pattern));
datamat = rri_xy_orient_data(datamat',coords,new_coord,dims,origin_pattern);
datamat = datamat';
coords = new_coord;
end
set(gcf,'Pointer',old_pointer);
return; % load_plotted_datamat
%--------------------------------------------------------------------------
%
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');
end;
switch (data_option)
case {1}, % individual file
selected_files{1} = st_filename{selected_idx}.fullname;
case {3}, % all data
for i=1:length(st_filename),
selected_files{i} = st_filename{i}.fullname;
end;
end;
return; % get selected filenames
%--------------------------------------------------------------------------
%
function [grp_st_datamat,coords,win_size,evt_list] = ...
merge_st_datamat(selected_files),
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);
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]);
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 plot_response_fn()
axes_margin = [.37 .05 .15 .1];
% set up axes, and the values of 'AxesMargin', 'AxesHlds' and 'AxesPos'
%
setappdata(gcf,'AxesMargin',axes_margin);
set_cond_axes(1,1,axes_margin); % set up axes
st_files = getappdata(gcf,'STFiles');
st_coords = getappdata(gcf,'STCoords');
h = findobj(gcf,'Tag','STDatamatPopup');
popup_string = get(h,'String');
selected_idx = get(h,'Value');
selected_data = popup_string{selected_idx};
% load the datamat if not loaded yet
%
last_datamat = getappdata(gcf,'PlottedDatamat');
if strcmp(last_datamat,selected_data) == 0
set(findobj(gcf,'Tag','MessageLine'),'String','Loading data ... ');
[st_datamat,org_coords,num_subj,subj_name,cond_name,behavname]= ...
load_plotted_datamat;
cond_selection = getappdata(gcf,'cond_selection');
if isempty(cond_selection)
cond_selection = ones(1,length(cond_name));
end
selected_subjects = ones(num_subj,1);
bmask = selected_subjects * cond_selection;
bmask = find(bmask(:));
st_datamat = st_datamat(bmask,:);
setappdata(gcf,'PlottedDatamat',selected_data);
setappdata(gcf,'STDatamat',st_datamat);
setappdata(gcf,'org_coords',org_coords);
setappdata(gcf,'num_subj',num_subj);
setappdata(gcf,'subj_name',subj_name);
set(findobj(gcf,'Tag','MessageLine'),'String','');
else
org_coords = getappdata(gcf,'org_coords');
end;
% extract the currect ploting data
%
cur_coord = getappdata(gcf,'Coord');
if isempty(cur_coord)
msg = 'ERROR: No point has been seleted to plot.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(gca,'visible','off');
return;
end;
coord_idx = find(st_coords == cur_coord);
if isempty(coord_idx)
msg = 'ERROR: The selected point is outside the brain region.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
set(gca,'visible','off');
return;
end;
coord_idx = find(org_coords == cur_coord);
st_datamat = getappdata(gcf,'STDatamat');
% [nr,nc] = size(st_datamat);
% cols = nc / st_win_size;
% st_data = reshape(st_datamat,[nr,st_win_size,cols]);
% st_data = squeeze(st_data(:,[1:num_pts_plotted],coord_idx));
st_data = st_datamat;
% h = findobj(gcf,'Tag','NormalizePlots');
% normalize_flg = get(h,'UserData');
% if (normalize_flg == 1),
% max_st_data = max(st_data,[],2);
% min_st_data = min(st_data,[],2);
% max_mtx = max_st_data(:,ones(1,num_pts_plotted));
% min_mtx = min_st_data(:,ones(1,num_pts_plotted));
% scale_factor = max_mtx - min_mtx;
% st_data = (st_data - min_mtx) ./ scale_factor;
% end;
selected_condition = getappdata(gcf,'SelectedCondition');
% num_conditions = length(selected_condition);
% 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);
% if (max_num_stim < condition{i}.num_stim)
% max_num_stim = condition{i}.num_stim;
% end;
% end;
% generate the plots
%
cond_idx = find(selected_condition == 1);
% 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;
% struct_plot_cond_stim_ui('STARTUP', st_data, axes_margin, cond_idx);
setappdata(gcf,'ST_data',st_data);
setappdata(gcf,'PlotCondIdx',cond_idx);
if isempty(getappdata(gcf,'CombinePlots'))
setappdata(gcf,'CombinePlots',0);
end;
if isempty(getappdata(gcf,'ShowAverage'))
setappdata(gcf,'ShowAverage',0);
end;
% the following code is to get an intensity array for the voxel and plot it
% find out the coord_idx
%
coord = getappdata(gcf,'Coord');
org_coords = getappdata(gcf,'org_coords');
coord_idx = find(org_coords == coord);
num_subj = getappdata(gcf,'num_subj');
subj_name = getappdata(gcf,'subj_name');
subjects = [subj_name, {'mean'}];
for k = cond_idx % cond
for n = 1:num_subj % subj
j = n+(k-1)*num_subj; % row number in datamat
intensity(k,n) = st_data(j, coord_idx);
intensity_hdl(k,n) = 0; % initialization
end
intensity_avg_hdl(k) = 0;
end
intensity_avg = mean(intensity,2);
color_code =[ 'bo';'rx';'g+';'m*';'bs';'rd';'g^';'m<';'bp';'r>'; ...
'gh';'mv';'ro';'gx';'m+';'b*';'rs';'gd';'m^';'b<'];
% need more color
%
if num_subj+1 > size(color_code,1)
tmp = [];
for i=1:ceil((num_subj+1)/size(color_code,1))
tmp = [tmp; color_code];
end
color_code = tmp;
end
cla; grid off; hold on;
for k = cond_idx
for n = 1:num_subj
intensity_hdl(k,n) = plot(k,intensity(k,n), ...
color_code(n,:));
end
intensity_avg_hdl(k) = bar(k,intensity_avg(k));
set(intensity_avg_hdl(k),'facecolor','none')
% set(intensity_avg_hdl(k), 'linewidth', 2);
end
% normalize with intensity(:), not st_data(:)
%
min_y = min(intensity(:)); max_y = max(intensity(:));
margin_y = abs((max_y - min_y) / 100);
axis([0 length(cond_idx)+1 min_y-margin_y max_y+margin_y]);
set(gca, 'xtick', cond_idx);
xlabel('Conditions');
ylabel('Intensities');
xyz = getappdata(gcf,'XYZ');
title(['Intensity for subjects and mean at voxel: [',num2str(xyz),']']);
hold off;
l_hdl = [];
if ~isempty(subjects),
intensity_legend = [intensity_hdl(1,:), intensity_avg_hdl(1)];
% remove the old legend to avoid the bug in the MATLAB5
old_legend = getappdata(gcf,'LegendHdl');
if ~isempty(old_legend),
try
delete(old_legend{1});
catch
end;
end;
% create a new legend, and save the handles
[l_hdl, o_hdl] = legend(intensity_legend, subjects, 0);
legend_txt(o_hdl);
set(l_hdl,'color',[0.9 1 0.9]);
setappdata(gcf,'LegendHdl',[{l_hdl} {o_hdl}]);
else
setappdata(gcf,'LegendHdl',[]);
end;
set(findobj(gcf,'Tag','DataMenu'),'visible','on');
return;
%--------------------------------------------------------------------------
%
function save_response_fn()
st_coords = getappdata(gcf,'STCoords');
org_coords = getappdata(gcf,'org_coords');
xyz = getappdata(gcf,'XYZ');
% extract the currect ploting data
%
cur_coord = getappdata(gcf,'Coord');
if isempty(cur_coord)
msg = 'ERROR: No point has been seleted to plot.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
coord_idx = find(st_coords == cur_coord);
if isempty(coord_idx)
msg = 'ERROR: The selected point is outside the brain region.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
coord_idx = find(org_coords == cur_coord);
% get selected file names
%
st_files = getappdata(gcf,'STFiles');
h = findobj(gcf,'Tag','STDatamatPopup');
selected_idx = get(h,'Value');
selected_files = st_files{selected_idx}.fullname;
% extract the data of the selected voxel
%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -