📄 erp_analysis_ui.m
字号:
full_path = getappdata(gcf,'full_path');
DisplayGroupProfiles(full_path);
UpdateSlider;
return; % SelectGroupProfiles
%----------------------------------------------------------------------------
function MoveSlider()
slider_hdl = findobj(gcf,'Tag','GroupSlider');
curr_value = round(get(slider_hdl,'Value'));
total_rows = round(get(slider_hdl,'Max'));
top_group_idx = total_rows - curr_value + 1;
setappdata(gcf,'TopGroupIdx',top_group_idx);
full_path = getappdata(gcf,'full_path');
DisplayGroupProfiles(full_path);
return; % MoveSlider
%----------------------------------------------------------------------------
function UpdateSlider()
top_group_idx = getappdata(gcf,'TopGroupIdx');
rows = getappdata(gcf,'NumRows');
curr_group_profiles = getappdata(gcf,'CurrGroupProfiles');
num_groups = length(curr_group_profiles);
total_rows = num_groups + 1;
slider_hdl = findobj(gcf,'Tag','GroupSlider');
if (total_rows > 1) % don't need to update when no group
set(slider_hdl,'Min',1,'Max',total_rows, ...
'Value',total_rows-top_group_idx+1, ...
'Sliderstep',[1/(total_rows-1)-0.00001 1/(total_rows-1)]);
end;
return; % UpdateSlider
%----------------------------------------------------------------------------
function ShowSlider()
slider_hdl = findobj(gcf,'Tag','GroupSlider');
set(slider_hdl,'visible','on');
return; % ShowSlider
%----------------------------------------------------------------------------
function HideSlider()
slider_hdl = findobj(gcf,'Tag','GroupSlider');
set(slider_hdl,'visible','off');
return; % HideSlider
%----------------------------------------------------------------------------
function SelectMean;
if get(findobj(gcf,'Tag','SelectMean'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','SelectMean'),'Value',1);
else
% set(findobj(gcf,'Tag','SelectHelmert'),'Value',0);
set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);
set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','off');
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
end
return; % SelectMean
%----------------------------------------------------------------------------
function SelectHelmert;
if get(findobj(gcf,'Tag','SelectHelmert'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','SelectHelmert'),'Value',1);
else
set(findobj(gcf,'Tag','SelectMean'),'Value',0);
set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);
set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','off');
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
end
return; % SelectHelmert
%----------------------------------------------------------------------------
function SelectContrastData;
if get(findobj(gcf,'Tag','SelectContrastData'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','SelectContrastData'),'Value',1);
else
set(findobj(gcf,'Tag','SelectMean'),'Value',0);
% set(findobj(gcf,'Tag','SelectHelmert'),'Value',0);
set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);
set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[1 1 1]);
set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','on');
set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','on');
set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','on');
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
end
return; % SelectContrastData
%----------------------------------------------------------------------------
function SelectBehavData;
if get(findobj(gcf,'Tag','SelectBehavData'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','SelectBehavData'),'Value',1);
else
set(findobj(gcf,'Tag','SelectMean'),'Value',0);
% set(findobj(gcf,'Tag','SelectHelmert'),'Value',0);
set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',0);
set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[1 1 1]);
set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','on');
set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','on');
set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','on');
set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','on');
num_boot = str2num(get(findobj(gcf,'Tag','NumBootstrapEdit'),'String'));
if ~isempty(num_boot) & num_boot ~= 0
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[1 1 1]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','on');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','on');
end
set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','off');
end
return; % SelectBehavData
%----------------------------------------------------------------------------
function SelectMultiblockData;
if get(findobj(gcf,'Tag','SelectMultiblockData'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','SelectMultiblockData'),'Value',1);
else
set(findobj(gcf,'Tag','SelectMean'),'Value',0);
set(findobj(gcf,'Tag','SelectBehavData'),'Value',0);
set(findobj(gcf,'Tag','SelectContrastData'),'Value',0);
set(findobj(gcf,'Tag','ContrastFileEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ContrastDataLabel'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileEdit'),'Enable','off');
set(findobj(gcf,'Tag','ContrastFileButton'),'Enable','off');
set(findobj(gcf,'Tag','PosthocDataEdit'),'BackGroundColor',[1 1 1]);
set(findobj(gcf,'Tag','ModifyBehavdataMenu'),'Enable','on');
set(findobj(gcf,'Tag','PosthocDataLabel'),'Enable','on');
set(findobj(gcf,'Tag','PosthocDataEdit'),'Enable','on');
set(findobj(gcf,'Tag','PosthocDataBn'),'Enable','on');
num_boot = str2num(get(findobj(gcf,'Tag','NumBootstrapEdit'),'String'));
if ~isempty(num_boot) & num_boot ~= 0
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[1 1 1]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','on');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','on');
end
set(findobj(gcf,'Tag','MultiblockDeselectConditionMenu'),'Enable','on');
end
return; % SelectMultiblockData
%----------------------------------------------------------------------------
function EditNumBoot
% contain behavpls
%
if get(findobj(gcf,'Tag','SelectBehavData'),'Value') == 1 | ...
get(findobj(gcf,'Tag','SelectMultiblockData'),'Value') == 1
num_boot = str2num(get(findobj(gcf,'Tag','NumBootstrapEdit'),'String'));
if ~isempty(num_boot) & num_boot ~= 0
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[1 1 1]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','on');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','on');
else
set(findobj(gcf,'Tag','ClimEdit'),'BackGroundColor',[0.9 0.9 0.9]);
set(findobj(gcf,'Tag','ClimLabel'),'Enable','off');
set(findobj(gcf,'Tag','ClimEdit'),'Enable','off');
end
end
return; % EditNumBoot
%----------------------------------------------------------------------------
function SwitchFullPath()
h = findobj(gcf,'Tag','FullPathChkbox');
full_path = get(h,'Value');
setappdata(gcf,'full_path',full_path);
DisplayGroupProfiles(full_path);
return; % SwitchFullPath
%----------------------------------------------------------------------------
function status = SavePLSOptions
status = -1;
setappdata(gcf,'PLSoptions',[]);
% profiles
%
curr_profiles = getappdata(gcf,'CurrGroupProfiles');
num_groups = length(curr_profiles);
if num_groups == 0
msg = 'ERROR: Datamat group is not specified.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
save_datamat = get(findobj(gcf,'Tag','SaveDatamatChkbox'),'Value');
ismean = get(findobj(gcf,'Tag','SelectMean'),'Value');
ishelmert = 0; % get(findobj(gcf,'Tag','SelectHelmert'),'Value');
iscontrast = get(findobj(gcf,'Tag','SelectContrastData'),'Value');
isbehav = get(findobj(gcf,'Tag','SelectBehavData'),'Value');
ismultiblock = get(findobj(gcf,'Tag','SelectMultiblockData'),'Value');
PLSoptions.save_datamat = save_datamat;
PLSoptions.cond_selection = getappdata(gcf,'cond_selection');
PLSoptions.behavname = getappdata(gcf,'behavname');
PLSoptions.behavdata = getappdata(gcf,'behavdata');
PLSoptions.behavdata_lst = getappdata(gcf,'behavdata_lst');
PLSoptions.bscan = getappdata(gcf,'bscan');
if isempty(PLSoptions.bscan)
PLSoptions.bscan = 1:sum(PLSoptions.cond_selection);
end
PLSoptions.ismean = ismean;
PLSoptions.ishelmert = ishelmert;
PLSoptions.iscontrast = iscontrast;
PLSoptions.isbehav = isbehav;
PLSoptions.ismultiblock = ismultiblock;
% Check data integrity for behavdata & contrastdata
%
PLSoptions.profiles = cell(1,num_groups);
num_behavdata_col = 99999;
num_contrastdata_col = 99999;
for i=1:num_groups
PLSoptions.profiles{i} = curr_profiles{i};
load(curr_profiles{i},'session_info');
behavdata = session_info.behavdata;
contrastdata = session_info.contrastdata;
if (isbehav | ismultiblock) & isempty(PLSoptions.behavdata_lst) & isempty(behavdata)
msg = ['ERROR: Behavior data is required'];
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
elseif (isbehav | ismultiblock) & ~isempty(PLSoptions.behavdata_lst) % behavdata input from run
num_behavdata_col = size(PLSoptions.behavdata_lst{1},2);
setappdata(gcf,'num_selected_behav',num_behavdata_col);
elseif isbehav | ismultiblock % behavdata from session
tmp_col = size(behavdata,2);
if tmp_col < num_behavdata_col
num_behavdata_col = tmp_col;
end
end % if isbehav & ...
% if iscontrast & isempty(contrastdata)
% msg = ['ERROR: Contrast data is required'];
% set(findobj(gcf,'Tag','MessageLine'),'String',msg);
% return;
% elseif iscontrast
% tmp_col = size(contrastdata,2);
% if tmp_col < num_contrastdata_col
% num_contrastdata_col = tmp_col;
% end
% end % if iscontrast & ...
end % for i=1:num_groups
if ~isfield(session_info,'system')
session_info.system.class = 1;
session_info.system.type = 1;
end
PLSoptions.system = session_info.system;
PLSoptions.ContrastFile = get(findobj(gcf,'tag','ContrastFileEdit'),'string');
if iscontrast == 1
if isempty(PLSoptions.ContrastFile)
msg = 'ERROR: Contrast file is not specified.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
else
try
use_contrast = load(PLSoptions.ContrastFile);
cond_selection = getappdata(gcf,'cond_selection');
load(curr_profiles{1},'selected_conditions');
selected_conditions_idx = find(selected_conditions);
new_cond_selection = zeros(1, length(selected_conditions));
new_cond_selection(selected_conditions_idx(find(cond_selection))) = 1;
if size(use_contrast,1) ~= sum(new_cond_selection)*num_groups
msg = 'ERROR: incompetible number of condition in contrast.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
catch
msg = 'ERROR: cannot load the contrast file.';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
% check if the contrast matrix is rank deficient
%
if (rank(use_contrast) ~= size(use_contrast,2))
msg = 'Your Contrast matrix is rank deficient. Please check your contrasts and run the program again';
uiwait(msgbox(msg,'Warning: Contrasts are not linear independent','modal'));
% set(findobj(gcf,'Tag','MessageLine'),'String',msg);
% return;
end;
% check if the contrast matrix is orthogonal
%
% if abs(sum(sum(use_contrast'*use_contrast-diag(diag(use_contrast'*use_contrast))))) > 1e-6
check_orth = abs(triu(use_contrast'*use_contrast) - tril(use_contrast'*use_contrast));
if max(check_orth(:)) > 1e-6
msg = 'Effects expressed by each contrast are not independent. Check variable lvintercorrs in result file to see overlap of effects between LVs';
uiwait(msgbox(msg,'Warning: Contrasts are not orthogonal','modal'));
% set(findobj(gcf,'Tag','MessageLine'),'String',msg);
% return;
end
end
end;
% make sure the profile name not duplicate etc.
%
setappdata(gcf,'PLSoptions',PLSoptions);
total_profiles = ValidateProfiles(PLSoptions.profiles);
if (total_profiles == -1)
return;
end;
PLSoptions.TotalNumberProfiles = total_profiles;
% if (iscontrast == 0) % if not use contrastdata
PLSoptions.ContrastDataCol = 1;
% else % if use contrastdata
% PLSoptions.ContrastDataCol = 1:num_contrastdata_col;
%end
if (isbehav == 0 & ismultiblock == 0) % if not use behavdata
PLSoptions.BehavDataCol = 1;
PLSoptions.posthoc = [];
else % if use behavdata
% behav data column selection
%
%h = findobj(gcf,'Tag','BehavDataColEdit');
%PLSoptions.BehavDataCol = str2num(get(h,'String'));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -