diff toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_rb_control.m @ 0:e9a9cd732c1e tip

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