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

    function varargout = wmspcatool(varargin)
%WMSPCATOOL Multisignal Principal Component Analysis GUI.
%   VARARGOUT = WMSPCATOOL(VARARGIN)

% Last Modified by GUIDE v2.5 04-Sep-2006 13:21:28
%
%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 29-Mar-2005.
%   Last Revision: 21-Jul-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.1.6.13 $ $Date: 2013/08/23 23:46:02 $ 

%*************************************************************************%
%                BEGIN initialization code - DO NOT EDIT                  %
%                ----------------------------------------                 %
%*************************************************************************%
gui_Singleton = 0;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @wmspcatool_OpeningFcn, ...
                   'gui_OutputFcn',  @wmspcatool_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                    %
%*************************************************************************%


%*************************************************************************%
%                BEGIN Opening Function                                   %
%                ----------------------                                   %
% --- Executes just before wmspcatool is made visible.                    %
%*************************************************************************%
function wmspcatool_OpeningFcn(hObject,eventdata,handles)
% This function has no output args, see OutputFcn.

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

% Update handles structure
guidata(hObject,handles);

%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
% TOOL INITIALISATION Introduced manually in the automatic generated code  %
%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
Init_Tool(hObject,eventdata,handles);
%*************************************************************************%
%                END Opening Function                                     %
%*************************************************************************%

%*************************************************************************%
%                BEGIN Output Function                                    %
%                ---------------------                                    %
% --- Outputs from this function are returned to the command line.        %
%*************************************************************************%
function varargout = wmspcatool_OutputFcn(~,~,handles)
% varargout  cell array for returning output args (see VARARGOUT);

% Get default command line output from handles structure
varargout{1} = handles.output;
%*************************************************************************%
%                END Output Function                                      %
%*************************************************************************%


%=========================================================================%
%                BEGIN Callback Functions                                 %
%                ------------------------                                 %
%=========================================================================%
function Pus_CloseWin_Callback(hObject,eventdata,handles) %#ok<DEFNU>

hdl_Menus = wtbxappdata('get',hObject,'hdl_Menus');
m_save = hdl_Menus.m_save;
ena_Save = get(m_save,'Enable');
if isequal(lower(ena_Save),'on')
    hFig = get(hObject,'Parent');
    status = wwaitans({hFig,getWavMSG('Wavelet:mdw1dRF:Multivar_PCA')},...
        getWavMSG('Wavelet:mdw1dRF:Save_Simple_QUEST'),2,'Cancel');
    switch status
        case -1 , return;
        case  1
            wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute'));
            save_FUN(m_save,eventdata,handles)
            wwaiting('off',hFig);
        otherwise
    end
end
close(gcbf)
%--------------------------------------------------------------------------
function Load_Sig_Callback(~,~,handles,varargin)

% Get figure handle.
%-------------------
hFig = handles.output;

% Testing and loading file.
%--------------------------
if nargin<4     % DIRECT LOAD
   [filename,pathname] = uigetfile( ...
       {'*.mat',getWavMSG('Wavelet:moreMSGRF:LoadSave_MultiSig')'; ...
       '*.*', getWavMSG('Wavelet:moreMSGRF:Save_DLG_ALL')}, ...
       getWavMSG('Wavelet:mdw1dRF:LoadSigs'));
    if ~isequal(filename,0) && ~isequal(pathname,0)
        fullName = fullfile(pathname,filename);
    else
        return
    end
    okFile = true;
    
elseif isequal(varargin{1},'wrks') % LOAD from WORKSPACE
    [sig_ORI,sig_Name,ok] = wtbximport('wmul');
    if ~ok ,  return; end
    filename = sig_Name;
    fullName = '';
    varSize = size(sig_ORI);
    okFile = false;
    
else            % DEMO LOAD
    filename = [varargin{1},'.mat'];
    fullName = filename;
    okFile = true;
end

try
    err = 0;
    if okFile
        dataInfo = whos('-file',fullName);
        dataInfoCell = struct2cell(dataInfo);
        idx = find(strcmp(dataInfoCell(1,:),'x'));
        if isempty(idx)
            idx = find(strcmp(dataInfoCell(1,:),'X'));
            if isempty(idx) , idx = 1; end
        end
        varNam  = dataInfoCell{1,idx};
        varSize = dataInfoCell{2,idx};
        data    = load(fullName,'-mat');
        sig_ORI = data.(varNam);
    end
    [nbSIG,direct] = min(varSize);
    if direct==1 , sig_ORI = sig_ORI'; end
    lenSIG = size(sig_ORI,1);
catch %#ok<CTCH>
    err = 1;
end
if err, return; end

data_INFO = struct(...
    'sig_ORI',sig_ORI,'dec_ORI',[],     ...
    'sig_SIM',[],'dec_SIM',[]          ...
    );
wtbxappdata('set',hFig,'data_INFO',data_INFO);

% Cleaning.
%----------
wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitClean'));
clean_TOOL(handles,'load',nbSIG);

% Set Axes.
%----------
Initialize_Axes(handles,nbSIG);
set(handles.Pan_BASE_ORI,'Visible','On');
axe_SIG   = handles.Axe_SIG;
axe_CFS   = handles.Axe_CFS;
axe_SIM   = handles.Axe_SIM;
lin_SIG   = NaN(1,nbSIG);
lin_SIM   = NaN(1,nbSIG);

% Plots Signals.
%---------------
maxSIG = max(sig_ORI,[],1);
minSIG = min(sig_ORI,[],1);
maxSIG = maxSIG + 0.01*abs(maxSIG);
minSIG = minSIG - 0.01*abs(minSIG);
Ylim   = [minSIG;maxSIG]';
[sigColor,denColor] = wtbutils('colors','wmden');
for k = 1:nbSIG
    axeCur = axe_SIG(k);
    set(axeCur,'NextPlot','add');
    lin_SIG(k) = plot(sig_ORI(:,k),'Color',sigColor,'Parent',axeCur);
    txtinaxe('create',int2str(k),axeCur,'l','on','bold',12,30); 
    lin_SIM(k) = plot(sig_ORI(:,k),...
        'Color',denColor,'Visible','Off','LineWidth',2,'Parent',axeCur);
    set(axeCur,'YLim',Ylim(k,:));
end
set([axe_SIG,axe_CFS,axe_SIM],'XLim',[1,lenSIG]);
set(axe_SIG,'XtickMode','auto','YtickMode','auto');
title(getWavMSG('Wavelet:mdw1dRF:Str_Signals'),'Visible','On', ...
    'Parent',axe_SIG(1));
hdl_INFO = struct('lin_SIG',lin_SIG,'lin_SIM',lin_SIM);
wtbxappdata('set',hFig,'hdl_INFO',hdl_INFO);
axe_IND = [];
axe_CMD = [axe_SIG,axe_CFS,axe_SIM];
axe_ACT = [];
dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','','real');

% Setting GUI values and Analysis parameters.
%--------------------------------------------
max_lev_anal = 8;
levm   = wmaxlev(lenSIG,'haar');
levmax = min(levm,max_lev_anal);
[curlev,curlevMAX] = cbanapar('get',hFig,'lev','levmax');
if levmax<curlevMAX
    cbanapar('set',hFig, ...
        'lev',{'String',int2str((1:levmax)'),'Value',min(levmax,curlev)} ...
        );
end
n_s = [filename '  (' , int2str(lenSIG) 'x' int2str(nbSIG) ')'];
set(handles.Edi_Data_NS,'String',n_s);                
set(handles.Pus_Decompose,'Enable','On')

% End waiting.
%-------------
wwaiting('off',hFig);
%--------------------------------------------------------------------------
function Pus_Decompose_Callback(~,~,handles)

% Get figure handle.
%-------------------
hFig = handles.output;

% Wavelet decomposition Parameters.
%----------------------------------
[wname,level] = cbanapar('get',hFig,'wav','lev');
popMode  = handles.Pop_Ext_Mode;
lst = get(popMode,'String');
extMode = lst{get(popMode,'Value')};

% Cleaning.
%----------
wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitClean'));
UIC_Ena_ON = clean_TOOL(handles,'beg_dec',level);

% Wavelet decomposition of columns of sig_ORI.
%--------------------------------------------
data_INFO = wtbxappdata('get',hFig,'data_INFO');
sig_ORI   = data_INFO.sig_ORI;
[data_INFO.dec_ORI,npc,PCA_Params] = ...
    wmspca('estimate',sig_ORI,level,wname,'mode',extMode,'none');
for k=1:level
    pop = findobj(handles.Pop_DET_NPC,'UserData',k);
    set(pop,'Value',npc(k)+1);
end
set(handles.Pop_APP_NPC,'Value',npc(end-1)+1)
set(handles.Pop_FIN_NPC,'Value',npc(end)+1);
wtbxappdata('set',hFig,'data_INFO',data_INFO);
wtbxappdata('set',hFig,'PCA_Params',PCA_Params);

% Plots Signals in Adapted Basis.
%--------------------------------
plot_Decomposition(handles,'ORI','ORI');

% End waiting.
%-------------
set(UIC_Ena_ON,'Enable','On')

wwaiting('off',hFig);
%--------------------------------------------------------------------------
function Pop_DEF_NPC_Callback(hObject,~,handles)

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

hFig = handles.output;
PCA_Params = wtbxappdata('get',hFig,'PCA_Params');
nbVAL = length(PCA_Params);
npc = zeros(1,nbVAL);
level = nbVAL-2;
for k = 1:nbVAL
    variances = PCA_Params(k).variances;
    switch val
        case 1 , npc(k) = length(variances);                  % 'none'
        case 2 , npc(k) = sum(variances>mean(variances));     % 'kais' 
        case 3 , npc(k) = sum(variances>0.05*sum(variances)); % 'heur' 
        case 4 , % 'no DET'
          if k<=level , npc(k) = 0; else npc(k) = length(variances); end
    end
end
for k=1:level
    pop = findobj(handles.Pop_DET_NPC,'UserData',k);
    set(pop,'Value',npc(k)+1);
end
set(handles.Pop_APP_NPC,'Value',npc(end-1)+1)
set(handles.Pop_FIN_NPC,'Value',npc(end)+1);
%--------------------------------------------------------------------------
function Pus_Apply_Callback(hObject,eventdata,handles)

% Get figure handle.
%-------------------
hFig = handles.output;

% Cleaning.
%----------
wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitClean'));

% Get Wavelet Decomposition.
%---------------------------
data_INFO = wtbxappdata('get',hFig,'data_INFO');
dec = data_INFO.dec_ORI;
level = dec.level;

% Get Parameters.
%----------------
npc = zeros(1,level+2);
for k=1:level
    pop = findobj(handles.Pop_DET_NPC,'UserData',k);
    npc(k) = get(pop,'Value')-1;
end
npc(end-1) = get(handles.Pop_APP_NPC,'Value')-1;
npc(end)   = get(handles.Pop_FIN_NPC,'Value')-1;
[x_sim,~,~,dec_SIM,PCA_Params] = wmspca(dec,npc);
wtbxappdata('set',hFig,'PCA_Params',PCA_Params);
[lenSIG,nbSIG] = size(x_sim);
data_INFO.sig_SIM = x_sim;
data_INFO.dec_SIM = dec_SIM;
wtbxappdata('set',hFig,'data_INFO',data_INFO);

% Plot Simplified Signals.
%-------------------------
hdl_INFO = wtbxappdata('get',hFig,'hdl_INFO');
lin_SIM = hdl_INFO.lin_SIM;
[~,denColor] = wtbutils('colors','wmden');
dynvtool('get',hFig,0);
axe_SIG = handles.Axe_SIG;
axe_CFS = handles.Axe_CFS;
axe_SIM = handles.Axe_SIM;
for k = 1:nbSIG
    plot((1:lenSIG),x_sim(:,k),'Color',denColor,'Parent',axe_SIM(k));
    set(lin_SIM(k),'XData',(1:lenSIG),'YData',x_sim(:,k));
    set(axe_SIM(k),'XLim',[1,lenSIG],'XtickMode','auto','YtickMode','auto');
end
title(getWavMSG('Wavelet:mdw1dRF:Simp_Signals'), ...
    'Visible','On','Tag','Simp_Signals', ...
    'Parent',axe_SIM(1))
Rad_CFS_Callback(hFig,eventdata,handles,'apply')
axe_IND = [];
axe_CMD = [axe_SIG,axe_CFS,axe_SIM];
axe_ACT = [];
dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 0],'','','','real');
hdl_Menus = wtbxappdata('get',hObject,'hdl_Menus');
UIC_Ena_ON = [...
    hdl_Menus.m_save,hdl_Menus.m_exp_wrks, ...
    handles.Chk_Show_SIM,handles.Pus_Residuals, ...
    handles.Rad_CFS_ORI,handles.Rad_CFS_SIM ...
    ];
set(UIC_Ena_ON,'Enable','On');
Chk_Show_SIM_Callback(handles.Chk_Show_SIM,eventdata,handles)

% End waiting.
%-------------
wwaiting('off',hFig);
%--------------------------------------------------------------------------
function Pus_Residuals_Callback(~,eventdata,handles,state) %#ok<DEFNU>

% Get figure handle.
%-------------------
hFig = handles.output;

% Get UIC and MEN to Enable or to Deseable.
%------------------------------------------
utanaparHDL = findobj(handles.Pan_DAT_WAV,'Type','uicontrol');
utanaparHDL = setdiff(utanaparHDL,handles.Edi_Data_NS);
Pan_RES = handles.Pan_RESIDUALS;
hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus');
OBJ_Ena_CHANGE = [...    
    hdl_Menus.m_load,hdl_Menus.m_demo, ...
    handles.Pus_Decompose,handles.Pus_More_ADAP,handles.Pus_CloseWin ...
    ];

% Set Residuals on/off.
%----------------------
axe_SIG = handles.Axe_SIG;
axe_CFS = handles.Axe_CFS;
axe_SIM = handles.Axe_SIM;
switch state
    case 0
        obj_VIS = [handles.Pan_BASE_ORI,handles.Pan_SIM_PARAM,...
            handles.Pus_Residuals,...
            handles.Pus_Apply,handles.Chk_Show_SIM,...
            handles.Rad_CFS_ORI,handles.Rad_CFS_SIM, ...
            handles.Txt_CFS_LEV,handles.Pop_CFS_LEV, ...
            handles.Txt_APP_NPC,handles.Pop_APP_NPC, ...
            handles.Pop_FIN_NPC,  ...
            ];
        vis_IN_AXES = findobj([axe_SIG,axe_CFS,axe_SIM],'Visible','On');
        obj_VIS = [vis_IN_AXES;obj_VIS(:)];
        
    case 1
        RES_Params = wtbxappdata('get',hFig,'RES_Params');
end

switch state
    case 0
        OBJ_ena_VAL = 'Off';
        data_INFO = wtbxappdata('get',hFig,'data_INFO');
        sig_ORI = data_INFO.sig_ORI;
        sig_SIM = data_INFO.sig_SIM;
        sig_RES = sig_ORI-sig_SIM;
        [lenSIG,nbSIG] = size(sig_ORI);
        
        set(obj_VIS,'Visible','Off');
        dynvtool('get',hFig,0);
        set([Pan_RES,handles.Pan_RES_STATS],'Visible','On');
        set(handles.Pus_Close_RES,'Visible','On');
        set(handles.Pop_SIG_NUM,'String',int2str((1:nbSIG)'),'Value',1);
        Pop_SIG_NUM_Callback(handles.Pop_SIG_NUM,eventdata,handles,'init');

        % Displaying Residuals, Histograms & Cumulated Histograms.
        %---------------------------------------------------------
        nb_bins = 50;
        resColor = wtbutils('colors','res');
        [pos_axe_RES,pos_axe_HIS,pos_axe_CUM] = getPosAxes('res',hFig,nbSIG);
        axe_RES = zeros(1,nbSIG);
        axe_HIS = zeros(1,nbSIG);
        axe_CUM = zeros(1,nbSIG);
        txtAxeNum = zeros(1,nbSIG);
        for k = 1:nbSIG
            axe_RES(k) = axes('Parent',Pan_RES,'Position',pos_axe_RES(k,:)); %#ok<*LAXES>
            maxi = max(abs(sig_RES(:,k)));
            plot(sig_RES(:,k),'Color',resColor,'Parent',axe_RES(k))
            yLIM = 1.05*[-maxi,maxi];
            set(axe_RES(k),'YLim',yLIM,'YtickMode','auto');
            txtAxeNum(k) = txtinaxe('create',int2str(k),axe_RES(k), ...
                'l','on','bold',12,30);
            his       = wgethist(sig_RES(:,k),nb_bins);
            his(2,:)  = his(2,:)/lenSIG;
            axe_HIS(k) = axes('Parent',Pan_RES,'Position',pos_axe_HIS(k,:));
            wplothis(axe_HIS(k),his,resColor);
            for i=6:4:length(his(2,:));
                his(2,i)   = his(2,i)+his(2,i-4);
                his(2,i+1) = his(2,i);
            end
            axe_CUM(k) = axes('Parent',Pan_RES,'Position',pos_axe_CUM(k,:));
            wplothis(axe_CUM(k),[his(1,:);his(2,:)],resColor);
        end
        set(txtAxeNum(1),'Color','r')
        
        set(axe_RES,'XLim',[1,lenSIG],'XtickMode','auto','YtickMode','auto');
        title(getWavMSG('Wavelet:commongui:Str_Residuals'),...
            'Visible','on','Tag','Residuals','Parent',axe_RES(1));
        title(getWavMSG('Wavelet:commongui:Str_HIST'),...
            'Visible','on','Tag','Histograms','Parent',axe_HIS(1));
        title(getWavMSG('Wavelet:commongui:Str_CumHistS'),...
            'Visible','on','Tag','CumHistograms','Parent',axe_CUM(1));
        RES_Params = struct('obj_VIS',obj_VIS,'axe_RES',axe_RES,...
            'axe_HIS',axe_HIS,'axe_CUM',axe_CUM,'txtAxeNum',txtAxeNum);
        wtbxappdata('set',hFig,'RES_Params',RES_Params);
        dynvtool('init',hFig,[],axe_RES,[],[1 0],'','','','real');
        
    case 1
        OBJ_ena_VAL = 'On';
        set([handles.Pan_RES_STATS,handles.Pan_RESIDUALS],'Visible','Off');
        delete([RES_Params.axe_RES,RES_Params.axe_HIS,RES_Params.axe_CUM]);
        axe_CMD = [axe_SIG,axe_CFS,axe_SIM];
        dynvtool('init',hFig,[],axe_CMD,[],[1 0],'','','','real');
        set(RES_Params.obj_VIS,'Visible','On');
end
set(OBJ_Ena_CHANGE,'Enable',OBJ_ena_VAL)
set(utanaparHDL,'Enable',OBJ_ena_VAL)
%--------------------------------------------------------------------------
function Chk_Show_SIM_Callback(hObject,~,~,val)

if nargin<4
    val = get(hObject,'Value');
else
    set(hObject,'Value',val);
end
hdl_INFO = wtbxappdata('get',hObject,'hdl_INFO');
lin_SIM = hdl_INFO.lin_SIM;
lin_SIM = lin_SIM(ishandle(lin_SIM));
if val==1 , vis_VAL = 'On'; else vis_VAL = 'Off'; end
set(lin_SIM,'Visible',vis_VAL)
%--------------------------------------------------------------------------
function Pop_SIG_NUM_Callback(hObject,~,handles,flag) %#ok<INUSD>

errtol    = 1.0E-10;
nb_bins   = 75;
numSIG    = get(hObject,'Value');
data_INFO = wtbxappdata('get',hObject,'data_INFO');
sig_ORI   = data_INFO.sig_ORI;
sig_SIM   = data_INFO.sig_SIM;
sig_RES   = sig_ORI-sig_SIM;
resVal    = sig_RES(:,numSIG);
mean_val  = mean(resVal);
max_val   = max(resVal);
min_val   = min(resVal);
range_val = max_val-min_val;
std_val   = std(resVal);
med_val   = median(resVal);
medDev_val = median(abs(resVal(:)-med_val));
if abs(medDev_val)<errtol , medDev_val = 0; end
meanDev_val = mean(abs(resVal(:)-mean_val));
if abs(meanDev_val)<errtol , meanDev_val = 0; end
his       = wgethist(resVal,nb_bins);
[~,imod] = max(his(2,:));
mode_val  = (his(1,imod)+his(1,imod+1))/2;

formNUM = '%7.4f';
set(handles.Edi_MEAN_DEV,'String',num2str(meanDev_val,formNUM));
set(handles.Edi_MAX,'String',num2str(max_val,formNUM));
set(handles.Edi_MIN,'String',num2str(min_val,formNUM));
set(handles.Edi_MODE,'String',num2str(mode_val,formNUM));
set(handles.Edi_MED,'String',num2str(med_val,formNUM));
set(handles.Edi_RANGE,'String',num2str(range_val,formNUM));
set(handles.Edi_STD,'String',num2str(std_val,formNUM));
set(handles.Edi_MED_DEV,'String',num2str(medDev_val,formNUM));
set(handles.Edi_MEAN,'String',num2str(mean_val,formNUM))
if nargin<4
    RES_Params = wtbxappdata('get',hObject,'RES_Params');
    txtAxeNum = RES_Params.txtAxeNum;
    set(txtAxeNum,'Color','k');
    set(txtAxeNum(numSIG),'Color','r');
end
%--------------------------------------------------------------------------
function Rad_CFS_Callback(~,~,handles,typeCALL)

rad = [handles.Rad_CFS_ORI , handles.Rad_CFS_SIM];
old_VAL = get(rad(1),'UserData');
if isequal(typeCALL,'apply')
    if isequal([1 0],old_VAL)
        return;  
    else
        old_VAL = []; typeCALL = 'den'; 
    end
end
switch lower(typeCALL)
    case {'ori','ini'} , val = [1 0];
    case 'den' ,         val = [0 1];
end
for k = 1:2 , set(rad(k),'Value',val(k)); end
set(rad,'UserData',val);
if isequal(old_VAL,val) || isequal(typeCALL,'ini'),   return; end

plot_Decomposition(handles,typeCALL)
%--------------------------------------------------------------------------
function Pus_More_PCA_Callback(hObject,~,handles) %#ok<DEFNU>

typeCALL = get(hObject,'Type');
switch typeCALL
    case 'figure'
        fig     = hObject;
        hObject = get(fig,'UserData');
    otherwise
        fig = get(hObject,'UserData');
end
closeWIN = ~isempty(fig);
if closeWIN
    if ishandle(fig) , delete(fig); end
    strPUS = getWavMSG('Wavelet:mdw1dRF:Pus_More_PCA');
    fig = [];
else
    strPUS = getWavMSG('Wavelet:mdw1dRF:Pus_More_PCA_Close');
    PCA_Params = wtbxappdata('get',hObject,'PCA_Params');
    fig = wmspcatoolmopc(hObject,PCA_Params);
end
if ishandle(hObject)
    set(hObject,'String',strPUS,'UserData',fig);
else
    WfigPROP = handles.WfigPROP;
    try delete(WfigPROP.FigChild); end %#ok<TRYNC>
end
%--------------------------------------------------------------------------
function Pus_More_ADAP_Callback(hObject,~,handles) %#ok<DEFNU>

typeCALL = get(hObject,'Type');
switch typeCALL
    case 'figure'
        fig     = hObject;
        hObject = get(fig,'UserData');
    otherwise
        fig = get(hObject,'UserData');
end
closeWIN = ~isempty(fig);
if closeWIN
    if ishandle(fig) , delete(fig); end
    strPUS = getWavMSG('Wavelet:mdw1dRF:Pus_More_ADAP');
    fig = [];
else
    strPUS = getWavMSG('Wavelet:mdw1dRF:Pus_More_ADAP_Close');
    PCA_Params = wtbxappdata('get',hObject,'PCA_Params');
    fig = wmspcatoolmoab(hObject,PCA_Params);
end
if ishandle(hObject)
    set(hObject,'String',strPUS,'UserData',fig);
else
    WfigPROP = handles.WfigPROP;
    try delete(WfigPROP.FigChild); end %#ok<TRYNC>
end
%=========================================================================%
%                END Callback Functions                                   %
%=========================================================================%


%=========================================================================%
%                BEGIN Callback Menus                                     %
%=========================================================================%
function demo_FUN(hObject,eventdata,handles,numDEM)

DEF_NPC = 'manual';
wname   = 'sym4';
switch numDEM        
    case {1,2,3,4,5,6}
        fname = 'ex3mwden'; 
        if numDEM<4 ,level = 3; else level = 5; end
        ZDET    = zeros(1,level);
        switch numDEM
            case 1 , DEF_NPC = 'nodet';
            case 2 , npc = [ZDET,2,4];
            case 3 , npc = [ZDET,2,2];
            case 4 , npc = [ZDET,2,2];
            case 5 , DEF_NPC = 'kais';
            case 6 , DEF_NPC = 'heur';
        end
        
    case {7,8,9,10,11}
        fname = 'ex4mwden'; 
        if numDEM<10 ,level = 3; else level = 5; end
        ZDET    = zeros(1,level);
        switch numDEM
            case 7  , npc = [ZDET,4,4];
            case 8  , npc = [ZDET,2,4];
            case 9  , npc = [ZDET,2,2];
            case 10 , DEF_NPC = 'kais';
            case 11 , DEF_NPC = 'heur';                
        end

    case {12,13,14,15}
        level = 5; 
        ZDET  = zeros(1,level);
        npc   = [ZDET,1,1];
        switch numDEM
            case 12 , fname = 'ex1mdr'; 
            case 13 , fname = 'ex2mdr'; 
            case 14 , fname = 'ex3mdr'; 
            case 15 , fname = 'ex4mdr'; 
        end

    case {16,17,18,19}
        fname = 'ex5mwden';         
        wname = 'sym4'; level = 5;
        DEF_NPC = 'Manual';
        ZDET    = zeros(1,level);
        switch numDEM
            case 16 , npc = [ZDET,4,8];
            case 17 , npc = [ZDET,4,4];
            case 18 , DEF_NPC = 'kais';
            case 19 , DEF_NPC = 'heur';
        end

    case {20,21,22,23}
        fname = 'ex1mwden'; 
        if numDEM==21 ,level = 3; else level = 5; end
        switch numDEM
            case 20 , DEF_NPC = 'nodet';
            case 21 , DEF_NPC = 'nodet';
            case 22 , DEF_NPC = 'kais';
            case 23 , DEF_NPC = 'heur';
        end        
end

% Get figure handle.
%-------------------
hFig = handles.output;

% Cleaning.
%----------
wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitClean'));

% Loading Signals and Setting GUI.
%--------------------------------
Load_Sig_Callback(hObject,eventdata,handles,fname);

% Setting parameters - Decomposition and Simplifying.
%----------------------------------------------------
cbanapar('set',hFig,'wav',wname,'lev',level);
Pus_Decompose_Callback(handles.Pus_Decompose,eventdata,handles);
switch lower(DEF_NPC)
    case 'manual', val_DEF = 0;
    case 'none'  , val_DEF = 1;
    case 'kais'  , val_DEF = 2;
    case 'heur'  , val_DEF = 3;
    case 'nodet' , val_DEF = 4;  
end
if val_DEF>0
    Pop_DEF = handles.Pop_DEF_NPC;
    set(Pop_DEF,'Value',val_DEF);
    Pop_DEF_NPC_Callback(Pop_DEF,eventdata,handles)
else
    for k=1:level
        pop = findobj(handles.Pop_DET_NPC,'UserData',k);
        set(pop,'Value',npc(k)+1);
    end
    set(handles.Pop_APP_NPC,'Value',npc(end-1)+1)
    set(handles.Pop_FIN_NPC,'Value',npc(end)+1);
end

set(handles.Chk_Show_SIM,'Value',1)
Pus_Apply_Callback(handles.Pus_Apply,eventdata,handles);
%-------------------------------------------------------------------------%
function save_FUN(hObject,~,handles,typeSAV)

% Get figure handle.
%-------------------
hFig = handles.output;

% Testing file.
%--------------
if nargin<4
    Str_Yes = getWavMSG('Wavelet:commongui:Str_Yes');
    Str_No  = getWavMSG('Wavelet:commongui:Str_No');
    ButtonName = ...
        questdlg(getWavMSG('Wavelet:mdw1dRF:Save_Param_Sigs_QUEST'), ...
        getWavMSG('Wavelet:mdw1dRF:Save_Signals'), ...
        Str_Yes,Str_No,Str_No);
     if isequal(ButtonName,Str_Yes) , typeSAV = 1; else typeSAV = 0; end
end
switch typeSAV
    case 0 , figNAME = getWavMSG('Wavelet:mdw1dRF:Save_Simp_Sigs');
    case 1 , figNAME = getWavMSG('Wavelet:mdw1dRF:Save_Simp_SigsPar');
end
[filename,pathname,ok] = utguidiv('test_save',hFig,'*.mat',figNAME);
if ~ok, return; end

% Begin waiting.
%--------------
wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitSave'));

% Getting Synthesized Signal.
%---------------------------
data_INFO = wtbxappdata('get',hObject,'data_INFO');
x = data_INFO.sig_SIM; %#ok<NASGU>

% Saving file.
%--------------
[name,ext] = strtok(filename,'.');
if isempty(ext) || isequal(ext,'.')
    ext = '.mat'; filename = [name ext];
end
wwaiting('off',hFig);
try
    switch typeSAV
        case 0
            save([pathname filename],'x');
        case 1
            PCA_Params = wtbxappdata('get',hFig,'PCA_Params'); %#ok<NASGU>
            save([pathname filename],'x','PCA_Params');
    end
catch %#ok<CTCH>
    errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg');
end
%-------------------------------------------------------------------------%
function Export_Callback(hObject,eventdata,handles) %#ok<INUSD,DEFNU>

data_INFO = wtbxappdata('get',hObject,'data_INFO');
x = data_INFO.sig_SIM;
wtbxexport(x,'name','msig_1D','title', ...
    getWavMSG('Wavelet:mdw1dRF:Synt_Signals'));
%-------------------------------------------------------------------------%
function Pop_CFS_LEV_Callback(~,~,handles) %#ok<DEFNU>

plot_Decomposition(handles,'Pop')
%--------------------------------------------------------------------------
%=========================================================================%
%                END Callback Menus                                       %
%=========================================================================%


%=========================================================================%
%                BEGIN Tool Initialization                                %
%=========================================================================%
function Init_Tool(hObject,~,handles)

% Begin initialization.
%----------------------
set(hObject,'Visible','off');

% WTBX -- Install DynVTool
%-------------------------
dynvtool('Install_V3',hObject,handles);

% WTBX -- Initialize GUIDE Figure.
%---------------------------------
wfigmngr('beg_GUIDE_FIG',hObject);

% WTBX -- Install ANAPAR FRAME
%-----------------------------
wnameDEF  = 'sym4';
maxlevDEF = 10;
levDEF    = 5;
utanapar('Install_V3_CB',hObject,'maxlev',maxlevDEF,'deflev',levDEF);
cbanapar('set',hObject,'wav',wnameDEF,'lev',levDEF);

% UIMENU INSTALLATION
%--------------------
hdl_Menus = Install_MENUS(hObject);
wtbxappdata('set',hObject,'hdl_Menus',hdl_Menus);

% Help and ContextMenus INSTALLATION
%------------------------------------
Install_HELP_and_CtxtMenu(hObject,handles);

% Axes Installation
%------------------
axe_SIG = handles.Axe_SIG;
axe_CFS = handles.Axe_CFS;
axe_SIM = handles.Axe_SIM;
axe_INI = [axe_SIG,axe_CFS,axe_SIM];
pos_axe_INI = get(axe_INI,'Position');
tool_hdl_AXES.axe_INI = axe_INI;
tool_hdl_AXES.pos_axe_INI = pos_axe_INI;
wtbxappdata('set',hObject,'tool_hdl_AXES',tool_hdl_AXES);

% WTBX -- Terminate GUIDE Figure.
%--------------------------------
wfigmngr('end_GUIDE_FIG',hObject,mfilename);
set([handles.Txt_DET_NPC,handles.Txt_APP_NPC],'FontWeight','bold');
%=========================================================================%
%                END Tool Initialization                                  %
%=========================================================================%


%=========================================================================%
%                BEGIN Internal Functions                                 %
%=========================================================================%
function hdl_Menus = Install_MENUS(hFig)

m_files = wfigmngr('getmenus',hFig,'file');
m_close = wfigmngr('getmenus',hFig,'close');
cb_close = [mfilename '(''Pus_CloseWin_Callback'',gcbo,[],guidata(gcbo));'];
set(m_close,'Callback',cb_close);

m_load = uimenu(m_files, ...
    'Label',getWavMSG('Wavelet:mdw1dRF:LoadSigs'),   ...
    'Position',1,              ...
    'Enable','On',             ...
    'Callback',                ...
    [mfilename '(''Load_Sig_Callback'',gcbo,[],guidata(gcbo));']  ...
    );
m_save = uimenu(m_files,...
    'Label',getWavMSG('Wavelet:mdw1dRF:Save_Simple_Sigs'), ...
    'Position',2,'Enable','Off' ...
    );
m_demo = uimenu(m_files,'Label',getWavMSG('Wavelet:commongui:Str_Example'), ...
    'Tag','Examples','Position',3,'Separator','Off');
uimenu(m_files, ...
    'Label',getWavMSG('Wavelet:mdw1dRF:Import_Sigs'),'Position',4, ...
    'Enable','On','Separator','On','Tag','Import', ...
    'Callback',  ...    
    [mfilename '(''Load_Sig_Callback'',gcbo,[],guidata(gcbo),''wrks'');'] ...
    );
m_exp_wrks = uimenu(m_files, ...
    'Label',getWavMSG('Wavelet:mdw1dRF:Export_Sigs'),'Position',5, ...
    'Enable','Off','Separator','Off','Tag','Export',...
    'Callback',[mfilename '(''Export_Callback'',gcbo,[],guidata(gcbo));'] ...
    );

uimenu(m_save,...
    'Label',getWavMSG('Wavelet:mdw1dRF:Save_Simple_SigsOnly'), ...
    'Position',1,'Enable','On',       ...
    'Callback',[mfilename '(''save_FUN'',gcbo,[],guidata(gcbo),0);'] ...
    );
uimenu(m_save,...
    'Label',getWavMSG('Wavelet:mdw1dRF:Save_Simple_SigsParam'), ...
    'Position',2,'Enable','On',       ...
    'Callback',[mfilename '(''save_FUN'',gcbo,[],guidata(gcbo),1);'] ...
    );

demoSET = {...
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',1,3,'''nodet'''); ... 
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',2,3,'[0,...,0,2,4]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',3,3,'[0,...,0,2,2]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',4,3,'[0,...,0,2,2]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',5,3,'''kais'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',6,3,'''heur'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',7,4,'[0,...,0,2,4]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',8,4,'[0,...,0,2,2]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',9,4,'[0,...,0,2,2]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',10,4,'''kais'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',11,4,'''heur'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',12,'R1','[0,...,0,1,1]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',13,'R2','[0,...,0,1,1]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',14,'R3','[0,...,0,1,1]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',15,'R4','[0,...,0,1,1]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',16,5,'[0,...,0,4,8]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',17,5,'[0,...,0,4,4]'); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',18,5,'''kais'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',19,5,'''heur'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',20,1,'''nodet'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',21,1,'''nodet'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L5',22,1,'''kais'''); ...          
        getWavMSG('Wavelet:mdw1dRF:WMSPCA_Demo_L3',23,1,'''heur'''); ...          
    };
nbDEM = size(demoSET,1);
sepSET = [7,12,16,20];
for k = 1:nbDEM
    strNUM = int2str(k);
    action = [mfilename '(''demo_FUN'',gcbo,[],guidata(gcbo),' strNUM ');'];
    if find(k==sepSET) , Sep = 'On'; else Sep = 'Off'; end
    uimenu(m_demo,'Label',[demoSET{k,1}],'Separator',Sep,'Callback',action);
end
hdl_Menus = struct('m_files',m_files,'m_close',m_close,...
    'm_load',m_load,'m_save',m_save,'m_demo',m_demo,'m_exp_wrks',m_exp_wrks);
%--------------------------------------------------------------------------
function Install_HELP_and_CtxtMenu(hFig,handles)

% Add Help for Tool.
%------------------
wfighelp('addHelpTool',hFig,getWavMSG('Wavelet:mdw1dRF:HLP_MSPCA'),'MULT_VAR_PCA');

% Add Help Item.
%----------------
wfighelp('addHelpItem',hFig,getWavMSG('Wavelet:mdw1dRF:HLP_PCA_PROC'),'PCA_PROC');

% Add ContextMenus
%-----------------
hdl_WAV = [handles.Txt_Wav,handles.Pop_Wav_Fam,handles.Pop_Wav_Num];
wfighelp('add_ContextMenu',hFig,hdl_WAV,'UT_WAVELET');
hdl_EXT = [handles.Txt_Ext_Mode,handles.Pop_Ext_Mode];
wfighelp('add_ContextMenu',hFig,hdl_EXT,'EXT_MODE');
hdl_DEN = [handles.Pus_Decompose,handles.Pus_More_ADAP];
wfighelp('add_ContextMenu',hFig,hdl_DEN,'DENO_BASIS');
hdl_PCA = [...
    handles.Pan_SIM_PARAM, ...
    handles.Txt_DEF_NPC,handles.Pop_DEF_NPC, ...
    handles.Txt_Nb_DEC_PC, ...
    handles.Txt_DET_NPC,handles.Pop_DET_NPC,   ...
    handles.Txt_APP_NPC,handles.Pop_APP_NPC,   ...
    handles.Txt_Nb_FIN_PC,handles.Pop_FIN_NPC, ...
    handles.Pus_More_PCA  ...
    ];
wfighelp('add_ContextMenu',hFig,hdl_PCA,'PCA_PCA');
%--------------------------------------------------------------------------
function Initialize_Axes(handles,nbAxes)

fig = handles.output;
[pos_axe_SIG,pos_axe_CFS,pos_axe_SIM] = getPosAxes('ini',fig,nbAxes);
tool_hdl_AXES = wtbxappdata('get',fig,'tool_hdl_AXES');

% For initial basis
axe_INI = tool_hdl_AXES.axe_INI;
set(axe_INI,'Visible','Off');
child = allchild(axe_INI);
child = cat(1,child{:});
delete(child)
axe_SIG = handles.Axe_SIG;
axe_CFS = handles.Axe_CFS;
axe_SIM = handles.Axe_SIM;
for k=1:nbAxes
    set(axe_SIG(k),'Position',pos_axe_SIG(k,:));
    set(axe_CFS(k),'Position',pos_axe_CFS(k,:));
    set(axe_SIM(k),'Position',pos_axe_SIM(k,:));
end
set([axe_SIG(1:nbAxes),axe_CFS(1:nbAxes),axe_SIM(1:nbAxes)],'Visible','On');
%--------------------------------------------------------------------------
function [p_axe_1,p_axe_2,p_axe_3] = getPosAxes(option,fig,nbAxes)

tool_hdl_AXES = wtbxappdata('get',fig,'tool_hdl_AXES');
axe_INI = tool_hdl_AXES.axe_INI;
pos_axe_INI = tool_hdl_AXES.pos_axe_INI;
pos_axes = cat(1,pos_axe_INI{:});
nbMAX = length(axe_INI)/3;
H = pos_axes(1,4);
yMIN  = min(pos_axes(1:nbMAX,2));
yMAX  = max(pos_axes(1:nbMAX,2)) + H;
dY = (yMAX-yMIN);
Ratio = (nbMAX/(nbMAX-1))*(dY/(nbMAX*H)-1);
hAXE = dY/(nbAxes+(nbAxes-1)*Ratio);
dAXE = hAXE*Ratio;
xSIG = pos_axes(1,1);
xCFS = pos_axes(1+nbMAX,1);
xDEN = pos_axes(1+2*nbMAX,1);
wAXE = pos_axes(1,3);
yAXE = yMAX;
p_axe_1 = zeros(nbAxes,4);
p_axe_2 = zeros(nbAxes,4);
p_axe_3 = zeros(nbAxes,4);
switch option  
    case 'ini'
        wA = wAXE*ones(1,3);

    case 'res'
        new_DX  = (xCFS -(xSIG+wAXE))/1.5;
        wA = [wAXE/0.65 , 0.55*wAXE/0.65 , 0.55*wAXE/0.65];
        xCFS = xSIG + wA(1) + new_DX;
        xDEN = xCFS + wA(2) + new_DX;         
end
for k=1:nbAxes
    yAXE = yAXE-hAXE;
    p_axe_1(k,:) = [xSIG,yAXE,wA(1),hAXE];
    p_axe_2(k,:) = [xCFS,yAXE,wA(2),hAXE];
    p_axe_3(k,:) = [xDEN,yAXE,wA(3),hAXE];
    yAXE = yAXE-dAXE;
end
%--------------------------------------------------------------------------
function plot_Decomposition(handles,typeCALL,varargin)

hFig = handles.output;
if nargin<3
    vis = lower(get(handles.Pan_BASE_ORI,'Visible'));
    if isequal(vis,'on')
        ori_OR_adap = 'ori';
    else
        ori_OR_adap = 'adap';
    end
else
    ori_OR_adap = lower(varargin{1});
end
typeCALL = lower(typeCALL);
if isequal(typeCALL,'pop') , 
    typeCALL = get(handles.Rad_CFS_SIM,'Value');
end
data_INFO = wtbxappdata('get',hFig,'data_INFO');
[lenSIG,nbSIG] = size(data_INFO.sig_ORI);

switch typeCALL
    case {'ori',0} , dec = data_INFO.dec_ORI;
    case {'den',1} , dec = data_INFO.dec_SIM;
end

% Plot decomposition.
%--------------------
level_DEC = dec.level;
level = get(handles.Pop_CFS_LEV,'Value');
usr   = get(handles.Pop_CFS_LEV,'UserData');
switch ori_OR_adap
    case 'ori' 
        axe_CFS = handles.Axe_CFS;
        axe_CMD = [handles.Axe_SIG , axe_CFS , handles.Axe_SIM];
        idx = 1;
end
usr(idx) = level;
set(handles.Pop_CFS_LEV,'UserData',usr);
if level==level_DEC
    [coefs,longs] = wdec2cl(dec);    
else
    coefs = mdwtrec(dec,'ca',level);
    longs = size(coefs,1);
    for k = level:-1:1
        cfs_det = mdwtrec(dec,'cd',k);
        coefs = [coefs ; cfs_det];         %#ok<AGROW>
        longs = [longs ; size(cfs_det,1)]; %#ok<AGROW>
    end
    longs = [longs ; lenSIG];    
end
dynvtool('get',hFig,0);
mdw1dstem(axe_CFS(1:nbSIG),coefs,longs);
set(axe_CFS,'XLim',[1,lenSIG],'XtickMode','auto');
title(getWavMSG('Wavelet:commongui:Str_Coefficients'), ...
    'Visible','On','Parent',axe_CFS(1));
dynvtool('init',hFig,[],axe_CMD,[],[1 0],'','','','real');
%--------------------------------------------------------------------------
function varargout = clean_TOOL(handles,typeCALL,varargin)

hFig = handles.output;
pop_NPC = [handles.Pop_DET_NPC,handles.Pop_APP_NPC,handles.Pop_FIN_NPC];
txt_NPC = [handles.Txt_DET_NPC,handles.Txt_APP_NPC];
hdl_NPC = [txt_NPC,pop_NPC];
switch typeCALL
    case 'load'
        nbSIG = varargin{1};
        hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus');
        m_save = hdl_Menus.m_save;
        m_exp_wrks = hdl_Menus.m_exp_wrks;
        UIC_Ena_OFF = [...
            m_save, m_exp_wrks, handles.Pus_Decompose,...
            handles.Txt_Nb_DEC_PC,handles.Txt_Nb_FIN_PC,hdl_NPC, ...
            handles.Txt_DEF_NPC,handles.Pop_DEF_NPC, ...
            handles.Pus_Apply,handles.Pus_Residuals,...
            handles.Pus_More_ADAP,handles.Pus_More_PCA,  ...
            handles.Chk_Show_SIM, ...           
            handles.Txt_CFS_LEV,handles.Pop_CFS_LEV,  ...
            handles.Rad_CFS_ORI,handles.Rad_CFS_SIM  ...
            ];
        title('','Parent',handles.Axe_SIG(1));
        title('','Parent',handles.Axe_CFS(1));
        title('','Parent',handles.Axe_SIM(1));
        Rad_CFS_Callback(hFig,[],handles,'ini')
        set(UIC_Ena_OFF,'Enable','Off')
        set(handles.Chk_Show_SIM,'Value',0);
        prop_POP = {'String',int2str((0:nbSIG)'),'Value',nbSIG+1};
        set(pop_NPC,prop_POP{:});
        t = get(handles.Axe_SIM,'title');
        delete(cat(1,t{:}));
        
    case 'beg_dec'
        level = varargin{1};
        axe_SIM = handles.Axe_SIM;
        child = allchild(axe_SIM);
        child = cat(1,child{:});
        delete(child)
        title('','Parent',handles.Axe_SIM(1));
        hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus');
        UIC_Ena_OF = [...
            hdl_Menus.m_save,hdl_Menus.m_exp_wrks ,...
            handles.Pus_Residuals, ...
            handles.Chk_Show_SIM,handles.Rad_CFS_ORI,handles.Rad_CFS_SIM];
        set(UIC_Ena_OF,'Enable','Off')
        usr = get(hdl_NPC,'UserData');
        usr = cat(1,usr{:});
        hdl_OF = hdl_NPC(usr>level);
        hdl_ON = hdl_NPC(usr<=level);
        set(hdl_OF,'Visible','Off');
        pop_LAST = findobj(hdl_NPC(usr==level),'Style','PopupMenu');
        pos_DET = get(pop_LAST,'Position');
        pos_APP_POP = get(handles.Pop_APP_NPC,'Position');
        pos_APP_TXT = get(handles.Txt_APP_NPC,'Position');
        pos_APP_POP(2) = pos_DET(2)-1.5*pos_APP_POP(4);
        pos_APP_TXT(2) = pos_APP_POP(2)-pos_APP_TXT(4)/12;
        set(handles.Pop_APP_NPC,'Position',pos_APP_POP);
        set(handles.Txt_APP_NPC,'Position',pos_APP_TXT,...
            'String',getWavMSG('Wavelet:mdw1dRF:Approximation',level));
        set(handles.Pop_DEF_NPC,'Value',1,'UserData',1);
        set(handles.Pop_CFS_LEV,'String',int2str((1:level)'), ...
            'Value',level,'UserData',[level level]);
        Chk_Show_SIM_Callback(handles.Chk_Show_SIM,[],handles,0)
        UIC_Ena_ON = [...
            handles.Pus_Decompose,hdl_ON, ...
            handles.Txt_Nb_DEC_PC,handles.Txt_Nb_FIN_PC,  ...
            handles.Txt_DEF_NPC,handles.Pop_DEF_NPC, ...
            handles.Pus_More_ADAP,handles.Pus_More_PCA, ...
            handles.Pus_Apply,  ...
            handles.Txt_CFS_LEV,handles.Pop_CFS_LEV  ...
            ];
        set(hdl_ON,'Visible','On');
        varargout{1} = UIC_Ena_ON;
end

%--------------------------------------------------------------------------
%=========================================================================%
%                END Internal Functions                                   %
%=========================================================================%


%=========================================================================%
%                      BEGIN Demo Utilities                               %
%                      ---------------------                              %
%=========================================================================%
function closeDEMO(hFig,eventdata,handles,varargin) %#ok<INUSD,DEFNU>

close(hFig);
%----------------------------------------------------------
function demoPROC(hFig,eventdata,~,varargin) %#ok<DEFNU>

handles = guidata(hFig);
numDEM  = varargin{1};
demo_FUN(hFig,eventdata,handles,numDEM);
%=========================================================================%
%                   END Tool Demo Utilities                               %
%=========================================================================%