www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wmultisig1d/showpartperf.m

    function varargout = showpartperf(varargin)
% SHOWPARTPERF MATLAB file for showpartperf.fig

% Last Modified by GUIDE v2.5 16-Feb-2006 10:43:02
%
%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 26-Jan-2006.
%   Last Revision 11-Jul-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.1.6.8 $ $Date: 2013/08/23 23:45:55 $ 

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @showpartperf_OpeningFcn, ...
                   'gui_OutputFcn',  @showpartperf_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

%--------------------------------------------------------------------------
function showpartperf_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.

% Choose default command line output for showpartperf
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

%%!!!!!!!!!!!!!!!!!!!!%
% TOOL INITIALISATION %
%%!!!!!!!!!!!!!!!!!!!!%
Init_Tool(hObject,eventdata,handles,varargin{:})
%--------------------------------------------------------------------------
function varargout = showpartperf_OutputFcn(~,~,handles) 
% varargout  cell array for returning output args (see VARARGOUT);

% Get default command line output from handles structure
varargout{1} = handles.output;
%--------------------------------------------------------------------------
function Pus_Close_Callback(~,~,handles) %#ok<*DEFNU>

fig = handles.output;
callingFIG = wtbxappdata('get',fig,'callingFIG');
if ishandle(callingFIG)
    showparttool('Pus_PART_PERF_Callback',fig,[],handles)
else
    delete(fig);
end
%--------------------------------------------------------------------------
function Pop_INDICES_Callback(hObject,eventdata,handles)

%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
numIDX = get(hObject,'Value');
Tab_idxID = get(hObject,'String');
idxID = Tab_idxID{numIDX};
if isequal(idxID(1),'-')
    usr = get(hObject,'UserData');
    set(hObject,'Value',usr);
    return
end
set(hObject,'UserData',numIDX);
names = get(hObject,'String');
idxNAME = names{numIDX};
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
formatNUM = '%9.3f';
fig = handles.output;
callingFIG = wtbxappdata('get',fig,'callingFIG');
TAB_Partitions = wtbxappdata('get',callingFIG,'TAB_Partitions');
signals = blockdatamngr('get',callingFIG,'data_SEL','sel_DAT');
nbPART = length(TAB_Partitions);
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++
nbCLU = wtbxappdata('get',fig,'nbCLU');
NbCLU_MAX = max(nbCLU);
switch idxID
    case {'stdQ1','stdQ2','glbSTD'}
        usr = wtbxappdata('get',callingFIG,'Std_Quality');
        if isempty(usr)
            [stdQ1,stdQ2,glbSTD] = partstdqual(TAB_Partitions,signals);
            wtbxappdata('set',callingFIG,'Std_Quality',{stdQ1,stdQ2,glbSTD});
        else
            [stdQ1,stdQ2,glbSTD] = deal(usr{:});
        end
        switch idxID
            case 'stdQ1'  , tabIDX = stdQ1;
            case 'stdQ2'  , tabIDX = stdQ2;    
            case 'glbSTD' , tabIDX = glbSTD;
        end
        flagONE = false;
        
    case {'Inter/Intra','Inter/Intra (N)','logINTRA','logINTER'}
        usr = wtbxappdata('get',callingFIG,'BetweenWithin');
        if isempty(usr)
            [inter_SUR_intra,inter_SUR_intra_N,inter,intra] = ...
                partbetweenwithin(signals,TAB_Partitions);
            wtbxappdata('set',callingFIG,'BetweenWithin', ...
                {inter_SUR_intra,inter_SUR_intra_N,inter,intra});
        else
            [inter_SUR_intra,inter_SUR_intra_N,inter,intra] = deal(usr{:});
        end
        switch idxID
            case 'Inter/Intra'     , tabIDX = inter_SUR_intra;
            case 'Inter/Intra (N)' , tabIDX = inter_SUR_intra_N;
            case 'logINTRA'        , tabIDX = log10(intra);
            case 'logINTER'        , tabIDX = log10(inter);
        end
        flagONE = true;
        
    case {'MEAN Silh','MIN Silh','MAX Silh','STD Silh','PART Silh'}
        silh_VALUES = wtbxappdata('get',callingFIG,'silh_VALUES');
        if isempty(silh_VALUES)
            h = waitbar(50,getWavMSG('Wavelet:moreMSGRF:Please_wait'));
            [silh_VAL,silh_PART] = partsilh(signals,TAB_Partitions);
            silh_VALUES = {silh_VAL,silh_PART};
            wtbxappdata('set',callingFIG,'silh_VALUES',silh_VALUES);
            close(h)
        end
        if ~isequal(idxID,'PART Silh')
            silh_VAL = silh_VALUES{1};
            switch idxID
                case 'MEAN Silh' , idxK = 1;
                case 'MIN Silh'  , idxK = 2;
                case 'MAX Silh'  , idxK = 3;
                case 'STD Silh'  , idxK = 4;
            end
            for j = 1:length(silh_VAL), silh_VAL{j} = silh_VAL{j}(idxK,:);end
            tabIDX = silh_VAL;
            flagONE = false;
        else
            tabIDX  = silh_VALUES{2};
            flagONE = true;        
        end
end
set(handles.Pan_GRA_SIM,'Title',['   ' idxNAME '   .'])
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
val_DISP = get(handles.Pop_FRM_DISP,'Value');
switch val_DISP
    case 1    , vis_IDX = 'On';
    otherwise , vis_IDX = 'Off';
end
txt_HDL = wtbxappdata('get',fig,'txt_HDL');
[txt_IDX,txt_C,~,txt_VIS,txt_NotVIS,...
    txt_LIN_V,txt_LIN_H] = deal(txt_HDL{:});
if iscell(tabIDX)    
    for j=1:nbPART
        for k=1:nbCLU(j)
            strTXT = num2str(tabIDX{j}(k),formatNUM);
            set(txt_IDX(j,k),'String',strTXT);
        end
    end
else
    for j=1:nbPART
        strTXT = num2str(tabIDX(j),formatNUM);
        set(txt_IDX(j,:),'String',strTXT);
    end    
end
hdl_CHANGE = [txt_C(:);txt_LIN_V(:);txt_LIN_H(:)];
if flagONE
    hdl_TMP   = txt_IDX(:,2:end);
    HDL_inVIS = [hdl_TMP(:);hdl_CHANGE];
    HDL_inVIS = HDL_inVIS(ishandle(HDL_inVIS));    
    set(HDL_inVIS,'Visible','Off');
else
    HDL_VIS = [txt_VIS(:);hdl_CHANGE];
    set(txt_NotVIS,'Visible','Off');
    HDL_VIS = HDL_VIS(ishandle(HDL_VIS));
    set(HDL_VIS,'Visible',vis_IDX);
end
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if iscell(tabIDX)
    strTXT = [];
    sepCOL = repmat(' | ',NbCLU_MAX,1);
    for j=1:nbPART
        maxVAL = max(abs(tabIDX{j}));
        nbdigit = max([round(log10(maxVAL)),0]) + 6;
        formatNUM = ['% ' int2str(nbdigit) '.3f'];
        srtTMP_P = [];
        for k=1:nbCLU(j)
            strTMP = sprintf(formatNUM,tabIDX{j}(k));
            srtTMP_P = [srtTMP_P ; strTMP]; %#ok<*AGROW>
        end
        L = size(srtTMP_P,2);
        for k = nbCLU(j)+1:NbCLU_MAX
            srtTMP_P = [srtTMP_P ; blanks(L)];
        end
        if j>1 , strTXT = [strTXT , sepCOL]; end
        strTXT = [strTXT , srtTMP_P];
    end
    sepCOL = repmat('|',NbCLU_MAX,1);
    strTXT = [sepCOL , strTXT sepCOL];
else
    formatNUM = '%9.3f';
    strTXT = num2str(tabIDX,formatNUM);
end
L1  = size(strTXT,2);
sep = '-'; 
sep = sep(:,ones(1,L1));
strTXT = [blanks(L1) ; blanks(L1) ; sep ; strTXT ; sep];
set(handles.Txt_SIM_VAL,'String',strTXT)
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if ~flagONE
    tabIDX_TMP = NaN(nbPART,NbCLU_MAX);
    for j=1:nbPART
        if iscell(tabIDX)
            tabIDX_TMP(j,1:nbCLU(j)) = tabIDX{j}; 
        else
            tabIDX_TMP(j,1:nbCLU(j)) = tabIDX; 
        end
    end
    tabIDX = tabIDX_TMP;
else
    tabIDX = tabIDX';
    tabIDX = tabIDX(:,ones(1,NbCLU_MAX));
    for j=1:nbPART , tabIDX(j,nbCLU(j)+1:end) = NaN; end   
end
ymax = max(max(tabIDX));
ymin = min(min(tabIDX));
ymax = ymax + 0.01*abs(ymax);
ymin = ymin - 0.01*abs(ymin);
axeCUR = handles.Axe_GRAPHIC;
visAXE = get(axeCUR,'Visible');
Leg_lin_IDX = wtbxappdata('get',fig,'Leg_lin_IDX');
if isempty(Leg_lin_IDX)
    delete(allchild(axeCUR))
    set(axeCUR,'NextPlot','Add')
    map = hsv(64);
    lin_IDX = zeros(1,nbPART);
    for j=1:nbPART
        col_LIN = map(j,:);
        lin_IDX(j) = plot(1:NbCLU_MAX,tabIDX(j,:),'Color',col_LIN,...
            'LineWidth',2,'Marker','s','MarkerSize',8,...
            'MarkerFaceColor',col_LIN, ...
            'Visible',visAXE,'Parent',axeCUR);
    end
    xlab = 'C';
    xlab = [xlab(ones(1,NbCLU_MAX),:), int2str((1:NbCLU_MAX)')];
    set(axeCUR,...
        'XTick',(1:NbCLU_MAX),'XTickLabel',xlab,...
        'XLim',[1 NbCLU_MAX],'YLim',[ymin ymax]);
    legendSTR = get(handles.Pop_HIG_PART,'String');
    Leg_HDL = legend(axeCUR,legendSTR{2:end},...
        'Location','EastOutside');
    wtbxappdata('set',fig,'Leg_lin_IDX',{lin_IDX,Leg_HDL});
else
    [lin_IDX,Leg_HDL] = deal(Leg_lin_IDX{:});
    for j=1:nbPART , set(lin_IDX(j),'YData',tabIDX(j,:)); end
    set(axeCUR,'XLim',[1 NbCLU_MAX],'YLim',[ymin ymax]);
end
set(Leg_HDL,'Visible',visAXE);
val = get(handles.Pop_SEL_PART,'Value')-1;
set_Title(handles,val)
Chk_GRID_Callback(handles.Chk_GRID,eventdata,handles)
%--------------------------------------------------------------------------
function Pop_FRM_DISP_Callback(hObject,eventdata,handles)

val = get(hObject,'Value');
usr = get(hObject,'UserData');
if isequal(val,usr) , return; end
set(hObject,'UserData',val);

fig = get(hObject,'Parent');
posLocFig = wtbxappdata('get',fig,'posLocFig');
hdl_IN_TXT = findobj(handles.Axe_INDICES);
stored  = wtbxappdata('get',fig,'Leg_lin_IDX');
if ~isempty(stored) , Leg_HDL = stored{2}; else Leg_HDL = []; end
hdl_IN_GRA = [findobj(handles.Axe_GRAPHIC);Leg_HDL; handles.Pan_GRA];

switch val
    case 1 % Table
        if ~isequal(posLocFig{2},0) , set(fig,'Position',posLocFig{1}); end
        txt_HDL = wtbxappdata('get',fig,'txt_HDL');
        txt_NotVIS = txt_HDL{5};
        set(handles.Txt_SIM_VAL,'Visible','Off')
        set(hdl_IN_GRA,'Visible','Off')
        set(hdl_IN_TXT,'Visible','On')
        set([handles.Axe_INDICES,txt_NotVIS],'Visible','Off')

    case 2 % Graphic
        if ~isequal(posLocFig{2},0) , set(fig,'Position',posLocFig{1}); end
        set(handles.Pop_SEL_PART,'Value',1);
        set(handles.Pop_HIG_PART,'Value',1);
        set([hdl_IN_TXT(:)',handles.Txt_SIM_VAL],'Visible','Off')
        set_Title(handles,0)
        set(hdl_IN_GRA,'Visible','On')
        Pop_COL_MAP_Callback(handles.Pop_COL_MAP,eventdata,handles)
        
    case 3 % Text
        set(hdl_IN_GRA,'Visible','Off')
        set(hdl_IN_TXT,'Visible','Off')
        pos = [0 0 1 1];
        set(handles.Txt_SIM_VAL,'Position',pos,'Visible','On')
        ext = get(handles.Txt_SIM_VAL,'Extent');
        if ext(3)>1
            if isequal(posLocFig{2},0)
                pos = get(fig,'Position');
                pos(3) = 1.2*pos(3)*ext(3);
                posLocFig{2} = pos;
                wtbxappdata('set',fig,'posLocFig',posLocFig);
            end
            set(fig,'Position',posLocFig{2});
        end
end
%--------------------------------------------------------------------------
function Pus_ALL_Callback(~,~,handles)

fig = handles.output;
showparttxt(fig,'PERF');
%--------------------------------------------------------------------------
function Chk_GRID_Callback(hObject,~,handles)

val = get(hObject,'Value');
switch val,
    case 0 , vis = 'Off';
    case 1 , vis = 'On';
end
set(handles.Axe_GRAPHIC,'XGrid',vis,'YGrid',vis);
%--------------------------------------------------------------------------
function Pop_COL_MAP_Callback(hObject,~,handles)

stored = wtbxappdata('get',hObject,'Leg_lin_IDX');
lin_IDX = stored{1};
nb_LIN  = length(lin_IDX);
val = get(hObject,'Value');
if val>1
    lst = get(hObject,'String');
    mapName = lst{val};
    map = feval(mapName,255);
    map = map(10:10:end,:);
else
    map = getscaledmap(get(lin_IDX(1),'Parent'),nb_LIN);
end
for j=1:length(lin_IDX)
    col_LIN = map(j,:);
    set(lin_IDX(j),'Color',col_LIN,'MarkerFaceColor',col_LIN);
end
usr = get(handles.Pop_HIG_PART,'UserData');
if ~isempty(usr)
    col_SEL = get(usr{1},'Color');
    set(usr{1},'Color','k','MarkerFaceColor','k');
    set(handles.Pop_HIG_PART,'UserData',{usr{1},col_SEL,col_SEL});
end
%--------------------------------------------------------------------------
function Pop_SEL_PART_Callback(hObject,~,handles)

val = get(hObject,'Value')-1;
stored = wtbxappdata('get',hObject,'Leg_lin_IDX');
lin_IDX = stored{1};
leg_HDL = stored{2};
if val==0
    set(lin_IDX,'Visible','On');
    set(leg_HDL,'Visible','On')
    val = get(handles.Pop_HIG_PART,'Value')-1;
else
    set(lin_IDX,'Visible','Off');
    set(lin_IDX(val),'Visible','On'); 
end
set_Title(handles,val);
%--------------------------------------------------------------------------
function Pop_HIG_PART_Callback(hObject,~,handles)

val = get(hObject,'Value')-1;
stored = wtbxappdata('get',hObject,'Leg_lin_IDX');
lin_IDX = stored{1};
set(lin_IDX,'LineWidth',2);
usr = get(hObject,'UserData');
if ~isempty(usr)
    try set(usr{1},'Color',usr{2},'MarkerFaceColor',usr{3}); end %#ok<*TRYNC>
end
if get(handles.Pop_SEL_PART,'Value')==1 , set_Title(handles,val); end
if val~=0
    lin_SEL = lin_IDX(val);
    col_SEL = get(lin_SEL,'Color');
    col_MAR = get(lin_SEL,'MarkerFaceColor');
    set(hObject,'UserData',{lin_SEL,col_SEL,col_MAR});
    for k=1:4
        set(lin_SEL,'LineWidth',2,...
            'Color',col_SEL,'MarkerFaceColor',col_MAR);
        pause(0.2)
        set(lin_SEL,'LineWidth',3,'Color','k','MarkerFaceColor','k');
        pause(0.3)
    end
end
%--------------------------------------------------------------------------
function Init_Tool(fig,eventdata,handles,varargin)

wtranslate(mfilename,fig)
callingFIG = gcbf;
wtbxappdata('set',fig,'callingFIG',callingFIG);
pus_SHOW   = varargin{1};
posCaller  = get(callingFIG,'Position');
posLocFig  = get(fig,'Position');
posLocFig(1) = posCaller(1) + 0.025;
posLocFig(2) = posCaller(2)+(posCaller(4) - posLocFig(4))/2;
set(fig,'Position',posLocFig,'UserData',pus_SHOW);

sep = '-------------------';
Tab_idxID  = {...
    'stdQ1','Inter/Intra (N)','MEAN Silh',sep,...
    'stdQ2','glbSTD',sep,            ...
    'Inter/Intra','logINTRA','logINTER',sep  ...
    'MIN Silh','MAX Silh','STD Silh','PART Silh' ...
    };
set(handles.Pop_INDICES,'String',Tab_idxID,'Value',1);
TAB_Partitions = wtbxappdata('get',callingFIG,'TAB_Partitions');
nbPART = length(TAB_Partitions);

num_STR = int2str((1:nbPART)');
Items = 'P';
Items = [Items(ones(nbPART,1),:) num_STR];
Items = num2cell(Items,2);
Items = [getWavMSG('Wavelet:commongui:Str_All') ; Items];
set(handles.Pop_SEL_PART,'String',Items,'Value',1);
Items{1} = 'None';
set(handles.Pop_HIG_PART,'String',Items,'Value',1);

NbCLU_MAX = 0;
nbCLU = zeros(1,nbPART);
for k = 1:nbPART
    nbCLU(k) = TAB_Partitions(k).NbCLU;
    if nbCLU(k)>NbCLU_MAX , NbCLU_MAX = nbCLU(k); end
end
strPOP = get(handles.Pop_FRM_DISP,'String');
set(handles.Pop_FRM_DISP,'String',strPOP);

axeCUR = handles.Axe_INDICES;
xlim = [1,nbPART];
if nbPART<2 , xlim = xlim + [-0.5 0.5]; end
set(axeCUR,...
    'XLim',xlim,'YLim',[1,NbCLU_MAX],   ...
    'XTick',(1:nbPART),'YTick',(1:NbCLU_MAX), ...
    'XTickLabel','','YTickLabel','','Visible','Off');
cba_TEXT = '';
propTEXT = {...
    'Parent',axeCUR,...
    'Color','k','FontSize',8,'FontWeight','bold',...
    'HorizontalAlignment','Center','ButtonDownFcn',cba_TEXT ...
    };
oldUnits = get(axeCUR,'Units');
set(axeCUR,'Units','Pixels')
pos = get(axeCUR,'Position');
pixX  = (nbPART-1)/pos(3);
pixY  = (NbCLU_MAX-1)/pos(4);
set(axeCUR,'Units',oldUnits)
xINI = 1-50*pixX;
yINI = 1-40*pixY;
pTXT_NUM = [propTEXT , 'EdgeColor','k','BackgroundColor',[1 1 0.7]];
txt_C = zeros(1,NbCLU_MAX);
for j=1:NbCLU_MAX
    txt_C(j) = text(xINI,j,[' C' int2str(j)],pTXT_NUM{:});
end
txt_P = zeros(1,nbPART);
for j=1:nbPART
    txt_P(j) = text(j,yINI,[' P' int2str(j)],pTXT_NUM{:});
end
pTXT_V = [propTEXT , {'EdgeColor','r','BackgroundColor',[1 0.8 1]}];
txt_IDX = zeros(nbPART,NbCLU_MAX);

Col_LIN_V = [0.6 0.6 1];
Col_LIN_H = [1 0.6 0.6];
LW = 2;
txt_LIN_V = zeros(1,nbPART);
for j=1:nbPART
    txt_LIN_V(j) = line('XData',[j,j],'YData',[1,NbCLU_MAX],...
        'LineWidth',LW,'Color',Col_LIN_V,'Parent',axeCUR);
end
txt_LIN_H = zeros(1,NbCLU_MAX);
if nbPART>1
    for j=1:NbCLU_MAX
        txt_LIN_H(j) = line('YData',[j,j],'XData',[1,nbPART],...
            'LineWidth',LW,'LineStyle',':','Color',Col_LIN_H, ...
            'Parent',axeCUR);
    end
end
for j=1:nbPART
    for k=1:NbCLU_MAX
        txt_IDX(j,k) = text(j,k,'      ',pTXT_V{:});
    end
end
txt_VIS = [];
for j =1:nbPART
    txt_VIS = [txt_VIS , txt_IDX(j,1:nbCLU(j))];
    set(txt_IDX(j,1:nbCLU(j)),'Visible','On');
    if nbCLU(j)<NbCLU_MAX
        set(txt_IDX(j,1+nbCLU(j):NbCLU_MAX),'Visible','Off');
    end
end
txt_NotVIS = setdiff(txt_IDX(:)',txt_VIS);
wtbxappdata('set',fig,'txt_HDL',...
    {txt_IDX,txt_C,txt_P,txt_VIS,txt_NotVIS,txt_LIN_V,txt_LIN_H});
wtbxappdata('set',fig,'posLocFig',{posLocFig,0});
wtbxappdata('set',fig,'nbCLU',nbCLU);

%%% BUG VISIBLE
set(gca,'YLim',[0.99 , NbCLU_MAX+0.01])
Pop_INDICES_Callback(handles.Pop_INDICES,eventdata,handles);
%--------------------------------------------------------------------------
function set_Title(handles,val)

valIDX = get(handles.Pop_INDICES,'Value');
strIDX = get(handles.Pop_INDICES,'String');
nameIDX = strIDX{valIDX};
if val>0
    strTITLE = getWavMSG('Wavelet:mdw1dRF:ShowOnePart',val,nameIDX);
else
    strTITLE = getWavMSG('Wavelet:mdw1dRF:ShowAllParts',nameIDX);
end
title(strTITLE ,'Parent',handles.Axe_GRAPHIC, ...
    'FontSize',10,'FontWeight','bold');
%--------------------------------------------------------------------------