annotate toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/display.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 display(s,varargin)
Daniel@0 2 % SCALAR/DISPLAY display the values of a scalar object
Daniel@0 3 disp(' ');
Daniel@0 4 p = get(s,'Pos');
Daniel@0 5 v = get(s,'Data');
Daniel@0 6 m = get(s,'Mode');
Daniel@0 7 t = get(s,'Title');
Daniel@0 8 n = get(s,'Name');
Daniel@0 9 n2 = get(s,'Name2');
Daniel@0 10 u = get(s,'Unit');
Daniel@0 11 fp = get(s,'FramePos');
Daniel@0 12 pp = get(s,'PeakPos');
Daniel@0 13 leg = get(s,'Legend');
Daniel@0 14 legm = get(s,'MultiData');
Daniel@0 15 cha = get(s,'Channels');
Daniel@0 16 for i = 1:length(v) % For each audio file
Daniel@0 17 vi = v{i};
Daniel@0 18 if isempty(m)
Daniel@0 19 mi = [];
Daniel@0 20 else
Daniel@0 21 mi = m{i};
Daniel@0 22 end
Daniel@0 23 fpi = fp{i};
Daniel@0 24 if isempty(pp)
Daniel@0 25 ppi = [];
Daniel@0 26 else
Daniel@0 27 ppi = pp{i};
Daniel@0 28 end
Daniel@0 29
Daniel@0 30 if isempty(vi)
Daniel@0 31 disp(['The ',t,' related to file ',n{i},...
Daniel@0 32 ' does not contain any data.']);
Daniel@0 33 return
Daniel@0 34 end
Daniel@0 35
Daniel@0 36 %if iscell(ppi)
Daniel@0 37 % ppi = ppi{i};
Daniel@0 38 %end
Daniel@0 39
Daniel@0 40 if size(vi,1) == 1 && size(vi,2) == 1 && size(vi,3) == 1 && ...
Daniel@0 41 (not(iscell(vi)) || (size(vi{1},1) == 1 && ...
Daniel@0 42 size(vi{1},2) == 1 && size(vi{1},3) == 1)) && ...
Daniel@0 43 (not(iscell(vi{1})) || (size(vi{1}{1},1) == 1 && ...
Daniel@0 44 size(vi{1}{1},2) == 1 && size(vi{1},3) == 1))
Daniel@0 45 % Simple results, returned directly in the Command Window
Daniel@0 46
Daniel@0 47 if iscell(vi)
Daniel@0 48 vi = vi{1}; % There is only one segment, so let's look at it
Daniel@0 49 if not(isempty(mi))
Daniel@0 50 mi = mi{1};
Daniel@0 51 end
Daniel@0 52 end
Daniel@0 53 if iscell(vi)
Daniel@0 54 if size(vi,2) > 1
Daniel@0 55 error('BUG IN DISPLAY'); %test if this condition exists
Daniel@0 56 end
Daniel@0 57 vi = vi{1}; % There is only one frame, so let's look at it
Daniel@0 58 if not(isempty(mi))
Daniel@0 59 mi = mi{1};
Daniel@0 60 end
Daniel@0 61 end
Daniel@0 62 if size(vi,1) == 1 && size(vi,3) == 1
Daniel@0 63 if isempty(leg)
Daniel@0 64 r = num2str(vi);
Daniel@0 65 else
Daniel@0 66 r = leg{vi};
Daniel@0 67 end
Daniel@0 68 if not(isempty(mi))
Daniel@0 69 u = legm{mi};
Daniel@0 70 end
Daniel@0 71 if strcmp(u,'/1')
Daniel@0 72 u = '';
Daniel@0 73 end
Daniel@0 74 if strcmp(r,'NaN')
Daniel@0 75 r = 'undefined';
Daniel@0 76 u = '';
Daniel@0 77 end
Daniel@0 78 if not(isempty(n2))
Daniel@0 79 disp(['The ',t,' between files ',n{1},' and ',n2{i},...
Daniel@0 80 ' is ',r,' ',u]);
Daniel@0 81 else
Daniel@0 82 disp(['The ',t,' related to file ',n{i},' is ',r,' ',u]);
Daniel@0 83 end
Daniel@0 84 else
Daniel@0 85 vi = squeeze(vi);
Daniel@0 86 disp(['The ',t,' related to file ',n{i},' are:']);
Daniel@0 87 for j = 1:size(vi,1)
Daniel@0 88 if isempty(leg)
Daniel@0 89 r = num2str(vi(j));
Daniel@0 90 else
Daniel@0 91 r = leg{vi(j)};
Daniel@0 92 end
Daniel@0 93 if not(isempty(mi))
Daniel@0 94 u = legm{mi(j)};
Daniel@0 95 end
Daniel@0 96 if strcmp(r,'NaN')
Daniel@0 97 r = 'undefined';
Daniel@0 98 u = '';
Daniel@0 99 end
Daniel@0 100 disp(['Value #',num2str(j),': ',r,' ',u]);
Daniel@0 101 end
Daniel@0 102 end
Daniel@0 103
Daniel@0 104 else
Daniel@0 105 %Graphical display
Daniel@0 106 figure
Daniel@0 107
Daniel@0 108 if not(iscell(vi))
Daniel@0 109 vi = {vi};
Daniel@0 110 fpi = {fpi};
Daniel@0 111 ppi = {ppi};
Daniel@0 112 end
Daniel@0 113
Daniel@0 114 nl = size(vi{1},1); % Number of bins
Daniel@0 115 nc = size(vi{1},2); % Number of frames
Daniel@0 116 l = size(vi{1},3); % Number of channels
Daniel@0 117 il = (1-0.15)/l;
Daniel@0 118
Daniel@0 119 if nc==1 && l>1 % If one frame and several channels
Daniel@0 120 xlab = 'Channels'; % channels will be represented in the x axis
Daniel@0 121 l = 1;
Daniel@0 122 else
Daniel@0 123 xlab = 'Temporal location of events (in s.)';
Daniel@0 124 end
Daniel@0 125
Daniel@0 126 varpeaks = 0; % Variable data size over frames?
Daniel@0 127 if iscell(vi{1})
Daniel@0 128 for j = 1:length(vi)
Daniel@0 129 for k = 1:l
Daniel@0 130 for h = 1:size(vi{j},2)
Daniel@0 131 if length(vi{j}{1,h,k}) > 1
Daniel@0 132 varpeaks = 1;
Daniel@0 133 end
Daniel@0 134 end
Daniel@0 135 end
Daniel@0 136 end
Daniel@0 137 if not(varpeaks)
Daniel@0 138 for j = 1:length(vi)
Daniel@0 139 vj = zeros(size(vi{j}));
Daniel@0 140 for k = 1:l
Daniel@0 141 for h = 1:size(vi{j},2)
Daniel@0 142 if isempty(vi{j}{1,h,k})
Daniel@0 143 vj(1,h,k) = NaN;
Daniel@0 144 else
Daniel@0 145 vj(1,h,k) = vi{j}{1,h,k};
Daniel@0 146 end
Daniel@0 147 end
Daniel@0 148 end
Daniel@0 149 vi{j} = vj;
Daniel@0 150 end
Daniel@0 151 end
Daniel@0 152 end
Daniel@0 153
Daniel@0 154 if varpeaks % Peaks displayed with diamonds
Daniel@0 155 diamond = 1;
Daniel@0 156 set(gca,'NextPlot','replacechildren')
Daniel@0 157 hold on
Daniel@0 158 else
Daniel@0 159 diamond = 0;
Daniel@0 160 hold all
Daniel@0 161 end
Daniel@0 162
Daniel@0 163 for k = 1:l % For each channel
Daniel@0 164 if l>1
Daniel@0 165 subplot('Position',[0.1 (k-1)*il+0.1 0.89 il-0.02])
Daniel@0 166 end
Daniel@0 167 hold on
Daniel@0 168
Daniel@0 169 vold = NaN; % Buffers used to link curves between segments
Daniel@0 170 fold = NaN;
Daniel@0 171
Daniel@0 172 for j = 1:length(vi) % for each segment
Daniel@0 173 vj = vi{j};
Daniel@0 174
Daniel@0 175 fpj = fpi{j};
Daniel@0 176 if isempty(ppi) || length(ppi)<j
Daniel@0 177 ppj = [];
Daniel@0 178 else
Daniel@0 179 ppj = ppi{j};
Daniel@0 180 end
Daniel@0 181
Daniel@0 182 if strcmp(xlab,'Channels')
Daniel@0 183 %vj = squeeze(vj); % does not work with lowenergy
Daniel@0 184 %ppj = squeeze(ppj);
Daniel@0 185 vj = shiftdim(vj,1);
Daniel@0 186 ppj = shiftdim(ppj,1);
Daniel@0 187 fpj = cha{i};
Daniel@0 188 end
Daniel@0 189
Daniel@0 190 minvi = Inf; % The limits of the rectangle bordering segments
Daniel@0 191 maxvi = -Inf;
Daniel@0 192
Daniel@0 193 if diamond
Daniel@0 194 % Variable data size for each frame
Daniel@0 195 legobj = [];
Daniel@0 196 legval = [];
Daniel@0 197
Daniel@0 198 if not(strcmp(xlab,'Channels'))
Daniel@0 199 if iscell(fpi(1,j))
Daniel@0 200 fpj = fpi{j};
Daniel@0 201 else
Daniel@0 202 error('BUG IN DISPLAY'); %test if this condition exists
Daniel@0 203 fpj = fpi(:,j);
Daniel@0 204 end
Daniel@0 205 end
Daniel@0 206
Daniel@0 207 for h = 1:size(vj,2) % for each frame
Daniel@0 208 if not(isempty(vj{1,h,k}))
Daniel@0 209 if isempty(mi)
Daniel@0 210 % No use of legends
Daniel@0 211 if not(isempty(vj{1,h,k}))
Daniel@0 212 plot(mean(fpj(:,h),1),vj{1,h,k},'d',...
Daniel@0 213 'LineWidth',2,'MarkerFaceColor','b');
Daniel@0 214 end
Daniel@0 215
Daniel@0 216 else
Daniel@0 217 % Use of legends
Daniel@0 218 mj = mi{j}{1,h,k};
Daniel@0 219 lmj = length(mj);
Daniel@0 220 for kk = 1:lmj
Daniel@0 221 handle = plot(mean(fpj(:,h),1),vj{1,h,k}(kk),'d',...
Daniel@0 222 'Color',num2col(mj(kk)),...
Daniel@0 223 'MarkerSize',7+(lmj-kk)*2,...
Daniel@0 224 'MarkerFaceColor',num2col(mj(kk)));
Daniel@0 225 if isempty(find(legval == mj(kk)))
Daniel@0 226 legval = [legval mj(kk)];
Daniel@0 227 legobj = [legobj handle];
Daniel@0 228 end
Daniel@0 229 end
Daniel@0 230 end
Daniel@0 231
Daniel@0 232 %if not(isempty(ppi)) ... % Peaks display
Daniel@0 233 %&& not(isempty(find(ppi{1} == j)))
Daniel@0 234 % plot(mean(fpj(:,h),1),vj{1,h,k},'+r')
Daniel@0 235 %end
Daniel@0 236 end
Daniel@0 237
Daniel@0 238 if not(isempty(vj{1,h,k}))
Daniel@0 239 minvi = min(minvi,min(vj{1,h,k}));
Daniel@0 240 maxvi = max(maxvi,max(vj{1,h,k}));
Daniel@0 241 end
Daniel@0 242 end
Daniel@0 243
Daniel@0 244 if (exist('legm') == 1) && not(isempty(legm))
Daniel@0 245 legend(legobj,legm{legval},'Location','Best')
Daniel@0 246 end
Daniel@0 247
Daniel@0 248 else
Daniel@0 249 % Constant data size along frames
Daniel@0 250
Daniel@0 251 for h = 1:nl % For each dimension represented
Daniel@0 252 %if not(isempty(vj(h,:,k)))
Daniel@0 253 if isnan(vold)
Daniel@0 254 plot(mean(fpj,1),vj(h,:,k)',...
Daniel@0 255 '+-','Color',num2col(h))
Daniel@0 256 else
Daniel@0 257 plot([fold mean(fpj,1)],[vold(h) vj(h,:,k)]',...
Daniel@0 258 '+-','Color',num2col(h))
Daniel@0 259 % Current curve linked with curve from
Daniel@0 260 % previous segment
Daniel@0 261 end
Daniel@0 262 if h == nl
Daniel@0 263 if isempty(vj)
Daniel@0 264 vold = NaN;
Daniel@0 265 fold = NaN;
Daniel@0 266 else
Daniel@0 267 vold = vj(:,end,k);
Daniel@0 268 fold = mean(fpj(:,end),1);
Daniel@0 269 end
Daniel@0 270 end
Daniel@0 271 % else
Daniel@0 272 % vold = NaN;
Daniel@0 273 % fold = NaN;
Daniel@0 274 % end
Daniel@0 275 end
Daniel@0 276
Daniel@0 277 if not(isempty(ppj)) % Peaks display
Daniel@0 278 for h = 1:nl;
Daniel@0 279 ppj = ppj{1,h,k};
Daniel@0 280 plot(mean(fpj(:,ppj)),vj(h,ppj,k),'or')
Daniel@0 281 end
Daniel@0 282 end
Daniel@0 283
Daniel@0 284 minvi = min(minvi,min(min(vj(h,:,k))));
Daniel@0 285 maxvi = max(maxvi,max(max(vj(h,:,k))));
Daniel@0 286 end
Daniel@0 287
Daniel@0 288 if length(vi)>1 && size(vj,2)>1 && minvi<Inf && maxvi>-Inf
Daniel@0 289 % Display of the segment rectangle
Daniel@0 290 rectangle('Position',[fpj(1),minvi,...
Daniel@0 291 fpj(end)-fpj(1),maxvi-minvi]+1e-16,...
Daniel@0 292 'EdgeColor',num2col(j),'Curvature',.1,'LineWidth',1)
Daniel@0 293 end
Daniel@0 294 end
Daniel@0 295 if k == l
Daniel@0 296 title([t,', ',n{i}])
Daniel@0 297 end
Daniel@0 298 if k == 1
Daniel@0 299 xlabel(xlab)
Daniel@0 300 end
Daniel@0 301 if not(isempty(leg))
Daniel@0 302 set(gca,'ytick',(1:length(leg)))
Daniel@0 303 set(gca,'yticklabel',leg);
Daniel@0 304 end
Daniel@0 305 if l > 1
Daniel@0 306 pos = get(gca,'Position');
Daniel@0 307 hfig = axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],...
Daniel@0 308 'Visible','off');
Daniel@0 309 text(0,0,num2str(cha{i}(k)),'FontSize',12,'Color','r')
Daniel@0 310 end
Daniel@0 311 end
Daniel@0 312 if i == 1
Daniel@0 313 if strcmp(u,'/1')
Daniel@0 314 u = ' (between 0 and 1)';
Daniel@0 315 elseif isempty(u)
Daniel@0 316 u = '';
Daniel@0 317 else
Daniel@0 318 u = [' (in ',u,')'];
Daniel@0 319 end
Daniel@0 320 end
Daniel@0 321 ylabel(['coefficient value', u])
Daniel@0 322 if nl>1
Daniel@0 323 legnd = cell(nl,1);
Daniel@0 324 for j = 1:nl
Daniel@0 325 if isempty(p)
Daniel@0 326 legnd{j} = num2str(j);
Daniel@0 327 else
Daniel@0 328 legnd{j} = p{i}{1}{j};
Daniel@0 329 end
Daniel@0 330 end
Daniel@0 331 legend(legnd,'Location','Best')
Daniel@0 332 end
Daniel@0 333 fig = get(0,'CurrentFigure');
Daniel@0 334 disp(['The ',t,' related to file ',n{i},...
Daniel@0 335 ' is displayed in Figure ',num2str(fig),'.']);
Daniel@0 336 if nargin>1
Daniel@0 337 saveas(fig,[n{i},varargin{1}]);
Daniel@0 338 disp(['and is saved in file ',n{i},varargin{1}]);
Daniel@0 339 end
Daniel@0 340 end
Daniel@0 341 end
Daniel@0 342 disp(' ');
Daniel@0 343 drawnow