📄 mfbox_tool_compare_run.m
字号:
handles.components(j).dat = d; handles.components(j).timeline = timeline; handles.components(j).tcs = tcs2; if (i<j), dat{i} = dat1; mas{i} = bitand(mask,1); i = i+2; else dat{j} = dat2; mas{j} = bitand(mask,2)/2; j = j+2; end end clear dat handles.grouping = cell(length(handles.mfbss),0); handles.grouping = fixgrouping(handles.grouping, ... cellfun(@(x) size(x.A,2),handles.mfbss)); handles.spatial_cross_data = norm_cross(handles.spatial_cross_data); handles.temporal_cross_data = norm_cross(handles.temporal_cross_data); end buttons.spatiotemp_plot = 1; buttons.plot_comb = 1; buttons.plot_diff = 1; buttons.plot1 = 1; buttons.plot2 = 1; buttons.spat_auto_group = 1; buttons.temp_auto_group = 1; buttons.spatial_match = 1; buttons.temporal_match = 1; buttons.remove_data = 1; buttons.save_comparedata = 1; if (length(handles.mfbss)>2) buttons.dataselect1 = 1; buttons.dataselect2 = 1; end handles.newfrontend = addfrontend(handles.newfrontend, ... 'zoomfact','Visible','on');elseif (length(handles.mfbss)==1) varthresh_opts = {'>1 std, 0 centered','>3 std, 0 centered', ... '>1 std, mean centered','>3 std, mean centered'}; if (isempty(cat(2,handles.components.timeline))) handles.components_masks = struct(); handles.components = struct('timeline',[]); [timeline,tcs1] = gettcs( ... handles.mfbss{1}.A,handles.mfbss{1}.timeline,[],[]); S = zeros(size(handles.mfbss{1}.S.dat,1),size(handles.mfbss{1}.A,2)); for i=1:size(S,2) S(:,i) = sum(handles.mfbss{1}.S.dat(:,unique(handles.mfbss{1}.S.map(:,i))),2); end [mask,dat1,dummy,handles.private{1}] = getdat(handles.private{1}, ... handles.mfbss{1}.grid(:,handles.mfbss{1}.S.mask), ... S,[],[],[]); [handles.spatial_cross_data,handles.temporal_cross_data] = ... update_cross(timeline,tcs1,tcs1,3*mask,dat1,dat1); handles.components(1).mask = mask==1; m = mean(dat1); s = std(dat1); d = zeros(size(dat1),'uint8'); for k=1:length(m) d(:,k) = (abs(dat1(:,k))>=s(k))+2*(abs(dat1(:,k))>=3*s(k))+ ... 4*(abs(dat1(:,k)-m(k))>=s(k))+8*(abs(dat1(:,k)-m(k))>=3*s(k)); end handles.components(1).dat = d; handles.components(1).timeline = timeline; handles.components(1).tcs = tcs1; handles.spatial_cross_data = norm_cross(handles.spatial_cross_data); handles.temporal_cross_data = norm_cross(handles.temporal_cross_data); handles.grouping = cell(length(handles.mfbss),0); handles.grouping = fixgrouping(handles.grouping, ... cellfun(@(x) size(x.A,2),handles.mfbss)); end buttons.spatiotemp_plot = 1; buttons.plot_comb = 1; buttons.plot_diff = 1; buttons.plot1 = 1; buttons.remove_data = 1; buttons.save_comparedata = 1; handles.newfrontend = addfrontend(handles.newfrontend, ... 'zoomfact','Visible','on');else handles.spatial_cross_data = zeros(0); handles.temporal_cross_data = zeros(0); handles.components_masks = struct(); handles.components = struct('timeline',[]); handles.grouping = {}; varthresh_opts = {' '}; handles.newfrontend = addfrontend(handles.newfrontend, ... 'zoomfact','Visible','off'); handles.newimages.allcorr = {ones(1,1,3)};endhandles.buttons = buttons;handles.newfrontend = addfrontend(handles.newfrontend, ... 'varthresh','String',varthresh_opts,'Value',1);handles = redraw_all(handles);function fe=addfrontend(fe,name,varargin)if (~isfield(fe,name)) fe.(name) = struct();endfor i=1:2:length(varargin) fe.(name).(varargin{i}) = varargin{i+1};endfunction handles=recalcinfo(handles,cur,num)if (num>=1) handles.newfrontend = addfrontend(handles.newfrontend, ... 'info_data','String',handles.info{cur});endnames = mknames(num,'Data');if (num==0) handles.newfrontend = addfrontend(handles.newfrontend, ... 'selectdata','String',{''},'Value',1);elseif (num>=2) handles.newfrontend = addfrontend(handles.newfrontend, ... 'selectdata','String',names,'Value',cur); handles.newfrontend = addfrontend(handles.newfrontend, ... 'dataselect1','String',names(2~=(1:num)),'Value',1); handles.newfrontend = addfrontend(handles.newfrontend, ... 'dataselect2','String',names(1~=(1:num)),'Value',1); if (~isfield(handles.frontend,'dataselect2')||isempty(handles.frontend.dataselect2)) handles.frontend.dataselect2 = 2; endelse handles.newfrontend = addfrontend(handles.newfrontend, ... 'selectdata','String',names,'Value',cur); handles.newfrontend = addfrontend(handles.newfrontend, ... 'dataselect1','String',names,'Value',1); handles.newfrontend = addfrontend(handles.newfrontend, ... 'dataselect2','String',{}); if (~isfield(handles.frontend,'dataselect1')||isempty(handles.frontend.dataselect1)) handles.frontend.dataselect1 = 1; endendfunction handles=add_data(handles)[f,d] = uigetfile('*.mfb','Select MFBOX files ...','MultiSelect','On');if (iscell(f)) filenames = {}; for i=1:length(f), filenames{end+1} = fullfile(d,f{i}); endelseif (ischar(f)) filenames = {fullfile(d,f)};else filenames = {};endnum = 0;cur = 0;for i=1:length(filenames) num = 1+length(handles.mfbss); cur = num; [mfbss,filename,private,info] = load_data(struct(),filenames{i},struct(), ... handles.interactive); if (isempty(info)) break end handles.mfbss{num} = mfbss; handles.filename{num} = filename; handles.private{num} = private; handles.info{num} = info;endhandles = recalcinfo(handles,cur,num);handles.components = struct('timeline',[]);% ---function [mfbss,filename,private,info]=load_data(mfbss,filename,private,interactive)if (~isfield(mfbss,'S')) [mfbss,filename,dat] = mfbox_databackend('load',mfbss,filename,interactive);else 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; endendprivate = mfbox_databackend('init',private,dat);if (isempty(fieldnames(dat))) info = ''; returnendif (~isfield(mfbss,'ppS')) mfbss.S.tag = mknames(size(mfbss.S.map,2),'comp');elseif (isempty(fieldnames(mfbss.ppS))) mfbss.S.tag = mknames(size(mfbss.S.map,2),'comp');else mfbss.S = mfbss.ppS; mfbss.A = mfbss.ppA; mfbss.W = mfbss.ppW; mfbss = rmfield(mfbss,'ppS'); mfbss = rmfield(mfbss,'ppA'); mfbss = rmfield(mfbss,'ppW'); if (~isfield(mfbss.S,'tag')) mfbss.S.tag = mknames(size(mfbss.S.map,2),'comp'); endendv = {}; n = 1;c = size(mfbss.A,2);pl = length(mfbss.pre_name);prn = mat2cell(repmat(', ',1,2*pl-1),1,2*ones(1,2*pl-1));prn(1:2:(2*pl-1)) = mfbss.pre_name;prn = [prn{:}];nb = mfbss.name;ren = mfbss.rel_name;pl = length(mfbss.pos_name);pon = mat2cell(repmat(', ',1,2*pl-1),1,2*ones(1,2*pl-1));pon(1:2:(2*pl-1)) = mfbss.pos_name;pon = [pon{:}];fn = filename;if(~isempty(fn)), v{n} = sprintf('Data source: %s',fn); n = n+1; endif (~isempty(prn)), v{n} = sprintf('Preprocessing: %s',prn); n = n+1; endif (c~=0) v{n} = sprintf('Extracted components %d',c); n = n+1; if (~isempty(nb)), v{n} = sprintf('Algorithm: %s',nb); n = n+1; end if (~isempty(ren)), v{n} = sprintf('Component: %s',ren); n = n+1; end if (~isempty(pon)), v{n} = sprintf('Post-processing: %s',pon); n = n+1; endendinfo = char(v);mfbss.X = []; %discard Xfunction handles=plot_comb(handles)vt = 2^(handles.frontend.varthresh-1);curgroup = handles.frontend.groups;g = handles.grouping(:,curgroup);[bg,handles.private{1}] = mfbox_databackend('getbg',handles.private{1});atlas = mfbox_databackend('getatlas',handles.private{1});if (~isempty([g{:}])) tc = {}; tl = {}; ic = {}; for i=1:length(g) c = g{i}; if (~isempty(c)) tc{end+1} = sum(handles.components(i).tcs(:,c),2); tl{end+1} = handles.components(i).timeline(:); j = zeros(size(handles.components(i).mask),'uint16'); j(handles.components(i).mask) = sum(bitand( ... handles.components(i).dat(:,c),vt)>0,2); ic{end+1} = j; end end le = cellfun('length',tl); if (all(le(:)==le(1))) l = cat(2,tl{:}); if (all(all(l-repmat(l(:,1),1,size(l,2))==0,2),1)) tl = tl{1}; tc = cat(2,tc{:}); tc = [tc,sum(tc,2)]; end end if (iscell(tc)) minl = min(reshape(cat(2,tl{:}),[],1)); maxl = max(reshape(cat(2,tl{:}),[],1)); otl = tl; tl = linspace(minl,maxl,max(l(:))*2); otc = tc; tc = zeros(length(tl),length(otc)); for i=1:length(otc), tc(:,i) = interp1(otl{i},otc{i},tl); end tc = [tc,sum(tc,2)]; end ic = sum(cat(4,ic{:}),4); mfbox_plotic(ic,{tc,tl},sprintf('Combined area of group %d',curgroup), ... {0,false},bg,atlas);endfunction handles=plot_diff(handles)vt = 2^(handles.frontend.varthresh-1);curgroup = handles.frontend.groups;g = handles.grouping(:,curgroup);[bg,handles.private{1}] = mfbox_databackend('getbg',handles.private{1});atlas = mfbox_databackend('getatlas',handles.private{1});if (~isempty([g{:}])) tc = {}; tl = {}; ic = {}; for i=1:length(g) c = g{i}; if (~isempty(c)) tc{end+1} = sum(handles.components(i).tcs(:,c),2); tl{end+1} = handles.components(i).timeline(:); j = zeros(size(handles.components(i).mask),'uint16'); j(handles.components(i).mask) = sum(bitand( ... handles.components(i).dat(:,c),vt)>0,2); ic{end+1} = j; end end l = cellfun('length',tl); if (all(l(:)==l(1))) l = cat(2,tl{:}); if (all(all(l-repmat(l(:,1),1,size(l,2))==0,2),1)) tl = tl{1}; tc = sum(cat(2,tc{:}),2); end end if (iscell(tc)) minl = min(reshape(cat(2,tl{:}),[],1)); maxl = max(reshape(cat(2,tl{:}),[],1)); otl = tl; tl = linspace(minl,maxl,max(l(:))*2); otc = tc; tc = zeros(length(tl),length(otc)); for i=1:length(otc), tc(:,i) = interp1(otl{i},otc{i},tl); end tc = [tc,sum(tc,2)]; end ic = sum(cat(4,ic{:}),4); n = sum(cellfun('length',g)); ic = -n+ic; ic(ic==0) = n; ic(ic==-n) = 0; mfbox_plotic(ic,{tc,tl},sprintf('Differential area of group %d',curgroup), ... 0,bg,atlas);endfunction c=norm_cross(c)cr = real(c); ci = imag(c);c = complex(abs(cr)/max(abs(cr(:))),abs(ci)/max(abs(ci(:))));% --- Executes on button press in plot1.function handles=plot1(handles)d = handles.frontend.varthresh;if (length(handles.mfbss)<=2), sel1 = 1;else sel1 = handles.frontend.dataselect1;endcurgroup = handles.frontend.groups;g = handles.grouping;[bg,handles.private{sel1}] = mfbox_databackend('getbg',handles.private{sel1});atlas = mfbox_databackend('getatlas',handles.private{sel1});if (~isempty(g{sel1,curgroup})) n = handles.mfbss{sel1}.S.tag(g{sel1,curgroup}); name = mat2cell(repmat(', ',1,2*length(n)-1),1,2*ones(1,2*length(n)-1)); name(1:2:end) = n; name = [name{:}]; tc = sum(handles.components(sel1).tcs(:,g{sel1,curgroup}),2)'; tl = handles.components(sel1).timeline; ic = sum(handles.mfbss{sel1}.S.dat(:, ... unique(handles.mfbss{sel1}.S.map(:,g{sel1,curgroup}))),2); [ic,handles.private{sel1}] = mfbox_databackend('getic',handles.private{sel1},ic, ... handles.mfbss{sel1}.grid(:,handles.mfbss{sel1}.S.mask)); o = [1,3]; mfbox_plotic(ic,{tc,tl},name,{o(mod(d-1,2)+1),d>2},bg,atlas);end% --- Executes on button press in plot2.function handles=plot2(handles)d = handles.frontend.varthresh;if (length(handles.mfbss)<=2), sel2 = 2;else sel2 = handles.frontend.dataselect2;endcurgroup = handles.frontend.groups;g = handles.grouping;[bg,handles.private{sel2}] = mfbox_databackend('getbg',handles.private{sel2});atlas = mfbox_databackend('getatlas',handles.private{sel2});if (~isempty(g{sel2,curgroup})) n = handles.mfbss{sel2}.S.tag(g{sel2,curgroup}); name = mat2cell(repmat(', ',1,2*length(n)-1),1,2*ones(1,2*length(n)-1)); name(1:2:end) = n; name = [name{:}]; tc = sum(handles.components(sel2).tcs(:,g{sel2,curgroup}),2)'; tl = handles.components(sel2).timeline; ic = sum(handles.mfbss{sel2}.S.dat(:, ... unique(handles.mfbss{sel2}.S.map(:,g{sel2,curgroup}))),2); [ic,handles.private{sel2}] = mfbox_databackend('getic',handles.private{sel2},ic, ... handles.mfbss{sel2}.grid(:,handles.mfbss{sel2}.S.mask)); o = [1,3]; mfbox_plotic(ic,{tc,tl},name,{o(mod(d-1,2)+1),d>2},bg,atlas);end% --- Executes on button press in reset_groups.function handles=reset_groups(handles)handles.grouping = cell(length(handles.mfbss),0);handles.grouping = fixgrouping(handles.grouping, ... cellfun(@(x) size(x.A,2),handles.mfbss));% --- Executes on button press in remove_data.function handles=remove_data(handles)cur = handles.frontend.selectdata;num = length(handles.mfbss);sel = find((1:num)~=cur);num = num-1;cur = 1;handles.mfbss = handles.mfbss(sel);handles.filename = handles.filename(sel);handles.private = handles.private(sel);handles.info = handles.info(sel);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -