view 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 source
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