📄 spm_mf_box.m
字号:
'SliderStep',min(ones(1,2)/max(time_max-1,1),1));if (time_max==1.001), set(handles.time_pos,'Enable','off');else set(handles.time_pos,'Enable','on');endset(handles.comp_pos,'Min',1,'Max',comp_max,'Value',1, ... 'SliderStep',min(ones(1,2)/max(comp_max-1,1),1));if (comp_max==1.001), set(handles.comp_pos,'Enable','off');else set(handles.comp_pos,'Enable','on');endbut = fieldnames(buttons);for i=1:length(but) if (buttons.(but{i})==1), set(handles.(but{i}),'Enable','on'); else set(handles.(but{i}),'Enable','off'); endendset(handles.keeppre,'Value',keeppre);if (keeppre==1) set(handles.algo_preprocess,'Enable','off'); set(handles.run_pre,'Enable','off');else set(handles.algo_preprocess,'Enable','on'); set(handles.run_pre,'Enable','on');endif (isstruct(handles.mfbss.X)) v = getinfo([handles.sequence.timesteps,handles.sequence.dim], ... size(handles.mfbss.design),sum(handles.mfbss.reference(:)), ... prod(handles.mfbss.X.dim)*handles.mfbss.X.timesteps, ... size(handles.mfbss.A,2),handles.mfbss.pre_name, ... handles.mfbss.name,handles.mfbss.rel_name,handles.mfbss.pos_name, ... handles.mfbox_filename);else v = getinfo([handles.sequence.timesteps,handles.sequence.dim], ... size(handles.mfbss.design),sum(handles.mfbss.reference(:)), ... length(handles.mfbss.X),size(handles.mfbss.A,2), ... handles.mfbss.pre_name,handles.mfbss.name,handles.mfbss.rel_name, ... handles.mfbss.pos_name, handles.mfbox_filename);endset(handles.info,'String',char(v));if (isfield(handles,'lastplotstate')) handles = rmfield(handles,'lastplotstate');endhandles = redraw_all(handles);% ---function datawin_handler(src,eventdata,h,vt,vc)set(h.time_pos,'Value',vt);set(h.comp_pos,'Value',vc);redraw_all(h);% --- Executes just before spm_mf_box is made visible.function spm_mf_box_OpeningFcn(hObject,eventdata,handles,varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to spm_mf_box (see VARARGIN)handles.output = hObject;handles.filenames = '';handles.design_filename = '';handles.reference_filename = '';handles.mfbox_filename = '';handles.params_filename = '';handles.private = mfbox_databackend('init',struct());handles.sequence = struct('num',0,'dim',[0,0],'timesteps',0);handles.permutation = 1;handles.mfbss = mfbox_init();mfbox_path = fileparts(which('spm_mf_box'));addpath(mfbox_path);algos = dir([mfbox_path filesep 'mfbox_*_run.m']);v_algo = {}; v_pre = {}; v_rel = {}; v_pos = {}; v_tool = {};for i=1:length(algos) n = algos(i).name(7:end-6); switch n(1:3) case 'rel', v_rel{end+1} = n(5:end); case 'pre', v_pre{end+1} = n(5:end); case 'pos', v_pos{end+1} = n(5:end); case 'too',v_tool{end+1} = n(6:end); otherwise, v_algo{end+1} = n; endendset(handles.mf_algo,'String',v_algo);v = find(strcmp(v_algo,'pearsonica'));if (~isempty(v)), set(handles.mf_algo,'Value',v(1)); endset(handles.algo_reliability,'String',v_rel);v = find(strcmp(v_rel,'none'));if (~isempty(v)), set(handles.algo_reliability,'Value',v(1)); endset(handles.algo_preprocess,'String',v_pre);set(handles.algo_preprocess,'Value',[]);set(handles.algo_postprocess,'String',v_pos);v = find(strcmp(v_pos,'selectcomp'));if (~isempty(v)), set(handles.algo_postprocess,'Value',v(1)); endfor i=1:length(v_pre) cmd_func = str2func(sprintf('mfbox_pre_%s_run',v_pre{i})); [a,b,c,d,handles.mfbss.pre_params.(v_pre{i})] = cmd_func( ... handles.mfbss.X,handles.mfbss.mask,handles.mfbss.grid, ... handles.mfbss.timeline,[],-1);endfor i=1:length(v_algo) cmd_func = str2func(sprintf('mfbox_%s_run',v_algo{i})); [handles.mfbss.params.(v_algo{i})] = cmd_func(handles.mfbss.X, ... handles.mfbss.mask,[],-1);endfor i=1:length(v_rel) cmd_func = str2func(sprintf('mfbox_rel_%s_run',v_rel{i})); [a,handles.mfbss.rel_params.(v_rel{i})] = cmd_func( ... handles.mfbss,[],-1);endhandles = reset_views(handles);if (nargin>3) if (isstruct(varargin{1})) f = fieldnames(varargin{1}); for i=1:length(f) handles.mfbss.(f{i}) = varargin{1}.(f{i}); end end uiwait(handles.Toolbox);endguidata(hObject,handles);% --- Outputs from this function are returned to the command line.function varargout=spm_mf_box_OutputFcn(hObject,eventdata,handles)% varargout cell array for returning output args (see VARARGOUT);if (nargout>0), varargout{1} = handles.output; end% --- Executes on button press in import_data.function import_data_Callback(hObject,eventdata,handles)[handles.sequence,handles.filenames] = mfbox_databackend('import', ... handles.filenames);ts = handles.sequence.timesteps;handles.mfbss = mfbox_init(handles.mfbss);if (ts>0) handles.mfbss.bg = zeros(handles.sequence.dim,'single'); for i=1:ts handles.mfbss.bg = handles.mfbss.bg+reshape( ... mfbox_databackend('getdata',handles.sequence,i),handles.sequence.dim); end handles.mfbss.bg = handles.mfbss.bg/ts;else handles.mfbss.bg = [];endif (ts>0) handles.private = mfbox_databackend('init',handles.private, ... struct('seq',handles.sequence,'bg',handles.mfbss.bg));endhandles = reset_views(handles);guidata(hObject,handles);% --- Executes on button press in save_res.function save_res_Callback(hObject,eventdata,handles)if (isstruct(handles.mfbss.X)) % get real data + reduce size if (all(handles.mfbss.mask(:))) handles.mfbss.X = single(mfbox_databackend('getdata',handles.mfbss.X)); else X = handles.mfbss.X; m = sum(handles.mfbss.mask(:)); handles.mfbss.X = zeros(m,X.timesteps,'single'); for i=1:X.timesteps v = reshape(mfbox_databackend('getdata',X,i),[],1); handles.mfbss.X(:,i) = v(handles.mfbss.mask); end end handles.mfbss.grid = handles.mfbss.grid(:,handles.mfbss.mask);else sgr = size(handles.mfbss.grid); sm = size(handles.mfbss.mask); g = mat2cell(min(repmat(sm',1,sgr(2)),max(ones(sgr), ... round(handles.mfbss.grid))),ones(1,sgr(1)),sgr(2)); mask = handles.mfbss.mask(sub2ind(sm,g{:})); handles.mfbss.grid = handles.mfbss.grid(:,mask); if ((length(size(handles.mfbss.X))>2)||(~isa(handles.mfbss.X,'single'))) handles.mfbss.X = reshape(single(handles.mfbss.X),[],length(handles.mfbss.timeline)); end if (any(mask(:)==0)), handles.mfbss.X = handles.mfbss.X(mask,:); endendhandles.mfbox_filename = mfbox_databackend('save',handles.mfbss, ... handles.private,handles.mfbox_filename);guidata(hObject,handles);% --- Executes on button press in load_res.function load_res_Callback(hObject,eventdata,handles)[handles.mfbss,handles.mfbox_filename,dat] = mfbox_databackend('load', ... handles.mfbss,handles.mfbox_filename);dim = size(handles.mfbss.bg);ts = ceil(max(handles.mfbss.timeline))+1;if (isempty(ts)) ts = 0;endif ((length(handles.sequence.dim)~=length(dim))|| ... any(handles.sequence.dim~=dim)|| ... (handles.sequence.timesteps~=ts)) if (handles.sequence.timesteps>0) questdlg('Results are from different sequence data','Info','Ok','Ok'); end handles.sequence = struct('dim',[0,0],'timesteps',0);endif (ts>0) handles.private = mfbox_databackend('init',handles.private,dat);endhandles = reset_views(handles);c = get(handles.mf_algo,'String'); v = find(strcmp(c,handles.mfbss.name));if (length(v)==1), set(handles.mf_algo,'Value',v); endc = get(handles.algo_reliability,'String'); v = find(strcmp(c,handles.mfbss.rel_name));if (length(v)==1), set(handles.algo_reliability,'Value',v); endc = get(handles.algo_preprocess,'String');p = false(length(c),1);for i=1:length(handles.mfbss.pre_name) p = p | strcmp(c,handles.mfbss.pre_name{i});endset(handles.algo_preprocess,'Value',find(p));if (~isempty(handles.mfbss.pos_name)) c = get(handles.algo_postprocess,'String'); v = find(strcmp(c,handles.mfbss.pos_name{end})); if (length(v)==1), set(handles.algo_postprocess,'Value',v); endendguidata(hObject,handles);% --- Executes on selection change in plot_type.function plot_type_Callback(hObject,eventdata,handles)t = get(hObject,'Value');handles = reset_views(handles,'plot_type',t);guidata(hObject,handles);% --- Executes during object creation, after setting all properties.function plot_type_CreateFcn(hObject,eventdata,handles)if (ispc&&(isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')))) set(hObject,'BackgroundColor','white');end% --- Executes on slider movement.function time_pos_Callback(hObject,eventdata,handles)v = floor(get(hObject,'Value'));set(hObject,'Value',v);handles = redraw_all(handles);guidata(hObject,handles);% --- Executes on slider movement.function comp_pos_Callback(hObject,eventdata,handles)v = floor(get(hObject,'Value'));set(hObject,'Value',v);handles = redraw_all(handles);guidata(hObject,handles);% --- Executes during object creation, after setting all properties.function comp_pos_CreateFcn(hObject,eventdata,handles)if (isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))) set(hObject,'BackgroundColor',[.9,.9,.9]);end% --- Executes during object creation, after setting all properties.function time_pos_CreateFcn(hObject,eventdata,handles)if (isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))) set(hObject,'BackgroundColor',[.9,.9,.9]);end% --- Executes on selection change in mf_algo.function mf_algo_Callback(hObject,eventdata,handles)% --- Executes during object creation, after setting all properties.function mf_algo_CreateFcn(hObject,eventdata,handles)if (ispc&&(isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')))) set(hObject,'BackgroundColor','white');end% --- Executes on button press in run.function run_Callback(hObject,eventdata,handles)contents = get(handles.mf_algo,'String');cmd_algo = contents{get(handles.mf_algo,'Value')};contents = get(handles.algo_preprocess,'String');cmd_pre = {contents{get(handles.algo_preprocess,'Value')}};contents = get(handles.algo_reliability,'String');cmd_rel = contents{get(handles.algo_reliability,'Value')};if (get(handles.keeppre,'Value')==0) handles.mfbss.X = handles.sequence; dim = handles.sequence.dim; handles.mfbss.mask = true(dim); handles.mfbss.grid = mfbox_mkgrid(dim)'; handles.mfbss.timeline = 0:(handles.sequence.timesteps-1); guidata(hObject,handles); handles = reset_views(handles,'plot_type',2); for i=1:length(cmd_pre) cmd = cmd_pre{i}; p = {}; if (isfield(handles.mfbss.pre_params,cmd)) p = handles.mfbss.pre_params.(cmd); end cmd_func = str2func(sprintf('mfbox_pre_%s_run',cmd)); [d,m,g,t,p,handles.private] = ... cmd_func(handles.mfbss.X,handles.mfbss.mask,handles.mfbss.grid, ... handles.mfbss.timeline,p,0,handles.private); if (isstruct(p)), handles.mfbss.pre_params.(cmd) = p; else, return; end end handles.mfbss.pre_name = cmd_pre; t = []; for i=1:length(cmd_pre), t(i) = handles.mfbss.pre_params.(cmd_pre{i}).priority; end [d,s] = sort(t); for i=1:length(cmd_pre) cmd = cmd_pre{s(i)}; cmd_func = str2func(sprintf('mfbox_pre_%s_run',cmd)); [handles.mfbss.X,handles.mfbss.mask,handles.mfbss.grid, ... handles.mfbss.timeline,handles.mfbss.pre_params.(cmd)] = ... cmd_func(handles.mfbss.X,handles.mfbss.mask,handles.mfbss.grid, ... handles.mfbss.timeline,handles.mfbss.pre_params.(cmd),2,handles.private); endendhandles.mfbss.A = []; handles.mfbss.W = []; handles.mfbss.S = struct();handles.mfbss.ppA = []; handles.mfbss.ppW = []; handles.mfbss.ppS = struct();if (isfield(handles.mfbss,'extraplot')), handles.mfbss = rmfield(handles.mfbss,'extraplot'); endhandles = reset_views(handles,'plot_type',3);p = {};if (isfield(handles.mfbss.params,cmd_algo)) p = handles.mfbss.params.(cmd_algo);endcmd_func = str2func(sprintf('mfbox_%s_run',cmd_algo));if (isstruct(handles.mfbss.X)), s = [handles.mfbss.X.dim,handles.mfbss.X.timesteps];else, s = size(handles.mfbss.X);endtm = false(size(handles.mfbss.mask)); tm(1) = true;p = cmd_func(ones([1,s(end)]),tm,p,0); % bad hackif (isstruct(p)), handles.mfbss.params.(cmd_algo) = p;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -