Daniel@0: function [x, y, h] = draw_dbn(adj, inter, flip_intra, K, labels, node_t, x, y) Daniel@0: % DRAW_LAYOUT_DBN Draws a layout for a Dynamical Belief Network Daniel@0: % Daniel@0: % [] = DRAW_LAYOUT_DBN(INTRA, INTER, ) Daniel@0: % Daniel@0: % Inputs : Daniel@0: % INTRA, INTER : Adjacency matrices Daniel@0: % FLIP_FLAG : Transposes the DAG layout obtained from INTRA connections Daniel@0: % If X1, Y1 are specified, FLIP_FLAG has no effect. Daniel@0: % K : Unfold K times Daniel@0: % LABELS - if -1, we use 1:N*K Daniel@0: % Rest : See DRAW_LAYOUT Daniel@0: % Daniel@0: % Outputs : Daniel@0: % Xi, Yi : Coordinates of nodes (for i'th timeslice) on the unit square Daniel@0: % H : Object Handles Daniel@0: % Daniel@0: % Usage Example : draw_layout_dbn(intra, inter, 1); Daniel@0: % draw_layout_dbn(intra, inter); Daniel@0: % Daniel@0: % Note : Daniel@0: % See also DRAW_GRAPH Daniel@0: Daniel@0: % Uses : DRAW_GRAPH Daniel@0: Daniel@0: % Change History : Daniel@0: % Date Time Prog Note Daniel@0: % 17-Apr-2000 1:02 PM ATC Created under MATLAB 5.3.1.29215a (R11.1) Daniel@0: Daniel@0: % ATC = Ali Taylan Cemgil, Daniel@0: % SNN - University of Nijmegen, Department of Medical Physics and Biophysics Daniel@0: % e-mail : cemgil@mbfys.kun.nl Daniel@0: Daniel@0: N = size(adj,1); Daniel@0: if nargin<3, Daniel@0: flip_intra = 0; Daniel@0: end; Daniel@0: Daniel@0: if nargin<4, Daniel@0: K = 2; Daniel@0: end; Daniel@0: Daniel@0: if K<2 | K>7, error('2<=K<=7 must hold..'); end; Daniel@0: Daniel@0: Daniel@0: if nargin<5 Daniel@0: % labels = cellstr(char(zeros(N,1)+double('+'))); Daniel@0: % labels = cellstr(int2str((1:N)')); Daniel@0: labels = cellstr(char((0:N-1)'+double('a'))); Daniel@0: end; Daniel@0: Daniel@0: if nargin<6, Daniel@0: node_t = zeros(N,1); Daniel@0: % node_t = rand(N,1) > 0.5; Daniel@0: end; Daniel@0: Daniel@0: if nargin<7, Daniel@0: [x1 y1] = make_layout(adj); Daniel@0: if flip_intra, tmp = x1; x1 = y1; y1 = tmp; end; Daniel@0: end; Daniel@0: Daniel@0: mid = round(K/2); Daniel@0: Daniel@0: Daniel@0: xi = x1(:)-1; Daniel@0: x = []; Daniel@0: y = repmat(y1(:), [K 1]); Daniel@0: node_t2 = repmat(node_t(:), [K 1]); Daniel@0: Daniel@0: if isa(labels,'double') & labels==-1 % KPM Daniel@0: lb = num2strcell(1:N*K); Daniel@0: else Daniel@0: lb = {}; Daniel@0: for i=1:K, Daniel@0: labels1 = labels(:); Daniel@0: if i==mid, str = ''; else str = sprintf('%+d',i-mid); end; Daniel@0: for i=1:N, Daniel@0: labels1{i} = [labels1{i} '(t' str ')']; Daniel@0: end; Daniel@0: lb = [lb; labels1(:)]; Daniel@0: end; Daniel@0: end Daniel@0: Daniel@0: dag = zeros(N*K); Daniel@0: Daniel@0: for i=1:K, Daniel@0: xi = xi+1; Daniel@0: x = [x; xi]; Daniel@0: Daniel@0: idx = ((i-1)*N+1):i*N; Daniel@0: dag(idx,idx) = adj; Daniel@0: if i