📄 erp_bs_option_ui.m
字号:
set(h_min_ratio, 'string', sprintf('%8.5f', bs_field{1}.min_ratio));
set(h_max_ratio, 'string', sprintf('%8.5f', bs_field{1}.max_ratio));
setappdata(h01,'bs_option_fig',h01);
setappdata(h01,'bs_ratio',bs_ratio);
setappdata(h01,'h_bs_edit',h_bs_edit);
setappdata(h01,'h_bs_disp',h_bs_disp);
setappdata(h01,'h_p_value',h_p_value);
setappdata(h01,'h_thresh',h_thresh);
setappdata(h01,'h_min_ratio',h_min_ratio);
setappdata(h01,'h_max_ratio',h_max_ratio);
setappdata(h01,'bs_selection',getappdata(h0,'bs_selection'));
setappdata(h01,'bs_field',bs_field);
return; % init
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% select_all: select all the boot straps
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function select_all
h_bs_disp = getappdata(gcf, 'h_bs_disp');
bs_selection = 1 : size(get(h_bs_disp, 'string'), 1);
set(h_bs_disp, 'value', bs_selection);
return % select_all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% select_lv: select lv to edit
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function select_lv
h_p_value = getappdata(gcf,'h_p_value');
h_thresh = getappdata(gcf,'h_thresh');
h_min_ratio = getappdata(gcf,'h_min_ratio');
h_max_ratio = getappdata(gcf,'h_max_ratio');
lv_idx = get(gco,'value');
bs_field = getappdata(gcf,'bs_field');
set(h_p_value, 'string', sprintf('%8.5f', bs_field{lv_idx}.p_value));
set(h_thresh, 'string', sprintf('%8.5f', bs_field{lv_idx}.thresh));
set(h_min_ratio, 'string', sprintf('%8.5f', bs_field{lv_idx}.min_ratio));
set(h_max_ratio, 'string', sprintf('%8.5f', bs_field{lv_idx}.max_ratio));
return; % select_lv
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% edit_thresh: edit threshold field
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function edit_thresh
h_bs_edit = getappdata(gcf,'h_bs_edit');
h_p_value = getappdata(gcf,'h_p_value');
h_thresh = getappdata(gcf,'h_thresh');
h_min_ratio = getappdata(gcf,'h_min_ratio');
h_max_ratio = getappdata(gcf,'h_max_ratio');
bs_field = getappdata(gcf,'bs_field');
lv_idx = get(h_bs_edit,'value');
thresh = str2num(get(h_thresh,'string'));
min_ratio = str2num(get(h_min_ratio,'string'));
max_ratio = str2num(get(h_max_ratio,'string'));
if isempty(max_ratio) | isempty(min_ratio) | isempty(thresh) ...
| (abs(max_ratio) < thresh) | (abs(min_ratio) < thresh)
msg = 'Invalid Threshold Value';
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
set(h_thresh, 'string', sprintf('%8.5f', bs_field{lv_idx}.thresh));
return;
end
% update p_value
%
bs_ratio = getappdata(gcf,'bs_ratio');
p_value = UpdatePValue(bs_ratio, lv_idx, thresh);
set(h_p_value, 'string', sprintf('%8.5f', p_value));
% update bs_field
%
set(h_thresh, 'string', sprintf('%8.5f', thresh));
bs_field = getappdata(gcf,'bs_field');
bs_field{lv_idx}.thresh = thresh;
bs_field{lv_idx}.p_value = p_value;
setappdata(gcf, 'bs_field', bs_field);
return; % edit_thresh
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% edit_min_ratio: edit minimum bootstrap ratio field to display
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function edit_min_ratio
h_bs_edit = getappdata(gcf,'h_bs_edit');
h_p_value = getappdata(gcf,'h_p_value');
h_thresh = getappdata(gcf,'h_thresh');
h_min_ratio = getappdata(gcf,'h_min_ratio');
h_max_ratio = getappdata(gcf,'h_max_ratio');
bs_field = getappdata(gcf,'bs_field');
lv_idx = get(h_bs_edit,'value');
thresh = str2num(get(h_thresh,'string'));
min_ratio = str2num(get(h_min_ratio,'string'));
max_ratio = str2num(get(h_max_ratio,'string'));
if isempty(max_ratio) | isempty(min_ratio) | isempty(thresh) ...
| (abs(max_ratio) < thresh) | (abs(min_ratio) < thresh)
msg = 'Invalid Minimum Ratio Value';
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
set(h_min_ratio,'string',sprintf('%8.5f',bs_field{lv_idx}.min_ratio));
return;
end
% update bs_field
%
set(h_min_ratio, 'string', sprintf('%8.5f', min_ratio));
bs_field = getappdata(gcf,'bs_field');
bs_field{lv_idx}.min_ratio = min_ratio;
setappdata(gcf, 'bs_field', bs_field);
return; % edit_min_ratio
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% edit_max_ratio: edit maximum bootstrap ratio field to display
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function edit_max_ratio
h_bs_edit = getappdata(gcf,'h_bs_edit');
h_p_value = getappdata(gcf,'h_p_value');
h_thresh = getappdata(gcf,'h_thresh');
h_min_ratio = getappdata(gcf,'h_min_ratio');
h_max_ratio = getappdata(gcf,'h_max_ratio');
bs_field = getappdata(gcf,'bs_field');
lv_idx = get(h_bs_edit,'value');
thresh = str2num(get(h_thresh,'string'));
min_ratio = str2num(get(h_min_ratio,'string'));
max_ratio = str2num(get(h_max_ratio,'string'));
if isempty(max_ratio) | isempty(min_ratio) | isempty(thresh) ...
| (abs(max_ratio) < thresh) | (abs(min_ratio) < thresh)
msg = 'Invalid Maximum Ratio Value';
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
set(h_max_ratio,'string',sprintf('%8.5f',bs_field{lv_idx}.max_ratio));
return;
end
% update bs_field
%
set(h_max_ratio, 'string', sprintf('%8.5f', max_ratio));
bs_field = getappdata(gcf,'bs_field');
bs_field{lv_idx}.max_ratio = max_ratio;
setappdata(gcf, 'bs_field', bs_field);
return; % edit_max_ratio
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% reset_bs_fields: reset bootstrap values to their default values
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function reset_bs_fields
h_bs_edit = getappdata(gcf,'h_bs_edit');
h_p_value = getappdata(gcf,'h_p_value');
h_thresh = getappdata(gcf,'h_thresh');
h_min_ratio = getappdata(gcf,'h_min_ratio');
h_max_ratio = getappdata(gcf,'h_max_ratio');
bs_ratio = getappdata(gcf,'bs_ratio');
bs_field = set_bs_fields(bs_ratio);
lv_idx = get(h_bs_edit,'value');
thresh = bs_field{lv_idx}.thresh;
p_value = bs_field{lv_idx}.p_value;
min_ratio = bs_field{lv_idx}.min_ratio;
max_ratio = bs_field{lv_idx}.max_ratio;
% update bs_field
%
set(h_thresh, 'string', sprintf('%8.5f', thresh));
set(h_p_value, 'string', sprintf('%8.5f', p_value));
set(h_min_ratio, 'string', sprintf('%8.5f', min_ratio));
set(h_max_ratio, 'string', sprintf('%8.5f', max_ratio));
setappdata(gcf, 'bs_field', bs_field);
return; % reset_bs_fields
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% set initial bootstrap field
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function bs_field = set_bs_fields(bs_ratio)
bs_field = [];
if isempty(bs_ratio) % no bootstrap data -> return;
return;
end
lv_num = size(bs_ratio,2);
bs95 = percentile(bs_ratio, 95);
for lv_idx = 1:lv_num
bs_value.min_ratio = min(bs_ratio(:,lv_idx));
bs_value.max_ratio = max(bs_ratio(:,lv_idx));
% find 95 percentile as initial threshold
%
bs_value.thresh = bs95(lv_idx);
bs_value.p_value = UpdatePValue(bs_ratio, lv_idx, bs_value.thresh);
bs_field{lv_idx} = bs_value;
end
return; % set_bs_fields
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% p_value is updated whenever threshold or LV index is changed
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function p_value = UpdatePValue(bs_ratio, lv_idx, thresh)
curr_bs_ratio = bs_ratio(:,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(thresh,0,1); %std_ratio);
return; % UpdatePValue
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% calculate p_value, based on threshold (x) and ratio std (sigma)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function p_value = ratio2p(x,mu,sigma)
p_value = (1 + erf( (x - mu) / (sqrt(2)*sigma))) / 2;
p_value = (1 - p_value) * 2;
return; % ratio2p
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% click_ok
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function click_ok
h01 = gcbf;
h0 = getappdata(h01,'main_fig');
datamat_file = getappdata(h0,'datamat_file'); % get filename for setting
view_option = getappdata(h0,'view_option');
setting = getappdata(h0,'setting');
bsr = getappdata(h0,'bs_ratio');
bs_amplitude = getappdata(h0,'bs_amplitude');
[ti, ch, lv] = size(bs_amplitude);
bs_amplitude = [];
% listbox value are taken now, no callback fcn for listbox
%
bs_selection = get(getappdata(h01,'h_bs_disp'),'value') - 1;
if ~isempty(bs_selection)
setappdata(h01,'bs_selection', bs_selection);
end
% collecting setting that may have been changed by callback fcn
%
setting.bs_selection = getappdata(h01,'bs_selection');
setting.bs_field = getappdata(h01,'bs_field');
old_setting = getappdata(h0, 'setting');
if isequal(setting,old_setting) % nothing was changed
close(h01);
return;
end
try
switch view_option
case {2}
setting2 = setting;
save(datamat_file, '-append', 'setting2');
case {3}
setting3 = setting;
save(datamat_file, '-append', 'setting3');
end
catch
msg = 'Cannot save setting information';
set(findobj(h01,'Tag','MessageLine'),'String',['ERROR: ', msg]);
return;
end;
for i = 1:size(bsr,2)
too_large = find(bsr > (setting.bs_field{i}.max_ratio));
bsr(too_large) = setting.bs_field{i}.max_ratio;
too_small = find(bsr < (setting.bs_field{i}.min_ratio));
bsr(too_small) = setting.bs_field{i}.min_ratio;
bs_amplitude(:,i) = (abs(bsr(:,i)) >= (setting.bs_field{i}.thresh));
end
bs_amplitude = reshape(bs_amplitude, [ti, ch, lv]);
setappdata(h0,'bs_amplitude',bs_amplitude);
setappdata(h0,'bs_selection',setting.bs_selection);
setappdata(h0,'bs_field',setting.bs_field);
setappdata(h0,'setting',setting);
setappdata(h0, 'init_option',[]); % means need to redraw
close(h01);
old_pointer0 = get(h0,'pointer');
set(h0,'pointer','watch');
erp_showplot_ui(h0);
set(h0,'pointer',old_pointer0);
return; % click_ok
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% delete_fig
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function delete_fig
try
load('pls_profile');
pls_profile = which('pls_profile.mat');
erp_bs_option_pos = get(gcbf,'position');
save(pls_profile, '-append', 'erp_bs_option_pos');
catch
end
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -