www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wmultisig1d/mdw1dshow.m
function mdw1dshow(option,varargin) %MDW1DSHOW Multisignal show manager. % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 07-Jul-2005. % Last Revision: 11-Jul-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.1.6.11 $ $Date: 2013/08/23 23:45:48 $ %------------------------------------------------------------ % case 'set_Axe_DEC_Pos' % case 'Show_DEC_Fun' % case 'btnTreeTxtFCN' % case 'Line_Down_GRAPH' % case 'Line_Move_GRAPH' % case 'Line_Up_GRAPH' % case 'L2_N0_SCR' % case 'LD_THR' % case 'LM_THR' % case 'LU_THR' %------------------------------------------------------------ switch option case 'set_Axe_DEC_Pos' , set_Axe_DEC_Pos(varargin{:}); case 'Show_DEC_Fun' nbIN = length(varargin); [hObject,~,handles,caller] = deal(varargin{1:4}); if nbIN==5 dispCUR = varargin{5}; else dispCUR = []; end not_LST_FLAG = ~isequal(caller,'LST'); calling_UIC = get(gcbo,'Tag'); fig = handles.Current_Fig; tool_STATE = blockdatamngr('get',fig,... 'tool_ATTR','State'); thr_MAN_MODE = isequal(tool_STATE,'DEN_MAN') || ... isequal(tool_STATE,'CMP_MAN'); mngmbtn('delLines',fig,'All'); idxSIG_Plot = wtbxappdata('get',fig,'idxSIG_Plot'); idxSIG_SEL = wtbxappdata('get',fig,'idxSIG_SEL'); if thr_MAN_MODE flag_MAN = get(handles.Pus_ENA_MAN,'UserData'); if flag_MAN idxSIG_Plot = idxSIG_SEL; wtbxappdata('set',fig,'idxSIG_Plot',idxSIG_Plot); else %%% A VOIR - DEB %%% idxSIG_Plot = idxSIG_SEL; wtbxappdata('set',fig,'idxSIG_Plot',idxSIG_Plot); %%% A VOIR - FIN %%% end end if isempty(idxSIG_Plot) idxSIG_Plot = 1; wtbxappdata('set',fig,'idxSIG_Plot',idxSIG_Plot); end if isempty(idxSIG_SEL) idxSIG_SEL = 1; wtbxappdata('set',fig,'idxSIG_SEL',idxSIG_SEL); end switch caller case {'ORI','CLU','CMP','DEN','STA','PAR',... 'Pop_Show_DEC','LST','Pop_DEC_lev'} dispName = mdw1dmngr('getDispMode',handles.Pop_Show_Mode); end if ~isequal(tool_STATE,'PAR_ON') Attrb_Lst_In_SEL = wtbxappdata('get',fig,'Attrb_Lst_In_SEL'); %%% A VOIR - DEB %%% n1_InB = Attrb_Lst_In_SEL(idxSIG_SEL,2); t1_Num = Attrb_Lst_In_SEL(idxSIG_SEL,5); s1_NUMS = unique([n1_InB,t1_Num],'rows'); i1_ORI = s1_NUMS(s1_NUMS(:,2)==0 | s1_NUMS(:,2)==3,1); % i1_DorC = s1_NUMS(s1_NUMS(:,2)==1 | s1_NUMS(:,2)==2 | s1_NUMS(:,2)==3,1); num_InBlocs = Attrb_Lst_In_SEL(idxSIG_Plot,2); typSIG_Num = Attrb_Lst_In_SEL(idxSIG_Plot,5); sig_NUMS = unique([num_InBlocs,typSIG_Num],'rows'); idx_Typ_ORI = find(sig_NUMS(:,2)==0 | sig_NUMS(:,2)==3); idx_Typ_DorC = find(sig_NUMS(:,2)==1 | sig_NUMS(:,2)==2 | ... sig_NUMS(:,2)==3); %%% A VOIR - FIN %%% flag_ORI = ~isempty(idx_Typ_ORI); flag_DorC = ~isempty(idx_Typ_DorC); if flag_ORI idx_ORI = sig_NUMS(idx_Typ_ORI,1); else idx_ORI = []; end if flag_DorC idx_DorC = sig_NUMS(idx_Typ_DorC,1); else idx_DorC = []; end [data_ORI,data_DorC] = ... mdw1dutils('data_INFO_MNGR','get',fig,'ORI','DorC'); sig_ORI = data_ORI.signal; lenSIG = size(sig_ORI,2); dec_ORI = data_ORI.dwtDEC; dec_DorC = data_DorC.dwtDEC; sig_DorC = data_DorC.signal; if ~isempty(dec_ORI) , level = dec_ORI.level; end else %%% A VOIR - DEB %%% flag_ORI = 1; sig_ORI = blockdatamngr('get',fig,'data_SEL','sel_DAT'); %%% A VOIR - FIN %%% end Axe_DEC = handles.Axe_VIS_DEC; switch caller case {'ORI','CLU','CMP','DEN','STA','PAR',... 'Pop_Show_DEC','LST','Pop_DEC_lev'} % Select Show Decomposition Mode. %-------------------------------- POP_DEC = handles.Pop_DEC_lev; level_DEC = get(POP_DEC,'Value'); if isequal(caller,'Pop_DEC_lev') usr = get(POP_DEC,'UserData'); if isequal(level_DEC,usr) , return; end set(POP_DEC,'UserData',level_DEC); else set(POP_DEC,'UserData',[]); end set(handles.Pop_Show_Mode,'UserData',dispName) % Cleaning Axes. %--------------- child = wfindobj(Axe_DEC(:),'type','axes','-xor'); delete(child); set(Axe_DEC,'YtickMode','auto','YTickLabelMode','auto'); switch dispName case {'dec','stem','stemAbs','stemSqr','stemEner', ... 'lvlThr','decCfs'} otherwise set(Axe_DEC,'XtickMode','auto','XTickLabelMode','auto') end case 'btnFCN' dispName = 'btnFCN'; typSIG = varargin{5}; levVAL = varargin{6}; wtbxappdata('set',hObject,'Tree_SEL',typSIG); wtbxappdata('set',hObject,'Tree_LEV_SEL',levVAL); end toolCOL = mdw1dutils('colors'); LinW = mdw1dutils('LinW'); sigCOL = toolCOL.sig; d_OR_c_sigCOL = toolCOL.d_OR_c; appCOL = toolCOL.app; d_OR_c_appCOL = 0.7*appCOL; detCOL = toolCOL.det; d_OR_c_detCOL = 0.65*detCOL; resCOL = toolCOL.res; ln0COL = toolCOL.N0; ln2COL = toolCOL.L2; LEG = wfindobj(gcf,'Tag','legend'); set(LEG,'Visible','Off'); switch dispName case 'dec' if not_LST_FLAG set_Axe_DEC_Pos('sup',fig,handles,level_DEC) end % Computing Signals, Approximations and Details. %------------------------------------------------ if flag_ORI sig_ORI = sig_ORI(idx_ORI,:); app_ORI = mdwtrec(dec_ORI,'a',level_DEC,idx_ORI); det_ORI = cell(1,level_DEC); for k=1:level_DEC det_ORI{k} = mdwtrec(dec_ORI,'d',k,idx_ORI); end else sig_ORI = []; app_ORI = []; det_ORI = []; end if flag_DorC sig_DorC = sig_DorC(idx_DorC,:); app_DorC = mdwtrec(dec_DorC,'a',level_DEC,idx_DorC); det_DorC = cell(1,level_DEC); for k=1:level_DEC , det_DorC{k} = mdwtrec(dec_DorC,'d',k,idx_DorC); end else sig_DorC = []; app_DorC = []; det_DorC = []; end % Plot Signals. %-------------- axe_Act = Axe_DEC(1); axes(axe_Act); hold on %#ok<*MAXES> if flag_ORI plot(1:lenSIG,sig_ORI','Color',sigCOL); end if flag_DorC plot(1:lenSIG,sig_DorC','Color',d_OR_c_sigCOL); end tab_SIG = [sig_ORI;sig_DorC]; yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(axe_Act,'XTick',[],'YLim',getYlim(yMini,yMaxi)); txtSTR = 's'; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); titSTR = getWavMSG('Wavelet:mdw1dRF:Dec_At_Lev',level_DEC); title(titSTR,'Parent',axe_Act); % Plot Approximations. %--------------------- axe_Act = Axe_DEC(2); axes(axe_Act); hold on if flag_ORI , plot(1:lenSIG,app_ORI','Color',appCOL); end if flag_DorC , plot(1:lenSIG,app_DorC','Color',d_OR_c_appCOL); end tab_SIG = [app_ORI;app_DorC]; yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(Axe_DEC(2),'XTick',[],'YLim',getYlim(yMini,yMaxi)); txtSTR = ['a' int2str(level_DEC)]; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); % Plot Details. %-------------- idx_AXE = 3; for k=level_DEC:-1:1 axe_Act = Axe_DEC(idx_AXE); axes(axe_Act); hold on tab_SIG = []; if flag_ORI tab_SIG = [tab_SIG;det_ORI{k}]; %#ok<AGROW> plot(1:lenSIG,det_ORI{k}','Color',detCOL); end if flag_DorC tab_SIG = [tab_SIG;det_DorC{k}]; %#ok<AGROW> plot(1:lenSIG,det_DorC{k}','Color',d_OR_c_detCOL); end yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(axe_Act,'YLim',getYlim(yMini,yMaxi),... 'XGrid','Off','YGrid','Off'); txtSTR = ['d' int2str(k)]; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); idx_AXE = idx_AXE+1; if k>1 set(axe_Act,'XTick',[],'YTickLabelMode','auto'); else set(axe_Act,'XTickLabelMode','auto','YTickLabelMode','auto'); end end case {'stem','stemAbs','stemSqr','stemEner'} maxSIG = 10; nb_ORI = length(idx_ORI); nb_DorC = length(idx_DorC); if nb_ORI>maxSIG idx_ORI(maxSIG+1:end) = []; nb_ORI = maxSIG; end if nb_DorC>maxSIG idx_DorC(maxSIG+1:end) = []; nb_DorC = maxSIG; end nb_SIG = nb_ORI + nb_DorC; if nb_SIG>maxSIG while nb_SIG>maxSIG if nb_ORI>0 idx_ORI(end) = []; nb_ORI = nb_ORI-1; end if nb_DorC>0 idx_DorC(end) = []; nb_DorC = nb_DorC-1; end nb_SIG = nb_ORI + nb_DorC; end end % if not_LST_FLAG set_Axe_DEC_Pos('stem',fig,handles,nb_SIG); % end switch dispName case 'stem' , absMode = 0; numTIT = 1; case 'stemAbs' , absMode = 1; numTIT = 2; case 'stemSqr' , absMode = 1; numTIT = 3; case 'stemEner' , absMode = 1; numTIT = 4; end strTIT = ['MDW1D_AxeTitle_' int2str(numTIT)]; strTIT = getWavMSG(['Wavelet:mdw1dRF:' strTIT]); % Plot decomposition. %-------------------- stem_ATTRB = ... {'mode',absMode,'viewapp',1,'colors','wtbx','yscale','eq'}; if nb_ORI>0 if level==level_DEC [cfs_ORI,longs] = wdec2cl(dec_ORI); cfs_ORI = cfs_ORI(idx_ORI,:); else cfs_ORI = mdwtrec(dec_ORI,'ca',level_DEC,idx_ORI); longs = size(cfs_ORI,2); for k = level_DEC:-1:1 cfs_det = mdwtrec(dec_ORI,'cd',k,idx_ORI); cfs_ORI = [cfs_ORI ,cfs_det]; %#ok<AGROW> longs = [longs , size(cfs_det,2)]; %#ok<AGROW> end longs = [longs , lenSIG]; end if isequal(dispName,'stemSqr') || isequal(dispName,'stemEner') cfs_ORI = cfs_ORI.^2; if isequal(dispName,'stemEner') Energy = sum(cfs_ORI,2); cfs_ORI = cfs_ORI./repmat(Energy,1,size(cfs_ORI,2)); stem_ATTRB{end} = 'prop'; % stem_ATTRB{4} = 0; end end txtInAttrb = {'l','on','bold','s',idx_ORI}; mdw1dstem(Axe_DEC(1:nb_ORI),... cfs_ORI,longs,stem_ATTRB,txtInAttrb); end if nb_DorC>0 if any(sig_NUMS(:,2)==1) D_or_C = 'D'; else D_or_C = 'C'; end if level==level_DEC [cfs_DorC,longs] = wdec2cl(dec_DorC); cfs_DorC = cfs_DorC(idx_DorC,:); else cfs_DorC = mdwtrec(dec_DorC,'ca',level_DEC,idx_DorC); longs = size(cfs_DorC,2); for k = level_DEC:-1:1 cfs_det = mdwtrec(dec_DorC,'cd',k,idx_DorC); cfs_DorC = [cfs_DorC ,cfs_det]; %#ok<AGROW> longs = [longs , size(cfs_det,2)]; %#ok<AGROW> end longs = [longs , lenSIG]; end txtInAttrb = {'l','on','bold',[D_or_C 's'],idx_DorC}; axeIDX = (1+nb_ORI:nb_DorC+nb_ORI); mdw1dstem(Axe_DEC(axeIDX),... cfs_DorC,longs,stem_ATTRB,txtInAttrb); end wguiutils('setAxesTitle',Axe_DEC(1),strTIT); set(Axe_DEC(1:nb_SIG-1),'XTick',[]); set(Axe_DEC(nb_SIG),'XTickLabelMode','auto'); case 'tree' % Tree Mode if not_LST_FLAG set_Axe_DEC_Pos('tree',fig,handles,[]); end % Computing Signals, Approximations and Details. %------------------------------------------------ if flag_ORI sig_ORI = sig_ORI(idx_ORI,:); else sig_ORI = []; end if flag_DorC sig_DorC = sig_DorC(idx_DorC,:); else sig_DorC = []; end dy = 1/15; dxL = 1/3; dxR = 1/3; d_BEG = -1/7; d_END = +1/20; mSize = 25; fontSize = 14; ey = (1-2*dy)/level_DEC; xBeg = dxL; xEnd = 1-dxR; yBeg = 1-dy; yEnd = yBeg-level_DEC*ey; xVAL = zeros(1,3*(level_DEC+1)); yVAL = zeros(1,3*(level_DEC+1)); xVAL(1:3) = [xBeg,xBeg,NaN]; yVAL(1:3) = [yBeg,yEnd,NaN]; yCur = yBeg; for k = 1:level_DEC xVAL(3*k-2:3*k) = [xBeg,xEnd,NaN]; yVAL(3*k-2:3*k) = [yCur,yCur-ey,NaN]; yCur = yCur-ey; end xVAL(end-2:end) = xVAL(1); yVAL(end-2:end) = [yBeg yBeg-ey yBeg-level_DEC*ey]; % Plot Tree. %----------- axe_Act = Axe_DEC(3); axes(axe_Act) child = wfindobj(axe_Act,'type','axes','-xor'); delete(child); set( axe_Act,... 'XlimMode','manual','YlimMode','manual',... 'XLim',[0 1],'YLim',[0 1],... 'XTickLabelMode','manual','YTickLabelMode','manual',... 'XTickLabel','','YTickLabel','',... 'XTick',[],'XTick',[],'Color','w',... 'XGrid','Off','YGrid','Off' ... ); drawnow hold on plot(xVAL,yVAL,'k','LineWidth',2,'Parent',axe_Act); xT1 = xBeg+d_BEG; xT2 = xEnd+d_END; yCur = yBeg; btnFCN = ... [mfilename '(''btnTreeTxtFCN'',gcbo,[],guidata(gcbo));']; plot(xBeg,yCur,'Marker','.','MarkerSize',mSize,'Color','r',... 'UserData','s','ButtonDownFcn',btnFCN,'Parent',axe_Act); text(xT1,yCur,'s','FontSize',fontSize,... 'ButtonDownFcn',btnFCN,'Parent',axe_Act) for k = 1:level_DEC kStr = int2str(k); yCur = yCur-ey; aStr = ['a',kStr]; plot(xBeg,yCur,'Marker','.','MarkerSize',mSize,'Color','b',... 'UserData',aStr,'ButtonDownFcn',btnFCN,'Parent',axe_Act); text(xT1,yCur,aStr,'FontSize',fontSize, ... 'ButtonDownFcn',btnFCN,'Parent',axe_Act); dStr = ['d',kStr]; plot(xEnd,yCur,'Marker','.','MarkerSize',mSize,'Color','g',... 'UserData',dStr,'ButtonDownFcn',btnFCN,'Parent',axe_Act); text(xT2,yCur,dStr,'FontSize',fontSize,... 'ButtonDownFcn',btnFCN,'Parent',axe_Act); end xlabel(getWavMSG('Wavelet:mdw1dRF:Wavelet_Tree'), ... 'Parent',axe_Act); set(axe_Act,'XTick',[],'XTick',[]); % Plot Signals. %-------------- axe_Act = Axe_DEC(1); axes(axe_Act); hold on if flag_ORI , plot(1:lenSIG,sig_ORI','Color',sigCOL); end if flag_DorC , plot(1:lenSIG,sig_DorC','Color',d_OR_c_sigCOL); end tab_SIG = [sig_ORI;sig_DorC]; yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(axe_Act,'YLim',getYlim(yMini,yMaxi)); title(getWavMSG('Wavelet:mdw1dRF:Str_Signals')); set(Axe_DEC(1:2),'XLim',[1,lenSIG]); case {'glbThr','perfL2N0'} if not_LST_FLAG set_Axe_DEC_Pos('scrL2N0',fig,handles,[]); end % Computing Signals, Approximations and Details. %----------------------------------------------- if flag_ORI sig_ORI = sig_ORI(idx_ORI,:); else sig_ORI = []; end if ~isempty(dec_DorC) sig_DorC = data_DorC.signal; %### CORRECTION FAITE ###% %### POUR VOIR LES SIGNAUX COMPRESSES ###% idx_DorC = idx_ORI; sig_DorC = sig_DorC(idx_DorC,:); else sig_DorC = []; end % Plot Signals. %-------------- axe_Act = Axe_DEC(1); axes(axe_Act); hold on if flag_ORI plot(1:lenSIG,sig_ORI','Color',sigCOL); yMini = min(min(sig_ORI)); yMaxi = max(max(sig_ORI)); % set(axe_Act,'XLim',[1,lenSIG],'XTick',[],... % 'YLim',getYlim(yMini,yMaxi)); set(axe_Act,'XLim',[1,lenSIG],'YLim',getYlim(yMini,yMaxi)); txtSTR = 's'; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); end titSTR = getWavMSG('Wavelet:mdw1dRF:Selected_Signals'); wguiutils('setAxesTitle',axe_Act,titSTR); if ~isempty(sig_DorC) axe_Act = Axe_DEC(2); axes(axe_Act); hold on plot(1:lenSIG,sig_DorC','Color',d_OR_c_sigCOL); yMini = min(min(sig_DorC)); yMaxi = max(max(sig_DorC)); % set(axe_Act,'XLim',[1,lenSIG],'XTick',[],... % 'YLim',getYlim(yMini,yMaxi)); set(axe_Act,'XLim',[1,lenSIG],'YLim',getYlim(yMini,yMaxi)); end keepAPP = isequal(get(handles.Rad_YES,'Value'),1); titSTR = getWavMSG('Wavelet:mdw1dRF:CompSig'); val_S_or_H = get(handles.Rad_SOFT,'Value'); switch val_S_or_H case 0 , S_or_H = 'h'; case 1 , S_or_H = 's'; end [cfs,longs] = wdec2cl(dec_ORI,'all',i1_ORI); [thresVALUES,L2SCR,n0SCR,idx_SORT] = ... mswcmpscr(cfs,longs,2,S_or_H,keepAPP); wtbxappdata('set',fig,'cmp_SCORES',... {thresVALUES,L2SCR,n0SCR,idx_SORT}); if thr_MAN_MODE idxSIG_SEL = wtbxappdata('get',fig,'idxSIG_SEL'); uic_MAN = [... NaN,NaN,handles.Pop_MAN_SIG, ... handles.Edi_MAN_GLB_THR,handles.Edi_L2_PERF,... handles.Edi_N0_PERF]; nbIDX = size(idxSIG_SEL,1); paramVAL = [nbIDX ; idxSIG_SEL(:) ; uic_MAN(:)]; paramSTR = num2mstr(paramVAL); else paramSTR = '[]'; end threshold = blockdatamngr('get',... fig,'data_DorC','threshold'); threshold_Mean = mean(threshold(idx_ORI,:),2); axe_Act = Axe_DEC(3); axes(axe_Act); hold on nb_ORI = length(i1_ORI); linTHR = zeros(1,nb_ORI); for k = 1:nb_ORI numSIG = i1_ORI(k); cba = [mfilename '(''L2_N0_SCR'',' ... num2mstr(fig) ',' int2str(numSIG) ',1);']; plot(thresVALUES(k,:),L2SCR(k,:),... 'Color',ln2COL,'LineWidth',LinW.L2,... 'Marker','.','MarkerSize',15, ... 'Tag','LinL2','UserData',k,'ButtonDownFcn',cba); cba = [mfilename '(''L2_N0_SCR'',' ... num2mstr(fig) ',' int2str(numSIG) ',0);']; plot(thresVALUES(k,:),n0SCR(k,:),... 'Color',ln0COL,'LineWidth',LinW.N0,... 'Marker','.','MarkerSize',15, ... 'Tag','LinN0','UserData',k,'ButtonDownFcn',cba); if thr_MAN_MODE x = min([threshold_Mean(k),thresVALUES(k,end)]); cba_LD_THR = [mfilename '(''LD_THR'',' num2mstr(fig)... ',' int2str(numSIG) ',' int2str(k) ... ',' num2mstr(x) ',' paramSTR ');']; thrCOL = mdw1dutils('colors','thr'); linTHR(k) = plot([x,x],[0,100],... 'Color',thrCOL,'LineStyle','--','LineWidth',LinW.THR,... 'Tag','LinTHR','UserData',k,'ButtonDownFcn',cba_LD_THR); setappdata(linTHR(k),'selectPointer','V'); end end xmax = max(max(thresVALUES,[],2)); epsx = max(xmax/100,eps); epsy = 1; set(axe_Act,... 'XLim',[-epsx,max(max(thresVALUES,[],2))+epsx],... 'YLim',[-eps 100+epsy]) wguiutils('setAxesTitle',Axe_DEC(2),titSTR); xlabSTR = getWavMSG('Wavelet:commongui:Str_Threshold'); wguiutils('setAxesXlabel',Axe_DEC(3),xlabSTR); titSTR = getWavMSG('Wavelet:mdw1dRF:Ener_NbZ_Perf'); wguiutils('setAxesTitle',Axe_DEC(3),titSTR); axe_LEG = ... legend(Axe_DEC(3),'Energy %','Nb Zeros %','Location','Best'); ud = get(axe_LEG,'UserData'); ud.dynvzaxe.enable = 'Off'; set(axe_LEG,'UserData',ud); case {'decCfs','lvlThr'} % Decomposition Mode thrMode = isequal(dispName,'lvlThr'); % if not_LST_FLAG set_Axe_DEC_Pos('sup',fig,handles,level_DEC) % end % Computing Signals, Approximations and Details. %------------------------------------------------ nb_ORI = length(idx_ORI); if flag_ORI sig_ORI = sig_ORI(idx_ORI,:); app_ORI = mdwtrec(dec_ORI,'ca',level_DEC,idx_ORI); lenAPP = size(app_ORI,2); idxAPP = sort(repmat((1:lenAPP),1,2^level_DEC)); app_ORI = wkeep(app_ORI(:,idxAPP),[nb_ORI,lenSIG]); det_ORI = cell(1,level_DEC); for k=1:level_DEC TMP = mdwtrec(dec_ORI,'cd',k,idx_ORI); lenDET = size(TMP,2); idxDET = sort(repmat((1:lenDET),1,2^k)); det_ORI{k} = wkeep(TMP(:,idxDET),[nb_ORI,lenSIG]); end else sig_ORI = []; app_ORI = []; det_ORI = []; end nb_DorC = length(idx_DorC); if flag_DorC sig_DorC = sig_DorC(idx_DorC,:); app_DorC = mdwtrec(dec_DorC,'ca',level_DEC,idx_DorC); lenAPP = size(app_DorC,2); idxAPP = sort(repmat((1:lenAPP),1,2^level_DEC)); app_DorC = wkeep(app_DorC(:,idxAPP),[nb_DorC,lenSIG]); det_DorC = cell(1,level_DEC); for k=1:level_DEC TMP = mdwtrec(dec_DorC,'cd',k,idx_DorC); lenDET = size(TMP,2); idxDET = sort(repmat((1:lenDET),1,2^k)); TMP = TMP(:,idxDET); det_DorC{k} = wkeep(TMP(:,idxDET),[nb_DorC,lenSIG]); end else sig_DorC = []; app_DorC = []; det_DorC = []; end % Plot Signals. %-------------- axe_Act = Axe_DEC(1); axes(axe_Act); hold on if flag_ORI , plot(1:lenSIG,sig_ORI','Color',sigCOL); end if flag_DorC , plot(1:lenSIG,sig_DorC','Color',d_OR_c_sigCOL); end tab_SIG = [sig_ORI;sig_DorC]; yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(axe_Act,'XTick',[],'YLim',getYlim(yMini,yMaxi)); txtSTR = 's'; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); titSTR = getWavMSG('Wavelet:mdw1dRF:Dec_At_Lev',level_DEC); title(titSTR,'Parent',axe_Act); % Plot Approximations. %--------------------- axe_Act = Axe_DEC(2); axes(axe_Act); hold on if flag_ORI , plot(1:lenSIG,app_ORI','Color',appCOL); end if flag_DorC , plot(1:lenSIG,app_DorC','Color',d_OR_c_appCOL); end tab_SIG = [app_ORI;app_DorC]; yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(Axe_DEC(2),'XTick',[],'YLim',getYlim(yMini,yMaxi)); txtSTR = ['ca' int2str(level_DEC)]; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); if thrMode && thr_MAN_MODE idxSIG_SEL = wtbxappdata('get',fig,'idxSIG_SEL'); threshold = data_DorC.threshold; threshold = threshold(idxSIG_SEL,:); uic_MAN = [... NaN,NaN,double(handles.Pop_MAN_SIG), ... double(handles.Pop_MAN_LEV),... double(handles.Edi_MAN_THR)]; thrCOL = mdw1dutils('colors','thr'); lineATTRB = ... {'Color',thrCOL,'LineWidth',2,'LineStyle','--'}; end % Plot Details. %-------------- idx_AXE = 3; for k=level_DEC:-1:1 axe_Act = Axe_DEC(idx_AXE); axes(axe_Act); hold on %#ok<*LAXES> tab_SIG = []; if flag_ORI tab_SIG = [tab_SIG;det_ORI{k}]; %#ok<AGROW> plot(1:lenSIG,det_ORI{k}','Color',detCOL); end if flag_DorC tab_SIG = [tab_SIG;det_DorC{k}]; %#ok<AGROW> plot(1:lenSIG,det_DorC{k}','Color',d_OR_c_detCOL); end yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); if thrMode && thr_MAN_MODE yAbsMAX = max([abs(yMini),yMaxi]); thrLEV = threshold(:,k); thrLEV(thrLEV>yAbsMAX) = yAbsMAX; thrVAL = [thrLEV thrLEV]; yMaxi = yAbsMAX; yMini = -yAbsMAX; nbTHR = size(thrVAL,1); LUp = plot([1 lenSIG],thrVAL',lineATTRB{:}); LDown = plot([1 lenSIG],-thrVAL',lineATTRB{:}); paramVAL = [double(axe_Act) ; nbTHR ; idxSIG_SEL(:) ; ... uic_MAN(:)]; paramSTR = num2mstr(paramVAL); hLinesSTR = num2mstr([LUp;LDown]); levSTR = int2str(k); for jj = 1:nbTHR setappdata(LUp(jj),'selectPointer','H'); setappdata(LDown(jj),'selectPointer','H'); propVAL = {'UserData',jj,'ZData',[100 100]}; set(LUp(jj),'ZData',[-jj -jj],... 'Tag',['LU' levSTR],propVAL{:}); set(LDown(jj),'ZData',[-jj -jj],... 'Tag',['LD' levSTR],propVAL{:}); end cba_LINE = [mfilename '(''Line_Down_GRAPH'',' ... num2mstr(fig) , ',[],' hLinesSTR ',' ... paramSTR ',' int2str(+k) ',' ... num2str(yMaxi) ');']; set(LUp,'ButtonDownFcn',cba_LINE); cba_LINE = [mfilename '(''Line_Down_GRAPH'',' ... num2mstr(fig) , ',[],' hLinesSTR ',' ... paramSTR ',' int2str(-k) ',' ... num2str(yMini) ');']; set(LDown,'ButtonDownFcn',cba_LINE); end set(axe_Act,'YLim',getYlim(yMini,yMaxi),... 'XGrid','Off','YGrid','Off'); txtSTR = ['cd' int2str(k)]; [ftnS,txtP] = get_TxtInAxe_Attrb(txtSTR); txtinaxe('create',txtSTR,axe_Act,'l','on','bold',ftnS,txtP); idx_AXE = idx_AXE+1; if k>1 set(axe_Act,'XTick',[],'YTickLabelMode','auto'); else set(axe_Act,'XTickLabelMode','auto','YTickLabelMode','auto'); end end case 'sep' % Separate if not_LST_FLAG set_Axe_DEC_Pos('sep',fig,handles,[]); end data_SEL = mdw1dutils('data_INFO_MNGR','get',fig,'SEL'); nb_SIG = length(idxSIG_Plot); signals = data_SEL.sel_DAT(idxSIG_Plot,:); minSIG = min(signals,[],2); for k = 1:nb_SIG signals(k,:) = (signals(k,:)-minSIG(k)); end maxSIG = max(signals,[],2); range_TOT = sum(maxSIG); if range_TOT<eps , range_TOT = 1; end signals = signals/range_TOT; maxSIG = maxSIG/range_TOT; lenSIG = size(signals,2); % Plot Signals. %-------------- %========================================================== % typVAL_Num = zeros(nbSigInSEL,1); %----------------------------------- % typVAL = 's' ==> typVAL_Num(idx) = 0; % typVAL = 'a' ==> typVAL_Num(idx) = 1; % typVAL = 'd' ==> typVAL_Num(idx) = 2; % typVAL = 'ca' ==> typVAL_Num(idx) = 3; % typVAL = 'cd' ==> typVAL_Num(idx) = 4; %------------------------------------------ % typSIG_Num = zeros(nbSigInSEL,1) %----------------------------------- % typSIG = 'ori' ==> typSIG_Num(idx) = 0; % typSIG = 'den' ==> typSIG_Num(idx) = 1; % typSIG = 'cmp' ==> typSIG_Num(idx) = 2; % typSIG = 'res' ==> typSIG_Num(idx) = 3; %----------------------------------- % Attrb_Lst_In_SEL = ... % [num_SEL,num_SIG,typVAL_Num,levVAL,typSIG_Num]; %========================================================== if ~isequal(caller,'PAR') && ~isequal(dispCUR,'PAR') Attrb_SIG_SEL = Attrb_Lst_In_SEL(idxSIG_Plot,:); typVAL_Num = Attrb_SIG_SEL(:,3); typSIG_Num = Attrb_SIG_SEL(:,5); else typVAL_Num = zeros(nb_SIG,1); typSIG_Num = zeros(nb_SIG,1); end % Make tab of colors. tab_COLOR = repmat(resCOL,nb_SIG,1); III = typVAL_Num==0 & typSIG_Num==0; tmp_COL = repmat(sigCOL,nb_SIG,1); tab_COLOR(III,:) = tmp_COL(III,:); III = typVAL_Num==0 & (typSIG_Num==1 | typSIG_Num==2); tmp_COL = repmat(d_OR_c_sigCOL,nb_SIG,1); tab_COLOR(III,:) = tmp_COL(III,:); III = (typVAL_Num==1 | typVAL_Num==3) & typSIG_Num==0; tmp_COL = repmat(appCOL,nb_SIG,1); tab_COLOR(III,:) = tmp_COL(III,:); III = (typVAL_Num==1 | typVAL_Num==3) & ... (typSIG_Num==1 | typSIG_Num==2); tmp_COL = repmat(d_OR_c_appCOL,nb_SIG,1); tab_COLOR(III,:) = tmp_COL(III,:); III = (typVAL_Num==2 | typVAL_Num==4) & typSIG_Num==0; tmp_COL = repmat(detCOL,nb_SIG,1); tab_COLOR(III,:) = tmp_COL(III,:); III = (typVAL_Num==2 | typVAL_Num==4) & ... (typSIG_Num==1 | typSIG_Num==2); tmp_COL = repmat(d_OR_c_detCOL,nb_SIG,1); tab_COLOR(III,:) = tmp_COL(III,:); axe_Act = Axe_DEC(1); axes(axe_Act); hold on ecy = 0.1; dy = ecy; tabYtick = zeros(nb_SIG,1); tabYtickLabel = cell(nb_SIG,1); for k = nb_SIG:-1:1 signals(k,:) = dy + signals(k,:); tabYtick(nb_SIG-k+1) = signals(k,1); tabYtickLabel{nb_SIG-k+1} = int2str(idxSIG_Plot(k)); plot(1:lenSIG,signals(k,:),'Color',tab_COLOR(k,:),... 'UserData',idxSIG_Plot(k)); dy = dy+maxSIG(k)+ecy; end set(axe_Act,'YLim',[0,1+(nb_SIG+1)*ecy],... 'YTick',tabYtick,'YTickLabel',tabYtickLabel); titSTR = getWavMSG('Wavelet:mdw1dRF:Selected_Signals'); wguiutils('setAxesTitle',axe_Act,titSTR); case 'btnFCN' switch typSIG case 's' if flag_ORI s_a_d_ORI = sig_ORI(idx_ORI,:); col_ORI = sigCOL; else s_a_d_ORI = []; end if flag_DorC s_a_d_DorC = sig_DorC(idx_DorC,:); col_DorC = d_OR_c_sigCOL; else s_a_d_DorC = []; end strTIT = getWavMSG('Wavelet:mdw1dRF:Str_Signals'); case {'a','d'} if flag_ORI , s_a_d_ORI = mdwtrec(dec_ORI,typSIG,levVAL,idx_ORI); else s_a_d_ORI = []; end if flag_DorC s_a_d_DorC = mdwtrec(dec_DorC,typSIG,levVAL,idx_DorC); else s_a_d_DorC = []; end switch typSIG case 'a' strTIT = getWavMSG('Wavelet:mdw1dRF:App_At_Lev',levVAL); if flag_ORI , col_ORI = appCOL; end if flag_DorC , col_DorC = d_OR_c_appCOL; end case 'd' strTIT = getWavMSG('Wavelet:mdw1dRF:Det_At_Lev',levVAL); if flag_ORI , col_ORI = detCOL; end if flag_DorC , col_DorC = d_OR_c_detCOL; end end end tab_SIG = [s_a_d_ORI;s_a_d_DorC]; % Plot Signals. %-------------- axe_Act = Axe_DEC(2); child = wfindobj(axe_Act,'type','axes','-xor'); delete(child); axes(axe_Act); hold on if flag_ORI plot(1:lenSIG,s_a_d_ORI','Color',col_ORI); end if flag_DorC plot(1:lenSIG,s_a_d_DorC','Color',col_DorC); end yMini = min(min(tab_SIG)); yMaxi = max(max(tab_SIG)); set(axe_Act,'XtickMode','Auto','XTickLabelMode','Auto',... 'YLim',getYlim(yMini,yMaxi)); title(strTIT); end dynvtool('get',fig,0'); mngmbtn('delLines',fig,'All'); switch dispName case {'dec','decCfs','sep',... 'stem','stemAbs','stemSqr','stemEner','lvlThr'} set(Axe_DEC,'XLim',[1,lenSIG]); lastAxe = length(Axe_DEC); otherwise lastAxe = 2; end set(handles.Pan_VISU_SIG,'Visible','Off') if isequal(calling_UIC,'Pus_ENA_MAN') , caller = 'DorC'; end switch caller case 'CLU' mdw1dclus('Set_Pos_Pan',fig,[],handles,'Show_DEC'); case {'ORI','CMP','DEN','STA','DorC'} mdw1dmngr('set_Tool_View',handles,caller,'Show_DEC'); end set(handles.Pan_VISU_DEC,'Visible','On') %------------------------------------------------------------------ %%% A VOIR: DEB %%% enaVAL = 'Off'; switch dispName case {'dec','decCfs','sep','tree','btnFCN',... 'lvlThr','glbThr','perfL2N0'} lstHIG = get(handles.Pop_HIG_DEC,'String'); nbItem = length(lstHIG); if nbItem>1 , enaVAL = 'On'; end otherwise end set([handles.Txt_HIG_DEC,handles.Pop_HIG_DEC],'Enable',enaVAL); %%% A VOIR: FIN %%% %------------------------------------------------------------------ axe_IND = handles.Axe_VISU; axe_CMD = handles.Axe_VIS_DEC(1:lastAxe); axe_ACT = []; dynvtool('init',fig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','','real'); case 'btnTreeTxtFCN' [hObject,eventdata,handles] = deal(varargin{1:3}); typeCALL = get(hObject,'Type'); switch typeCALL case 'text' , strOBJ = get(hObject,'String'); case 'line' , strOBJ = get(hObject,'UserData'); end typSIG = strOBJ(1); switch strOBJ(1) case 's' , lev = 0; case {'a','d'} , lev = str2double(strOBJ(2:end)); end mdw1dshow('Show_DEC_Fun',... hObject,eventdata,handles,'btnFCN',typSIG,lev); case 'Line_Down_GRAPH' [fig,~,hLines,paramVAL,direct,yLIM] = deal(varargin{:}); handles = guidata(fig); linCUR = double(gco); % hLines = [LUp ; LDown]; % paramVAL = ... % [axe_Act ; nbTHR ; idxSIG_SEL(:) ; uic_MAN(:)] % uic_MAN = [... % handles.Pop_MAN_SIG, ... % handles.Pop_MAN_LEV, handles.Edi_MAN_THR,... nbLines = length(hLines); linUP = hLines(1:nbLines/2); linDOWN = hLines(1+nbLines/2:end); axe = paramVAL(1); nbTHR = paramVAL(2); first = 3; last = first+nbTHR-1; idxSIG_SEL = paramVAL(first:last); first = last+1; uic_MAN = paramVAL(first:end); Pop_MAN_SIG = uic_MAN(3); Pop_MAN_LEV = uic_MAN(4); Edi_MAN_THR = uic_MAN(5); wtbxappdata('set',fig,'flag_modify_THR',true); level = abs(direct); if direct>0 idxCUR = find(linCUR==linUP); lin_D = linDOWN(idxCUR); lin_U = linCUR; else idxCUR = find(linCUR==linDOWN); lin_U = linUP(idxCUR); lin_D = linCUR; end tool_NAME = ... blockdatamngr('get',fig,'tool_ATTR','Name'); flag_SIG_SEL = isequal(oneSEL(Pop_MAN_SIG),true); if flag_SIG_SEL , Pop_SIG_VAL = idxCUR+1; else Pop_SIG_VAL = 1; end flag_LEV_SEL = isequal(oneSEL(Pop_MAN_LEV),true); if ~flag_LEV_SEL hLINE = findobj(handles.Axe_VIS_DEC,'Type','line'); if flag_SIG_SEL usrCUR = get(linCUR,'UserData'); hLINE = findobj(hLINE,'UserData',usrCUR); end tag = get(hLINE,'Tag'); strTAG = 'LU'; lenSTR = length(strTAG); idxL = strncmp(tag,strTAG,lenSTR); linUP = hLINE(idxL); % usr = get(linUP,'UserData'); strTAG = 'LD'; idxL = strncmp(tag,strTAG,lenSTR); linDOWN = hLINE(idxL); % usr = get(linDOWN,'UserData'); % level = 1:length(linUP); else set(Pop_MAN_LEV,'Value',level+1); end set(Pop_MAN_SIG,'Value',Pop_SIG_VAL); p = get(axe,'CurrentPoint'); tLD_COL = mdw1dutils('colors','tLD'); set([lin_U,lin_D],'Color',tLD_COL); if flag_SIG_SEL idxSIG = idxSIG_SEL(get(linCUR,'UserData')); xLIM = get(axe,'XLim'); propVAL = {int2str(idxSIG),'Parent',axe,'Color','r',... 'EdgeColor','r','BackgroundColor',[1 1 0.5],... 'FontSize',8,'FontWeight','bold','Tag','txtLIN'}; txtLIN(1) = text(xLIM(2)-30,p(1,2),200,propVAL{:}); txtLIN(2) = text(xLIM(2)-30,-p(1,2),200,propVAL{:}); set(handles.Pop_HIG_DEC,'Value',Pop_SIG_VAL); mdw1dmngr('Pop_HIG_Func',handles.Pop_HIG_DEC,... [],handles,tool_NAME,'DEC') else txtLIN(1:2) = NaN; end drawnow paramSTR = ... num2mstr([paramVAL(1);lin_U;lin_D;paramVAL(2:end);double(txtLIN(:))]); cba_move = [mfilename '(''Line_Move_GRAPH'',''' tool_NAME ''',' ... num2mstr(fig) ',' num2mstr(linCUR) ',' int2str(idxCUR) ',' ... num2mstr(linUP) ',' num2mstr(linDOWN) ',' paramSTR ',' ... int2str(direct) ',' num2str(yLIM) ');']; cba_up = [mfilename '(''Line_Up_GRAPH'',''' tool_NAME ''',' ... num2mstr(fig) ',' num2mstr(linCUR) ',' int2str(idxCUR) ',' ... num2mstr(linUP) ',' num2mstr(linDOWN) ',' paramSTR ',' ... int2str(direct) ');']; wtbxappdata('new',fig,... 'save_WindowButtonUpFcn',get(fig,'WindowButtonUpFcn')); set(fig,'WindowButtonMotionFcn',cba_move,'WindowButtonUpFcn',cba_up); thrTAB = get(Edi_MAN_THR,'UserData'); yd = get(lin_U,'YData'); thrTAB(level) = yd(1); set(Edi_MAN_THR,'String',num2str(yd(1),'%10.5f'),'UserData',thrTAB) setptr(fig,'uddrag'); case 'Line_Move_GRAPH' [~,~,linCUR,~,linUP,linDOWN,paramVAL,direct,yLIM] = ... deal(varargin{:}); % paramVAL = [axe_Act ; lin_U ; lin_D ; nbTHR ; ... % idxSIG_SEL(:) ; uic_MAN(:)] axe = paramVAL(1); lin_U = paramVAL(2); lin_D = paramVAL(3); nbTHR = paramVAL(4); first = 5; last = first+nbTHR-1; % idxSIG_SEL = paramVAL(first:last); first = last+1; uic_MAN = paramVAL(first:end-2); txtLIN = paramVAL(end-1:end); Pop_MAN_SIG = uic_MAN(3); Pop_MAN_LEV = uic_MAN(4); Edi_MAN_THR = uic_MAN(5); p = get(axe,'CurrentPoint'); delta_THR = 1E-6; if linCUR==lin_U if p(1,2)<=0 , p(1,2) = 0; elseif p(1,2)>yLIM, p(1,2)= yLIM+delta_THR; end else if p(1,2)>=0 , p(1,2) = 0; elseif p(1,2)<yLIM, p(1,2) = yLIM-delta_THR; end end new_thresh = abs(p(1,2)*sign(direct)); yold = get(lin_U,'YData'); if isequal(yold(1),new_thresh) , return; end ynew = [new_thresh new_thresh]; if new_thresh<delta_THR , ynew(:) = delta_THR; end flag_SIG_SEL = isequal(oneSEL(Pop_MAN_SIG),true); flag_LEV_SEL = isequal(oneSEL(Pop_MAN_LEV),true); if flag_SIG_SEL && flag_LEV_SEL set(lin_U,'YData',ynew); set(lin_D,'YData',-ynew); pTXT = get(txtLIN(1),'Position'); set(txtLIN(1),'Position',[pTXT(1) , ynew(1) , 200]) set(txtLIN(2),'Position',[pTXT(1) , -ynew(1) , 200]) else set(linUP,'YData',ynew); set(linDOWN,'YData',-ynew); end set(Edi_MAN_THR,'String',num2str(new_thresh,'%10.5f')) case 'Line_Up_GRAPH' [tool_NAME,fig,~,idxCUR,~,~,paramVAL,direct] = ... deal(varargin{:}); handles = guidata(fig); % paramVAL = [axe_Act ; lin_U ; lin_D ; nbTHR ; ... % idxSIG_SEL(:) ; uic_MAN(:)] lin_U = paramVAL(2); lin_D = paramVAL(3); nbTHR = paramVAL(4); first = 5; last = first+nbTHR-1; % idxSIG_SEL = paramVAL(first:last); first = last+1; uic_MAN = paramVAL(first:end-2); % txtLIN = paramVAL(end-1:end); Edi_MAN_THR = uic_MAN(5); yd = get(lin_U,'YData'); if isnan(yd(1)) delta_THR = 1E-6; yd = [delta_THR delta_THR]; end save_WindowButtonUpFcn = ... wtbxappdata('del',fig,'save_WindowButtonUpFcn'); set(fig,'WindowButtonMotionFcn','', ... 'WindowButtonUpFcn',save_WindowButtonUpFcn); thrCOL = mdw1dutils('colors','thr'); set(lin_U,'YData',yd,'Color',thrCOL); set(lin_D,'YData',-yd,'Color',thrCOL); axeAct = handles.Axe_VIS_DEC; old_LINE = findobj(axeAct,'Tag','Line_HIG'); old_TXT = findobj(axeAct,'Tag','txtLIN'); if ~isempty(old_LINE) , delete(old_LINE); end if ~isempty(old_TXT) , delete(old_TXT); end thr_NEW = yd(1); level = abs(direct); thrTAB = get(Edi_MAN_THR,'UserData'); thrTAB(level) = thr_NEW; set(Edi_MAN_THR,... 'String',num2str(thr_NEW,'%10.5f'),'UserData',thrTAB) setptr(fig,'arrow'); drawnow; if isequal(tool_NAME,'CMP') || isequal(tool_NAME,'DEN') mdw1dmisc('show',handles,'MAN_THR','LIN',idxCUR,thr_NEW) end set(handles.Pop_HIG_DEC,'Value',1) case 'L2_N0_SCR' [~,numSIG,typeCALL] = deal(varargin{1:3}); axe = gca; p = get(axe,'CurrentPoint'); tag = ['txt_' int2str(typeCALL)]; hTXT = findobj(axe,'Type','text','Tag',tag,'UserData',numSIG); if isempty(hTXT) switch typeCALL case 0 , FCOL = 'r'; BkCOL = [1 0.7 1]; % N0 score line case 1 , FCOL = 'b'; BkCOL = [0.7 0.7 1]; % L2 score line end propVAL = {int2str(numSIG),'Parent',axe,'Color',FCOL,... 'EdgeColor',FCOL,'BackgroundColor',BkCOL,... 'HorizontalAlignment','Center',... 'FontSize',8,'FontWeight','bold',... 'Tag',tag,'UserData',numSIG}; text(p(1,1),p(1,2),200,propVAL{:}); else set(hTXT,'Position',p(1,:)) end case 'LD_THR' [fig,numSIG,idxCUR,~,param_1] = deal(varargin{1:5}); handles = guidata(fig); axe = gca; linCUR = gco; xd = get(linCUR,'XData'); new_thresh = xd(1); nbIDX = param_1(1); % idxSIG_SEL = param_1(2:nbIDX+1); uic_MAN = param_1(nbIDX+2:end); Pop_MAN_SIG = uic_MAN(3); Edi_MAN_GLB_THR = uic_MAN(4); Edi_L2_PERF = uic_MAN(5); Edi_N0_PERF = uic_MAN(6); wtbxappdata('set',fig,'flag_modify_THR',true); flag_SIG_SEL = isequal(oneSEL(Pop_MAN_SIG),true); % sig_STR = int2str(numSIG); % Get cmp_SCORES values; cmp_SCORES = wtbxappdata('get',fig,'cmp_SCORES'); thresVALUES = cmp_SCORES{1}; % {thresVALUES,L2SCR,n0SCR,idx_SORT}); THR = thresVALUES(idxCUR,:); L2_Perf = cmp_SCORES{2}(idxCUR,:); N0_Perf = cmp_SCORES{3}(idxCUR,:); thrMAXI = THR(end); L2SCR_lin = L2_Perf(end); n0SCR_lin = N0_Perf(end); %------------------- %%% A VOIR - DEB %%% %-------------------- NbPts = 500; III = find(diff(THR)==0); THR(III+1) = []; L2_Perf(III+1) = []; N0_Perf(III+1) = []; THR_INT = interp1(THR,THR,linspace(0,thrMAXI,NbPts)); L2_Perf = interp1(THR,L2_Perf,THR_INT); N0_Perf = interp1(THR,N0_Perf,THR_INT); [~,idxTHR] = min(abs(THR_INT-new_thresh)); set(Edi_MAN_GLB_THR,'String',num2str(new_thresh,'%10.5f')); set(Edi_L2_PERF,'String',num2str(L2_Perf(idxTHR),'%10.2f')); set(Edi_N0_PERF,'String',num2str(N0_Perf(idxTHR),'%10.2f')); %------------------- %%% A VOIR - FIN %%% %------------------- % N0 score line tag = 'txt_0'; txtTMP = findobj(axe,'Type','text','Tag',tag); usr = get(txtTMP,'UserData'); if iscell(usr) , usr = cat(1,usr{:});end hTXT = txtTMP(usr==numSIG); delete(txtTMP(usr~=numSIG)); if isempty(hTXT) FCOL = 'r'; BkCOL = [1 0.7 1]; propVAL = {int2str(numSIG),'Parent',axe,'Color',FCOL,... 'EdgeColor',FCOL,'BackgroundColor',BkCOL,... 'HorizontalAlignment','Center',... 'FontSize',8,'FontWeight','bold',... 'Tag',tag,'UserData',numSIG}; text(thrMAXI,n0SCR_lin,200,propVAL{:}); else set(hTXT,'Position',[thrMAXI,n0SCR_lin,200]) end % L2 score line tag = 'txt_1'; txtTMP = findobj(axe,'Type','text','Tag',tag); usr = get(txtTMP,'UserData'); if iscell(usr) , usr = cat(1,usr{:});end hTXT = txtTMP(usr==numSIG); delete(txtTMP(usr~=numSIG)); if isempty(hTXT) FCOL = 'b'; BkCOL = [0.7 0.7 1]; propVAL = {int2str(numSIG),'Parent',axe,'Color',FCOL,... 'EdgeColor',FCOL,'BackgroundColor',BkCOL,... 'HorizontalAlignment','Center',... 'FontSize',8,'FontWeight','bold',... 'Tag',tag,'UserData',numSIG}; text(thrMAXI,L2SCR_lin,200,propVAL{:}); else set(hTXT,'Position',[thrMAXI,L2SCR_lin,200]) end if flag_SIG_SEL , Pop_SIG_VAL = idxCUR+1; else Pop_SIG_VAL = 1; end set(Pop_MAN_SIG,'Value',Pop_SIG_VAL); tLD_COL = mdw1dutils('colors','tLD'); set(linCUR,'Color',tLD_COL); p = get(axe,'CurrentPoint'); p(:,2) = 106; tag = 'txt_THR'; txtTMP = findobj(axe,'Type','text','Tag',tag); usr = get(txtTMP,'UserData'); if iscell(usr) , usr = cat(1,usr{:});end hTXT = txtTMP(usr==numSIG); delete(txtTMP(usr~=numSIG)); if isempty(hTXT) FCOL = 'r'; BkCOL = [1 1 0.7]; propVAL = {int2str(numSIG),'Parent',axe,'Color',FCOL,... 'EdgeColor',FCOL,'BackgroundColor',BkCOL,... 'HorizontalAlignment','Center',... 'FontSize',8,'FontWeight','bold',... 'Tag',tag,'UserData',numSIG}; hTXT = text(p(1,1),p(1,2),200,propVAL{:}); else set(hTXT,'String',int2str(numSIG),'Position',p(1,:)) end if flag_SIG_SEL set(handles.Pop_HIG_DEC,'Value',Pop_SIG_VAL); tool_NAME = blockdatamngr('get',fig,'tool_ATTR','Name'); mdw1dmngr('Pop_HIG_Func',handles.Pop_HIG_DEC,... [],handles,tool_NAME,idxCUR) else set(hTXT,'String','All') end LinTHR = findobj(axe,'Tag','LinTHR'); param_2 = [numSIG;idxCUR;thrMAXI;axe;hTXT]; par_1_STR = num2mstr(param_1); par_2_STR = num2mstr(param_2); par_3_STR = num2mstr(LinTHR); param_STR = [num2mstr(fig) ',' num2mstr(linCUR) ',' ... par_1_STR ',' par_2_STR ',' par_3_STR ');']; cba_move = [mfilename '(''LM_THR'',' param_STR]; cba_up = [mfilename '(''LU_THR'',' param_STR]; wtbxappdata('new',fig,... 'save_WindowButtonUpFcn',get(fig,'WindowButtonUpFcn')); set(fig,'WindowButtonMotionFcn',cba_move,'WindowButtonUpFcn',cba_up); setptr(fig,'lrdrag'); LinL2N0 = [findobj(axe,'Tag','LinL2');findobj(axe,'Tag','LinN0')]; usr = get(LinL2N0,'UserData'); usr = cat(1,usr{:}); idxLIN = usr==idxCUR; set(LinL2N0(~idxLIN),'LineWidth',0.5); drawnow set(LinL2N0(~idxLIN),'LineStyle',':'); drawnow set(LinL2N0(idxLIN),'LineWidth',2); % mdw1dmngr('LM_THR',fig,linCUR,param_1,param_2,LinTHR); case 'LM_THR' [fig,linCUR,param_1,param_2,LinTHR] = deal(varargin{:}); nbIDX = param_1(1); % idxSIG_SEL = param_1(2:nbIDX+1); uic_MAN = param_1(nbIDX+2:end); % numSIG = param_2(1); idxCUR = param_2(2); thrMAXI = param_2(3); axe = param_2(4); hTXT = param_2(5); Pop_MAN_SIG = uic_MAN(3); Edi_MAN_GLB_THR = uic_MAN(4); Edi_L2_PERF = uic_MAN(5); Edi_N0_PERF = uic_MAN(6); flag_SIG_SEL = isequal(oneSEL(Pop_MAN_SIG),true); p = get(axe,'CurrentPoint'); delta_THR = 1E-6; if p(1,1)<=0 , p(1,:) = 0; elseif p(1,1)>thrMAXI, p(1,:)= thrMAXI; end new_thresh = p(1,1); if new_thresh<delta_THR , new_thresh = delta_THR; end xnew = [new_thresh new_thresh]; if flag_SIG_SEL set(linCUR,'XData',xnew); else set(LinTHR,'XData',xnew); end pTXT = get(hTXT,'Position'); set(hTXT,'Position',[xnew(1) , pTXT(2) , 200]) cmp_SCORES = wtbxappdata('get',fig,'cmp_SCORES'); % cmp_SCORES : {thresVALUES,L2SCR,n0SCR,idx_SORT}) thresVALUES = cmp_SCORES{1}; L2_Perf = cmp_SCORES{2}(idxCUR,:); N0_Perf = cmp_SCORES{3}(idxCUR,:); THR = thresVALUES(idxCUR,:); %%% A VOIR - DEB %%% %-------------------- % III = find(diff(THR)==0); %%% A VOIR %%% % THR(III+1) = THR(III+1)+10*eps*[1:length(III)]; % Bug car THR contient des valeurs 間ales. % On essaye : % THR(III+1) = []; L2_Perf(III+1) = []; N0_Perf(III+1) = []; % Probl鑝e : il faut la meme longueur pour: L2_Perf et N0_Perf % Autre solution (peut 阾re trop long ...) %------------------------------------------ % THR_INT = THR; NbPts = 500; III = find(diff(THR)==0); THR(III+1) = []; L2_Perf(III+1) = []; N0_Perf(III+1) = []; THR_INT = interp1(THR,THR,linspace(0,thrMAXI,NbPts)); L2_Perf = interp1(THR,L2_Perf,THR_INT); N0_Perf = interp1(THR,N0_Perf,THR_INT); [~,idxTHR] = min(abs(THR_INT-new_thresh)); set(Edi_MAN_GLB_THR,'String',num2str(new_thresh,'%10.5f')); set(Edi_L2_PERF,'String',num2str(L2_Perf(idxTHR),'%10.2f')); set(Edi_N0_PERF,'String',num2str(N0_Perf(idxTHR),'%10.2f')); %%% A VOIR - FIN %%% %------------------- case 'LU_THR' [fig,linCUR,param_1,param_2,LinTHR] = deal(varargin{:}); %#ok<NASGU> handles = guidata(fig); nbIDX = param_1(1); % idxSIG_SEL = param_1(2:nbIDX+1); uic_MAN = param_1(nbIDX+2:end); % numSIG = param_2(1); idxCUR = param_2(2); % thrMAXI = param_2(3); axe = param_2(4); % hTXT = param_2(5); % Pop_MAN_SIG = uic_MAN(3); Edi_MAN_GLB_THR = uic_MAN(4); % Edi_L2_PERF = uic_MAN(5); % Edi_N0_PERF = uic_MAN(6); % Delete N0 and L2 numsig text tag = 'txt_0'; txtTMP = findobj(axe,'Type','text','Tag',tag); delete(txtTMP); tag = 'txt_1'; txtTMP = findobj(axe,'Type','text','Tag',tag); delete(txtTMP); xd = get(linCUR,'XData'); if isnan(xd(1)) delta_THR = 1E-6; xd = [delta_THR delta_THR]; end save_WindowButtonUpFcn = ... wtbxappdata('del',fig,'save_WindowButtonUpFcn'); set(fig,'WindowButtonMotionFcn','', ... 'WindowButtonUpFcn',save_WindowButtonUpFcn); thrCOL = mdw1dutils('colors','thr'); set(linCUR,'XData',xd,'Color',thrCOL); axeAct = handles.Axe_VIS_DEC; old_LINE = findobj(axeAct,'Tag','Line_HIG'); if ~isempty(old_LINE) , delete(old_LINE); end tag = 'txt_THR'; txtTMP = findobj(axe,'Type','text','Tag',tag); if ~isempty(txtTMP) , delete(txtTMP); end thr_NEW = xd(1); set(Edi_MAN_GLB_THR,'String',num2str(thr_NEW,'%10.5f')) thrTAB = get(Edi_MAN_GLB_THR,'UserData'); thrTAB(:) = xd(1); set(Edi_MAN_GLB_THR,'String',num2str(xd(1),'%10.5f'),'UserData',thrTAB) LinL2N0 = [findobj(axe,'Tag','LinL2');findobj(axe,'Tag','LinN0')]; LinW = mdw1dutils('LinW'); set(LinL2N0,'LineWidth',LinW.N0,'LineStyle','-'); setptr(fig,'arrow'); drawnow; tool_NAME = ... blockdatamngr('get',fig,'tool_ATTR','Name'); if isequal(tool_NAME,'CMP') mdw1dmisc('show',handles,'MAN_THR','LIN_GLB',idxCUR,thr_NEW); end set(handles.Pop_HIG_DEC,'Value',1) end %-------------------------------------------------------------------------- function set_Axe_DEC_Pos(optMNGR,fig,handles,nbInput) Axe_VIS_DEC = handles.Axe_VIS_DEC; set(Axe_VIS_DEC,'Visible','Off'); pos_axes = wtbxappdata('get',fig,'Pos_Axe_VIS_DEC'); if isempty(pos_axes) pos_axes = get(Axe_VIS_DEC,'Position'); pos_axes = cat(1,pos_axes{:}); wtbxappdata('set',fig,'Pos_Axe_VIS_DEC',pos_axes); end switch optMNGR case 'sup' , nbAxes = nbInput + 2; % nbInput = level case 'sep', nbAxes = 1; case 'stem' , nbAxes = nbInput; % nbInput = nb. signals case 'tree' , nbAxes = 4; % Tree mode 3 axes case 'scrL2N0' , nbAxes = 4; % Threshold mode 3 axes end nbMAX = length(Axe_VIS_DEC); H = pos_axes(1,4); yMIN = min(pos_axes(1:nbMAX,2)); yMAX = max(pos_axes(1:nbMAX,2)) + H; dY = (yMAX-yMIN); % if nbMAX>11 , nbMAX_Rat = 11; else nbMAX_Rat = nbMAX; end nbMAX_Rat = nbMAX; Ratio = (nbMAX_Rat/(nbMAX_Rat-1))*(dY/(nbMAX_Rat*H)-1); xSIG = pos_axes(1,1); wAXE = pos_axes(1,3); yAXE = yMAX; hAXE = dY/(nbAxes+(nbAxes-1)*Ratio); dAXE = hAXE*Ratio; p_axe = zeros(nbAxes,4); if isequal(optMNGR,'tree') xA = xSIG/2; wA = wAXE+xA; hAXE_1_2 = hAXE; yAXE = yAXE - hAXE_1_2; p_axe(1,:) = [xA,yAXE,wA,hAXE_1_2]; yAXE = yAXE-hAXE-2.3*dAXE; p_axe(2,:) = [xA,yAXE,wA,hAXE_1_2]; hAXE_3 = 1.8*hAXE; ecar_3 = 2.1*dAXE; yAXE = yAXE - hAXE_3-ecar_3; p_axe(3,:) = [1/5,yAXE,3/5,hAXE_3]; for k = 1:3 set(Axe_VIS_DEC(k),'Position',p_axe(k,:),'Visible','On'); end set(Axe_VIS_DEC(2),'XtickMode','auto','XTickLabelMode','auto'); elseif isequal(optMNGR,'scrL2N0') xA = xSIG/2; wA = wAXE+xA; hAXE = 0.9*hAXE; dAXE = 2*dAXE; yAXE = yAXE-hAXE; p_axe(1,:) = [xA,yAXE,wA,hAXE]; yAXE = yAXE-hAXE-1.5*dAXE; p_axe(2,:) = [xA,yAXE,wA,hAXE]; yAXE = yAXE-1.9*hAXE-1.5*dAXE; p_axe(3,:) = [xA,yAXE,wA,1.85*hAXE]; for k = 1:3 set(Axe_VIS_DEC(k),'Position',p_axe(k,:),'Visible','On'); end set(Axe_VIS_DEC(2),'XtickMode','auto','XTickLabelMode','auto'); elseif isequal(optMNGR,'sep') xA = xSIG/2; wA = wAXE+xA; yAXE = yAXE-hAXE; p_axe(1,:) = [xA,yAXE,wA,hAXE]; set(Axe_VIS_DEC(1),'Position',p_axe(1,:),'Visible','On',... 'XtickMode','auto','XTickLabelMode','auto'); else for k=1:nbAxes yAXE = yAXE-hAXE; p_axe(k,:) = [xSIG,yAXE,wAXE,hAXE]; yAXE = yAXE-dAXE; set(Axe_VIS_DEC(k),'Position',p_axe(k,:),'Visible','On'); end end %-------------------------------------------------------------------------- function ylim = getYlim(yMini,yMaxi) prec = 1.E-3; dY = (yMaxi-yMini+prec)*0.05; ylim = [yMini-dY,yMaxi+dY]; %-------------------------------------------------------------------------- function [ftnSize,txtPos] = get_TxtInAxe_Attrb(S) txtPos = 40; lenSTR = length(S); switch lenSTR case {1,2,3} , ftnSize = 12; case 4 , ftnSize = 11; case 5 , ftnSize = 10; otherwise , ftnSize = 10; end %-------------------------------------------------------------------------- function okONE = oneSEL(pop) strPOP = get(pop,'String'); item = lower(strPOP{get(pop,'Value')}); okONE = ~isequal(item,'all'); %=========================================================================%