📄 bfm_session_profile_ui.m
字号:
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).blk_onsets(cond_idx);
run_info(i).blk_onsets = new_onsets;
if isfield(run_info(i),'blk_length') & ...
~isempty(run_info(i).blk_length)
new_length = cell(1,length(new_condition0));
new_length(1:length(cond_idx)) = run_info(i).blk_length(cond_idx);
run_info(i).blk_length = new_length;
end
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).blk_onsets;
new_onsets = cell(1,num_new_conditions);
idx_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} idx_onsets{j}] = sort(merge_onsets);
end;
run_info(i).blk_onsets = new_onsets;
if isfield(run_info(i),'blk_length') & ...
~isempty(run_info(i).blk_length)
old_length = run_info(i).blk_length;
new_length = cell(1,num_new_conditions);
for j=1:num_new_conditions,
c_idx = merged_conds(j).cond_idx;
merge_length = [];
for k=c_idx
merge_length = [merge_length; old_length{k}];
end
new_length{j} = merge_length(idx_onsets{j});
end;
run_info(i).blk_length = new_length;
end
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] = bfm_input_run_ui(run_info,num_runs,conditions0);
if ~isempty(new_run_info),
setappdata(gcf,'SessionRunInfo',new_run_info);
h = findobj(gcf,'Tag','NumberRunsEdit');
set(h,'String',num2str(new_num_runs));
setappdata(gcf,'SessionNumRuns',new_num_runs);
end;
return; % EditRuns
%----------------------------------------------------------------------------
function EditDatamatPrefix
datamat_prefix = deblank(strjust(get(gcbo,'String'),'left'));
set(gcbo,'String',datamat_prefix);
if ~isempty(findstr(datamat_prefix,' '));
msg = sprintf('ERROR: Datamat prefix cannot contain any space');
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
setappdata(gcf,'SessionDatamatPrefix',datamat_prefix);
return; % EditDatamatPrefix
%----------------------------------------------------------------------------
function status = ChkModified()
% Output:
% status = 0, error
% status = 1, ok
status = 1;
[session_info,session_file,old_session_info] = GetSessionInfo;
if (isequal(session_info,old_session_info) == 0),
dlg_title = 'Session Information has been changed';
msg = 'WARNING: The session information has been changed. Do you want to save it?';
response = questdlg(msg,dlg_title,'Yes','No','Cancel','Yes');
switch response,
case 'Yes'
status = SaveSessionInfo;
case 'Cancel'
status = 0;
case 'No'
status = 2;
end;
end;
return; % ChkModified
%----------------------------------------------------------------------------
function SetSessionInfo(session_info,session_file)
setappdata(gcf,'SessionDescription',session_info.description);
setappdata(gcf,'SessionDatamatPrefix',session_info.datamat_prefix);
setappdata(gcf,'SessionPLSDir',session_info.pls_data_path);
setappdata(gcf,'SessionNumConditions',session_info.num_conditions);
setappdata(gcf,'SessionConditions',session_info.condition);
setappdata(gcf,'SessionNumRuns',session_info.num_runs);
setappdata(gcf,'SessionRunInfo',session_info.run);
if ~isfield(session_info,'across_run')
session_info.across_run = 1;
end
setappdata(gcf,'SessionAcrossRun',session_info.across_run);
if ~isfield(session_info,'condition_baseline')
session_info.condition_baseline = {};
for i=1:session_info.num_conditions
session_info.condition_baseline=[session_info.condition_baseline, ...
{[0 1]}];
end
end
setappdata(gcf,'SessionConditionBaseline',session_info.condition_baseline);
if ~isfield(session_info,'num_conditions0')
session_info.num_conditions0 = session_info.num_conditions;
end
setappdata(gcf,'SessionNumConditions0',session_info.num_conditions0);
if ~isfield(session_info,'condition0')
session_info.condition0 = session_info.condition;
end
setappdata(gcf,'SessionConditions0',session_info.condition0);
if ~isfield(session_info,'condition_baseline0')
session_info.condition_baseline0 = session_info.condition_baseline;
end
setappdata(gcf,'SessionConditionBaseline0',session_info.condition_baseline0);
if ~isfield(session_info,'behavname_all')
session_info.behavname_all = {};
session_info.behavdata_all = [];
end
setappdata(gcf,'SessionBehavNameAll',session_info.behavname_all);
setappdata(gcf,'SessionBehavDataAll',session_info.behavdata_all);
if ~isfield(session_info,'behavname_each')
session_info.behavname_each = {};
session_info.behavdata_each = [];
end
setappdata(gcf,'SessionBehavNameEach',session_info.behavname_each);
setappdata(gcf,'SessionBehavDataEach',session_info.behavdata_each);
if ~isfield(session_info,'behavname_all_single')
session_info.behavname_all_single = {};
session_info.behavdata_all_single = [];
end
setappdata(gcf,'SessionBehavNameAllSingle',session_info.behavname_all_single);
setappdata(gcf,'SessionBehavDataAllSingle',session_info.behavdata_all_single);
if ~isfield(session_info,'behavname_each_single')
session_info.behavname_each_single = {};
session_info.behavdata_each_single = [];
end
setappdata(gcf,'SessionBehavNameEachSingle',session_info.behavname_each_single);
setappdata(gcf,'SessionBehavDataEachSingle',session_info.behavdata_each_single);
setappdata(gcf,'OldSessionInfo',session_info);
setappdata(gcf,'SessionFile',session_file);
if isempty(session_file)
set(gcf,'Name','New Blocked fMRI Session Information');
else
set(gcf,'Name',['Session File: ' session_file]);
end;
return; % SetSessionInfo
%----------------------------------------------------------------------------
function [session_info,session_file,old_session_info] = GetSessionInfo(),
session_info.description = getappdata(gcf,'SessionDescription');
session_info.pls_data_path = getappdata(gcf,'SessionPLSDir');
session_info.datamat_prefix = getappdata(gcf,'SessionDatamatPrefix');
session_info.num_conditions = getappdata(gcf,'SessionNumConditions');
session_info.condition = getappdata(gcf,'SessionConditions');
session_info.condition_baseline = getappdata(gcf,'SessionConditionBaseline');
session_info.num_conditions0 = getappdata(gcf,'SessionNumConditions0');
session_info.condition0 = getappdata(gcf,'SessionConditions0');
session_info.condition_baseline0 = getappdata(gcf,'SessionConditionBaseline0');
session_info.num_runs = getappdata(gcf,'SessionNumRuns');
session_info.run = getappdata(gcf,'SessionRunInfo');
session_info.across_run = getappdata(gcf,'SessionAcrossRun');
session_info.behavname_all = getappdata(gcf,'SessionBehavNameAll');
session_info.behavdata_all = getappdata(gcf,'SessionBehavDataAll');
session_info.behavname_each = getappdata(gcf,'SessionBehavNameEach');
session_info.behavdata_each = getappdata(gcf,'SessionBehavDataEach');
session_info.behavname_all_single = getappdata(gcf,'SessionBehavNameAllSingle');
session_info.behavdata_all_single = getappdata(gcf,'SessionBehavDataAllSingle');
session_info.behavname_each_single = getappdata(gcf,'SessionBehavNameEachSingle');
session_info.behavdata_each_single = getappdata(gcf,'SessionBehavDataEachSingle');
session_file = getappdata(gcf,'SessionFile');
old_session_info = getappdata(gcf,'OldSessionInfo');
return; % GetSessionInfo
%----------------------------------------------------------------------------
function CreateDatamat(),
% make sure the session information has been saved
%
[session_info,session_file,old_session_info] = GetSessionInfo;
if isempty(session_file) | isequal(session_info,old_session_info) == 0
status = ChkModified;
session_file = getappdata(gcf,'SessionFile');
if isempty(session_file)
% status = 2;
return;
end
if (status == 0)
return;
elseif (status == 2)
msg1 = 'ERROR: Please save the session information';
msg = [msg1 ' before creating the datamat.'];
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
end;
all_onsets = [session_info.run(:).blk_onsets];
all_onsets = reshape(all_onsets, [session_info.num_conditions0 length(all_onsets)/session_info.num_conditions0]);
all_length = [session_info.run(:).blk_length];
all_length = reshape(all_length, [session_info.num_conditions0 length(all_length)/session_info.num_conditions0]);
if ~isequal(cellfun('length',all_onsets),cellfun('length',all_length))
msg = 'ERROR: Number of onsets and length are not match';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
empty_cond_across_run = 0;
any_empty_cond_within_run = 0;
for i = 1:size(all_onsets,1)
empty_cond_within_run = 0;
for j = 1:size(all_onsets,2)
if isequal(all_onsets(i,j),{-1})
empty_cond_within_run = empty_cond_within_run + 1;
any_empty_cond_within_run = 1;
end
end
if isequal(size(all_onsets,2),empty_cond_within_run)
empty_cond_across_run = 1;
break;
end
end
if empty_cond_across_run
msg = 'ERROR: At least one condition has no onset for all the runs';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
if ~session_info.across_run & any_empty_cond_within_run
msg = 'ERROR: There is a condition without onset while merging data within each run';
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end
num_runs = getappdata(gcf,'SessionNumRuns');
data_path = session_info.run(1).data_path;
img_file = session_info.run(1).data_files{1};
try
dims = rri_imginfo(fullfile(data_path,img_file));
num_slices = dims(3);
catch
msg = sprintf('ERROR: Cannot access the image file: %s',img_file);
set(findobj(gcf,'Tag','MessageLine'),'String',msg);
return;
end;
bfm_create_datamat_ui(session_file,num_runs,num_slices);
return; % CreateDatamat
%------------------------------------------------------------------------------
function delete_fig()
if (CloseSessionInput == 1);
uiresume
end
return
%----------------------------------------------------------------------------
function PathSessionInfo(init_flag)
% init_flag = 0 for clear operation
% init_flag = 1 for initialization
%
if (init_flag == 0 & ChkModified == 0)
return; % error
end;
old_session_info = getappdata(gcf,'OldSessionInfo');
session_info = old_session_info;
session_info = rri_changepath_se(session_info);
if isempty(session_info)
session_info = old_session_info;
end
setappdata(gcf,'SessionPLSDir',session_info.pls_data_path);
setappdata(gcf,'SessionRunInfo',session_info.run);
return; % PathSessionInfo
%----------------------------------------------------------------------------
function SelectMergeDataWithinRun()
if get(findobj(gcf,'Tag','MergeDataWithinRunButton'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','MergeDataWithinRunButton'),'Value',1);
else
set(findobj(gcf,'Tag','MergeDataAcrossRunsButton'),'Value',0);
setappdata(gcf,'SessionAcrossRun',0);
end
return; % SelectMergeDataWithinRun
%----------------------------------------------------------------------------
function SelectMergeDataAcrossRuns()
if get(findobj(gcf,'Tag','MergeDataAcrossRunsButton'),'Value') == 0 % click itself
set(findobj(gcf,'Tag','MergeDataAcrossRunsButton'),'Value',1);
else
set(findobj(gcf,'Tag','MergeDataWithinRunButton'),'Value',0);
setappdata(gcf,'SessionAcrossRun',1);
end
return; % SelectMergeDataAcrossRuns
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -