www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wmultisig1d/mdw1dafflst.m
function varargout = mdw1dafflst(option,varargin) %MDW1DAFFLST Discrete wavelet Multisignal 1D Utilities. % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 27-Jun-2005. % Last Revision 11-Jul-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.1.6.13 $ $Date: 2013/08/23 23:45:41 $ % Dispatch Main Options. %======================= % Valid options: %--------------- % 'INI','ORI','CMP','DEN','STA','CLU' % 'DAT' % 'get_idxSEL' %======================================= blanc = ' '; mark = '*'; nbMaxCLU_AFF = 12; switch option case {'INI','ORI','CMP','DEN','STA','CLU','PAR'} % Check input. %------------- [hObject,eventdata,handles,aff_OPT] = deal(varargin{1:4}); fig = handles.Current_Fig; % String utilities. %----------------- sep = ' | '; sep2 = ' || '; star = ' |> '; star2 = ' ||> '; % Numeric format utilities. %------------------------- [formatNum,formatPER,formatNum_Ener,intFormat,formatSTR] = ... mdw1dutils('numFORMAT'); % Begin waiting. %--------------- wwaiting('msg',fig,getWavMSG('Wavelet:commongui:WaitCompute')); nbIN = length(varargin); if ~isequal(aff_OPT,'sort') asc_SORT = 1; col_SORT = 1; nextArg = 5; else asc_SORT = varargin{5}; col_SORT = get(handles.Pop_SORT,'Value'); nextArg = 6; end flag_ONE = get(handles.Chk_AFF_MUL,'Value'); if ~isequal(option,'PAR') [data_ORI,data_SEL,data_DorC] = ... mdw1dutils('data_INFO_MNGR','get',fig,'ORI','SEL','DorC'); else [data_ORI,data_SEL] = ... mdw1dutils('data_INFO_MNGR','get',fig,'ORI','SEL'); end nbSigInSEL = size(data_SEL.sel_DAT,1); switch option case 'INI' , aff_LST_INI(varargin{nextArg:end}); case 'ORI' , aff_LST_ORI; case 'CMP' , aff_LST_CMP(varargin{nextArg:end}); case 'DEN' , aff_LST_DEN(varargin{nextArg:end}); case 'STA' , aff_LST_STA; case 'CLU' , aff_LST_CLU(varargin{nextArg:end},option); case 'PAR' , aff_LST_CLU(varargin{nextArg:end},option); end if ~isequal(option,'CLU') || ~isequal(option,'STA') || ... ~isequal(option,'PAR') if flag_ONE STR_VAL = set_LST_MARK(STR_VAL); max_LST = 1; val_LST = 1; else max_LST = 2; if ~isequal(aff_OPT,'sort') && nextArg<=nbIN && ... isequal(varargin{nextArg},'KeepSelected') val_LST = get(handles.Lst_SEL_DATA,'Value'); else val_LST = []; end end %%% A VOIR DEB %%% if exist('STR_VAL','var') && ~isempty(STR_VAL) set(handles.Lst_SEL_DATA,'Max',max_LST,'Value',val_LST,... 'String',STR_VAL); end %%% A VOIR FIN %%% end % End waiting. %------------- wwaiting('off',fig); case 'DAT' , aff_LST_DAT(varargin{:}); case 'MARK', aff_LST_MARK(varargin{:}); case 'get_idxSEL' , varargout{1} = get_idxSEL(varargin{:}); end %-------------------------------------------------------------------------- function aff_LST_INI(varargin) switch aff_OPT case 'init' wtbxappdata('set',fig,'type_AFF_ALL',{'init',0}); returnFLAG = true; case 'sort' returnFLAG = false; end flag_CLU_Import = 0; if nbSigInSEL>0 [num_SEL,num_SIG,typVAL,typVAL_Num,levVAL,typSIG,typSIG_Num,... IdxCLU] = get_Attrb_Lst_In_SEL; flag_CLU_Import = ~(isempty(IdxCLU) || isequal(IdxCLU,0)); if flag_CLU_Import tab_INFO = ... [num_SEL ,num_SIG ,IdxCLU, typVAL_Num,levVAL,typSIG_Num]; last = 3; else tab_INFO = [num_SEL ,num_SIG ,typVAL_Num,levVAL,typSIG_Num]; last = 2; end [tab_INFO,idxSORT] = sortDATA(tab_INFO,col_SORT,asc_SORT); typVAL = typVAL(idxSORT,:); typSIG = typSIG(idxSORT,:); blanc = blanc(ones(nbSigInSEL,1),:); sep = sep(ones(nbSigInSEL,1),:); STR_VAL = blanc; for k = 1:last STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatSTR)]; if k==3 && flag_CLU_Import STR_VAL = [STR_VAL , sep2(ones(nbSigInSEL,1),:);]; else STR_VAL = [STR_VAL , sep]; end end STR_VAL = [STR_VAL , ... typVAL sep , ... num2str(tab_INFO(:,last+2),formatSTR), sep , ... typSIG, sep ... ]; if nbSigInSEL==1 , STR_VAL = {STR_VAL}; end else STR_VAL = {}; end if returnFLAG || flag_CLU_Import str_DATA = 'Sel | Sig |'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sel'); ... getWavMSG('Wavelet:mdw1dRF:Idx_Sig')}; if flag_CLU_Import str_DATA = [str_DATA ' Clu ||']; str_POP = [str_POP;getWavMSG('Wavelet:mdw1dRF:Idx_Clu')]; end str_DATA = [str_DATA , ' Dw | L | Typ |']; str_POP = [str_POP ; ... getWavMSG('Wavelet:mdw1dRF:Dwt_Attr'); ... getWavMSG('Wavelet:mdw1dRF:Level_L'); ... getWavMSG('Wavelet:mdw1dRF:Type_Sig')]; set(handles.Txt_SEL_DATA,'String',str_DATA, ... 'TooltipString',Make_ToolTipString(str_POP)); set(handles.Pop_SORT,'String',str_POP,'Value',2) set(handles.Edi_NB_SIG,'ForegroundColor','k') end if ~isequal(aff_OPT,'sort') setStrNbSIG(handles.Edi_NB_SIG,nbSigInSEL) end end %-------------------------------------------------------------------------- function aff_LST_ORI [num_SEL,num_SIG,typVAL,typVAL_Num,levVAL,typSIG,typSIG_Num,IdxCLU] = ... get_Attrb_Lst_In_SEL; flag_CLU_Import = ~(isempty(IdxCLU) || isequal(IdxCLU,0)); level = data_ORI.dwtDEC.level; nbINFO = level+2; sig_SELECT = data_SEL.sel_DAT; Attrb_SEL = data_SEL.Attrb_SEL; if isempty(Attrb_SEL) , Attrb_SEL = {0,{'s'},0}; end flag_SIG_SEL = ~isempty(Attrb_SEL); switch aff_OPT case {'init','importCLU'} wtbxappdata('set',fig,'type_AFF_ALL',{'init',0}); str_DATA = 'Sel | Sig |'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sel');getWavMSG('Wavelet:mdw1dRF:Idx_Sig')}; if flag_CLU_Import str_DATA = [str_DATA , ' Clu ||']; str_POP = [str_POP ; getWavMSG('Wavelet:mdw1dRF:Idx_Clu')]; end AppSTR = ['| EP A' int2str(level) ' |']; str_DATA = [str_DATA , ' Dw | L | Typ |' AppSTR]; str_POP = [str_POP;... getWavMSG('Wavelet:mdw1dRF:Dwt_Attr'); ... getWavMSG('Wavelet:mdw1dRF:Level_L'); ... getWavMSG('Wavelet:mdw1dRF:Type_Sig'); ... ['A' int2str(level) '-EnerPer']]; if flag_SIG_SEL for k=1:level lev = nbINFO-1-k; levSTR = int2str(lev); str_DATA = [str_DATA , ' EP D', levSTR , ' |']; str_POP = [str_POP;['D' levSTR '-EnerPer']]; %#ok<*AGROW> end str_DATA = [str_DATA ,' Energy |']; str_POP = [str_POP ; ... getWavMSG('Wavelet:mdw1dRF:Energy')]; end val_POP = 2; case 'sort' val_POP = col_SORT; end nbINFO = 0; Energy = []; tab_ENER = []; if flag_SIG_SEL num_typeSIG = Attrb_SEL{1}; typeSIG = Attrb_SEL{2}; flagSIG = all(cat(2,typeSIG{:})=='s') && ... all(num_typeSIG==0 | num_typeSIG==1 | num_typeSIG==2) ; if flagSIG for k = 1:length(num_typeSIG) if num_typeSIG(k)==0 callingFIG = blockdatamngr('get',fig, ... 'fig_Storage','callingFIG'); [Energy,tab_ENER] = blockdatamngr('get',... callingFIG,'data_ORI','Energy','tab_ENER'); elseif num_typeSIG(k)==1 || num_typeSIG(k)==2 [L2_DorC,tab_ENER_DorC] = blockdatamngr('get',... fig,'data_DorC','Energy','tab_ENER'); Energy = [Energy ; L2_DorC]; tab_ENER = [tab_ENER ; tab_ENER_DorC]; end end nbINFO = 1+size(tab_ENER,2); end end tab_INFO = [num_SEL , num_SIG]; if flag_CLU_Import , tab_INFO = [tab_INFO , IdxCLU]; end lastINFO = size(tab_INFO,2); first = lastINFO+1; tab_INFO = [... tab_INFO , typVAL_Num , levVAL , typSIG_Num , tab_ENER , Energy]; [tab_INFO,idxSORT] = sortDATA(tab_INFO,col_SORT,asc_SORT); oneIDX = ones(nbSigInSEL,1); blanc = blanc(oneIDX,:); sep = sep(oneIDX,:); star = star(oneIDX,:); STR_VAL = blanc; for k = 1:lastINFO-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),intFormat) , sep]; end STR_VAL = [STR_VAL , num2str(tab_INFO(:,lastINFO),intFormat)]; if col_SORT~=first if ~flag_CLU_Import STR_VAL = [STR_VAL , sep]; else STR_VAL = [STR_VAL , sep2(oneIDX,:)]; end else STR_VAL = [STR_VAL , star2(oneIDX,:)]; end if col_SORT~=first+1 , STR_VAL = [STR_VAL , typVAL(idxSORT,:) , sep]; else STR_VAL = [STR_VAL , typVAL(idxSORT,:) , star]; end if col_SORT~=first+2 STR_VAL = [STR_VAL , num2str(tab_INFO(:,first+1),intFormat) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,first+1),intFormat) , star]; end if col_SORT~=first+3 STR_VAL = [STR_VAL , typSIG(idxSORT,:) , sep2(oneIDX,:)]; else STR_VAL = [STR_VAL , typSIG(idxSORT,:) , star2(oneIDX,:)]; end last = size(tab_INFO,2)-nbINFO ; for k = first+3:last if k~=col_SORT-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , star]; end end if nbINFO>0 for k = last+1:size(tab_INFO,2)-1 if k~=col_SORT-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatPER) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatPER) , star]; end end formatNum_Ener = '%0.4g'; STR_VAL = [STR_VAL , num2str(tab_INFO(:,end),formatNum_Ener) , sep]; end if nbSigInSEL==1 , STR_VAL = {STR_VAL}; end if ~isequal(aff_OPT,'sort') setStrNbSIG(handles.Edi_NB_SIG,nbSigInSEL) set(handles.Txt_SEL_DATA,'String',str_DATA, ... 'TooltipString',Make_ToolTipString(str_POP)); set(handles.Pop_SORT,'String',str_POP,'Value',val_POP) end % Show information on first selection. %------------------------------------ currNum = num_SEL(1); currSig = sig_SELECT(1,:); if nbINFO>0 set(handles.Edi_TIT_PAN_INFO,'UserData',{Energy,tab_ENER}); end mdw1dtool('show_Sig_Info',hObject,eventdata,handles,currNum,currSig,1) end %-------------------------------------------------------------------------- function aff_LST_CMP(varargin) data_SEL.sel_DAT = data_ORI.signal; data_SEL.Attrb_SEL = {false,{'s'},0}; mdw1dutils('data_INFO_MNGR','set',fig,'SEL',data_SEL); [num_SEL,IdxCLU] = get_Attrb_Lst_In_SEL; flag_CLU_Import = ~(isempty(IdxCLU) || isequal(IdxCLU,0)); nbSigInSEL = size(data_SEL.sel_DAT,1); level = data_ORI.dwtDEC.level; thr_VAL = data_DorC.threshold; PERFO = wtbxappdata('get',fig,'cmp_PERF'); [energyDEC_PERF,nb0_PERF] = deal(PERFO{1:2}); switch aff_OPT case {'init','importCLU'} wtbxappdata('set',fig,'type_AFF_ALL',{'init',0}); if flag_CLU_Import str_DATA = ' Sig | Clu ||'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig'),getWavMSG('Wavelet:mdw1dRF:Idx_Clu')}; else str_DATA = ' Sig ||'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig')}; end thrSTR = getWavMSG('Wavelet:mdw1dRF:Thr_Cd'); for k=1:level str_POP = [str_POP ; thrSTR int2str(k)]; strTHR = ['ThrD' int2str(k)]; str_DATA = [str_DATA , [' ' strTHR ' |']]; end str_DATA = [str_DATA , ' En. Rat.|' ,' NbZ Rat. |']; str_POP = [ str_POP ; ... getWavMSG('Wavelet:mdw1dRF:Ener_Rat'); ... getWavMSG('Wavelet:mdw1dRF:NbZero_Rat')]; val_POP = 1; case 'sort' val_POP = col_SORT; end if flag_CLU_Import tab_INFO = [num_SEL , IdxCLU , thr_VAL]; else tab_INFO = [num_SEL , thr_VAL]; end tab_INFO = [tab_INFO , energyDEC_PERF , nb0_PERF]; tab_INFO = sortDATA(tab_INFO,col_SORT,asc_SORT); nbINFO = size(tab_INFO,2); oneIDX = ones(nbSigInSEL,1); blanc = blanc(oneIDX,:); sep = sep(oneIDX,:); star = star(oneIDX,:); STR_VAL = [blanc , num2str(tab_INFO(:,1),intFormat)]; if flag_CLU_Import first = 3; STR_VAL = [STR_VAL , sep , num2str(tab_INFO(:,2),intFormat)]; else first = 2; end if col_SORT~=first STR_VAL = [STR_VAL , sep2(oneIDX,:)]; else STR_VAL = [STR_VAL , star2(oneIDX,:)]; end for k = first:nbINFO-2 if k~=col_SORT-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , star]; end end for k = nbINFO-1:nbINFO if k~=col_SORT-1 STR_VAL = ... [STR_VAL , num2str(tab_INFO(:,k),formatPER) , sep]; else STR_VAL = ... [STR_VAL, num2str(tab_INFO(:,k),formatPER) , star]; end end if nbSigInSEL==1 , STR_VAL = {STR_VAL}; end if ~isequal(aff_OPT,'sort') setStrNbSIG(handles.Edi_NB_SIG,nbSigInSEL) set(handles.Txt_SEL_DATA,'String',str_DATA, ... 'TooltipString',Make_ToolTipString(str_POP)); set(handles.Pop_SORT,'String',str_POP,'Value',val_POP) end mdw1dutils('set_Lst_DATA',handles,'reset') end %-------------------------------------------------------------------------- function aff_LST_DEN(varargin) data_SEL.sel_DAT = data_ORI.signal; data_SEL.Attrb_SEL = {false,{'s'},0}; mdw1dutils('data_INFO_MNGR','set',fig,'SEL',data_SEL); [num_SIG,IdxCLU] = get_Attrb_Lst_In_SEL; flag_CLU_Import = ~(isempty(IdxCLU) || isequal(IdxCLU,0)); nbSigInSEL = size(data_SEL.sel_DAT,1); level = data_ORI.dwtDEC.level; thr_VAL = data_DorC.threshold; switch aff_OPT case {'init','importCLU'} wtbxappdata('set',fig,'type_AFF_ALL',{'init',0}); if flag_CLU_Import str_DATA = 'Sig | Clu ||'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig'),getWavMSG('Wavelet:mdw1dRF:Idx_Clu')}; else str_DATA = 'Sig ||'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig')}; end thrSTR = getWavMSG('Wavelet:mdw1dRF:Thr_Cd'); for k=1:level str_POP = [ str_POP , [thrSTR int2str(k)]]; end if level<5 for k=1:level strTHR = getWavMSG('Wavelet:mdw1dRF:ThrD_Lev',k); str_DATA = [str_DATA , [' ' strTHR ' |']]; end else strTHR = getWavMSG('Wavelet:mdw1dRF:Thresholds_for',k); str_DATA = [str_DATA , [' ' strTHR]]; end val_POP = 1; case 'sort' val_POP = col_SORT; end if flag_CLU_Import tab_INFO = [num_SIG , IdxCLU , thr_VAL]; else tab_INFO = [num_SIG , thr_VAL]; end tab_INFO = sortDATA(tab_INFO,col_SORT,asc_SORT); oneIDX = ones(nbSigInSEL,1); blanc = blanc(oneIDX,:); sep = sep(oneIDX,:); star = star(oneIDX,:); STR_VAL = [blanc , num2str(tab_INFO(:,1),intFormat)]; if flag_CLU_Import first = 3; STR_VAL = [STR_VAL, sep(oneIDX,:) , num2str(tab_INFO(:,2),intFormat)]; else first = 2; end if col_SORT~=first STR_VAL = [STR_VAL , sep2(oneIDX,:)]; else STR_VAL = [STR_VAL , star2(oneIDX,:)]; end for k = first:size(tab_INFO,2) if k~=col_SORT-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , star]; end end if nbSigInSEL==1 , STR_VAL = {STR_VAL}; end if ~isequal(aff_OPT,'sort') setStrNbSIG(handles.Edi_NB_SIG,nbSigInSEL) set(handles.Txt_SEL_DATA,'String',str_DATA, ... 'TooltipString',Make_ToolTipString(str_POP)); set(handles.Pop_SORT,'String',str_POP,'Value',val_POP) end mdw1dutils('set_Lst_DATA',handles,'reset') end %-------------------------------------------------------------------------- function aff_LST_STA [num_SEL,num_SIG,typVAL,typVAL_Num,levVAL,typSIG,typSIG_Num,IdxCLU] = ... get_Attrb_Lst_In_SEL; flag_CLU_Import = ~(isempty(IdxCLU) || isequal(IdxCLU,0)); sig_SELECT = data_SEL.sel_DAT; switch aff_OPT case {'init','importCLU'} wtbxappdata('set',fig,'type_AFF_ALL',{'init',0}); str_DATA = 'Sel | Sig |'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sel'),getWavMSG('Wavelet:mdw1dRF:Idx_Sig')}; if flag_CLU_Import str_DATA = [str_DATA , ' Clu |']; str_POP = [str_POP,getWavMSG('Wavelet:mdw1dRF:Idx_Clu')]; end if flag_CLU_Import str_DATA = [str_DATA , '| Dw | L | Typ ||' ... ' mean | max | min | range | std | median |'... ' MedAD | MeanAD |']; else str_DATA = [str_DATA , '| Dw | L | Typ ||' ... ' mean | max | min | range | std | median |'... ' MedAD | MeanAD |']; end str_POP = [str_POP,getWavMSG('Wavelet:mdw1dRF:Dwt_Attr'), ... getWavMSG('Wavelet:mdw1dRF:Level_L'),... getWavMSG('Wavelet:mdw1dRF:Type_Sig'),... 'mean','max','min','range','std','median', ... 'MedAbsDev','MeanAbsDev']; val_POP = 2; case 'sort' val_POP = get(handles.Pop_SORT,'Value'); end mean_VAL = mean(sig_SELECT,2); max_VAL = max(sig_SELECT,[],2); min_VAL = min(sig_SELECT,[],2); range_VAL = max_VAL-min_VAL; std_VAL = std(sig_SELECT,[],2); med_VAL = median(sig_SELECT,2); len_SIG = size(sig_SELECT,2); med_abs_dev = median(abs(sig_SELECT-med_VAL(:,ones(1,len_SIG))),2); mean_abs_dev = mean(abs(sig_SELECT-mean_VAL(:,ones(1,len_SIG))),2); tab_INFO = [num_SEL , num_SIG]; if flag_CLU_Import , tab_INFO = [tab_INFO , IdxCLU]; end lastINFO = size(tab_INFO,2); first = lastINFO+1; tab_INFO = [... tab_INFO , typVAL_Num , levVAL , typSIG_Num , ... mean_VAL , max_VAL , min_VAL , range_VAL , std_VAL , med_VAL , ... med_abs_dev , mean_abs_dev]; [~,idxSORT] = sortrows(tab_INFO,[col_SORT,1]); if asc_SORT==-1 , idxSORT = flipud(idxSORT); end tab_INFO = tab_INFO(idxSORT,:); oneIDX = ones(nbSigInSEL,1); blanc = blanc(oneIDX,:); sep = sep(oneIDX,:); star = star(oneIDX,:); STR_VAL = blanc; for k = 1:lastINFO-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),intFormat) , sep]; end STR_VAL = [STR_VAL , num2str(tab_INFO(:,lastINFO),intFormat)]; if col_SORT~=first STR_VAL = [STR_VAL , sep2(oneIDX,:)]; else STR_VAL = [STR_VAL , star2(oneIDX,:)]; end if col_SORT~=first+1 , STR_VAL = [STR_VAL , typVAL(idxSORT,:) , sep]; else STR_VAL = [STR_VAL , typVAL(idxSORT,:) , star]; end if col_SORT~=first+2 , STR_VAL = [STR_VAL , num2str(tab_INFO(:,first+1),intFormat) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,first+1),intFormat) , star]; end if col_SORT~=first+3 STR_VAL = [STR_VAL , typSIG(idxSORT,:) , sep2(oneIDX,:)]; else STR_VAL = [STR_VAL , typSIG(idxSORT,:) , star2(oneIDX,:)]; end for k = first+3:size(tab_INFO,2) formatNum = mdw1dutils('numFORMAT',max(abs(tab_INFO(:,k)))); if k~=col_SORT-1 STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , sep]; else STR_VAL = [STR_VAL , num2str(tab_INFO(:,k),formatNum) , star]; end end if nbSigInSEL==1 , STR_VAL = {STR_VAL}; end if flag_ONE STR_VAL = set_LST_MARK(STR_VAL); max_LST = 1; val_LST = 1; else max_LST = 2; val_LST = []; end set(handles.Lst_SEL_DATA,'Max',max_LST,'Value',val_LST,... 'String',STR_VAL); if ~isequal(aff_OPT,'sort') setStrNbSIG(handles.Edi_NB_SIG,nbSigInSEL) set(handles.Txt_SEL_DATA,'String',str_DATA, ... 'TooltipString',Make_ToolTipString(str_POP)); set(handles.Pop_SORT,'String',str_POP,'Value',val_POP) end mdw1dstat('Pop_TYP_GRA_Callback',handles.Pop_TYP_GRA,[],handles); end %-------------------------------------------------------------------------- function aff_LST_CLU(varargin) act_PART = mdw1dutils('get_actPART',fig,varargin{:}); nbSIG_TOT = data_ORI.nbSIG; if isempty(nbSIG_TOT) nbSIG_TOT = length(get(handles.SET_of_Partitions(1),'IdxCLU')); end numSIG = (1:nbSIG_TOT)'; if isequal(aff_OPT,'importCLU') [idxPART_Imp,PART_Imp] = partsetmngr('idx_IMPORT_PART',fig); if ~isempty(idxPART_Imp); IdxCLU = get(PART_Imp,'IdxCLU'); nbSIG = length(IdxCLU); idxSIG = 1:nbSIG; else mdw1dafflst('INI',handles.Lst_SEL_DATA,[],handles,'init','INI') return end elseif ~isequal(aff_OPT,'clu_SEL') if ~isequal(aff_OPT,'part_CLU') && ~isequal(aff_OPT,'part_CLU_B') IdxCLU = get(act_PART,'IdxCLU'); nbSIG = length(IdxCLU); idxSIG = 1:nbSIG; if ~isequal(nbSIG_TOT,nbSIG) error('Wavelet:FunctionToVerify:NbSig', ... '*** TO VERIFY: Number of Signals ***') end end end switch aff_OPT case {'init','importCLU'} wtbxappdata('set',fig,'type_AFF_ALL',{'init',0}); case 'sort' type_AFF_ALL = wtbxappdata('get',fig,'type_AFF_ALL'); if isequal(type_AFF_ALL{1},'clu_SEL') [IdxCLU,idxSIG] = ... find_tab_CLU(nbSIG_TOT,type_AFF_ALL{3},varargin{end}); elseif isequal(type_AFF_ALL{1},'partition') IdxCLU = type_AFF_ALL{2}; idxSIG = (1:size(IdxCLU,1))'; else idxSIG = mdw1dafflst('get_idxSEL',handles.Lst_SEL_DATA); idxSIG = sort(idxSIG); end case 'clu_SEL' TypeSEL = varargin{1}; [IdxCLU,idxSIG,numCLA] = ... find_tab_CLU(nbSIG_TOT,TypeSEL,varargin{end}); wtbxappdata('set',fig,'type_AFF_ALL',{'clu_SEL',numCLA,TypeSEL}); case {'partition','part_CLU','part_CLU_B'} callingFIG = blockdatamngr('get',fig, ... 'fig_Storage','callingFIG'); SET_of_Partitions = ... wtbxappdata('get',callingFIG,'SET_of_Partitions'); nbIN = length(varargin); if nbIN>0 idxPART = varargin{1}; else nbPART = length(SET_of_Partitions); idxPART = (1:nbPART); end nbPART = length(idxPART); IdxCLU = zeros(nbSIG_TOT,nbPART); if ~isequal(idxPART,0) for k = 1:nbPART numPart = idxPART(k); IdxCLU(:,k) = ... get(SET_of_Partitions(numPart),'IdxCLU'); end end idxSIG = 1:nbSIG_TOT; wtbxappdata('set',fig,'type_AFF_ALL',{'partition',IdxCLU}); case 'links' idxSIG = varargin{1}; wtbxappdata('set',fig,'type_AFF_ALL',{'links',idxSIG}); case 'dendro' type_CALL = varargin{1}; numCLASSES = varargin{2}; wtbxappdata('set',fig,'type_AFF_ALL', ... {[aff_OPT '_' type_CALL],numCLASSES}); if ~isequal(type_CALL,'all') idxSIG = ismember(IdxCLU,numCLASSES); else idxSIG = ismember((1:nbSIG)',numCLASSES); end case 'kmeans' type_CALL = varargin{1}; numCLASSES = varargin{2}; wtbxappdata('set',fig,'type_AFF_ALL', ... {aff_OPT,numCLASSES}); if ~isequal(type_CALL,'sig') idxSIG = ismember(IdxCLU,numCLASSES); else idxSIG = ismember((1:nbSIG)',numCLASSES); end end IdxCLU = IdxCLU(idxSIG,:); nb_COL_Ts = size(IdxCLU,2); numSIG = numSIG(idxSIG); nbSIG = length(numSIG); switch col_SORT case 1 , idxSORT = (1:nbSIG)'; otherwise , [~,idxSORT] = sortrows(IdxCLU,col_SORT-1); end if asc_SORT==-1 , idxSORT = flipud(idxSORT); end B1 = blanks(nbSIG)'; sep = sep(ones(nbSIG,1),:); STR_VAL = [B1,B1, num2str(numSIG(idxSORT),'%3.0f') ,B1, sep]; for k=1:nb_COL_Ts STR_VAL = [STR_VAL,num2str(IdxCLU(idxSORT,k),'%2.0f'),B1, sep]; end if nbSIG==1 , STR_VAL = {STR_VAL}; end switch aff_OPT case 'sort' str_DATA = get(handles.Txt_SEL_DATA,'String'); str_POP = get(handles.Pop_SORT,'String'); val_POP = get(handles.Pop_SORT,'Value'); case 'clu_SEL' str_DATA = ' Sig |'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig')}; nbSEL = 2; for k=1:nbSEL str_DATA = [str_DATA ' P' int2str(k) ' |']; str_POP = [str_POP ; ['Part ' int2str(k)]]; end val_POP = 2; case {'partition','part_CLU','part_CLU_B'} switch aff_OPT case {'partition','part_CLU_B'} lst = get(handles.Lst_LST_PART,'String'); case {'part_CLU'} lst = get(handles.Pop_SEL_1,'String'); aff_OPT = 'partition'; end str_DATA = ' Sig |'; str_POP = [getWavMSG('Wavelet:mdw1dRF:Idx_Sig');lst]; if ~isequal(idxPART,0) str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig'),lst{idxPART}}; end nbSEL = nbPART; for k=1:nbSEL str_DATA = [str_DATA ' P' int2str(k) ' |']; end val_POP = 1; otherwise if isequal(aff_OPT,'importCLU') str_DATA = ' Sig | Imp |'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig');'Idx Clu IMP.'}; else str_DATA = ' Sig | Clu |'; str_POP = {getWavMSG('Wavelet:mdw1dRF:Idx_Sig'); ... getWavMSG('Wavelet:mdw1dRF:Idx_Clu')}; end val_POP = 2; end set(handles.Txt_SEL_DATA,'String',str_DATA, ... 'TooltipString',Make_ToolTipString(str_POP)); set(handles.Pop_SORT,'String',str_POP,'Value',val_POP) set(handles.Lst_SEL_DATA,'Value',1,'String',STR_VAL); switch aff_OPT case 'init' , FCol = 'k'; case 'clu_SEL' , FCol = 'b'; case 'clu_CUR' , FCol = [0 0.7 0]; case 'clu_TWO' , FCol = [0.9 0.5 0]; case 'dendro' , FCol = 'r'; case 'links' , FCol = 'm'; case {'partition','part_CLU','part_CLU_B'} , FCol = 'b'; case 'kmeans' , FCol = 'r'; otherwise , FCol = 'k'; end if ~isequal(aff_OPT,'sort') setStrNbSIG(handles.Edi_NB_SIG,nbSIG) set(handles.Edi_NB_SIG,'ForegroundColor',FCol); end end %-------------------------------------------------------------------------- function aff_LST_DAT(typ_SIG,level,Lst_SIG,Lst_CFS) Str_Lst_DATA = get(Lst_SIG,'String'); len_LST = length(Str_Lst_DATA); switch typ_SIG case 'ORI' toDEL = {'CMP','DEN','RES','Com','De-','Res'}; typ_STR = ''; max_SIG = 0; max_CFS = 0; first_SIG = getWavMSG('Wavelet:moreMSGRF:Orig_Signals'); del_lst_END = true; add_APP_DET = true; case {'CMP','DEN'} toDEL = {}; typ_STR = [typ_SIG,'-']; max_SIG = 1+2*level; max_CFS = 2*level; if isequal(typ_SIG,'CMP') first_SIG = getWavMSG('Wavelet:moreMSGRF:Compressed'); else first_SIG = getWavMSG('Wavelet:moreMSGRF:Denoised'); end del_lst_END = false; add_APP_DET = (len_LST<=max_SIG); end % List of Signals. %----------------- for k = 1:length(toDEL) Idx = strncmpi(toDEL(k),Str_Lst_DATA,3); Str_Lst_DATA(Idx) = []; end len_LST = length(Str_Lst_DATA); if del_lst_END if max_SIG<len_LST Str_Lst_DATA(max_SIG+1:end) = []; elseif len_LST==0 Str_Lst_DATA = {}; end end if add_APP_DET Str_Lst_DATA = [Str_Lst_DATA ; first_SIG]; for k=1:level Str_Lst_DATA = [Str_Lst_DATA;[typ_STR 'APP ' int2str(k)]]; end for k=1:level Str_Lst_DATA = [Str_Lst_DATA;[typ_STR 'DET ' int2str(k)]]; end if isequal(typ_SIG,'DEN') || isequal(typ_SIG,'CMP') Str_Lst_DATA = [Str_Lst_DATA; ... getWavMSG('Wavelet:moreMSGRF:Residuals')]; end end idxTOP = max_SIG+1; if idxTOP>length(Str_Lst_DATA) , idxTOP = 1; end set(Lst_SIG,'Value',1,'String',Str_Lst_DATA,'ListboxTop',idxTOP); % List of Coefficients. %---------------------- Str_Lst_DATA = get(Lst_CFS,'String'); len_LST = length(Str_Lst_DATA); if del_lst_END if max_CFS<length(Str_Lst_DATA) Str_Lst_DATA(max_CFS+1:end) = []; elseif len_LST==0 Str_Lst_DATA = {}; end end if add_APP_DET for k=1:level Str_Lst_DATA = [Str_Lst_DATA;[typ_STR 'APP ' int2str(k)]]; end for k=1:level Str_Lst_DATA = [Str_Lst_DATA;[typ_STR 'DET ' int2str(k)]]; end end set(Lst_CFS,'Value',[],'String',Str_Lst_DATA) end %-------------------------------------------------------------------------- function aff_LST_MARK(hdl_LST,IDX) lst_Items = get(hdl_LST,'String'); if ~isempty(IDX) C1_STR = repmat(' ',size(lst_Items,1),1); III = get_idxSEL(hdl_LST); [~,LOC] = ismember(IDX,III); C1_STR(LOC,1) = mark; lst_Items(:,1) = C1_STR; else if iscell(lst_Items) , lst_Items = lst_Items{1}; end lst_Items(:,1) = ' '; end set(hdl_LST,'String',lst_Items) end %-------------------------------------------------------------------------- function lst_Items = set_LST_MARK(lst_Items) idxSIG_Plot = wtbxappdata('get',fig,'idxSIG_Plot'); if isempty(idxSIG_Plot) , return; end % Find ixdSEP item = lst_Items(1,:); if iscell(item) , item = item{1}; end ixdSEP = find(item(1,:)=='|',1,'first'); % Get string of idx_SEL and then idx_SEL if size(lst_Items,1)==1 && iscell(lst_Items) lst_Items = lst_Items{1}; end str_idx_SEL = lst_Items(:,1:ixdSEP-1); id_Mark = lst_Items(:,1)== mark; str_idx_SEL(id_Mark,1) = ' '; idx_SEL = str2num(str_idx_SEL); %#ok<ST2NM> [~,LOC] = ismember(idxSIG_Plot,idx_SEL); C1_STR = repmat(' ',size(lst_Items,1),1); C1_STR(LOC,1) = mark; lst_Items(:,1) = C1_STR; end %-------------------------------------------------------------------------- function idx_SEL = get_idxSEL(hdl_LST,flagIND) %#ok<INUSD> lst_Items = get(hdl_LST,'String'); if ~isempty(lst_Items) % Find ixdSEP item = lst_Items(1,:); if iscell(item) , item = item{1}; end ixdSEP = find(item(1,:)=='|',1,'first'); % Get string of idx_SEL and then idx_SEL if nargin>1 idx = get(hdl_LST,'Value'); lst_Items = lst_Items(idx,:); end if size(lst_Items,1)==1 && iscell(lst_Items) lst_Items = lst_Items{1}; end str_idx_SEL = lst_Items(:,1:ixdSEP-1); id_Mark = lst_Items(:,1)== mark; str_idx_SEL(id_Mark,1) = ' '; idx_SEL = str2num(str_idx_SEL); %#ok<ST2NM> else idx_SEL = []; end end %-------------------------------------------------------------------------- function varargout = get_Attrb_Lst_In_SEL typ_DorC = data_DorC.typ_DorC; nbSigInSEL = size(data_SEL.sel_DAT,1); Attrb_SEL = data_SEL.Attrb_SEL; if isempty(Attrb_SEL) , Attrb_SEL = {false,{'s'},0}; end [DorC_FLAG,typVAL,levVAL] = deal(Attrb_SEL{:}); nbBlocs = length(DorC_FLAG); nbSigInBlocs = nbSigInSEL/nbBlocs; num_SEL = (1:nbSigInSEL)'; num_SIG = repmat((1:nbSigInBlocs)',nbBlocs,1); typVAL = repmat(typVAL,nbSigInBlocs,1); typVAL = typVAL(:); typVAL = cat(1,typVAL{:}); DorC_FLAG = repmat(DorC_FLAG(:)',nbSigInBlocs,1); DorC_FLAG = DorC_FLAG(:); levVAL = repmat(levVAL,nbSigInBlocs,1); levVAL = levVAL(:); typSIG = repmat({'ori'},nbSigInSEL,1); typSIG(DorC_FLAG) = {typ_DorC}; idxRES = isnan(levVAL); if any(idxRES) levVAL(idxRES) = 0; typSIG(idxRES) = {'res'}; end typSIG = cat(1,typSIG{:}); typVAL_Num = zeros(nbSigInSEL,1); % idx = strncmp({'s'},typVAL,1); typVAL_Num(idx) = 0; idx = strncmp({'a'},typVAL,1); typVAL_Num(idx) = 1; idx = strncmp({'d'},typVAL,1); typVAL_Num(idx) = 2; idx = strncmp({'ca'},typVAL,2); typVAL_Num(idx) = 3; idx = strncmp({'cd'},typVAL,2); typVAL_Num(idx) = 4; typSIG_Num = zeros(nbSigInSEL,1); % idx = strncmp({'ori'},typSIG,3); typSIG_Num(idx) = 0; idx = strncmp({'den'},typSIG,3); typSIG_Num(idx) = 1; idx = strncmp({'cmp'},typSIG,3); typSIG_Num(idx) = 2; idx = strncmp({'res'},typSIG,3); typSIG_Num(idx) = 3; [idxPART_Imp,PART_Imp] = partsetmngr('idx_IMPORT_PART',fig); IdxCLU = []; if ~isempty(idxPART_Imp); IdxCLU = get(PART_Imp,'IdxCLU'); IdxCLU = repmat(IdxCLU,nbBlocs,1); end Attrb_Lst_In_SEL = [num_SEL,num_SIG,typVAL_Num,levVAL,typSIG_Num]; wtbxappdata('set',fig,'Attrb_Lst_In_SEL',Attrb_Lst_In_SEL); switch nargout case 1 , varargout = {Attrb_Lst_In_SEL}; case 2 , varargout = {num_SEL,IdxCLU}; case 8 typVAL_Num = abs(typVAL(:,end)); typSIG_Num = abs(typSIG(:,1)); varargout = {num_SEL,num_SIG,... typVAL,typVAL_Num,levVAL,typSIG,typSIG_Num,IdxCLU}; end end %------------------------------------------------------------------------ function [IdxCLU,idxSIG,numCLA] = find_tab_CLU(nbSIG,TypeSEL,toolNAME) fig = handles.Current_Fig; callingFIG = blockdatamngr('get',fig,'fig_Storage','callingFIG'); SET_of_Partitions = wtbxappdata('get',callingFIG,'SET_of_Partitions'); numCLA = zeros(1,2); IdxCLU = NaN(nbSIG,2); bool = zeros(nbSIG,2); Pop_SEL = [handles.Pop_SEL_1,handles.Pop_SEL_2]; Pop_NUM = [handles.Pop_NUM_1,handles.Pop_NUM_2]; cellSTR = get(Pop_NUM,'String'); if isequal(toolNAME,'CLU') , deltaSEL = 1; else deltaSEL = 0; end for k = 1:2 numPart = get(Pop_SEL(k),'Value')-deltaSEL; if numPart>0 nbItems = size(cellSTR{k},1); %#ok<NASGU> numCLA(k) = get(Pop_NUM(k),'Value')-1; [NbCLU,IdxCLU(:,k)] = ... get(SET_of_Partitions(numPart),'NbCLU','IdxCLU'); if numCLA(k)>NbCLU bool(:,k) = IdxCLU(:,k)>=nbMaxCLU_AFF; numCLA(k)=Inf; elseif numCLA(k)>0 bool(:,k) = IdxCLU(:,k)==numCLA(k); else bool(:,k) = 1; end else numCLA(k)= NaN; end end switch TypeSEL case 'and' , bool_RES = bool(:,1) & bool(:,2); case 'or' , bool_RES = bool(:,1) | bool(:,2); case 'xor' , bool_RES = ~(bool(:,1) & bool(:,2)); case '1-2' , bool_RES = bool(:,1) & ~bool(:,2); case '2-1' , bool_RES = ~bool(:,1) & bool(:,2); end idxSIG = find(bool_RES); end %-------------------------------------------------------------------------- function [tab,idxSORT] = sortDATA(tab,col_SORT,asc_SORT) if asc_SORT==-1 , col_SORT = asc_SORT*col_SORT; end if ~ismember(1,col_SORT) , col_SORT = [col_SORT,1]; end [tab,idxSORT] = sortrows(tab,col_SORT); end %-------------------------------------------------------------------------- function StrOUT = Make_ToolTipString(StrIN) StrOUT = []; for k=1:length(StrIN) StrOUT = [StrOUT , StrIN{k} , ' | ']; end end %-------------------------------------------------------------------------- function setStrNbSIG(Edi_NB_SIG,nbSigInSEL) set(Edi_NB_SIG, ... 'String',getWavMSG('Wavelet:mdw1dRF:Number_of_Sig',nbSigInSEL)); end %-------------------------------------------------------------------------- end % END of MAIN FUNCTION