Skip to content
sempaneldisp.m 5.47 KiB
Newer Older
function [qemb,semres]=sempaneldisp(qemres,semres,qemb,qemb0,handles)
Simone Liuzzo's avatar
Simone Liuzzo committed

if nargin < 5, handles=struct(); end

qemb.at=qemat(qemres,qemb,true);
qemb=qemoptics(qemres,qemb,qemb0);
sbpm=cat(1,qemb.lindata.SPos);

if isfield(handles,'axes1')
    sqcheck(qemb.ks,qemb.kn,qemb.diptilt,handles.axes1,get(handles.largefigure,'Value'));
Simone Liuzzo's avatar
Simone Liuzzo committed
else
    sqcheck(qemb.ks,qemb.kn,qemb.diptilt,[],get(handles.largefigure,'Value'));
Simone Liuzzo's avatar
Simone Liuzzo committed
end

mess={};
if (isfield(handles,'compare') && handles.compare) || ...
        (isfield(handles,'pushbutton13') && strcmpi(get(handles.pushbutton13,'Enable'),'Off'))
    if all(isfield(semres,{'resph','respv','frespz'}))
        diffv2h=qemb.atrespv2h-semres.resph;    % Response V -> H in m/rad
        diffh2v=qemb.atresph2v-semres.respv;    % Response H -> V in m/rad
        diff2=[diffv2h diffh2v];
        residual=std2(diff2(:));
        vdispresidual=qemb.pm.alpha*std2(semres.bvscale*semres.frespz-qemb.frespz);
        
        if ~isempty(semres.fithist) % store fit history
            semres.fithist=[semres.fithist;[std2(diffv2h(:)),std2(diffh2v(:)),vdispresidual]];
        else
            semres.fithist=[[std2(diffv2h(:)),std2(diffh2v(:)),vdispresidual]];
        end
        
        
Simone Liuzzo's avatar
Simone Liuzzo committed
        fprintf('residual V2H = %g m/rad\n', std2(diffv2h(:)));
        fprintf('residual H2V = %g m/rad\n', std2(diffh2v(:)));
        mess={['orbit residual = '  num2str(residual)];...
            ['V disp. residual = ' num2str(vdispresidual)]};
        qemplotresp(4,diffv2h,diffh2v,'deviation');
    end
end


% PLOT EMITTANCE compared to measurement (see qemoptics.m and
Simone Liuzzo's avatar
Simone Liuzzo committed
% sr.pinholenames(1:5)
Simone Liuzzo's avatar
Simone Liuzzo committed
mess0=semdisp(qemb,qemres,semres);      % figures 1 and 2
mess=[mess;...
    sprintf('tunes H/V: %.4f/%.4f',qemb.pm.fractunes);...
    mess0];

if isfield(handles,'text3')             % displays values
Simone Liuzzo's avatar
Simone Liuzzo committed
    set(handles.text3,'String',mess,'FontSize',10);
Simone Liuzzo's avatar
Simone Liuzzo committed
else
    fprintf('%s\n',mess{:});
end

if isfield(handles,'axes4')             % displays corr. strengths
    
    if  get(handles.largefigure,'Value')
        figure(21);
        extfigax = gca;
        plot(extfigax,qemb.skewcor);
        legend(extfigax,'initial','corrected');
        title(extfigax,'Corrector strengths');
        grid(extfigax,'on');
    end
    % colormp default;
    Nc = length(qemb.skewcor);
    extracor = mod(Nc,32); % remove extra correctors from injection cells
    cor_per_cell_std = squeeze(std(reshape(...
        qemb.skewcor((1+extracor/2):(Nc-extracor/2),:),...
        [],32,size(qemb.skewcor,2)),1,1));
    % cor_per_cell_mean = squeeze(mean(reshape(qemb.cor((1+extracor/2):(Nc-extracor/2),:),32,[],2),2));
    %bar(handles.axes4,cor_per_cell_std,'EdgeColor','none');
Simone Liuzzo's avatar
Simone Liuzzo committed
    try
        wc= [0.9,0.5]; % superimpose ba
        yyaxis rigth
        bar(handles.axes4,cor_per_cell_std(:,1),wc(1),'EdgeColor','none');
        
        yyaxis left
        bar(handles.axes4,cor_per_cell_std(:,2),wc(2),'EdgeColor','none');
        yyaxis rigth
        
Simone Liuzzo's avatar
Simone Liuzzo committed
    catch
        bar(handles.axes4,cor_per_cell_std,0.9,'EdgeColor','none');
    handles.axes4.XTick=[1:32];
    handles.axes4.XTickLabel=arrayfun(@(a)num2str(a),[4:32,1:3],'un',0);
    handles.axes4.XTickLabelRotation=90;
    
    title(handles.axes4,'std Corrector strengths (per cell)');
    legend(handles.axes4,'initial','corrected');
    grid(handles.axes4,'on');
Simone Liuzzo's avatar
Simone Liuzzo committed
end

if isfield(handles,'axes2')             % displays vertical dispersion
    if isfield(semres,'frespz')
        plot(handles.axes2,sbpm,-qemb.pm.alpha*[semres.bvscale*semres.frespz qemb.frespz]);
        leg = {'measured','fit'};
Simone Liuzzo's avatar
Simone Liuzzo committed
    else
        plot(handles.axes2,sbpm,-qemb.pm.alpha*qemb.frespz);
        leg = {'measured'};
Simone Liuzzo's avatar
Simone Liuzzo committed
    end
    title(handles.axes2,'Vertical dispersion');
    ax=axis(handles.axes2);
    ym=max(abs(ax([3 4])));
    axis(handles.axes2,[0 844.39 -ym ym]);
    ylabel(handles.axes2,'\eta_z [m]');
    grid(handles.axes2,'on');
    legend(handles.axes2,leg);
Simone Liuzzo's avatar
Simone Liuzzo committed
end

if isfield(handles,'axes3')             % displays horizontal dispersion
    if isfield(qemres,'frespx')
        plot(handles.axes3,sbpm,-qemb.pm.alpha*[qemres.bhscale*qemres.frespx-qemb0.frespx qemb.frespx-qemb0.frespx]);
    else
        plot(handles.axes3,sbpm,-qemb.pm.alpha*(qemb.frespx-qemb0.frespx));
    end
    title(handles.axes3,'Horizontal dispersion');
    ax=axis(handles.axes3);
    ym=max(abs(ax([3 4])));
    axis(handles.axes3,[0 844.39 -ym ym]);
    ylabel(handles.axes3,'\eta_x [m]');
    grid(handles.axes3,'on');
end

figure(61);
yyaxis left
hold off;
plot(qemres.fithist(:,1),'bx-','LineWidth',3,'MarkerSize',10);
hold on;
plot(qemres.fithist(:,2),'ro-','LineWidth',3,'MarkerSize',10);
if ~isempty(semres.fithist)
    plot(semres.fithist(:,1),'cx-','LineWidth',3,'MarkerSize',10);
    plot(semres.fithist(:,2),'mo-','LineWidth',3,'MarkerSize',10);
end
xlabel('fit step #');
ylabel('std RM residual');
grid on;
yyaxis right 
hold off;
plot(qemres.fithist(:,3),'gs-','LineWidth',3,'MarkerSize',10);
hold on;
plot(semres.fithist(:,3),'ys-','LineWidth',3,'MarkerSize',10);
ylabel('disp. residual');
legend('HH','VV','V2H','H2V','DH','DV');
Simone Liuzzo's avatar
Simone Liuzzo committed
if isfield(handles,'selplot')           % additional plot
    sempanelplot(5,handles.selplot,qemb0,qemb,qemres);
elseif isfield(handles,'popupmenu3')
    sempanelplot(5,get(handles.popupmenu3,'Value'),qemb0,qemb,qemres);
end


    function bave=baverage(b)
        bb=mean(sr.fold(b),2);
        bave=repmat([bb;bb(end:-1:1)],16,1);
    end

    function mdl=bmodul(beta,beta0)
        mdl=(beta-beta0)./beta0;
    end
end