📄 fmri_session_profile_ui.m
字号:
% msg = sprintf('One condition onsets is empty across run.');
msg = sprintf('onset field should not be empty.');
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
return;
end
if session_info.across_run
session_info.num_conditions = session_info.num_conditions0;
session_info.condition = session_info.condition0;
session_info.condition_baseline = session_info.condition_baseline0;
else
session_info.num_conditions = session_info.num_runs * session_info.num_conditions0;
for i = 1:session_info.num_runs
for j = 1:session_info.num_conditions0
session_info.condition{ (i-1)*session_info.num_conditions0 + j } = ...
[ 'Run' num2str(i) session_info.condition0{j} ];
end
end
session_info.condition_baseline = ...
repmat(session_info.condition_baseline0, [session_info.num_runs 1]);
session_info.condition_baseline = session_info.condition_baseline';
session_info.condition_baseline = [session_info.condition_baseline(:)]';
end
setappdata(gcf,'SessionNumConditions',session_info.num_conditions);
setappdata(gcf,'SessionConditions',session_info.condition);
setappdata(gcf,'SessionConditionBaseline',session_info.condition_baseline);
if (save_as_flag ~= 0) | isempty(session_file)
[filename, pathname] = ...
uiputfile([session_info.datamat_prefix '_fMRIsession.mat'], ...
'Save the PLS session information');
if isequal(filename,0)
return;
end;
if ~rri_chkfname(filename, 'fMRI', 'session')
msg = ['File name must be ended with _fMRIsession.mat'];
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
return;
end
session_file = [pathname, filename];
else
[pathname, filename] = rri_fileparts(session_file);
end;
create_ver = plsgui_vernum;
try
save (session_file, 'session_info','create_ver');
catch
msg = sprintf('Cannot save session information to ''%s'' ',filename);
set(findobj(gcf,'Tag','MessageLine'),'String',['ERROR: ', msg]);
return;
end;
[fpath, fname, fext] = fileparts(session_file);
msg = sprintf('Session information has been saved into ''%s'' ',[fname, fext]);
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
setappdata(gcf,'SessionFile',session_file);
setappdata(gcf,'OldSessionInfo',session_info);
setappdata(gcf,'SessionRunInfo',session_info.run)
set(gcf,'Name',['Session File: ' session_file]);
set(findobj(gcf,'Tag','STDDatamatMenu'),'enable','on');
set(findobj(gcf,'Tag','ModifyBehavMenu'),'enable','on');
set(findobj(gcf,'Tag','PathPLSsessionMenu'),'enable','on');
status = 1;
msg1 = ['WARNING: Do not change file name manually in command window.'];
uiwait(msgbox(msg1,'File has been saved'));
return; % SaveSessionInfo
%----------------------------------------------------------------------------
function status = CloseSessionInput()
if (ChkModified == 0)
status = 0;
return; % error
end;
status = 1;
return; % CloseSessionInput
%----------------------------------------------------------------------------
function ShowSessionInfo()
h = findobj(gcf,'Tag','SessionDescriptionEdit');
set(h,'String',getappdata(gcf,'SessionDescription'));
h = findobj(gcf,'Tag','PLSDataDirectoryEdit');
set(h,'String',getappdata(gcf,'SessionPLSDir'));
h = findobj(gcf,'Tag','DatamatPrefixEdit');
set(h,'String',getappdata(gcf,'SessionDatamatPrefix'));
num_conds = getappdata(gcf,'SessionNumConditions0');
h = findobj(gcf,'Tag','NumberConditionsEdit');
set(h,'String',num_conds);
if (num_conds <= 0),
set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','off');
else
set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','on');
end;
num_runs = getappdata(gcf,'SessionNumRuns');
h = findobj(gcf,'Tag','NumberRunsEdit');
if (num_runs <= 0)
set(h,'String','0');
set(findobj(gcf,'Tag','NumberRunsButton'),'Enable','off');
else
set(h,'String',num2str(num_runs));
set(findobj(gcf,'Tag','NumberRunsButton'),'Enable','on');
end;
h1 = findobj(gcf,'Tag','MergeDataAcrossRunsButton');
h2 = findobj(gcf,'Tag','MergeDataWithinRunButton');
if getappdata(gcf,'SessionAcrossRun')
set(h1,'value',1);
set(h2,'value',0);
else
set(h1,'value',0);
set(h2,'value',1);
end
return; % ShowSessionInfo
%----------------------------------------------------------------------------
function EditPLSDataDir
pls_dir = deblank(strjust(get(gcbo,'String'),'left'));
set(gcbo,'String',pls_dir);
%
if ( exist(pls_dir,'dir') == 7 ) % specified directory exists
setappdata(gcf,'SessionPLSDir',pls_dir);
return;
end;
if ( exist(pls_dir,'file') == 2 ) % it is a file!
msg = 'ERROR: The specified direcotry is a file!';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
% the directory does not exist, how about the parent directory ?
%
[fpath,fname,fext] = fileparts(pls_dir);
if ( exist(fpath,'dir') == 7 ) % parent directory exists
dlg_title = 'PLS Directory';
msg = 'The directory does not exist. Do you want to create it?';
response = questdlg(msg,dlg_title,'Yes','No','Yes');
switch response,
case 'Yes',
status = mkdir(fpath,[fname fext]);
if (status ~= 1)
msg = sprintf('ERROR: Directory cannot be created');
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
end;
cd (fpath);
case 'No',
set(gcbo,'String','');
end;
else
msg = 'ERROR: Invalid input direcotry!';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
end;
return; % EditPLSDataDir
%----------------------------------------------------------------------------
function SelectPLSDataDir
h = findobj(gcf,'Tag','PLSDataDirectoryEdit');
pls_data_dir = rri_getdirectory({get(h,'String')});
if ~isempty(pls_data_dir),
set(h,'String',pls_data_dir);
set(h,'TooltipString',pls_data_dir);
setappdata(gcf,'SessionPLSDir',pls_data_dir);
end;
return; % SelectPLSDataDir
%----------------------------------------------------------------------------
function EditConditions()
condition0 = getappdata(gcf,'SessionConditions0');
condition_baseline0 = getappdata(gcf,'SessionConditionBaseline0');
num_conditions0 = getappdata(gcf,'SessionNumConditions0');
run_info = getappdata(gcf,'SessionRunInfo');
% determine which conditions that cannot be removed as onsets are defined
% for some of the runs
%
used_conditions = zeros(1,num_conditions0);
for i=1:length(run_info),
cond_idx = find(used_conditions == 0);
for j=1:length(cond_idx),
if ~isempty(run_info(i).evt_onsets{cond_idx(j)}),
used_conditions(cond_idx(j)) = 1;
end;
end;
end;
protected_cond = []; % find(used_conditions == 1);
% edit the names of the conditions
%
[new_condition0,new_condition_baseline0,removed_condition_idx] = ...
fmri_input_condition_ui(condition0,condition_baseline0,protected_cond);
% remove the deleted conditions from the runs
%
keep_conditions = ones(1,num_conditions0);
keep_conditions(removed_condition_idx) = 0;
cond_idx = find(keep_conditions == 1);
for i=1:length(run_info),
new_onsets = cell(1,length(new_condition0));
new_onsets(1:length(cond_idx)) = run_info(i).evt_onsets(cond_idx);
run_info(i).evt_onsets = new_onsets;
end;
num_conds = num2str(length(new_condition0));
set(findobj(gcf,'Tag','NumberConditionsEdit'),'String',num_conds);
if (num_conds <= 0),
set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','off');
else
set(findobj(gcf,'Tag','MergeConditionsMenu'),'Enable','on');
end;
setappdata(gcf,'SessionConditions0',new_condition0);
setappdata(gcf,'SessionConditionBaseline0',new_condition_baseline0);
setappdata(gcf,'SessionNumConditions0',length(new_condition0));
setappdata(gcf,'SessionRunInfo',run_info);
return; % EditConditions
%----------------------------------------------------------------------------
function MergeConditions()
condition = getappdata(gcf,'SessionConditions0');
cond_baseline = getappdata(gcf,'SessionConditionBaseline0');
num_conditions = getappdata(gcf,'SessionNumConditions0');
run_info = getappdata(gcf,'SessionRunInfo');
merged_conds = fmri_merge_condition_ui(condition);
if isempty(merged_conds) % cancel merging
return;
end;
% update the condition names
%
num_new_conditions = length(merged_conds);
unmatch_cond = []; % conditions that cond_baseline can not match
for i=1:num_new_conditions,
new_condition{i} = merged_conds(i).name;
idx = merged_conds(i).cond_idx;
new_cond_baseline{i} = cond_baseline{idx(1)};
% compare the cond_baseline consistency for merged_cond
if length(merged_conds(i).cond_idx) > 1
same_baseline = 1;
for j = 2:length(idx)
if ~isequal(cond_baseline{idx(1)}, cond_baseline{idx(j)})
same_baseline = 0;
end
end
if ~same_baseline
unmatch_cond = [unmatch_cond, ' ', new_condition{i}];
new_cond_baseline{i} = [0 1];
end
end
end;
if ~isempty(unmatch_cond)
% msg = ['WARNING: The [ref_scan_onset,num_ref_scan] in condition', unmatch_cond];
msg = ['WARNING: The [ref_scan_onset,num_ref_scan] in some new conditions'];
msg = [msg, ' has been reset to [0,1].'];
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
end
% update the onsets for the new conition
%
for i=1:length(run_info),
old_onsets = run_info(i).evt_onsets;
new_onsets = cell(1,num_new_conditions);
for j=1:num_new_conditions,
c_idx = merged_conds(j).cond_idx;
merge_onsets = [];
for k=c_idx
merge_onsets = [merge_onsets; old_onsets{k}];
end
new_onsets{j} = sort(merge_onsets);
end;
run_info(i).evt_onsets = new_onsets;
end;
h = findobj(gcf,'Tag','NumberConditionsEdit');
set(h,'String',num2str(num_new_conditions));
setappdata(gcf,'SessionConditions0',new_condition);
setappdata(gcf,'SessionNumConditions0',num_new_conditions);
setappdata(gcf,'SessionConditionBaseline0',new_cond_baseline);
setappdata(gcf,'SessionRunInfo',run_info);
return; % MergeConditions
%----------------------------------------------------------------------------
function EditRunNumber()
num_runs = str2num(get(gcbo,'String'));
if isempty(num_runs) | (num_runs <= 0)
set(gcbo,'String','');
h = findobj(gcf,'Tag','NumberRunsButton');
set(h,'Enable','off');
return;
end;
h = findobj(gcf,'Tag','NumberRunsButton');
set(h,'Enable','on');
setappdata(gcf,'SessionNumRuns',num_runs);
return; % EditRunNumber
%----------------------------------------------------------------------------
function EditRuns()
if (getappdata(gcf,'SessionNumConditions0') <= 0);
msg = 'ERROR: Cannot edit run information without defining the conditions first';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
run_info = getappdata(gcf,'SessionRunInfo');
num_runs = getappdata(gcf,'SessionNumRuns');
conditions0 = getappdata(gcf,'SessionConditions0');
[new_run_info,new_num_runs] = fmri_input_run_ui(run_info,num_runs,conditions0);
if ~isempty(new_run_info),
setappdata(gcf,'SessionRunInfo',new_run_info);
h = findobj(gcf,'Tag','NumberRunsEdit');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -