plotAndSaveFigures

Plot and save figures of reconstruction.

Reserved numbers: 11-20. Used numbers 11-16, see start.html.

Contents

Syntax

plotAndSaveFigures(seti,qROIexact,qROIcomp,iOut,out)

Description

plotAndSaveFigures(seti,qROIexact,qROIcomp,iOut,out) plots and saves figures of outer iteration iOut in dependence of out.

In case of 3D sectional planes through the contrast are plotted to. The sectional plane is prepared in the subfunction plot3Dsec.

Input Arguments

Specific fields in seti influencing the figures are described in setGeomSim.html in the section "Subfunction: setFigureSettings".

The most important fields for this function in seti are:

Further details of this fields are described in recon.html.

Output Arguments

Plots, see start.html.

Note that figure 11 is plotted in subplots.html, but saved in this file.

See Also

Code

function plotAndSaveFigures(seti,qROIexact,qROIcomp,iOut,out)
% qROIexact is seti.qROIexact.
% Note that this function will be used with source problem too
% (source problem is not available in public version).

iOut > iOutIni: figure 11 (save subplots)

if out == 2 && iOut > seti.iOutIni % iOut = iOutIni shows only the true contrast

    % figure 11: subplots (save)
    savePngFig(11,iOut,seti); % figure 11: subplots (was already plotted but not saved)
end

iOut > iOutIni: figure 12-16

if out >= 1 && iOut > seti.iOutIni

figure 12: discrepancy and error (as in subplot)

    figure(12);
    set(gcf,'Visible',seti.plotVisible);
    hplot = plot((0:iOut), [seti.disIni seti.dis(1:iOut)], 'b-', (0:iOut), [seti.errIni seti.err(1:iOut)], 'r:');
    if seti.plotPublish
        set(gca,'FontSize',seti.pubFontSize)
        lw = 2;
        set(hplot(1),'LineWidth',lw);
        set(hplot(2),'LineWidth',lw);
    else
        legend('discrepancy','error');
        title('Discrepancy and error');
    end
    axis square;
    if out == 2
        savePngFig(12,iOut,seti);
    end

figure 13: Tikhonov functional (as in subplots)

    figure(13);
    set(gcf,'Visible',seti.plotVisible);
    x = 1:iOut;
    if length(x) == 1
        [ax,h1,h2] = plotyy(x',seti.M1v(x)',x',seti.M2v(x));
    else
        [ax,h1,h2] = plotyy(x',seti.M1v(x)',[x',x'],[seti.M2v(x)',seti.MTv(x)']);
    end
    if seti.plotPublish
        set(gca,'FontSize',seti.pubFontSize)
        lw = 2;
        set(hplot(1),'LineWidth',lw);
        set(hplot(2),'LineWidth',lw);
    else
        if length(x) == 1
            legend([h1;h2],'M1 (left axis)','M2 (right axis)');
        else
            legend([h1;h2],'M1 (left ax.)','M2 (right ax.)','MT = M1 + M2 (right ax.)');
        end
        title('Min. Tikhonov funct. MT');
        xlabel('outer iterations iOut')
    end
    axis(ax,'square');
    if out == 2
        savePngFig(13,iOut,seti);
    end

figure 14: reconstructed contrast (real part)

    figure(14);
    set(gcf,'Visible',seti.plotVisible);
    if seti.dim == 2
        %imagesc(seti.G(real(qROIcomp))); colormap(cmapPrint); colorbar; % alternative colormap
        % imagesc(seti.G(real(qROIcomp))); colormap(litman); colorbar;
        imagesc(seti.G(real(qROIcomp))); colormap(seti.colormap); colorbar;
        axis xy;
        if seti.usecbarlim
            caxis(seti.cbarlim);
        end
    elseif seti.dim == 3
        % isosurface(seti.G(real(qROIPrev))); colormap(litman); caxis([-1,3]); colorbar;
        % title('real part of reconstructed contrast (isosurface plot)');
        contourPlotROI(qROIcomp, seti, 'real');
    end
    if seti.plotPublish
        if seti.dim == 2
            plot2DstylePublish;
        elseif seti.dim == 3
            plot3DstylePublish;
        end
    else
        title('reconstructed contrast (real part)');
    end
    axis square;
    if out == 2
        savePngFig(14,iOut,seti);
    end
    close(14);
    % It is important to close this figure
    % because otherwise the projection in 3D is a problem.

figure 15: reconstructed contrast (imag part)

    figure(15);
    set(gcf,'Visible',seti.plotVisible);
    if seti.dim == 2
        imagesc(seti.G(imag(qROIcomp))); colormap(seti.colormap); colorbar;
        axis xy;
    elseif seti.dim == 3
        contourPlotROI(qROIcomp, seti, 'imag');
    end
    if seti.usecbarlim
        caxis(seti.cbarlim);
    end
    if seti.plotPublish
        if seti.dim == 2
            plot2DstylePublish;
        elseif seti.dim == 3
            plot3DstylePublish;
        end
    else
        title('reconstructed contrast (imag part)');
    end
    axis square;
    if out == 2
        savePngFig(15,iOut,seti);
    end
    close(15);
    % It is important to close this figure
    % because otherwise the projection in 3D is a problem.

figure 16: difference of reconstructed and true contrast (abs)

if 0
    figure(16);
    set(gcf,'Visible',seti.plotVisible);
    img = seti.G(abs(qROIprev-qROIexact));
    if seti.dim == 3
        % Display only a slice of the data:
        N2 = ceil((seti.nROI-1)/2);
        img = img(:,:,N2);
    end
    imagesc(img); colormap(seti.colormap); colorbar;
    axis xy;
    if seti.usecbarlim
        caxis(seti.cbarlim);
    end
    if seti.plotPublish
        plot2DstylePublish;
    else
        title('difference of reconstructed and true contrast (abs)');
    end
    axis square;
    if out == 2
        savePngFig(16,iOut,seti);
    end
end
end

figures 21-40 reserved for 3D reconstruction

if out >= 1 && seti.dim == 3 && ...
   (strcmp('corner3D',seti.contrast) || strcmp('twoTripods3D',seti.contrast) ||...
    strcmp('twoTripodsRealImag3D',seti.contrast) || strcmp('cubeLike3D',seti.contrast) ||...
    strcmp('cross3D',seti.contrast))
    switch seti.contrast
        case {'corner3D', 'twoTripods3D', 'twoTripodsRealImag3D', 'cubeLike3D'}
            seca = -(1-3.5/8);
            %secn = 2; % most interesting
        case 'cross3D'
            seca = 0;
            %secn = 2; % 1, 2 or 3... in coordinate system
    end
    if iOut == 0
        plot3Dsec(qROIexact,'predefined',seca,1,seti,iOut,out,21,'real');
        plot3Dsec(qROIexact,'predefined',seca,2,seti,iOut,out,22,'real');
        plot3Dsec(qROIexact,'predefined',seca,3,seti,iOut,out,23,'real');

        plot3Dsec(qROIexact,'predefined',seca,1,seti,iOut,out,24,'imag');
        plot3Dsec(qROIexact,'predefined',seca,2,seti,iOut,out,25,'imag');
        plot3Dsec(qROIexact,'predefined',seca,3,seti,iOut,out,26,'imag');
    else
        plot3Dsec(qROIcomp,'reconstructed',seca,1,seti,iOut,out,27,'real');
        plot3Dsec(qROIcomp,'reconstructed',seca,2,seti,iOut,out,28,'real');
        plot3Dsec(qROIcomp,'reconstructed',seca,3,seti,iOut,out,29,'real');

        plot3Dsec(qROIcomp,'reconstructed',seca,1,seti,iOut,out,30,'imag');
        plot3Dsec(qROIcomp,'reconstructed',seca,2,seti,iOut,out,31,'imag');
        plot3Dsec(qROIcomp,'reconstructed',seca,3,seti,iOut,out,32,'imag');
    end
end
end

Code: subfunction: plot3Dsec

plot sectional plane in case of 3D

function plot3Dsec(qROI,contrastKind,seca,secn,seti,iOut,out,figno,part)
% qROI: seti.qROIexact (exact/predefined) OR qROIprev (reconstructed)
% contrastKind: in title of plot, i.e. predefined or reconstructed
R = seti.rCD/2;
ind = floor((seca*R+R)/(2*R)*seti.nROI);
A = seti.G(qROI);

switch secn
    case 1
        B = A(ind,:,:);
    case 2
        B = A(:,ind,:);
    case 3
        B = A(:,:,ind);
    otherwise
        error('n must be 1, 2 or 3.');
end

switch part
    case 'real'
        P = real(B);
    case 'imag'
        P = imag(B);
    otherwise
        error('part must be real or imag');
end

B = squeeze(P);
B = transpose(B);

figure(figno);
set(gcf,'Visible',seti.plotVisible);
imagesc(B); colormap(seti.colormap); colorbar;
axis xy;
if seti.usecbarlim
    caxis(seti.cbarlim);
end
if seti.plotPublish
    plot2DstylePublish;
else
    titles = sprintf('%s contrast (real part), X%d',contrastKind,secn);
    title(titles);
end
axis square;
if out == 2
    savePngFig(figno,iOut,seti);
end
end