diff toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_init.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_init.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,211 @@
+function sMap=sompak_init(sData,ft,init_type,cout,ct,xdim,ydim,topol,neigh)
+
+%SOMPAK_INIT Call SOM_PAK initialization programs from Matlab.
+%
+% sMap=sompak_init(sData,ft,init_type,cout,ct,xdim,ydim,topol,neigh)
+%
+% ARGUMENTS  ([]'s are optional and can be given as empty: [] or '')
+%  sData      (struct) data struct
+%             (matrix) data matrix
+%             (string) filename
+%  [ft]       (string) 'pak' or 'box'. Argument must be defined, if input
+%                      file is used.
+%  init_type  (string) string 'rand' or 'linear'
+%  [cout]     (string) filename for output SOM, if argument is not defined
+%                      (i.e. argument is '[]') temporary file '__abcdef' is
+%                      used in operations and *it_is_removed* after 
+%                      operations!!!
+%  [ct]       (string) 'pak' or 'box'. Argument must be defined, if output
+%                      file is used.
+%  xdim       (scalar) Number of units of the map in x-direction.
+%  ydim       (scalar) Number of units of the map in y-direction.
+%  topol      (string) string 'hexa' or 'rect'
+%  neigh      (string) string 'bubble' or 'gaussian'.
+%
+% RETURNS
+%  sMap       (struct) map struct
+%
+% Calls SOM_PAK initialization programs (randinit and lininit) from
+% Matlab. Notice that to use this function, the SOM_PAK programs must
+% be in your search path, or the variable 'SOM_PAKDIR' which is a
+% string containing the program path, must be defined in the
+% workspace. SOM_PAK programs can be found from:
+% http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%  
+% See also SOMPAK_TRAIN, SOMPAK_SAMMON, SOMPAK_INIT_GUI,
+%          SOMPAK_GUI, SOM_LININIT, SOM_RANDINIT.
+
+% 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
+
+nargchk(9,9,nargin);
+
+NO_FILE = 0;
+if isstruct(sData);
+  sData=sData.data;
+elseif ~(isreal(sData) | isstr(sData))
+  error('Argument ''sData'' must be a struct or a real matrix.');
+else
+  if isempty(ft)
+    if isstr(sData)
+      error('Argument ''file_type'' must be defined when input file is used.');
+    end
+  elseif strcmp(ft,'pak');
+    sData=som_read_data(sData);
+  elseif strcmp(ft,'box')
+    new_var=diff_varname;
+    varnames=evalin('base','who');
+    loadname=eval(cat(2,'who(''-file'',''',sData,''')'));
+    if any(strcmp(loadname{1},evalin('base','who')))
+      assignin('base',new_var,evalin('base',loadname{1}));
+      evalin('base',cat(2,'load(''',sData,''');'));
+      new_var2=diff_varname;
+
+      assignin('base',new_var2,evalin('base',loadname{1}));
+      assignin('base',loadname{1},evalin('base',new_var));
+      evalin('base',cat(2,'clear ',new_var));
+      sData=evalin('base',new_var2);
+      evalin('base',cat(2,'clear ',new_var2));
+    else
+      evalin('base',cat(2,'load(''',sData,''');'));
+      sData=evalin('base',loadname{1});
+      evalin('base',cat(2,'clear ',loadname{1}));
+    end              
+  else
+    error('Argument ''ft'' must be a string ''pak'' or ''box''.');
+  end
+end
+if isstr(init_type)
+  if strcmp(init_type,'rand')
+    if any(strcmp('SOM_PAKDIR',evalin('base','who')))
+      init_command=cat(2,evalin('base','SOM_PAKDIR'),'randinit');
+    else
+      init_command='randinit';
+    end
+  elseif strcmp(init_type,'linear')
+    if any(strcmp('SOM_PAKDIR',evalin('base','who')))
+      init_command=cat(2,evalin('base','SOM_PAKDIR'),'lininit');
+    else
+      init_command='lininit';
+    end
+  else
+    error('Argument ''init_type'' must be string ''rand'' or ''linear''.');
+  end
+else
+  error('Argument ''init_type'' must be string ''rand'' or ''linear''.');
+end
+
+if (isstr(cout) & isempty(cout)) | (~isstr(cout) & isempty(cout))
+  NO_FILE = 1;
+  cout = '__abcdef';
+elseif  ~isstr(cout) & ~isempty(cout)
+  error('Argument ''cout'' must be a string or ''[]''.');
+end
+  
+if ~is_positive_integer(xdim)
+  error('Argument ''xdim'' must be a positive integer.');
+end
+
+if ~is_positive_integer(ydim)
+  error('Argument ''ydim'' must be a positive integer.');
+end
+
+if isstr(topol)
+  if isempty(topol) | (~strcmp(topol,'hexa') & ~strcmp(topol,'rect'))
+    error ('Argument ''topol'' must be either a string ''hexa'' or ''rect''.');
+  end
+else
+  error ('Argument ''topol'' must be either a string ''hexa'' or ''rect''.');  
+end
+
+if isstr(neigh)
+  if isempty(neigh) | (~strcmp(neigh,'bubble') & ~strcmp(neigh,'gaussian'))
+    error(sprintf(cat(2,'Argument ''neigh'' must be either a string ',...
+                        '''bubble'' or ''gaussian''.')));
+  end
+else
+  error(sprintf(cat(2,'Argument ''neigh'' must be either a string ',...
+                       '''bubble'' or ''gaussian''.')));
+end
+
+som_write_data(sData, cout); 
+str=cat(2,init_command,sprintf(' -din %s -cout %s ', cout ,cout),...
+           sprintf('-topol %s ',topol),...
+           sprintf('-neigh %s ',neigh),...
+           sprintf('-xdim %d -ydim %d',xdim,ydim));
+
+if isunix
+  unix(str);
+else
+  dos(str);
+end
+
+sMap=som_read_cod(cout);
+
+if ~NO_FILE
+    if isunix
+      unix(cat(2,'/bin/rm ',cout));
+    else
+      dos(cat(2,'del ',cout));
+    end
+    if strcmp(ct,'pak')
+      som_write_cod(sMap,cout);
+      disp(cat(2,'Output written to the file ',cout,'.'));
+    elseif strcmp(ct,'box')
+      eval(cat(2,'save ',cout,' sMap'));	
+      disp(cat(2,'Output written to the file ',sprintf('''%s.mat''.',cout)));
+    end
+else
+  sMap.name=cat(2,'SOM ',date);
+  if isunix	
+    unix('/bin/rm __abcdef');
+  else
+    dos('del __abcdef');
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+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
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function str = diff_varname();
+
+array=evalin('base','who');
+
+if isempty(array)
+  str='a';
+  return;
+end
+
+for i=1:length(array)
+  lens(i)=length(array{i});
+end
+
+
+ind=max(lens);
+
+str(1:ind+1)='a';
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+