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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|