somtoolbox2/vis_planeGetArgs.m
4dbef185
 function [nargin_,varargout]=vis_planeGetArgs(varargin)
 
 % VIS_PLANEGETARGS Subfunction for som_*plane: extracts topolopy 
 %                  information from the first arguments.
 %
 % [nargin,varargout]=vis_planeGetArgs(varargin)
 %
 %  Input and output arguments: 
 %   varargin   (varies) arguments given to som_*plane function
 %   nargin_    (scalar) number of arguments that nargchk of som_*plane "should see"
 %                       +number_of_varargins if varargin{1} is not map/topol struct
 %                       +number_of_varargins+1 if varargin{2} is a map/topol struct
 %   varargout  (varies) the arguments that som_*plane "should see"
 %
 % Basically, this function allows topology information to be given 
 % in various ways: either as a map/topology struct, or as a argument pair:
 % lattice, msize. The topology is always converted into the (lattice, msize)
 % argument pair.
 %  - if first input argument (varargin{1}) is a map or topol struct 
 %    the function extracts lattice and msize fields to two first 
 %    output variables after 'nargin_'. 
 %  - otherwise it copies the input arguments to the output arguments 
 %    after 'nargin_'. 
 % If there are too many inputs (as compared to number of outputs), the 
 % last ones are ignored. If too few, they are replaced by empty values 
 % in outputs.
 %
 % Example of usage: 
 %   function definition: h = som_cplane(varargin)
 %   first code line:     [nargin,lattice,msize,color,size,pos]=vis_planeGetArgs(varargin);
 %
 % See also SOM_CPLANE, SOM_BARPLANE, SOM_PLOTPLANE, SOM_PIEPLANE.
 
 % Copyright (c) 2000 by the SOM toolbox programming team.
 % http://www.cis.hut.fi/projects/somtoolbox/             
 
 % Version 2.0beta Johan 240300
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 nout=nargout-1;
 
 % Set first all varargins to contain empty (==default values in som_*plane)
 
 for i=1:nout, varargout{i}=[]; end
 
 nargin_ = nargin;
 % Struct: might be map or topol
 
 if isstruct(varargin{1}),
 
   % Get topol from topol field
   if isfield(varargin{1},'topol'), topol=varargin{1}.topol;
   else topol=varargin{1}; % assume that this is topol struct 
   end
 
   if ~isstruct(topol),
     % topol not a struct !?
     warning('Field ''topol'' is not a struct.');
     varargout{1}=varargin{1};
     varargoutC=2;
     nargin_ = nargin;
   elseif ~isfield(topol,'msize') | ~isfield(topol,'lattice'),
     % Field missing?!
     warning('Invalid topology struct.');
     varargout{1}=topol;
     varargoutC=2;
     nargin_ = nargin;
   else
     varargout{1}=topol.lattice;
     varargout{2}=topol.msize;
     % increment input arg. counter
     varargoutC=3;
     nargin_ = nargin+1;    
   end
 
 elseif iscell(varargin{1}), 
 
   c = varargin{1}; 
   lattice = 'hexa'; shape = 'sheet'; msize = [1 1]; 
   for i=1:length(c), 
     if ischar(c{i}), 
       switch c{i}, 
       case {'hexa','hexaU','rect','rectU'}, lattice = c{i}; 
       case {'sheet','cyl','toroid'}, shape = c{i}; 
       end
     else
       msize = c{i}; 
     end 
   end
   varargout{1} = lattice;
   varargout{2} = msize;
   varargoutC=3;
   nargin_ = nargin+1;    
 
 else
 
   % should be a lattice (string) 
   varargout{1}=varargin{1};
   varargoutC=2;
   nargin_=nargin;
 
 end
 
 for i=2:nargin, varargout{varargoutC+i-2}=varargin{i}; end
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%