📄 spm_mf_box.m
字号:
else, return;endclear tmhandles.mfbss.name = cmd_algo;handles.mfbss.reliability = struct();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,:); endendp = {};if (isfield(handles.mfbss.rel_params,cmd_rel)) p = handles.mfbss.rel_params.(cmd_rel);endcmd_func = str2func(sprintf('mfbox_rel_%s_run',cmd_rel));[handles.mfbss,p] = cmd_func(handles.mfbss,p,1);if (isstruct(p)), handles.mfbss.rel_params.(cmd_rel) = p;else return;endhandles.mfbss.rel_name = cmd_rel;s = [size(handles.mfbss.S.dat,1),size(handles.mfbss.S.map,2)];S = zeros(s);for i=1:s(2) j = unique(handles.mfbss.S.map(:,i)); S(:,i) = sum(handles.mfbss.S.dat(:,j),2)/length(j);endp = {1:s(2)};if (isfield(handles.mfbss.S,'part')), p = handles.mfbss.S.part; endhandles.mfbss.crosstalk = updatecrosstalk(handles.mfbss.A,S,p);handles.mfbss.reliability = updatereliability(handles.mfbss.reliability,handles.mfbss.A,S);handles.mfbss.reliability = updatedesign(handles.mfbss.reliability, ... handles.mfbss.design,handles.mfbss.timeline,handles.mfbss.A);handles.mfbss.reliability = updatereference(handles.mfbss.reliability, ... handles.mfbss.reference,S,handles.mfbss.grid(:,handles.mfbss.S.mask));v = fieldnames(handles.mfbss.reliability);for i=1:length(v) if (isempty(handles.mfbss.reliability.(v{i}))) handles.mfbss.reliability = rmfield(handles.mfbss.reliability,v{i}); endendhandles = reset_views(handles);guidata(hObject,handles);% --- Executes on button press in import_ref.function import_ref_Callback(hObject,eventdata,handles)[handles.mfbss.reference,handles.reference_filename,handles.private] = ... mfbox_databackend('import_reference',handles.private,handles.reference_filename);if ((isfield(handles.mfbss.S,'dat'))&&(~isempty(handles.mfbss.reference))) s = [size(handles.mfbss.S.dat,1),size(handles.mfbss.S.map,2)]; S = zeros(s); for i=1:s(2) j = unique(handles.mfbss.S.map(:,i)); S(:,i) = sum(handles.mfbss.S.dat(:,j),2)/length(j); end handles.mfbss.reliability = updatereference(handles.mfbss.reliability, ... handles.mfbss.reference,S,handles.mfbss.grid(:,handles.mfbss.S.mask));else if (isfield(handles.mfbss.reliability,'reference')) handles.mfbss.reliability = rmfield(handles.mfbss.reliability,'reference'); endendhandles = reset_views(handles);guidata(hObject,handles);% --- Executes on button press in import_des.function import_des_Callback(hObject,eventdata,handles)[handles.mfbss.design,handles.design_filename] = ... mfbox_databackend('import_design',handles.design_filename);if (~isempty(handles.mfbss.A)) handles.mfbss.reliability = updatedesign(handles.mfbss.reliability, ... handles.mfbss.design,handles.mfbss.timeline,handles.mfbss.A);elseif (isfield(handles.mfbss,'reliability')) if (isfield(handles.mfbss.reliability,'design')) handles.mfbss.reliability = rmfield(handles.mfbss.reliability,'design'); endendhandles = reset_views(handles);guidata(hObject,handles);% --- Executes on button press in import_bg.function import_bg_Callback(hObject,eventdata,handles)[handles.mfbss.bg,handles.private] = ... mfbox_databackend('import_bg',handles.private,'');handles.private = mfbox_databackend('init',handles.private, ... struct('seq',handles.sequence,'bg',handles.mfbss.bg)); handles = reset_views(handles);guidata(hObject,handles);% ---function rel=updatereliability(rel,tc,sm)v = var(tc);rel.variance = double(v/max(v(:)));rel.temporalsparseness = zeros(1,length(v));for i=1:size(tc,2) w = tc(:,i)-mean(tc(:,i)); w = w/sqrt(v(i)); n = size(tc,1); rel.temporalsparseness(i) = (sqrt(n-1)./sum(abs(w))).^(1/2);endrel.spatialsparseness = zeros(1,size(sm,2));for i=1:size(sm,2) v = sm(:,i)-mean(sm(:,i)); n = size(sm,2); rel.spatialsparseness(i) = (sqrt(n-1)./sum(abs(v))).^(1/6);end% ---function ct=updatecrosstalk(tc,sm,p)ct = zeros(size(tc,2));for i=1:length(p) if (length(p{i})>1) [f,t] = mfbox_cumindependence(tc(:,p{i})); [f,s] = mfbox_cumindependence(sm(:,p{i})); t = triu(t,1); s = tril(s,-1); ct(p{i},p{i}) = t/max(t(:))+s/max(s(:)); endendfor i=2:length(p) [f,t] = mfbox_cumindependence(tc(:,p{i-1}),tc(:,p{i})); [f,s] = mfbox_cumindependence(sm(:,p{i}),sm(:,p{i-1})); ct(p{i-1},p{i}) = t/max(t(:)); ct(p{i},p{i-1}) = s/max(s(:));end% ---function rel=updatereference(rel,ref,sm,gr)sr = size(ref);if (isfield(rel,'reference')) rel = rmfield(rel,'reference');endif (sr(2)~=0) s = size(gr); g = mat2cell(gr,ones(1,s(1)),s(2)); ref = reshape(interpn(ref,g{:},'nearest')>0.75,1,[]); m = mean(sm,1); for i=1:size(sm,2), sm(:,i) = sm(:,i)-m(i); end vsm = var(sm,0,1); s = false(size(sm)); for i=1:size(sm,2), s(:,i) = (sm(:,i).^2)>(4*vsm(i)); end [ci,rel.reference] = mfbox_overlap(ref(:),s); rel.reference = double(rel.reference);end% ---function rel=updatedesign(rel,ds,tl,tc)tc = tc-repmat(mean(tc),size(tc,1),1);tc = tc./repmat(std(tc),size(tc,1),1);st = size(tc);sd = size(ds);i = 1;while (isfield(rel,sprintf('design%d',i))) rel = rmfield(rel,sprintf('design%d',i)); i = i+1;endif (sd(2)~=0) nds = zeros(length(tl),sd(2)); for i=1:sd(2) nds(:,i) = interp1(linspace(tl(1),tl(end),sd(1)),ds(:,i),tl)'; end nds = nds-repmat(mean(nds),size(nds,1),1); nds = nds./repmat(std(nds),size(nds,1),1); for i=1:sd(2) rel.(sprintf('design%d',i)) = double(abs(nds(:,i)'*tc)/(st(1)-1)); endend% --- Executes on button press in export_data.function export_data_Callback(hObject,eventdata,handles)l = length(handles.mfbss.pre_name);if (l>0) pl = length(handles.mfbss.pre_name); f = mat2cell(char(ones(1,2*pl-1)*'_'),1,ones(1,2*pl-1)); f(1:2:(2*pl-1)) = handles.mfbss.pre_name; f = [reshape(char(f)',1,[]) '.nii'];else f = [];endhandles.filenames = mfbox_databackend('export', ... {handles.mfbss.X,handles.mfbss.mask,handles.mfbss.grid},handles.private,f);guidata(hObject,handles);% --- Executes on button press in run_pre.function run_pre_Callback(hObject,eventdata,handles)% returns content of listbox 'algo_preprocess' as cell array.contents = get(handles.algo_preprocess,'String');% returns selected item from algo_preprocess.cmd_pre = {contents{get(handles.algo_preprocess,'Value')}};handles.mfbss.X = handles.sequence;dim = handles.sequence.dim;% returns a dim-by-dim matrix of logical ones. handles.mfbss.mask = true(dim);handles.mfbss.grid = mfbox_mkgrid(dim)';handles.mfbss.timeline = 0:(handles.sequence.timesteps-1);% identifies button to activate, fills in appropriate drop down boxeshandles = 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 % str2func == @function % function, which will be called depends on 'cmd' argument, i.e. % cmd='remmean' => function 'mfbox_pre_remmeang.m'. cmd_func = str2func(sprintf('mfbox_pre_%s_run',cmd)); % d:=data, m:=mask, g:=(data)grid, t:=timeline [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; endendhandles.mfbss.pre_name = cmd_pre;t = zeros(1,length(cmd_pre));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);endhandles.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);guidata(hObject,handles);% --- Executes on button press in run_post.function run_post_Callback(hObject,eventdata,handles)contents = get(handles.algo_postprocess,'String');cmd_pos = contents{get(handles.algo_postprocess,'Value')};p = {};if (isfield(handles.mfbss.pos_params,cmd_pos)) p = handles.mfbss.pos_params.(cmd_pos);endcmd_func = str2func(sprintf('mfbox_pos_%s_run',cmd_pos));rel = struct();if (isempty(handles.mfbss.ppA)) [handles.mfbss.ppA,handles.mfbss.ppW,handles.mfbss.ppS, ... p,rel] = cmd_func(handles.mfbss.A, ... handles.mfbss.W,handles.mfbss.S, ... {handles.mfbss.X,handles.mfbss.grid,handles.mfbss.mask, ... handles.mfbss.timeline,handles.mfbss.design,handles.mfbss.reference},p); if (isstruct(p)), handles.mfbss.pos_params.(cmd_pos) = p; else return; endelse [handles.mfbss.ppA,handles.mfbss.ppW,handles.mfbss.ppS, ... p,rel] = cmd_func( ... handles.mfbss.ppA,handles.mfbss.ppW,handles.mfbss.ppS, ... {handles.mfbss.X,handles.mfbss.grid,handles.mfbss.mask,handles.mfbss.timeline, ... handles.mfbss.design,handles.mfbss.reference},p); if (isstruct(p)), handles.mfbss.pos_params.(cmd_pos) = p; else return; endendl = length(handles.mfbss.pos_name);handles.mfbss.pos_name{l+1} = cmd_pos;s = [size(handles.mfbss.ppS.dat,1),size(handles.mfbss.ppS.map,2)];S = zeros(s);for i=1:s(2) j = unique(handles.mfbss.ppS.map(:,i)); S(:,i) = sum(handles.mfbss.ppS.dat(:,j),2)/length(j);endhandles.mfbss.ppcrosstalk = updatecrosstalk(handles.mfbss.ppA,S,{1:s(2)});handles.mfbss.ppreliability = updatereliability(struct(),handles.mfbss.ppA,S);handles.mfbss.ppreliability = updatedesign(handles.mfbss.ppreliability, ... handles.mfbss.design,handles.mfbss.timeline,handles.mfbss.ppA);handles.mfbss.ppreliability = updatereference(handles.mfbss.ppreliability, ... handles.mfbss.reference,S,handles.mfbss.grid(:,handles.mfbss.ppS.mask));v = fieldnames(rel);for i=1:length(v) handles.mfbss.ppreliability.(v{i}) = rel.(v{i});endv = fieldnames(handles.mfbss.ppreliability);for i=1:length(v) if (isempty(handles.mfbss.ppreliability.(v{i}))) handles.mfbss.ppreliability = rmfield(handles.mfbss.ppreliability,v{i}); endendhandles = reset_views(handles);guidata(hObject,handles);% --- Executes on button press in clear_post.function clear_post_Callback(hObject,eventdata,handles)handles.mfbss.ppA = [];handles.mfbss.ppW = [];handles.mfbss.ppS = struct();handles.mfbss.pos_name = {};handles = reset_views(handles);guidata(hObject,handles);% --- Executes on selection change in sort_comp.function sort_comp_Callback(hObject,eventdata,handles)contents = get(hObject,'String');v = contents{get(hObject,'Value')};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -