wolffd@0: function sMap=sompak_train(sMap,ft,cout,ct,din,dt,rlen,alpha,radius) wolffd@0: wolffd@0: %SOMPAK_TRAIN Call SOM_PAK training program from Matlab. wolffd@0: % wolffd@0: % sMap=sompak_train(sMap,ft,cout,ct,din,dt,rlen,alpha,radius) wolffd@0: % wolffd@0: % ARGUMENTS ([]'s are optional and can be given as empty: [] or '') wolffd@0: % sMap (struct) map struct wolffd@0: % (string) filename wolffd@0: % [ft] (string) 'pak' or 'box'. Argument must be defined, if input file wolffd@0: % is used. wolffd@0: % [cout] (string) filename for output SOM, if argument is not defined wolffd@0: % (i.e. argument is '[]') temporary file '__abcdef' is wolffd@0: % used in operations and *it_is_removed* after wolffd@0: % operations!!! wolffd@0: % [ct] (string) 'pak' or 'box'. Argument must be defined, if output wolffd@0: % file is used. wolffd@0: % din (struct) data struct to be used in teaching wolffd@0: % (matrix) data matrix wolffd@0: % (string) filename wolffd@0: % If argument is not a filename or file is .mat -file, wolffd@0: % temporary file '__din' is used in operations wolffd@0: % and *it_is_removed* after operations!!! wolffd@0: % [dt] (string) 'pak' or 'box'. Argument must be defined, if input file wolffd@0: % is used. wolffd@0: % rlen (scalar) running length of teaching wolffd@0: % alpha (float) initial alpha value wolffd@0: % radius (float) initial radius of neighborhood wolffd@0: % wolffd@0: % RETURNS wolffd@0: % sMap (struct) map struct wolffd@0: % wolffd@0: % Calls SOM_PAK training program (vsom) from Matlab. Notice that to wolffd@0: % use this function, the SOM_PAK programs must be in your search path, wolffd@0: % or the variable 'SOM_PAKDIR' which is a string containing the wolffd@0: % program path, must be defined in the workspace. SOM_PAK programs can wolffd@0: % be found from: http://www.cis.hut.fi/research/som_lvq_pak.shtml wolffd@0: % wolffd@0: % See also SOMPAK_TRAIN, SOMPAK_SAMMON, SOMPAK_TRAIN_GUI, wolffd@0: % SOMPAK_GUI, SOM_SEQTRAIN. wolffd@0: wolffd@0: % Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas wolffd@0: % Copyright (c) by Juha Parhankangas wolffd@0: % http://www.cis.hut.fi/projects/somtoolbox/ wolffd@0: wolffd@0: % Juha Parhankangas 050100 wolffd@0: wolffd@0: wolffd@0: nargchk(9,9,nargin); wolffd@0: wolffd@0: NO_FILE=0; wolffd@0: DIN_FILE = 0; wolffd@0: wolffd@0: if ~isstruct(sMap) & ~isstr(sMap) wolffd@0: error('Argument ''sMap'' must be a struct or string.'); wolffd@0: end wolffd@0: wolffd@0: if isstr(sMap) wolffd@0: if isempty(ft) wolffd@0: error('Argument ''ft'' must be defined.'); wolffd@0: end wolffd@0: if strcmp(ft,'pak') wolffd@0: sMap=som_read_cod(sMap); wolffd@0: elseif strcmp(ft,'box') wolffd@0: new_var=diff_varname; wolffd@0: varnames=evalin('base','who'); wolffd@0: loadname=eval(cat(2,'who(''-file'',''',sMap,''')')); wolffd@0: if any(strcmp(loadname{1},evalin('base','who'))) wolffd@0: assignin('base',new_var,evalin('base',loadname{1})); wolffd@0: evalin('base',cat(2,'load(''',sMap,''');')); wolffd@0: new_var2=diff_varname; wolffd@0: wolffd@0: assignin('base',new_var2,evalin('base',loadname{1})); wolffd@0: assignin('base',loadname{1},evalin('base',new_var)); wolffd@0: evalin('base',cat(2,'clear ',new_var)); wolffd@0: sMap=evalin('base',new_var2); wolffd@0: evalin('base',cat(2,'clear ',new_var2)); wolffd@0: else wolffd@0: evalin('base',cat(2,'load(''',sMap,''');')); wolffd@0: sMap=evalin('base',loadname{1}); wolffd@0: evalin('base',cat(2,'clear ',loadname{1})); wolffd@0: end wolffd@0: wolffd@0: end wolffd@0: end wolffd@0: if ~isstr(cout) & isempty(cout) wolffd@0: cout = '__abcdef'; wolffd@0: NO_FILE = 1; wolffd@0: elseif ~isstr(cout) | (isstr(cout) & isempty(cout)) wolffd@0: error('Argument ''cout'' must be a string or ''[]''.'); wolffd@0: end wolffd@0: wolffd@0: if ~NO_FILE & (isempty(ct) | ~(~isempty(ct) & ... wolffd@0: (strcmp(ct,'pak') | strcmp(ct,'box')))) wolffd@0: error('Argument ''ct'' must be string ''pak'' or ''box''.'); wolffd@0: end wolffd@0: wolffd@0: map_name=sMap.name; wolffd@0: som_write_cod(sMap,cout); wolffd@0: wolffd@0: if ~isempty(din) wolffd@0: som_write_data(din, '__din'); wolffd@0: DIN_FILE = 1; wolffd@0: din = '__din'; wolffd@0: else wolffd@0: DIN_FILE=0; wolffd@0: end wolffd@0: wolffd@0: if ~DIN_FILE wolffd@0: if isempty(dt) | ~isstr(dt) | ~(strcmp(dt,'box') | strcmp(dt,'pak')) wolffd@0: error('Argument ''dt'' must be string ''pak'' or ''box''.'); wolffd@0: end wolffd@0: if strcmp(dt,'box'); wolffd@0: DIN_FILE = 1; wolffd@0: din_var=diff_varname; wolffd@0: varnames=evalin('base','who'); wolffd@0: loadname=eval(cat(2,'who(''-file'',''',din,''')')); wolffd@0: if any(strcmp(loadname{1},evalin('base','who'))) wolffd@0: assignin('base',din_var,evalin('base',loadname{1})); wolffd@0: evalin('base',cat(2,'load(''',din,''');')); wolffd@0: din_var2=diff_varname; wolffd@0: wolffd@0: assignin('base',new_var2,evalin('base',loadname{1})); wolffd@0: assignin('base',loadname{1},evalin('base',din_var)); wolffd@0: evalin('base',cat(2,'clear ',din_var)); wolffd@0: din=evalin('base',din_var2); wolffd@0: else wolffd@0: evalin('base',cat(2,'load(''',din,''')')); wolffd@0: din=evalin('base',loadname{1}); wolffd@0: evalin('base',cat(2,'clear ',loadname{1})); wolffd@0: end wolffd@0: som_write_data(din,'__din'); wolffd@0: din = '__din'; wolffd@0: end wolffd@0: end wolffd@0: if ~is_positive_integer(rlen) wolffd@0: error('Argument ''rlen'' must be positive integer.'); wolffd@0: end wolffd@0: wolffd@0: if ~(isreal(alpha) & all(size(alpha)==1)) wolffd@0: error('Argument ''alpha'' must be a floating point number.'); wolffd@0: end wolffd@0: wolffd@0: if ~(isreal(radius) & all(size(radius)==1) & radius > 0) wolffd@0: error('Argument ''radius'' must be a positive floating point number.'); wolffd@0: end wolffd@0: wolffd@0: if any(strcmp('SOM_PAKDIR',evalin('base','who'))) wolffd@0: traincommand=cat(2,evalin('base','SOM_PAKDIR'),'vsom '); wolffd@0: else wolffd@0: traincommand='vsom '; wolffd@0: end wolffd@0: wolffd@0: str=cat(2,traincommand,sprintf('-cin %s -din %s -cout %s ',cout,din,cout),... wolffd@0: sprintf(' -rlen %d -alpha %f -radius %f',rlen,alpha,radius)); wolffd@0: if isunix wolffd@0: unix(str); wolffd@0: else wolffd@0: dos(str); wolffd@0: end wolffd@0: wolffd@0: sMap=som_read_cod(cout); wolffd@0: sMap.name=map_name; wolffd@0: wolffd@0: if ~NO_FILE wolffd@0: if isunix wolffd@0: unix(cat(2,'/bin/rm ',cout)); wolffd@0: else wolffd@0: dos(cat(2,'del ',cout)); wolffd@0: end wolffd@0: if isempty(ct) | ~isstr(ct) | ~(strcmp(ct,'pak') | strcmp(ct,'box')) wolffd@0: error('Argument ''ct'' must be string ''pak'' or ''box''.'); wolffd@0: elseif strcmp(ct,'box'); wolffd@0: eval(cat(2,'save ',cout,' sMap')); wolffd@0: disp(cat(2,'Output written to the file ',sprintf('''%s.mat''.',cout))); wolffd@0: else wolffd@0: som_write_cod(sMap,cout); wolffd@0: end wolffd@0: else wolffd@0: if isunix wolffd@0: unix('/bin/rm __abcdef'); wolffd@0: else wolffd@0: dos('del __abcdef'); wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: if DIN_FILE wolffd@0: if isunix wolffd@0: unix('/bin/rm __din'); wolffd@0: else wolffd@0: dos('del __abcdef'); wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wolffd@0: wolffd@0: function bool = is_positive_integer(x) wolffd@0: wolffd@0: bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0; wolffd@0: if ~isempty(bool) wolffd@0: if bool & x~=round(x) wolffd@0: bool = 0; wolffd@0: end wolffd@0: else wolffd@0: bool = 0; wolffd@0: end wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wolffd@0: wolffd@0: function str = diff_varname(); wolffd@0: wolffd@0: array=evalin('base','who'); wolffd@0: wolffd@0: if isempty(array) wolffd@0: str='a'; wolffd@0: return; wolffd@0: end wolffd@0: wolffd@0: for i=1:length(array) wolffd@0: lens(i)=length(array{i}); wolffd@0: end wolffd@0: wolffd@0: wolffd@0: ind=max(lens); wolffd@0: wolffd@0: str(1:ind+1)='a'; wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: wolffd@0: