⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spm_mf_box.m

📁 toolbox for spm 5 for data, model free analysis
💻 M
📖 第 1 页 / 共 5 页
字号:
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 + -