diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/display.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,343 @@
+function display(s,varargin)
+% SCALAR/DISPLAY display the values of a scalar object
+disp(' ');
+p = get(s,'Pos');
+v = get(s,'Data');
+m = get(s,'Mode');
+t = get(s,'Title');
+n = get(s,'Name');
+n2 = get(s,'Name2');
+u = get(s,'Unit');
+fp = get(s,'FramePos');
+pp = get(s,'PeakPos');
+leg = get(s,'Legend');
+legm = get(s,'MultiData');
+cha = get(s,'Channels');
+for i = 1:length(v)  % For each audio file
+    vi = v{i};
+    if isempty(m)
+        mi = [];
+    else
+        mi = m{i};
+    end
+    fpi = fp{i};
+    if isempty(pp)
+        ppi = [];
+    else
+        ppi = pp{i};
+    end
+    
+    if isempty(vi)
+        disp(['The ',t,' related to file ',n{i},...
+                    ' does not contain any data.']);
+        return
+    end
+    
+    %if iscell(ppi)
+    %    ppi = ppi{i};
+    %end
+    
+    if size(vi,1) == 1 && size(vi,2) == 1 && size(vi,3) == 1 && ...
+            (not(iscell(vi)) || (size(vi{1},1) == 1 && ...
+                    size(vi{1},2) == 1 && size(vi{1},3) == 1)) && ...
+            (not(iscell(vi{1})) || (size(vi{1}{1},1) == 1 && ...
+                    size(vi{1}{1},2) == 1 && size(vi{1},3) == 1))
+        % Simple results, returned directly in the Command Window
+        
+        if iscell(vi) 
+            vi = vi{1}; % There is only one segment, so let's look at it
+            if not(isempty(mi))
+                mi = mi{1};
+            end
+        end
+        if iscell(vi) 
+            if size(vi,2) > 1
+                error('BUG IN DISPLAY'); %test if this condition exists
+            end
+            vi = vi{1}; % There is only one frame, so let's look at it
+            if not(isempty(mi))
+                mi = mi{1};
+            end
+        end
+        if size(vi,1) == 1 && size(vi,3) == 1
+            if isempty(leg)
+                r = num2str(vi);
+            else
+                r = leg{vi};
+            end
+            if not(isempty(mi))
+                u = legm{mi};
+            end
+            if strcmp(u,'/1')
+                u = '';
+            end
+            if strcmp(r,'NaN')
+                r = 'undefined';
+                u = '';
+            end
+            if not(isempty(n2))
+                disp(['The ',t,' between files ',n{1},' and ',n2{i},...
+                        ' is ',r,' ',u]);
+            else
+                disp(['The ',t,' related to file ',n{i},' is ',r,' ',u]);
+            end
+        else
+            vi = squeeze(vi);
+            disp(['The ',t,' related to file ',n{i},' are:']);
+            for j = 1:size(vi,1)
+                if isempty(leg)
+                    r = num2str(vi(j));
+                else
+                    r = leg{vi(j)};
+                end
+                if not(isempty(mi))
+                    u = legm{mi(j)};
+                end
+                if strcmp(r,'NaN')
+                    r = 'undefined';
+                    u = '';
+                end
+                disp(['Value #',num2str(j),': ',r,' ',u]);
+            end
+        end
+        
+    else
+        %Graphical display
+        figure
+        
+        if not(iscell(vi))
+            vi = {vi};
+            fpi = {fpi};
+            ppi = {ppi};
+        end
+        
+        nl = size(vi{1},1);    % Number of bins
+        nc = size(vi{1},2);    % Number of frames
+        l = size(vi{1},3);     % Number of channels
+        il = (1-0.15)/l;
+        
+        if nc==1 && l>1        % If one frame and several channels
+            xlab = 'Channels'; % channels will be represented in the x axis
+            l = 1;
+        else
+            xlab = 'Temporal location of events (in s.)';
+        end
+
+        varpeaks = 0; % Variable data size over frames?
+        if iscell(vi{1})
+            for j = 1:length(vi)
+                for k = 1:l 
+                    for h = 1:size(vi{j},2)
+                        if length(vi{j}{1,h,k}) > 1
+                            varpeaks = 1;
+                        end
+                    end
+                end
+            end
+            if not(varpeaks)
+                for j = 1:length(vi)
+                    vj = zeros(size(vi{j}));
+                    for k = 1:l 
+                        for h = 1:size(vi{j},2)
+                            if isempty(vi{j}{1,h,k})
+                                vj(1,h,k) = NaN;
+                            else
+                                vj(1,h,k) = vi{j}{1,h,k};
+                            end
+                        end
+                    end
+                    vi{j} = vj;
+                end
+            end
+        end
+                
+        if varpeaks         % Peaks displayed with diamonds
+            diamond = 1;
+            set(gca,'NextPlot','replacechildren')
+            hold on
+        else
+            diamond = 0;
+            hold all
+        end
+
+        for k = 1:l         % For each channel
+            if l>1
+                subplot('Position',[0.1 (k-1)*il+0.1 0.89 il-0.02])
+            end
+            hold on
+            
+            vold = NaN;     % Buffers used to link curves between segments
+            fold = NaN;
+            
+            for j = 1:length(vi)     % for each segment
+                vj = vi{j};
+                
+                fpj = fpi{j};
+                if isempty(ppi) || length(ppi)<j
+                    ppj = [];
+                else
+                    ppj = ppi{j};
+                end
+
+                if strcmp(xlab,'Channels')
+                    %vj = squeeze(vj); % does not work with lowenergy
+                    %ppj = squeeze(ppj);
+                    vj = shiftdim(vj,1);
+                    ppj = shiftdim(ppj,1);
+                    fpj = cha{i};
+                end
+                
+                minvi = Inf;    % The limits of the rectangle bordering segments
+                maxvi = -Inf;
+                
+                if diamond
+                    % Variable data size for each frame
+                    legobj = [];
+                    legval = [];
+                    
+                    if not(strcmp(xlab,'Channels'))
+                        if iscell(fpi(1,j))
+                            fpj = fpi{j};
+                        else
+                            error('BUG IN DISPLAY'); %test if this condition exists
+                            fpj = fpi(:,j);
+                        end
+                    end
+                                        
+                    for h = 1:size(vj,2)    % for each frame
+                        if not(isempty(vj{1,h,k}))
+                            if isempty(mi)
+                                % No use of legends
+                                if not(isempty(vj{1,h,k}))
+                                    plot(mean(fpj(:,h),1),vj{1,h,k},'d',...
+                                        'LineWidth',2,'MarkerFaceColor','b');
+                                end
+                                
+                            else
+                                % Use of legends
+                                mj = mi{j}{1,h,k};
+                                lmj = length(mj);
+                                for kk = 1:lmj
+                                    handle = plot(mean(fpj(:,h),1),vj{1,h,k}(kk),'d',...
+                                        'Color',num2col(mj(kk)),...
+                                        'MarkerSize',7+(lmj-kk)*2,...
+                                        'MarkerFaceColor',num2col(mj(kk)));
+                                    if isempty(find(legval == mj(kk)))
+                                        legval = [legval mj(kk)];
+                                        legobj = [legobj handle];
+                                    end
+                                end
+                            end
+                            
+                            %if not(isempty(ppi)) ...    % Peaks display
+                            %&& not(isempty(find(ppi{1} == j)))
+                            %    plot(mean(fpj(:,h),1),vj{1,h,k},'+r')
+                            %end
+                        end
+                        
+                        if not(isempty(vj{1,h,k}))
+                            minvi = min(minvi,min(vj{1,h,k}));
+                            maxvi = max(maxvi,max(vj{1,h,k}));
+                        end
+                    end
+
+                    if (exist('legm') == 1) && not(isempty(legm))
+                        legend(legobj,legm{legval},'Location','Best') 
+                    end
+                    
+                else
+                    % Constant data size along frames
+                    
+                    for h = 1:nl    % For each dimension represented
+                        %if not(isempty(vj(h,:,k)))
+                            if isnan(vold)
+                                plot(mean(fpj,1),vj(h,:,k)',...
+                                    '+-','Color',num2col(h))
+                            else
+                                plot([fold mean(fpj,1)],[vold(h) vj(h,:,k)]',...
+                                    '+-','Color',num2col(h))
+                                % Current curve linked with curve from
+                                % previous segment
+                            end
+                            if h == nl
+                                if isempty(vj)
+                                    vold = NaN;
+                                    fold = NaN;
+                                else
+                                    vold = vj(:,end,k);
+                                    fold = mean(fpj(:,end),1);
+                                end
+                            end
+                       % else
+                       %     vold = NaN;
+                       %     fold = NaN;
+                       % end
+                    end
+                    
+                    if not(isempty(ppj))                % Peaks display
+                        for h = 1:nl;
+                            ppj = ppj{1,h,k};
+                            plot(mean(fpj(:,ppj)),vj(h,ppj,k),'or')
+                        end
+                    end
+                                        
+                    minvi = min(minvi,min(min(vj(h,:,k))));
+                    maxvi = max(maxvi,max(max(vj(h,:,k))));
+                end
+                
+                if length(vi)>1 && size(vj,2)>1 && minvi<Inf && maxvi>-Inf
+                    % Display of the segment rectangle
+                    rectangle('Position',[fpj(1),minvi,...
+                        fpj(end)-fpj(1),maxvi-minvi]+1e-16,...
+                        'EdgeColor',num2col(j),'Curvature',.1,'LineWidth',1)
+                end
+            end
+            if k == l
+                title([t,', ',n{i}])
+            end
+            if k == 1
+                xlabel(xlab)
+            end
+            if not(isempty(leg))
+                set(gca,'ytick',(1:length(leg)))
+                set(gca,'yticklabel',leg);
+            end
+            if l > 1
+                pos = get(gca,'Position');
+                hfig = axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],...
+                            'Visible','off');
+                text(0,0,num2str(cha{i}(k)),'FontSize',12,'Color','r')
+            end
+        end
+        if i == 1
+            if strcmp(u,'/1')
+                u = ' (between 0 and 1)';
+            elseif isempty(u)
+                u = '';
+            else
+                u = [' (in ',u,')'];
+            end
+        end
+        ylabel(['coefficient value', u])
+        if nl>1
+            legnd = cell(nl,1);
+            for j = 1:nl
+                if isempty(p)
+                    legnd{j} = num2str(j);
+                else
+                    legnd{j} = p{i}{1}{j};
+                end
+            end
+            legend(legnd,'Location','Best')
+        end
+        fig = get(0,'CurrentFigure');
+        disp(['The ',t,' related to file ',n{i},...
+                    ' is displayed in Figure ',num2str(fig),'.']);
+        if nargin>1
+            saveas(fig,[n{i},varargin{1}]);
+            disp(['and is saved in file ',n{i},varargin{1}]);
+        end
+    end
+end
+disp(' ');
+drawnow
\ No newline at end of file