annotate toolboxes/MIRtoolbox1.3.2/MIRToolbox/uncell.m @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1 function x = uncell(x,lvl)
Daniel@0 2 % lvl >= 0: The recursion level, starting from 0, when observing the
Daniel@0 3 % cell structures of cell structures of etc. of the input data x.
Daniel@0 4 % lvl = NaN:
Daniel@0 5 % lvl = -Inf: used in display of segmented mirscalar
Daniel@0 6 if nargin < 2
Daniel@0 7 lvl = 0;
Daniel@0 8 end
Daniel@0 9 if iscell(x)
Daniel@0 10 if isempty(x)
Daniel@0 11 x = [];
Daniel@0 12 elseif length(x) == 1
Daniel@0 13 x = uncell(x{1},lvl+1);
Daniel@0 14 else
Daniel@0 15 het = 0; % Flags different kinds of structures:
Daniel@0 16 % - structures with fixed column size but variable nb of columns (het = 1)
Daniel@0 17 % - structures with variable column size but fixed nb of columns (het = 2)
Daniel@0 18 % - structures with variable column size and variable nb of columns (het = NaN)
Daniel@0 19 l = length(x(:,:,1));
Daniel@0 20 nf = size(x,3);
Daniel@0 21 z = cell(size(x));
Daniel@0 22 for i1 = 1:size(x,1)
Daniel@0 23 for i2 = 1:size(x,2)
Daniel@0 24 for i3 = 1:size(x,3)
Daniel@0 25 z{i1,i2,i3} = uncell(x{i1,i2,i3},lvl+1);
Daniel@0 26 if i1 == 1 && i2 == 1 && i3 == 1
Daniel@0 27 s = size(z{i1,i2,i3});
Daniel@0 28 elseif not(isequal(s,size(z{i1,i2,i3})))
Daniel@0 29 % A break in the homogeneity has been discovered.
Daniel@0 30 if lvl>0
Daniel@0 31 if (het == 0 || het == 2) && (s(2) == size(z{i1,i2,i3},2))
Daniel@0 32 het = 2;
Daniel@0 33 s = max(s,size(z{i1,i2,i3}));
Daniel@0 34 elseif (het == 0 || het == 1) && (s(1) == size(z{i1,i2,i3},1))
Daniel@0 35 het = 1;
Daniel@0 36 s = max(s,size(z{i1,i2,i3}));
Daniel@0 37 else
Daniel@0 38 het = NaN;
Daniel@0 39 end
Daniel@0 40 else
Daniel@0 41 het = NaN;
Daniel@0 42 end
Daniel@0 43 end
Daniel@0 44 end
Daniel@0 45 end
Daniel@0 46 end
Daniel@0 47 if isnan(het)
Daniel@0 48 x = z;
Daniel@0 49 else
Daniel@0 50 if size(s)<3
Daniel@0 51 s(3) = 1;
Daniel@0 52 end
Daniel@0 53 if (s(1)>1 || isnan(lvl)) || lvl == -Inf
Daniel@0 54 x = NaN([s(1) l*s(2) nf*s(3:end)]);
Daniel@0 55 for j = 1:nf
Daniel@0 56 for i = 1:l
Daniel@0 57 if size(z,1)>size(z,2)
Daniel@0 58 zij = z{i,1,j};
Daniel@0 59 else
Daniel@0 60 zij = z{1,i,j};
Daniel@0 61 end
Daniel@0 62 if size(zij,3) == 1
Daniel@0 63 x(1:size(z{1,i,j},1),...
Daniel@0 64 (i-1)*s(2)+1:(i-1)*s(2)+size(z{1,i,j},2),...
Daniel@0 65 j,1:size(z{1,i,j},4)) = z{1,i,j};
Daniel@0 66 elseif nf == 1
Daniel@0 67 x(1:size(z{1,i,j},1),...
Daniel@0 68 (i-1)*s(2)+1:(i-1)*s(2)+size(z{1,i,j},2),...
Daniel@0 69 :,1:size(z{1,i,j},4)) = z{1,i,j};
Daniel@0 70 end
Daniel@0 71 end
Daniel@0 72 end
Daniel@0 73 else
Daniel@0 74 x = NaN([l*s(1) s(2) nf*s(3:end)]);
Daniel@0 75 for j = 1:nf
Daniel@0 76 for i = 1:l
Daniel@0 77 if size(z,1)>size(z,2)
Daniel@0 78 zij = z{i,1,j};
Daniel@0 79 else
Daniel@0 80 zij = z{1,i,j};
Daniel@0 81 end
Daniel@0 82 if ischar(zij) && length(zij) == 1 && zij>='A' && zij <= 'G'
Daniel@0 83 %zi
Daniel@0 84 zij = zij-'A';
Daniel@0 85 end
Daniel@0 86 x((i-1)*s(1)*size(zij,1)+1:(i-1)*s(1)*size(zij,1)+size(zij,1),...
Daniel@0 87 1:size(zij,2),...
Daniel@0 88 j,...
Daniel@0 89 1:size(zij,4)) = zij;
Daniel@0 90 end
Daniel@0 91 end
Daniel@0 92 end
Daniel@0 93 end
Daniel@0 94 end
Daniel@0 95 elseif ischar(x)
Daniel@0 96 switch x
Daniel@0 97 case 'C'
Daniel@0 98 x = 0;
Daniel@0 99 case 'C#'
Daniel@0 100 x = 1;
Daniel@0 101 case 'D'
Daniel@0 102 x = 2;
Daniel@0 103 case 'D#'
Daniel@0 104 x = 3;
Daniel@0 105 case 'E'
Daniel@0 106 x = 4;
Daniel@0 107 case 'F'
Daniel@0 108 x = 5;
Daniel@0 109 case 'F#'
Daniel@0 110 x = 6;
Daniel@0 111 case 'G'
Daniel@0 112 x = 7;
Daniel@0 113 case 'G#'
Daniel@0 114 x = 8;
Daniel@0 115 case 'A'
Daniel@0 116 x = 9;
Daniel@0 117 case 'A#'
Daniel@0 118 x = 10;
Daniel@0 119 case 'B'
Daniel@0 120 x = 11;
Daniel@0 121 end
Daniel@0 122 elseif 0 %scal
Daniel@0 123 if size(x,1)==1 && size(x,2)==1 && size(x,3)>1
Daniel@0 124 x = shiftdim(x,2);
Daniel@0 125 else
Daniel@0 126 %y = zeros(size(x,2),size(x,1),size(x,3));
Daniel@0 127 %y = zeros(size(x));
Daniel@0 128 %for i = 1:size(x,3)
Daniel@0 129 % y(:,:,i) = x(:,:,i);
Daniel@0 130 %end
Daniel@0 131 %x = y;
Daniel@0 132 end
Daniel@0 133 elseif 0 %not(isnan(lvl)) && lvl>=0
Daniel@0 134 %x = squeeze(x);
Daniel@0 135 if size(x,1) == 1
Daniel@0 136 x = x(:);
Daniel@0 137 end
Daniel@0 138 elseif 0 %size(x,3) > 1 && size(x,1) == 1
Daniel@0 139 x = reshape(x,size(x,2),size(x,3))';
Daniel@0 140 end