Daniel@0: function varargout=sompak_rb_control(str) Daniel@0: Daniel@0: %SOMPAK_RB_CONTROL An auxiliary function for SOMPAK_*_GUI functions. Daniel@0: % Daniel@0: % This is an auxiliary function for SOMPAK_GUI, SOMPAK_INIT_GUI, Daniel@0: % SOMPAK_SAMMON_GUI and SOMPAK_TRAIN_GUI functions. It controls the Daniel@0: % radio buttons in the GUIs. Daniel@0: % Daniel@0: % See also SOMPAK_GUI, SOMPAK_INIT_GUI, SOMPAK_SAMMON_GUI, SOMPAK_TRAIN_GUI. Daniel@0: Daniel@0: % Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas Daniel@0: % Copyright (c) by Juha Parhankangas Daniel@0: % http://www.cis.hut.fi/projects/somtoolbox/ Daniel@0: Daniel@0: % Juha Parhankangas 050100 Daniel@0: Daniel@0: data=get(gcf,'UserData'); Daniel@0: switch str Daniel@0: case {'rand','linear'} Daniel@0: h=cat(2,findobj(get(gcf,'Children'),'Tag','RANDOM'),... Daniel@0: findobj(get(gcf,'Children'),'Tag','LINEAR')); Daniel@0: set(h,'Value',0); Daniel@0: set(gcbo,'Value',1); Daniel@0: data.inittype=str; Daniel@0: case {'bubble','gaussian'} Daniel@0: h=cat(2,findobj(get(gcf,'Children'),'Tag','BUBBLE'),... Daniel@0: findobj(get(gcf,'Children'),'Tag','GAUSSIAN')); Daniel@0: set(h,'Value',0); Daniel@0: set(gcbo,'Value',1); Daniel@0: data.neigh=str; Daniel@0: case {'hexa','rect'} Daniel@0: h=cat(2,findobj(get(gcf,'Children'),'Tag','HEXA'),... Daniel@0: findobj(get(gcf,'Children'),'Tag','RECT')); Daniel@0: set(h,'Value',0); Daniel@0: set(gcbo,'Value',1); Daniel@0: data.topol=str; Daniel@0: case {'out_ft'} Daniel@0: value=get(gcbo,'Value'); Daniel@0: switch value Daniel@0: case 1 Daniel@0: h=findobj(get(gcf,'Children'),'Tag','OUT_FILE'); Daniel@0: data.out_file_type=''; Daniel@0: set(h,'String',''); Daniel@0: case 2 Daniel@0: data.out_file_type='box'; Daniel@0: case 3 Daniel@0: data.out_file_type='pak'; Daniel@0: end Daniel@0: case {'input_ft'} Daniel@0: value=get(gcbo,'Value'); Daniel@0: switch value Daniel@0: case 1 Daniel@0: data.input_file_type=''; Daniel@0: case 2 Daniel@0: data.input_file_type='box'; Daniel@0: case 3 Daniel@0: data.input_file_type='pak'; Daniel@0: end Daniel@0: case {'map_ft'} Daniel@0: value=get(gcbo,'Value'); Daniel@0: switch value Daniel@0: case 1 Daniel@0: data.map_type=''; Daniel@0: case 2 Daniel@0: data.map_type='box'; Daniel@0: case 3 Daniel@0: data.map_type='pak'; Daniel@0: end Daniel@0: case {'out_file'} Daniel@0: if isempty(data.out_file_type) Daniel@0: data.out_file=''; Daniel@0: h=findobj(get(gcf,'Children'),'Tag','OUT_FILE'); Daniel@0: set(h,'String',''); Daniel@0: else Daniel@0: data.out_file=get(findobj(get(gcf,'Children'),'Tag','OUT_FILE'),'String'); Daniel@0: if isempty(data.out_file) Daniel@0: h=findobj(get(gcf,'Children'),'Tag','OUT_FILE_TYPE'); Daniel@0: set(h,'Value',1); Daniel@0: end Daniel@0: end Daniel@0: Daniel@0: case {'out_var'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','OUT_VAR'); Daniel@0: if ~isempty(get(h,'String')) Daniel@0: data.out_var=get(h,'String'); Daniel@0: else Daniel@0: data.out_var=[]; Daniel@0: set(h,'String','''ans'''); Daniel@0: end Daniel@0: case {'xdim'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','XDIM'); Daniel@0: data.xdim=str2num(get(h,'String')); Daniel@0: case {'ydim'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','YDIM'); Daniel@0: data.ydim=str2num(get(h,'String')); Daniel@0: case {'radius'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','RADIUS'); Daniel@0: data.radius=str2num(get(h,'String')); Daniel@0: case {'data'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','DATA'); Daniel@0: data.data=get(h,'String'); Daniel@0: case {'rlen'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','RLEN'); Daniel@0: data.rlen=str2num(get(h,'String')); Daniel@0: case {'alpha'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','ALPHA'); Daniel@0: data.alpha=str2num(get(h,'String')); Daniel@0: case {'map'} Daniel@0: h=findobj(get(gcf,'Children'),'Tag','MAP'); Daniel@0: data.map=get(h,'String'); Daniel@0: case 'init_ok' Daniel@0: if isempty(data.xdim) | ~is_positive_integer(data.xdim) Daniel@0: errordlg('Argument ''xdim'' must be positive integer.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.ydim) | ~is_positive_integer(data.ydim) Daniel@0: errordlg('Argument ''ydim'' must be positive integer.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.data) Daniel@0: errordlg('Argument ''Workspace data'' must be a string.'); Daniel@0: return; Daniel@0: end Daniel@0: Daniel@0: if isempty(data.input_file_type) Daniel@0: sData=evalin('base',data.data); Daniel@0: else Daniel@0: sData=data.data; Daniel@0: end Daniel@0: if isempty(data.out_file) Daniel@0: if ~isempty(data.out_file_type) Daniel@0: errordlg('Argument ''Output file'' is not defined.'); Daniel@0: return; Daniel@0: end Daniel@0: data.out_file=[]; Daniel@0: end Daniel@0: answer=sompak_init(sData,... Daniel@0: data.input_file_type,... Daniel@0: data.inittype,... Daniel@0: data.out_file,... Daniel@0: data.out_file_type,... Daniel@0: data.xdim,... Daniel@0: data.ydim,... Daniel@0: data.topol,... Daniel@0: data.neigh); Daniel@0: if any(strcmp(data.out_var,{'ans','''ans'''})) | isstr(answer) Daniel@0: varargout{1}=answer; Daniel@0: else Daniel@0: assignin('base',data.out_var,answer); Daniel@0: disp(sprintf('Map is set to workspace as ''%s''.',data.out_var)); Daniel@0: end Daniel@0: close(findobj(get(0,'Children'),'Tag','InitGUI')); Daniel@0: return; Daniel@0: case 'train_ok' Daniel@0: if isempty(data.rlen) | ~is_positive_integer(data.rlen) Daniel@0: errordlg('Argument ''Running Length'' must be positive integer.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.alpha) | data.alpha <= 0 Daniel@0: errordlg('Argument ''Initial Alpha Value'' must be a positive float.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.radius) | data.radius <= 0 Daniel@0: errordlg('Argument ''Neighborhood Radius'' must be a positive float.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.data) Daniel@0: errordlg('Argument ''Teaching Data'' must be a string.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.input_file_type) Daniel@0: sData=evalin('base',data.data); Daniel@0: else Daniel@0: sData=data.data; Daniel@0: end Daniel@0: if isempty(data.out_file); Daniel@0: data.outfile = []; Daniel@0: end Daniel@0: if isempty(data.map) Daniel@0: errordlg('Argument ''Workspace Map'' must be a string.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.map_type) Daniel@0: sMap=evalin('base',data.map); Daniel@0: else Daniel@0: sMap=data.map; Daniel@0: end Daniel@0: Daniel@0: answer=sompak_train(sMap,... Daniel@0: data.map_type,... Daniel@0: data.out_file,... Daniel@0: data.out_file_type,... Daniel@0: data.data,... Daniel@0: data.input_file_type,... Daniel@0: data.rlen,... Daniel@0: data.alpha,... Daniel@0: data.radius); Daniel@0: if any(strcmp(data.out_var,{'''ans''','ans'})) | isstr(answer) Daniel@0: varargout{1}=answer; Daniel@0: else Daniel@0: assignin('base',data.out_var,answer); Daniel@0: disp(sprintf('Map is set to workspace as ''%s''.',data.out_var)); Daniel@0: end Daniel@0: close(findobj(get(0,'Children'),'Tag','TrainGUI')); Daniel@0: return; Daniel@0: case 'sammon_ok' Daniel@0: if isempty(data.map) Daniel@0: errordlg('Argument ''Workspace Map'' must be a string.'); Daniel@0: return; Daniel@0: end Daniel@0: if isempty(data.map_type) Daniel@0: sMap=evalin('base',data.map); Daniel@0: else Daniel@0: sMap=data.map; Daniel@0: end Daniel@0: if isempty(data.out_file); Daniel@0: data.outfile = []; Daniel@0: end Daniel@0: answer=sompak_sammon(sMap,... Daniel@0: data.map_type,... Daniel@0: data.out_file,... Daniel@0: data.out_file_type,... Daniel@0: data.rlen); Daniel@0: if strcmp(data.out_var,'''ans''')|strcmp(data.out_var,'ans')|isstr(answer) Daniel@0: varargout{1}=answer; Daniel@0: else Daniel@0: assignin('base',data.out_var,answer); Daniel@0: disp(sprintf('Codebook is set to workspace as ''%s''.',data.out_var)); Daniel@0: end Daniel@0: close(findobj(get(0,'Children'),'Tag','SammonGUI')); Daniel@0: return; Daniel@0: end Daniel@0: Daniel@0: set(gcf,'UserData',data); Daniel@0: Daniel@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Daniel@0: Daniel@0: function bool = is_positive_integer(x) Daniel@0: Daniel@0: bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0; Daniel@0: if ~isempty(bool) Daniel@0: if bool & x~=round(x) Daniel@0: bool = 0; Daniel@0: end Daniel@0: else Daniel@0: bool = 0; Daniel@0: end Daniel@0: Daniel@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Daniel@0: Daniel@0: Daniel@0: