function flag=vis_valuetype(value, valid, str); % VIS_VALUETYPE Used for type checks in SOM Toolbox visualization routines % % flag = vis_valuetype(value, valid, str) % % Input and output arguments: % value (varies) variable to be checked % valid (cell array) size 1xN, cells are strings or vectors (see below) % str (string) 'all' or 'any' (default), determines whether % all or just any of the types listed in argument 'valid' % should be true for 'value' % % flag (scalar) 1 or 0 (true or false) % % This is an internal function of SOM Toolbox visualization. It makes % various type checks. For example: % % % Return 1 if X is a numeric scalar otherwise 0: % f=vis_valuetype(X,{'1x1'}); % % % Return 1 if X is a ColorSpec, that is, a 1x3 vector presenting an RGB % % value or any of strings 'red','blue','green','yellow','magenta','cyan', % % 'white' or 'black' or their shortenings 'r','g','b','y','m','c','w','k': % f=vis_valueype(X,{'1x3rgb','colorstyle'}) % % % Return 1 if X is _both_ 10x3 size numeric matrix and has RGB values as rows % f=vis_valuetype(X,{'nx3rgb',[10 3]},'all') % % Strings that may be used in argument valid: % id is true if value is % % [n1 n2 ... nn] any n1 x n2 x ... x nn sized numeric matrix % '1x1' scalar (numeric) % '1x2' 1x2 vector (numeric) % 'nx1' any nx1 numeric vector % 'nx2' nx2 % 'nx3' nx3 % 'nxn' any numeric square matrix % 'nxn[0,1]' numeric square matrix with values in interval [0,1] % 'nxm' any numeric matrix % '1xn' any 1xn numeric vector % '1x3rgb' 1x3 vector v for which all(v>=0 & v<=1), e.g., a RGB code % 'nx3rgb' nx3 numeric matrix that contains n RGB values as rows % 'nx3dimrgb' nx3xdim numeric matrix that contains RGB values % 'nxnx3rgb' nxnx3 numeric matrix of nxn RGB triples % 'none' string 'none' % 'xor' string 'xor' % 'indexed' string 'indexed' % 'colorstyle' strings 'red','blue','green','yellow','magenta','cyan','white' % or 'black', or 'r','g','b','y','m','c','w','k' % 'markerstyle' any of Matlab's marker chars '.','o','x','+','*','s','d','v', % '^','<','>','p'or 'h' % 'linestyle' any or Matlab's line style strings '-',':','--', or '-.' % 'cellcolumn' a nx1 cell array % 'topol_cell' {lattice, msize, shape} % 'topol_cell_no_shape' {lattice, msize} % 'string' any string (1xn array of char) % 'chararray' any MxN char array % Copyright (c) 1999-2000 by the SOM toolbox programming team. % http://www.cis.hut.fi/projects/somtoolbox/ % Version 2.0beta Johan 201099 juuso 280800 if nargin == 2 str='any'; end flag=0; sz=size(value); dims=ndims(value); % isnumeric numeric=isnumeric(value); character=ischar(value); % main loop: go through all types in arg. 'valid' for i=1:length(valid), if isnumeric(valid{i}), % numeric size for double matrix if numeric & length(valid{i}) == dims, flag(i)=all(sz == valid{i}); else flag(i)=0; % not numeric or wrong dimension end else msg=''; % for a error message inside try try switch valid{i} % scalar case '1x1' flag(i)=numeric & dims == 2 & sz(1)==1 & sz(2) ==1; % 1x2 numeric vector case '1x2' flag(i)=numeric & dims == 2 & sz(1)==1 & sz(2) == 2; % 1xn numeric vector case '1xn' flag(i)=numeric & dims == 2 & sz(1) == 1; % any numeric matrix case 'nxm' flag(i)=numeric & dims == 2; % nx3 numeric matrix case 'nx3' flag(i)=numeric & dims == 2 & sz(2) == 3; % nx2 numeric matrix case 'nx2' flag(i)=numeric & dims == 2 & sz(2) == 2; % nx1 numeric vector case 'nx1' flag(i)=numeric & dims == 2 & sz(2) == 1; % nx1xm numric matrix case 'nx1xm' flag(i)=numeric & dims == 3 & sz(2) == 1; % nx3 matrix of RGB triples case 'nx3rgb' flag(i)=numeric & dims == 2 & sz(2) == 3 & in0_1(value); % RGB triple (ColorSpec vector) case '1x3rgb' flag(i) = numeric & dims == 2 & sz(1)==1 & sz(2) == 3 & in0_1(value); % any square matrix case 'nxn' flag(i)=numeric & dims == 2 & sz(1) == sz(2); % nx3xdim array of nxdim RGB triples case 'nx3xdimrgb' flag(i)=numeric & dims == 3 & sz(2) == 3 & in0_1(value); % nxnx3 array of nxn RGB triples case 'nxnx3rgb' flag(i)= numeric & dims == 3 & sz(1) == sz(2) & sz(3) == 3 ... & in0_1(value); % nxn matrix of values between [0,1] case 'nxn[0,1]' flag(i)=numeric & dims == 2 & sz(1) == sz(2) & in0_1(value); % string 'indexed' case 'indexed' flag(i) = ischar(value) & strcmp(value,'indexed'); % string 'none' case 'none' flag(i) = character & strcmp(value,'none'); % string 'xor' case 'xor' flag(i) = character & strcmp(value,'xor'); % any string (1xn char array) case 'string' flag(i) = character & dims == 2 & sz(1)<=1; % any char array case 'chararray' flag(i) = character & dims == 2 & sz(1)>0; % ColorSpec string case 'colorstyle' flag(i)=(character & sz(1) == 1 & sz(2) == 1 & ... any(ismember('ymcrgbwk',value))) | ... (ischar(value) & any(strcmp(value,{'none','yellow','magenta',... 'cyan','red','green','blue','white','black'}))); % any valid Matlab's Marker case 'markerstyle' flag(i)=character & sz(1) == 1 & sz(2) == 1 & ... any(ismember('.ox+*sdv^<>ph',value)); % any valid Matlab's LineStyle case 'linestyle' str=strrep(strrep(strrep(value,'z','1'),'--','z'),'-.','z'); flag(i)=character & any(ismember(str,'z-:')) & sz(1)==1 & (sz(2)==1 | sz(2)==2); % any struct case 'struct' flag(i)=isstruct(value); % nx1 cell array of strings case 'cellcolumn_of_char' flag(i)=iscell(value) & dims == 2 & sz(2)==1; try, char(value); catch, flag(i)=0; end % mxn cell array of strings case '2Dcellarray_of_char' flag(i)=iscell(value) & dims == 2; try, char(cat(2,value{:})); catch, flag(i)=0; end % valid {lattice, msize} case 'topol_cell_no_shape' flag(i)=1; if ~iscell(value) | length(size(value)) ~= 2 | size(value,2)~=2 flag(i)=0; else if vis_valuetype(value{1},{'string'}), switch value{1} case { 'hexa','rect'} ; otherwise flag(i)=0; end end if ~vis_valuetype(value{2},{'1xn'}), flag(i)=0; end end % valid {lattice, msize, shape} case 'topol_cell' flag(i)=1; if ~iscell(value) | length(size(value)) ~= 2 | size(value,2) ~= 3, flag(i)=0; else if vis_valuetype(value{1},{'string'}), switch value{1} case { 'hexa','rect'} ; otherwise flag(i)=0; end end if ~vis_valuetype(value{2},{'1xn'}) flag(i)=0; end if ~vis_valuetype(value{3},{'string'}) flag(i)=0; else switch value{3} case { 'sheet','cyl', 'toroid'} ; otherwise flag(i)=0; end end end otherwise msg='Unknown valuetype!'; end catch % error during type check is due to wrong type of value: % lets set flag(i) to 0 flag(i)=0; end % Unknown indetifier? error(msg); end % set flag according to 3rd parameter (all ~ AND, any ~ OR) if strcmp(str,'all'); flag=all(flag); else flag=any(flag); end end function f=in0_1(value) f=all(value(:) >= 0 & value(:)<=1);