Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_train.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_train.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,243 @@ +function sMap=sompak_train(sMap,ft,cout,ct,din,dt,rlen,alpha,radius) + +%SOMPAK_TRAIN Call SOM_PAK training program from Matlab. +% +% sMap=sompak_train(sMap,ft,cout,ct,din,dt,rlen,alpha,radius) +% +% ARGUMENTS ([]'s are optional and can be given as empty: [] or '') +% sMap (struct) map struct +% (string) filename +% [ft] (string) 'pak' or 'box'. Argument must be defined, if input file +% is used. +% [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. +% din (struct) data struct to be used in teaching +% (matrix) data matrix +% (string) filename +% If argument is not a filename or file is .mat -file, +% temporary file '__din' is used in operations +% and *it_is_removed* after operations!!! +% [dt] (string) 'pak' or 'box'. Argument must be defined, if input file +% is used. +% rlen (scalar) running length of teaching +% alpha (float) initial alpha value +% radius (float) initial radius of neighborhood +% +% RETURNS +% sMap (struct) map struct +% +% Calls SOM_PAK training program (vsom) 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_TRAIN_GUI, +% SOMPAK_GUI, SOM_SEQTRAIN. + +% 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; +DIN_FILE = 0; + +if ~isstruct(sMap) & ~isstr(sMap) + error('Argument ''sMap'' must be a struct or string.'); +end + +if isstr(sMap) + if isempty(ft) + error('Argument ''ft'' must be defined.'); + end + if strcmp(ft,'pak') + sMap=som_read_cod(sMap); + elseif strcmp(ft,'box') + new_var=diff_varname; + varnames=evalin('base','who'); + loadname=eval(cat(2,'who(''-file'',''',sMap,''')')); + if any(strcmp(loadname{1},evalin('base','who'))) + assignin('base',new_var,evalin('base',loadname{1})); + evalin('base',cat(2,'load(''',sMap,''');')); + 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)); + sMap=evalin('base',new_var2); + evalin('base',cat(2,'clear ',new_var2)); + else + evalin('base',cat(2,'load(''',sMap,''');')); + sMap=evalin('base',loadname{1}); + evalin('base',cat(2,'clear ',loadname{1})); + end + + end +end +if ~isstr(cout) & isempty(cout) + cout = '__abcdef'; + NO_FILE = 1; +elseif ~isstr(cout) | (isstr(cout) & isempty(cout)) + error('Argument ''cout'' must be a string or ''[]''.'); +end + +if ~NO_FILE & (isempty(ct) | ~(~isempty(ct) & ... + (strcmp(ct,'pak') | strcmp(ct,'box')))) + error('Argument ''ct'' must be string ''pak'' or ''box''.'); +end + +map_name=sMap.name; +som_write_cod(sMap,cout); + +if ~isempty(din) + som_write_data(din, '__din'); + DIN_FILE = 1; + din = '__din'; +else + DIN_FILE=0; +end + +if ~DIN_FILE + if isempty(dt) | ~isstr(dt) | ~(strcmp(dt,'box') | strcmp(dt,'pak')) + error('Argument ''dt'' must be string ''pak'' or ''box''.'); + end + if strcmp(dt,'box'); + DIN_FILE = 1; + din_var=diff_varname; + varnames=evalin('base','who'); + loadname=eval(cat(2,'who(''-file'',''',din,''')')); + if any(strcmp(loadname{1},evalin('base','who'))) + assignin('base',din_var,evalin('base',loadname{1})); + evalin('base',cat(2,'load(''',din,''');')); + din_var2=diff_varname; + + assignin('base',new_var2,evalin('base',loadname{1})); + assignin('base',loadname{1},evalin('base',din_var)); + evalin('base',cat(2,'clear ',din_var)); + din=evalin('base',din_var2); + else + evalin('base',cat(2,'load(''',din,''')')); + din=evalin('base',loadname{1}); + evalin('base',cat(2,'clear ',loadname{1})); + end + som_write_data(din,'__din'); + din = '__din'; + end +end +if ~is_positive_integer(rlen) + error('Argument ''rlen'' must be positive integer.'); +end + +if ~(isreal(alpha) & all(size(alpha)==1)) + error('Argument ''alpha'' must be a floating point number.'); +end + +if ~(isreal(radius) & all(size(radius)==1) & radius > 0) + error('Argument ''radius'' must be a positive floating point number.'); +end + +if any(strcmp('SOM_PAKDIR',evalin('base','who'))) + traincommand=cat(2,evalin('base','SOM_PAKDIR'),'vsom '); +else + traincommand='vsom '; +end + +str=cat(2,traincommand,sprintf('-cin %s -din %s -cout %s ',cout,din,cout),... + sprintf(' -rlen %d -alpha %f -radius %f',rlen,alpha,radius)); +if isunix + unix(str); +else + dos(str); +end + +sMap=som_read_cod(cout); +sMap.name=map_name; + +if ~NO_FILE + if isunix + unix(cat(2,'/bin/rm ',cout)); + else + dos(cat(2,'del ',cout)); + end + if isempty(ct) | ~isstr(ct) | ~(strcmp(ct,'pak') | strcmp(ct,'box')) + error('Argument ''ct'' must be string ''pak'' or ''box''.'); + elseif strcmp(ct,'box'); + eval(cat(2,'save ',cout,' sMap')); + disp(cat(2,'Output written to the file ',sprintf('''%s.mat''.',cout))); + else + som_write_cod(sMap,cout); + end +else + if isunix + unix('/bin/rm __abcdef'); + else + dos('del __abcdef'); + end +end + +if DIN_FILE + if isunix + unix('/bin/rm __din'); + 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'; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + + + + + + + + +