📄 mfbox_tool_compare_run.m
字号:
handles = recalcinfo(handles,cur,num);handles.components = struct('timeline',[]);% --- Executes on button press in spat_auto_group.function handles=spat_auto_group(handles)l = [0 cumsum(cellfun(@(x) size(x.A,2),handles.mfbss))];os = handles.frontend.orderselect;if (os==1) g = mfbox_findgroups(real(handles.spatial_cross_data),'icatype', ... 'none','normalize',1);elseif (os==2) g = mfbox_findgroups(imag(handles.spatial_cross_data),'icatype', ... 'none','normalize',1);endhandles.grouping = convertgroup(g,l);% --- Executes on button press in temp_spat_auto_group_group.function handles=temp_auto_group(handles)l = [0 cumsum(cellfun(@(x) size(x.A,2),handles.mfbss))];os = handles.frontend.orderselect;if (os==1) g = mfbox_findgroups(real(handles.temporal_cross_data),'icatype', ... 'none','normalize',1);elseif (os==2) g = mfbox_findgroups(imag(handles.temporal_cross_data),'icatype', ... 'none','normalize',1);endhandles.grouping = convertgroup(g,l);% --- Executes on button press in run_ica.function handles=run_ica(handles)% ---function [sc,tc]=update_cross(tl,atc,btc,m,adat,bdat)[f,tcf] = mfbox_cumindependence(atc,btc);tcs = abs(mfbox_cov(atc,btc));tc = complex(tcf,tcs);m1 = m((m==1)|(m==3)); m2 = m((m==2)|(m==3));adat = adat(m1==3,:); bdat = bdat(m2==3,:);[f,scf] = mfbox_cumindependence(adat,bdat);[f,scs] = mfbox_overlap(adat,bdat);sc = complex(scf,scs);% generates String 'b' repeatedly with 'a' as suffix.function g=mknames(a,b)g = mknamespat(1:a,[b '%d']);function g=mknamespat(a,b)g = {};%'end' indicates last array-index, %s:=String of characters %d=decimal notation (signed)if (iscell(a)) for i=1:length(a), g{end+1} = sprintf(b,a{i}); endelse for i=1:length(a), g{end+1} = sprintf(b,a(i)); endend% ---function g=fixgrouping(g,a)comp = mat2cell(zeros(1,size(g,1)),1,ones(size(g,1),1));for j=1:size(g,1) for i=1:size(g,2) ga = g{j,i}; if (~isempty(ga)) ga = ga((ga<=a(j))&(ga>0)); ga = ga(all(repmat(ga(:)', ... length(comp{j}),1)~=repmat(comp{j}',1,length(ga)),1)); comp{j} = unique([comp{j},ga]); g{j,i} = ga; end endendfor j=1:size(g,1) if (a(j)>0) ga = 1:a(j); ga = ga(all(repmat(ga(:)', ... length(comp{j}),1)~=repmat(comp{j}',1,a(j)),1)); for i=1:length(ga), g{j,end+1} = ga(i); end endendif (~isempty(g)), g = g(:,any(cellfun('length',g)~=0,1)); end% ---function [mask,adat,bdat,P1,P2]=getdat(P1,G1,D1,P2,G2,D2)if (~isempty(D1)) s1 = size(D1); D1 = reshape(D1,[],s1(end)); [a,P1] = mfbox_databackend('getic',P1,D1(:,1),G1); m1 = ~isnan(a); adat = zeros(sum(m1(:)),s1(end)); adat(:,1) = a(m1); for i=2:s1(end) [a,P1] = mfbox_databackend('getic',P1,D1(:,i),G1); adat(:,i) = a(m1); endelse m1 = 0; adat = 0;endif (~isempty(D2)) s2 = size(D2); D2 = reshape(D2,[],s2(end)); [b,P2] = mfbox_databackend('getic',P2,D2(:,1),G2); m2 = ~isnan(b); bdat = zeros(sum(m2(:)),s2(end)); bdat = b(m2); for i=2:s2(end) [b,P2] = mfbox_databackend('getic',P2,D2(:,i),G2); bdat(:,i) = b(m2); endelse m2 = 0; bdat = 0;endmask = uint8(m1+(m2*2));% ---function [tl,atc,btc]=gettcs(A1,T1,A2,T2)if (length(T1)==length(T2)) if (sum((T1(:)-T2(:)).^2)<0.01) tl = T1; atc = A1; btc = A2; return endendltc = 0;if (~isempty(A1)), ltc = max(ltc,max(T1)); endif (~isempty(A2)), ltc = max(ltc,max(T2)); end%tl = linspace(0,ltc,(2*ltc)+1);tl = linspace(0,ltc,ltc+1);atc = zeros(length(tl),size(A1,2));btc = zeros(length(tl),size(A2,2));for i=1:size(A1,2) atc(:,i) = interp1(T1,A1(:,i),tl,'linear',0);endfor i=1:size(A2,2) btc(:,i) = interp1(T2,A2(:,i),tl,'linear',0);end% ---function g=convertgroup(h,l)uh = unique(h);g = cell(length(l)-1,length(uh));for i=1:length(uh) for j=2:length(l) p = find(h==uh(i)); p = p(p>l(j-1)); p = p(p<=l(j)); if (~isempty(p)), p = p-l(j-1); end g{j-1,i} = p(:)'; endend% --- Executes on button press in spatiotemp_plot.function handles=spatiotemp_plot(handles)d = handles.frontend.varthresh;curgroup = handles.frontend.groups;g = handles.grouping;bg = []; atlas = {};fic = []; fnames = [];ftl = []; oic = [];dmask = [];for sel=1:length(handles.mfbss) x = g{sel,curgroup}; if (~isempty(g{sel,curgroup})) if (isempty(bg)) [bg,handles.private{sel}] = mfbox_databackend('getbg',handles.private{sel}); atlas = mfbox_databackend('getatlas',handles.private{sel}); end n = handles.mfbss{sel}.S.tag(x); name = mat2cell(repmat(', ',1,2*length(n)-1),1,2*ones(1,2*length(n)-1)); name(1:2:end) = n; name = [name{:}]; fnames = [fnames;name(:)]; for s=1:length(x) tc = handles.components(sel).tcs(:,x(s))'; tl = handles.components(sel).timeline; ic = handles.mfbss{sel}.S.dat(:, ... unique(handles.mfbss{sel}.S.map(:,x(s)))); [ics,handles.private{sel}] = mfbox_databackend('getic',handles.private{sel},ic, ... handles.mfbss{sel}.grid(:,handles.mfbss{sel}.S.mask)); if (isempty(fic)) oic = ics; ftl = tl; osmask = ~isnan(ics); dmask = osmask; ic = ics(osmask)*tc(:)'; % TODO: use the right transformations fic = ic; else smask = ~isnan(ics); if (mfbox_cov(ics(smask&osmask),oic(smask&osmask))<0) % test on overlap ics = -ics; tc = -tc; end ic = ics(smask)*tc(:)'; % TODO: use the right transformations if (all(smask(:)==dmask(:))) fic = fic+ic; else nmask = dmask|smask; ofic = fic; fic = zeros(sum(nmask(:)),size(ofic,2)); tdmask = dmask(nmask); tsmask = smask(nmask); fic(tdmask,:) = ofic; fic(tsmask,:) = fic(tsmask,:)+ic; dmask = nmask; end end end endendfic(isnan(fic)|isinf(fic)) = 0;nmask = false(size(fic));smask = any(fic~=0,2);tmask = any(fic~=0,1);nmask(smask,tmask) = true;mask = false(length(dmask(:)),size(fic,2));mask(dmask,:) = nmask;fic = reshape(fic(nmask),[sum(smask(:)),sum(tmask(:))]);[tU,D,tV] = svd(fic,'econ'); %TODO: speed this up!dD = diag(D);[dummy,s] = sort(dD,'descend');U = zeros(size(mask,1),min(2,size(D,1)));V = zeros(size(mask,2),min(2,size(D,1)));U(any(mask,2),:) = tU(:,s(1:min(2,size(D,1))));V(any(mask,1),:) = tV(:,s(1:min(2,size(D,1))));o = [1,3];if (size(U,2)>1) mfbox_plotic({reshape(U(:,1),size(oic)),reshape(abs(U(:,2)), ... size(oic)),abs(V(:,2))},{V(:,1),ftl},fnames(:)', ... {o(mod(d-1,2)+1),d>2},bg,atlas); a = questdlg(sprintf('Export?\n'), ... 'Compare','Yes','No','No'); if (strcmp(a,'Yes')) [f,di] = uiputfile('*.svg','Select output file ...'); if (isempty(f)), return; end tmpfile = fullfile(di,f); f = fopen(tmpfile,'w'); dat = mfbox_plotic({reshape(U(:,1),size(oic)),reshape(abs(U(:,2)), ... size(oic)),abs(V(:,2))},{V(:,1),ftl},fnames(:)', ... {o(mod(d-1,2)+1),d>2},bg,atlas,1); fwrite(f,dat,'char'); fclose(f); endelse mfbox_plotic(reshape(U(:,1),size(oic)),{V(:,1),ftl},fnames(:)', ... {o(mod(d-1,2)+1),d>2},bg,atlas); a = questdlg(sprintf('Export?\n'), ... 'Compare','Yes','No','No'); if (strcmp(a,'Yes')) [f,di] = uiputfile('*.svg','Select output file ...'); if (isempty(f)), return; end tmpfile = fullfile(di,f); f = fopen(tmpfile,'w'); dat = mfbox_plotic(reshape(U(:,1),size(oic)),{V(:,1),ftl},fnames(:)', ... {o(mod(d-1,2)+1),d>2},bg,atlas,1); fwrite(f,dat,'char'); fclose(f); endend% --- Executes on button press in spatial_match.function handles=spatial_match(handles)sel1 = handles.frontend.dataselect1;curgroup = handles.frontend.groups;g = handles.grouping;gr = g{sel1,curgroup};j = zeros(size(handles.components(sel1).mask),'uint16');j(handles.components(sel1).mask) = sum( ... handles.components(sel1).dat(:,gr),2);ic = j;for i=1:size(g,1) if (i~=sel1) j = zeros([numel(handles.components(i).mask), ... size(handles.components(i).dat,2)],'uint16'); j(handles.components(i).mask,:) = handles.components(i).dat; nic = j; c = abs(mfbox_cov(double(ic(:)),double(nic))); [c,m] = max(c); handles.grouping{i,curgroup} = [m]; for j=1:size(g,2) if (j~=curgroup) handles.grouping{i,j} = substract(handles.grouping{i,j},m); if (numel(handles.grouping{i,j})==0) handles.grouping{i,j} = []; end end end endendhandles.grouping = fixgrouping(handles.grouping, ... cellfun(@(x) size(x.A,2),handles.mfbss));% --- Executes on button press in temporal_match.function handles=temporal_match(handles)sel1 = handles.frontend.dataselect1;curgroup = handles.frontend.groups;g = handles.grouping;gr = g{sel1,curgroup};j = handles.components(sel1).tcs(:,gr);tc = sum(j*diag(sign(diag(cov(j)))),2);tl = handles.components(sel1).timeline;for i=1:size(g,1) if (i~=sel1) ntl = handles.components(i).timeline; ntc = handles.components(i).tcs; c = abs(mfbox_cov(tc,ntc)); %TODO: use timelines [c,m] = max(c); handles.grouping{i,curgroup} = [m]; for j=1:size(g,2) if (j~=curgroup) handles.grouping{i,j} = substract(handles.grouping{i,j},m); if (numel(handles.grouping{i,j})==0) handles.grouping{i,j} = []; end end end endendhandles.grouping = fixgrouping(handles.grouping, ... cellfun(@(x) size(x.A,2),handles.mfbss));% ---function t=substract(t,m)for i=m t = t(t~=i);end% --- Executes on button press in load_comparedata.function handles=load_comparedata(handles)[f,d] = uigetfile('*.mfc','Select COMPARE file ...');if (ischar(f)) filename = fullfile(d,f);else filename = '';end[handles,handles.comparefilename] = mfbox_databackend('loadcompare', ... handles,filename,1);for i=1:length(handles.mfbss) mfbss = handles.mfbss{i}; dat = struct(); if (isfield(mfbss,'bg')), dat = struct('bg',mfbss.bg); end if (isfield(mfbss,'bgmat')), dat.bgmat = mfbss.bgmat; end if (isfield(mfbss,'bmmat')), dat.bmmat = mfbss.bmmat; end if (isfield(mfbss,'bmvolmat')), dat.bmvolmat = mfbss.bmvolmat; end if (isfield(mfbss,'bmvoldim')), dat.bmvoldim = mfbss.bmvoldim; end handles.private{i} = mfbox_databackend('init',struct(),dat);endnum = length(handles.mfbss);cur = 1;handles = recalcinfo(handles,cur,num);handles.frontend.position = 0;handles.frontend.orderselect = 1;handles.frontend.varthresh = 1;handles.frontend.groups = 1;handles.frontend.zoomfact = 1;handles.frontend.selectdata = 1;handles.frontend.dataselect1 = 1;handles.frontend.dataselect2 = 2;% --- Executes on button press in save_comparedata.function handles=save_comparedata(handles)[f,d] = uiputfile('*.mfc','Select COMPARE file ...');if (ischar(f)) filename = fullfile(d,f);else filename = '';endhandles.comparefilename = mfbox_databackend('savecompare',handles,filename,1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -