Documentation of idgenfig


Global Index (short | long) | Local contents | Local Index (short | long)


Function Synopsis

idgenfig(models,figures)

Help text

IDGENFIG Generates all view curves for ident.
   The function generates all curves associated with models MODELS
   in view windows FIGURES. The handle numbers of these curves are
   stored in the userdata of the corresponding axes, so that row
   number 2*K+1 of the userdata contains the handles of lines
   associated with model number K, while row 2*K+2 contains the
   corresponding confidence interval lines.

Cross-Reference Information

This function calls This function is called by

Listing of function idgenfig

function idgenfig(models,figures)

%   L. Ljung 4-4-94
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 3.10 $  $Date: 1998/07/15 19:32:10 $


global   XIDplotw XIDmen XIDsumb


hnr=[]; gc=[];

Plotcolors=idlayout('plotcol');
textcolor=Plotcolors(6,:);  %To be used for validation data and outlines

sumbs=findobj(get(0,'children'),'flat','tag','sitb30');
modaxs=get(XIDsumb(1),'children');
for kk=sumbs(:)'
   modaxs=[modaxs;get(kk,'children')];
end
chmess='Model(s) incompatible with chosen channels.';
chmess2='Model(s) incompatible with chosen channel.';
for Figno=figures
  hsd=findobj(XIDplotw(Figno,1),'tag','confonoff');
  SD=get(hsd,'Userdata');
  figure(XIDplotw(Figno,1)),
  xusd=get(XIDplotw(Figno,1),'Userdata');
  xax=xusd(3:length(xusd));
  if isempty(get(xax(1),'children')),newplot=1;else newplot=0;end %%LL
  Opthand=XIDplotw(Figno,2);
  opt=get(Opthand,'UserData');
  hnrxor=findobj(XIDplotw(Figno,1),'label',menulabel('Erasemode &xor'));
  if strcmp(get(hnrxor,'checked'),'on')
     ermode='xor';
  else
     ermode='normal';
  end
  %ermode='normal';
  [kydes,kudes]=iduiiono('unpack',Figno);
  if Figno==2   % This is the Bode Case
      iduistat('Computing Frequency functions...')
      w=eval(deblank(opt(4,:)));
      [rw,cw]=size(w);if cw>rw w=w'; rw=cw;end,if rw==0,rw=128;end
      hz=eval(opt(3,:))-1;
      plx=eval(opt(1,:))-1;
      ply=eval(opt(2,:))-1;
      for k=models
         isconf=1;
         doplot=1;docalc=1;
         khax=findobj(modaxs,'flat','tag',['model',int2str(k)]);
         kstr=findobj(khax,'tag','name');
         klin=findobj(khax,'tag','modelline');
         nam=get(kstr,'userdata');
         name=get(kstr,'string');
         [ny,nu,ky,ku]=iduiiono('old',nam,'mod',[kudes,kydes]);
         if nu==0
           errordlg(str2mat(['The model ',name,' is a time series model.'],...
               'Use ''Noise spectrum'' instead of the frequency plot.'));
           docalc=0;doplot=0;
           figure(XIDplotw(Figno,1)),
         elseif isempty(ku)|isempty(ky)
           iduistat(chmess,0,Figno);
           docalc=0;doplot=0;  figure(XIDplotw(Figno,1)),
         end
         gc=[];
         if docalc
         nam=nam(1,1:5);
         if nam(1:3)=='spa'
            gc=[get(klin,'UserData')];
            if nam(5)=='e'; isconf=0;end
            [rgc,cgc]=size(gc);rw=rgc-1;
         elseif ~strcmp(nam(1:3),'cra')
            gc=iduicalc('ff',get(klin,'UserData'),ky,ku,w);
         else
            iduistat('No frequency response for CRA model.',0,Figno);
            doplot=0;
         end
         end %if docalc
         axes(xax(1))
         xusd1=get(xax(1),'UserData');set(xax(1),'userdata',[]);
         if doplot
            [ggw,gga,ggp,ggsda,ggsdp]=getff(gc,ku,ky);
       if isempty(ggsda),isconf=0;end
       if hz ggw=ggw/2/pi;end
           if plx, set(gca,'Xscale','log'),else set(gca,'Xscale','linear'),end
           if ply, set(gca,'Yscale','log'),else set(gca,'Yscale','linear'),end
           color=get(klin,'color');
           xusd1(2*k+1,1)=line(ggw,gga,'color',color,'erasemode',ermode,...
                    'visible','off','userdata',kstr);
           hnr=[xusd1(2*k+1,1)];
           if isconf
               xusd1(2*k+2,1:2)=line([ggw ggw],[gga+SD*ggsda max(gga-SD*ggsda,0)],...
                  'color',color,'linestyle','-.','erasemode',ermode,...
                  'Visible','off','userdata',kstr,'tag','conf')';
               hnr=[hnr,xusd1(2*k+2,1:2)];
           else
              if nam(1:3)=='spa'
                 noconf=-2;
              else
                 noconf=-1;
              end
              xusd1(2*k+2,1:2)=[noconf,noconf];
           end
         else
          xusd1(2*k+1,1)=-1;
         end %if doplot
         set(xax(1),'userData',xusd1);
         if doplot
           axes(xax(2))
           xusd2=get(xax(2),'UserData');set(xax(2),'userdata',[]);
           if plx, set(gca,'Xscale','log'),else set(gca,'Xscale','linear'),end
           xusd2(2*k+1,1)=line(ggw,ggp,'color',color,'erasemode',ermode,...
                     'visible','off','userdata',kstr);
           hnr=[hnr,xusd2(2*k+1,1)];
           if isconf
               xusd2(2*k+2,1:2)=line([ggw ggw],[ggp+SD*ggsdp ggp-SD*ggsdp],...
                  'color',color,'linestyle','-.','erasemode',ermode,...
                  'Visible','off','userdata',kstr,'tag','conf')';
               hnr=[hnr,xusd2(2*k+2,1:2)];
           else
              if nam(1:3)=='spa'
                 noconf=-2;
              else
                 noconf=-1;
              end
              xusd2(2*k+2,1:2)=[noconf,noconf];
           end
           set(xax(2),'userdata',xusd2)
           usd=[idnonzer(get(khax,'userdata'));hnr(:)];
           set(khax,'userdata',usd);

         end %if doplot
    end % for models
  elseif Figno==7,   % This is the Spectrum Case
      iduistat('Computing Spectra...')
      w=eval(deblank(opt(4,:)));
      [rw,cw]=size(w);if cw>rw w=w'; rw=cw;end,if rw==0,rw=128;end
      hz=eval(opt(3,:))-1;
      plx=eval(opt(1,:))-1;
      ply=eval(opt(2,:))-1;
      for k=models
         isconf=1;
         doplot=1;docalc=1;
         khax=findobj(modaxs,'flat','tag',['model',int2str(k)]);
         kstr=findobj(khax,'tag','name');
         klin=findobj(khax,'tag','modelline');
         nam=get(kstr,'userdata');
         name=get(kstr,'string');
         [ny,nu,ky,ku]=iduiiono('old',nam,'mod',[kudes,kydes]);
         if isempty(ky)
           iduistat(chmess2,0,Figno);
           docalc=0;doplot=0;  figure(XIDplotw(Figno,1)),

         end
    if docalc
         nam=nam(1,1:5);
         if nam(1:3)=='spa'
            spe=[get(klin,'UserData')];
            if nam(5)=='e';
               isconf=0;
               if nu>0
                  iduistat('No disturbance spectrum for EFTE model.',0,Figno);
                  doplot=0;
               end
            end
%            [rgc,cgc]=size(gc);rw=rgc-1;
         elseif ~strcmp(nam(1:3),'cra')
            spe=iduicalc('spe',get(klin,'UserData'),ky,0,w);%end
         else
            iduistat('No spectrum for CRA model.',0,Figno);
            doplot=0;
         end
    end % if docalc
         axes(xax(1))
         xusd1=get(xax(1),'UserData');set(xax(1),'UserData',[]);
         if doplot
            [ggw,gga,dum,ggsda,dum]=getff(spe,0,ky);
            if isempty(ggsda),isconf=0;end
       if hz ggw=ggw/2/pi;end
           if plx, set(gca,'Xscale','log'),else set(gca,'Xscale','linear'),end
           if ply, set(gca,'Yscale','log'),else set(gca,'Yscale','linear'),end
           color=get(klin,'color');
           xusd1(2*k+1,1)=line(ggw,gga,'color',color,'erasemode',ermode,...
                    'visible','off','userdata',kstr);
           hnr=[xusd1(2*k+1,1)];
           if isconf
               xusd1(2*k+2,1:2)=line([ggw ggw],[gga+SD*ggsda max(gga-SD*ggsda,0)],...
                  'color',color,'linestyle','-.','erasemode',ermode,...
                  'Visible','off','userdata',kstr,'tag','conf')';
               hnr=[hnr,xusd1(2*k+2,1:2)];
           else
              if nam(1:3)=='spa'
                 noconf=-2;
              else
                 noconf=-1;
              end
              xusd1(2*k+2,1:2)=[noconf,noconf];
           end
         usd=[idnonzer(get(khax,'userdata'));hnr(:)];
         set(khax,'userdata',usd);
         else
          xusd1(2*k+1,1)=-1;
         end %if doplot
         set(xax(1),'userData',xusd1);

    end % for models

  elseif Figno==3   % This is Compare
   if any(models==0)
     iduistat('Adjusting fit table ...',0,3);
   else
     iduistat('Computing simulation/prediction ...')
     if isempty(get(gca,'children')) %%LL
         newplot=1;
     else
         newplot=0;
     end

     [vDat,vDat_info,vDat_name,kv]=iduigetd('v');
     TSamp=eval(vDat_info(1,:));t0=eval(vDat_info(3,:));
     [dny,dnu,dky]=iduiiono('old',vDat_info,'dat',[kudes,kydes]);
     if isempty(dky)
     errordlg(str2mat(['The validation data ',vDat_name,' does not contain'],...
                 'the chosen output channel for the model output plot.'));
           docalc=0;doplot=0;return
     end
     dat_u_ind=eval(['[',deblank(vDat_info(7,:)),']']);
     dat_y_ind=eval(['[',deblank(vDat_info(6,:)),']']);
     gc=vDat(:,dky);
     yval=gc;
     eval('PH=eval(opt(1,:));','PH=0;')
     if isempty(PH),PH=5;end
     if length(PH)>1|PH(1)<1|floor(PH(1))~=PH(1)
        errordlg(str2mat('The prediction horizon must be a positive integer.'));
        return
     end

     isdiff=eval(opt(4,:));
     if eval(opt(2,:))==2,ISSim=0;else ISSim=1;end, if isinf(PH),ISSim=1;end
     if dnu==0&ISSim,
        hmpred=findobj(XIDplotw(3,1),'tag','predict');
        hmsim=findobj(XIDplotw(3,1),'tag','simul');
        idopttog('check',hmpred);set(hmsim,'enable','off');
        return;
     end
     flag=0;
     eval('sumsamp=eval([''['',deblank(opt(3,:)),'']'']);','flag=1;')
     if flag
        errordlg(str2mat('The time span for computing the model fit',...
                'cannot be evaluated. Please check the text you typed in',...
                'the Options dialog box.'));
        return
     end
     if isempty(sumsamp),
        sumsamp=1:length(gc);
     else
        sumsamp=(sumsamp(1)-t0)/TSamp:(sumsamp(length(sumsamp))-t0)/TSamp;
     end
     indss=find(sumsamp<=length(gc)&sumsamp>0);
     if isempty(indss)
      errordlg(str2mat('Warning: The time span for computing the fit that',...
           'you have specified does not overlap with the time span of the',...
           'validation data.'));
     end
     sumsamp=sumsamp(indss);
    end % if models==0
     for k=models
       if k>0
         khax=findobj(modaxs,'flat','tag',['model',int2str(k)]);
         kstr=findobj(khax,'tag','name');
         klin=findobj(khax,'tag','modelline');
         nam=get(kstr,'userdata');
         name=get(kstr,'string');
        [ny,nu,ky]=iduiiono('old',nam,'mod',[kudes,kydes]);
        mod_u_ind=eval(['[',deblank(nam(8,:)),']']);
        mod_y_ind=eval(['[',deblank(nam(7,:)),']']);
        u_ind=[];y_ind=[];stopflag=0;
        if isempty(mod_u_ind)&~isempty(dat_u_ind),stopflag=1;end
        for kku=mod_u_ind
            kuindex=find(kku==dat_u_ind);
            if isempty(kuindex)
               stopflag=1;
            else
               u_ind=[u_ind,kuindex];
            end
        end
        if ~ISSim
          for kky=mod_y_ind
            kyindex=find(kky==dat_y_ind);
            if isempty(kyindex)
               stopflag=1;
            else
               y_ind=[y_ind,kyindex];
            end
          end
        end
        if stopflag
           errordlg(...
             str2mat(['The model ',name,' requires input/output channels'],...
                    'that are not available in the validation data.'));
           docalc=0;  figure(XIDplotw(Figno,1)),

        elseif isempty(ky)
           iduistat(chmess2,0,Figno);
           docalc=0;  figure(XIDplotw(Figno,1)),

        else
           docalc=1;
        end
        doplot=0;
        if nam(1,1:3)=='cra' | nam(1,1:3)=='spa'
           iduistat('No model output for SPA and CRA models.',0,Figno);
        elseif docalc
           doplot=1;
           [model,modelky]=iduicalc('unpack',get(klin,'UserData'),ky);
           if ISSim
             if ~isempty(modelky)
              [gc,sdgc]=idsim([vDat(:,dny+u_ind),...
                     zeros(length(vDat),ny)],modelky,1);
              gc=idsim(vDat(:,dny+u_ind),model,1);
             else
              [gc,sdgc]=idsim(vDat(:,dny+u_ind),model,1);
             end
           else
              gc=predict(vDat(:,[y_ind,dny+u_ind]),model,PH);sdgc=[];
           end
           gc=gc(:,ky);
           if isempty(sdgc),isconf=0;else isconf=1;end
           fit=sqrt(1/length(sumsamp)*sum((vDat(sumsamp,dky)-gc(sumsamp)).^2));
        end
        xusd1=get(xax(1),'UserData');set(xax(1),'userdata',[]);
        if strcmp(get(hsd,'checked'),'on')
              onoff='on';
        else
              onoff='off';
        end
        else % i.e. if k==0
          doplot=1;
        end % if k>0
        if doplot
            xaxtab=findobj(XIDplotw(3,1),'tag','table');
          if k>0
            [rgc,cgc]=size(gc);
            if isdiff,gc=yval-gc;end
            color=get(klin,'color');
            TImeC=[0:rgc-1]*TSamp+t0;TImeC=TImeC'*ones(1,cgc);
            axes(xax(1))
            xusd1(2*k+1,1)=line(TImeC,gc,'color',color,'erasemode',ermode,...
                      'userdata',kstr);
            axes(xaxtab);
       fz=idlayout('fonts',100);
       xusd1(2*k+1,2)=text(0,0,...
                    [get(kstr,'string'),': ',num2str(fit)],'color',color,...
                    'units','points','HorizontalAlignment','left',...
                  'userdata',fit,'tag','fits','fontsize',fz);
          end % if k>0
            axes(xaxtab);
            fits=findobj(xaxtab,'tag','fits');
            vals=[];
            for kf=fits'
               vals=[vals,get(kf,'userdata')];
            end
            [dum,indv]=sort(vals);
            kp=15;
            xlead=findobj(xaxtab,'tag','leader');
            set(xlead,'units','points');xlpos=get(xlead,'pos');
            set(xlead,'units','norm');
            for kf=indv(:)'
               set(fits(kf),'pos',[1 xlpos(2)-kp]);
               kp=kp+15;
            end
           if k==0,iduistat('',0,3);return,end
               % k=0 has just been a response to resizing.
       hnr=[xusd1(2*k+1,1:2)];
            axes(xax(1))
            if ISSim
             if isconf
              xusd1(2*k+2,1:2)=line([TImeC TImeC],[gc+SD*sdgc gc-SD*sdgc],...
                  'color',color,'linestyle','-.','erasemode',ermode,...
                  'Visible',onoff,'userdata',kstr,'tag','conf')';
              hnr=[hnr,xusd1(2*k+2,1:2)];
             else
              xusd1(2*k+2,1:2)=[-1,-1];
             end
            end
            if xusd1(2,2)==0&~isdiff
              xusd1(2,2)=line(TImeC,vDat(:,dky),'color',textcolor,'erasemode',...
                        ermode,'userdata',kv(3));
            end
            usd=[idnonzer(get(khax,'userdata'));hnr(:)];
            set(khax,'userdata',usd);
         else
            xusd1(2*k+1,1)=-1;
         end % end doplot
         set(xax(1),'UserData',xusd1)
      end %for models
      if newplot,axis(axis),axis('auto'),end

  elseif Figno==4  % ZPPLOT
     iduistat('Computing Poles and Zeros...')
     axes(xax(1))
     om=2.02*pi*[1:100]/100;
     w=exp(om*sqrt(-1));
     newc=findobj(xax(1),'tag','zpucl');
     if isempty(newc)
         om=2.01*pi*[1:100]/100;
         w=exp(om*sqrt(-1));
         huc=line(real(w),imag(w),'color',textcolor,'vis','off','tag','zpucl');
         ucmen=findobj(XIDplotw(4,1),'tag','zpuc');
         if ~isempty(ucmen),if strcmp(get(ucmen,'checked'),'on')
            set(huc,'vis','on');
         end,end
         hreiem(1)=line([-1 1],[0 0],'color',textcolor,'vis','off','tag','zpaxr');
         hreiem(2)=line([0 0],[-1 1],'color',textcolor,'vis','off','tag','zpaxi');
         ucmen=findobj(XIDplotw(4,1),'tag','zpax');
         if ~isempty(ucmen),if strcmp(get(ucmen,'checked'),'on')
            set(hreim,'vis','on');
         end,end
         axis('equal'),%set(XIDmen(4,15),'checked','on'); %%LL
     end

     for kcount=models
         khax=findobj(modaxs,'flat','tag',['model',int2str(kcount)]);
         kstr=findobj(khax,'tag','name');
         klin=findobj(khax,'tag','modelline');
         nam=get(kstr,'userdata');
         name=get(kstr,'string');
    doplot=1;docalc=1;
    [ny,nu,ky,ku]=iduiiono('old',nam,'mod',[kudes,kydes]);
         if isempty(ky)|isempty(ku)
           iduistat(chmess,0,Figno);
           docalc=0;doplot=0;  figure(XIDplotw(Figno,1)),

         end
         if docalc
         if nam(1,1:3)=='cra' | nam(1,1:3)=='spa'
            doplot=0;
            iduistat('No plot for CRA and SPA models.',0,Figno);
         else
            doplot=1;
            zepo=iduicalc('zp',get(klin,'Userdata'),ky,ku);
         end
         end %if docalc

         xusd=get(xax(1),'UserData');set(xax(1),'UserData',[]);
        [nrxusd,ncxusd]=size(xusd);
        if doplot
         [zz,pp,zzsd,ppsd]=getzp(zepo,ku,ky);
         if isempty(zzsd)&isempty(ppsd),isconf=0;else isconf=1;end
         color=get(klin,'color');
         MATLABversion = version;
         if MATLABversion(1)=='4',
            PropertyName = 'LineStyle';
         else
            PropertyName = 'Marker';
         end
         sl1=line(real(zz),imag(zz),...
               'color',color,PropertyName,'o','erasemode',ermode,...
               'userdata',kstr);
         sl2=line(real(pp),imag(pp),...
               'color',color,PropertyName,'x','erasemode',ermode,...
               'userdata',kstr);
        if MATLABversion(1)~='4',
           set(sl1,'Linestyle','none');
           set(sl2,'Linestyle','none');
        end
% Now follows the confidence regions
       sl3=[];sl4=[];nc=[];
      if isempty(zzsd)
         zeros_cf=0;
      else
         zeros_cf=1;
         zepo=[zz,zzsd];[nrll,nc]=size(zepo);
         for k=1:nrll
             sl31=[];
             if imag(zepo(k,1))==0
                rp=real(zepo(k,1)+SD*zepo(k,2)*[-1 1]);
                [mr,nr] = size(rp);
                sl31=line(rp,zeros(mr,nr),'color',color,'linestyle','-',...
                     'erasemode',ermode,'visible','off','userdata',kstr);
             elseif imag(zepo(k,1))>0
                r1=real(zepo(k,2));r2=imag(zepo(k,2));r3=zepo(k+1,2);
           p1=r1*r1;p2=r2*r2;p3=r3*r1*r2;
           SM=[p1 p3;p3 p2]; [V,D]=eig(SM); z1=real(w)*SD*sqrt(D(1,1));
           z2=imag(w)*SD*sqrt(D(2,2)); X=V*[z1;z2];
           X=[X(1,:)+real(zepo(k,1));X(2,:)+imag(zepo(k,1))];
           sl31=line(X(1,:),X(2,:),'color',color,...
                    'linestyle','-','erasemode',ermode,'visible','off'...
                    ,'userdata',kstr);
           sl=line(X(1,:),-X(2,:),'color',color,...
                    'linestyle','-','erasemode',ermode,'visible','off'...
                    ,'userdata',kstr);
                sl31=[sl31;sl];
            end % if imag

            sl3=[sl3;sl31];
        end  %for k=
      end % if isempty(zzsd)

      if isempty(ppsd)
        poles_cf=0;
      else
        poles_cf=1;
        zepo=[pp,ppsd];[nrll,nc]=size(zepo);
        for k=1:nrll
            sl41=[];
            if imag(zepo(k,1))==0
               rp=real(zepo(k,1)+SD*zepo(k,2)*[-1 1]);
               [mr,nr] = size(rp);
               sl41=line(rp,zeros(mr,nr),'color',color,'linestyle','-.',...
                      'erasemode',ermode,'visible','off','userdata',kstr,...
                      'tag','conf');
            elseif imag(zepo(k,1))>0
               r1=real(zepo(k,2));r2=imag(zepo(k,2));r3=zepo(k+1,2);
          p1=r1*r1;p2=r2*r2;p3=r3*r1*r2;
          SM=[p1 p3;p3 p2]; [V,D]=eig(SM); z1=real(w)*SD*sqrt(D(1,1));
          z2=imag(w)*SD*sqrt(D(2,2)); X=V*[z1;z2];
          X=[X(1,:)+real(zepo(k,1));X(2,:)+imag(zepo(k,1))];
          sl41=line(X(1,:),X(2,:),'color',color,...
                    'linestyle','-','erasemode',ermode,'visible','off'...
                    ,'userdata',kstr,'tag','conf');
          sl=line(X(1,:),-X(2,:),'color',color,...
                    'linestyle','-','erasemode',ermode,'visible','off'...
                    ,'userdata',kstr,'tag','conf');
               sl41=[sl41;sl];
            end % if imag

            sl4=[sl4;sl41];
        end %for k=
      end % if isempty(ppsd)
        l1=length(sl1)+length(sl2);l2=length(sl3)+length(sl4);
                if ncxusd<l1+l2+2,xusd=[xusd,zeros(nrxusd,l1+l2+2-nc)];end
        if l1>0,xusd(2*kcount+1,1:l1)=[sl1' sl2'];hnr=[sl1',sl2'];end
        if l2>0,
             xusd(2*kcount+2,1:l2)=[sl3',sl4'];hnr=[hnr,sl3',sl4'];
        else
             xusd(2*kcount+2,1)=-1;
        end
        if strcmp(get(hsd,'checked'),'on')
              set(idnonzer([sl3',sl4']),'visible','on');
        end
       else
        xusd(2*kcount+1,1)=-1;
       end  %if doplot
         set(xax(1),'Userdata',xusd)
         usd=[idnonzer(get(khax,'userdata'));hnr(:)];
         set(khax,'userdata',usd);

    end %for kcount
    hre=findobj(XIDplotw(4,1),'tag','zpaxr');
    set(hre,'xdata',get(get(hre,'parent'),'xlim'));
    him=findobj(XIDplotw(4,1),'tag','zpaxi');
    set(him,'ydata',get(get(hre,'parent'),'ylim'));
 elseif Figno==5  % This is transient response
    iduistat('Computing transient response...')
    TImespan=eval(deblank(opt(2,:)));
    if isempty(TImespan),TImespan=1:40;end
    if eval(opt(3,:))==1,ISStep=1;else ISStep=0;end
    if eval(opt(1,:))==2,ISStem=1;else ISStem=0;end

    for k=models
         khax=findobj(modaxs,'flat','tag',['model',int2str(k)]);
         kstr=findobj(khax,'tag','name');
         klin=findobj(khax,'tag','modelline');
         nam=get(kstr,'userdata');
         name=get(kstr,'string');
        [ny,nu,ky,ku]=iduiiono('old',nam,'mod',[kudes,kydes]);
        doplot=1;docalc=1;
         if isempty(ky)|isempty(ku)
           iduistat(chmess,0,Figno);
           docalc=0;doplot=0;  figure(XIDplotw(Figno,1)),

         end
         if docalc
   if nam(1,1:3)=='cra'
          if kudes<0
            iduistat('No noise response for CRA model.',0,Figno);
           doplot=0;
          else
           IR=get(klin,'UserData');IR=IR(:,(ky-1)*nu+ku);
           TSamp=IR(1);sdIR=IR(2)/2.58*ones(length(IR)-2,1);
           IR=IR(3:length(IR));
           isconf=1;
           if ISStep IR=cumsum(IR);sdIR=sdIR(1)*sqrt(1:length(IR))';end
          end
        elseif nam(1,1:3)=='spa'
           iduistat('No transient response for SPA model.',0,Figno);
           doplot=0;
        else
           [MOdel,modelky]=iduicalc('unpack',get(klin,'UserData'),ky);
           TSamp=abs(gett(MOdel));
           MSamp=TImespan;
           if ISStep
             uu=ones(MSamp,1);
           else
             uu=[1;zeros(MSamp-1,1)];
           end
      if ku<0,kku=nu-ku;else kku=ku;end
           uuu=[zeros(MSamp,kku-1),uu,zeros(MSamp,nu+ny-kku)];
           if ~isempty(modelky)
              [IR,sdIR]=idsim(uuu,modelky,1);
              IR=idsim(uuu,MOdel,1);
           else
              [IR,sdIR]=idsim(uuu,MOdel,1);
           end
           IR=IR(:,ky);
           if isempty(sdIR)
              isconf=0;
           else
              isconf=1;
           end
        end
   end % if docalc
        xusd=get(xax(1),'userdata');set(xax(1),'UserData',[]);
        if doplot
           TImeS=[0:length(IR)-1]'*TSamp;
           color=get(klin,'color');
           if strcmp(get(hsd,'checked'),'on')
              onoff='on';
           else
              onoff='off';
           end
           axes(xax(1))
           if ISStem
             xx=[TImeS';TImeS';nan*ones(size(TImeS'))];
             yy=[zeros(1,length(TImeS));IR';nan*ones(size(IR'))];
             MATLABversion = version;
             if MATLABversion(1)=='4',
                PropertyName = 'LineStyle';
             else
                PropertyName = 'Marker';
             end
               sl1=line(TImeS',IR','color',color,...
                           'erasemode',ermode,PropertyName,'o','userdata',kstr);
             sl2=line(xx(:),yy(:),'color',color,'erasemode',ermode,...
                            'userdata',kstr);
             xusd(2*k+1,1:2)=[sl1' sl2'];hnr=[sl1',sl2'];

           else
             xusd(2*k+1,1)=line(TImeS,IR,'color',color,'erasemode',ermode...
                               ,'userdata',kstr);
             hnr=xusd(2*k+1,1);
           end
           if isconf
             if ISStem&~ISStep
              curves=[SD*sdIR -SD*sdIR];
             else
              curves=[IR+SD*sdIR  IR-SD*sdIR];
             end
             xusd(2*k+2,1:2)=line([TImeS TImeS],curves,'color',color,...
                           'erasemode',ermode,'linestyle','-.',...
            'visible',onoff,'userdata',kstr,'tag','conf')';
             hnr=[hnr,xusd(2*k+2,1:2)];
           else %noconf
             xusd(2*k+2,1:2)=[-1,-1];
           end
        else
           xusd(2*k+1,1)=-1;
        end
        set(xax(1),'Userdata',xusd)
        usd=[idnonzer(get(khax,'userdata'));hnr(:)];
        set(khax,'userdata',usd);
        if newplot, axis(axis),axis('auto'),end
    end %for k=
  elseif Figno==6
  iduistat('Computing residuals...')
    maxsize=idmsize;
    [z,z_info,vDat_name]=iduigetd('v');
    M=eval(opt);if isempty(opt),M=21;else M=M+1;end
    [dny,dnu,dky,dku]=iduiiono('old',z_info,'dat',[kudes,kydes]);
    if isempty(dky)
   errordlg(str2mat(['The validation data ',vDat_name,' does not contain'],...
                 'the chosen output channel for the residual plot.'));
           docalc=0;doplot=0;return
    end
    dat_u_ind=eval(['[',deblank(z_info(7,:)),']']);
    dat_y_ind=eval(['[',deblank(z_info(6,:)),']']);

    for k=models
         khax=findobj(modaxs,'flat','tag',['model',int2str(k)]);
         kstr=findobj(khax,'tag','name');
         klin=findobj(khax,'tag','modelline');
         nam=get(kstr,'userdata');
         name=get(kstr,'string');
         if nam(1,1:3)=='spa' | nam(1,1:3)=='cra',
            iduistat('No plot for CRA and SPA models.',0,Figno);
           docalc=0;doplot=0;
         else
           docalc=1;doplot=1;
         end
         if docalc
            [ny,nu,ky,ku]=iduiiono('old',nam,'mod',[kudes,kydes]);
             mod_u_ind=eval(['[',deblank(nam(8,:)),']']);
             mod_y_ind=eval(['[',deblank(nam(7,:)),']']);
             u_ind=[];y_ind=[];stopflag=0;
             for kku=mod_u_ind
                kuindex=find(kku==dat_u_ind);
                if isempty(kuindex)
                   stopflag=1;
                else
                   u_ind=[u_ind,kuindex];
                end
             end
             for kky=mod_y_ind
                 kyindex=find(kky==dat_y_ind);
                 if isempty(kyindex)
                    stopflag=1;
                 else
                    y_ind=[y_ind,kyindex];
                 end
             end
             if stopflag
                 errordlg(...
             str2mat(['The model ',name,' requires input/output channels'],...
                    'for the residual plot that are not available',...
                    'in the validation data.'));
                 doplot=0;  figure(XIDplotw(Figno,1)),

              elseif isempty(ky)
                iduistat(chmess2,0,Figno);
                doplot=0;  figure(XIDplotw(Figno,1)),

              else
                 doplot=1;
              end
     if doplot
         pos = idlayout('axes',1);posy = pos(1,:);
         posyts = idlayout('axes',7);
         if nu>0
             set(xax(1),'pos',posy,'xticklabel',[]);
         else
        set(xax(1),'pos',posyts,'xticklabelmode','auto');
             axes(xax(2)),cla,
             set(xax(2),'vis','off')
         end
        th=iduicalc('unpack',get(klin,'UserData'),ky);
        xusd1=get(xax(1),'userdata');set(xax(1),'userdata',[]);
        color=get(klin,'color');
        [N,nz]=size(z); %nu=th(1,3);ny=nz-nu;
        e=pe(z(:,[y_ind,dny+u_ind]),th);
        e=e(:,ky);
        if nu>0, e1=[e,z(:,dny+dku)];else e1=e;end
        r=covf(e1,M,maxsize);

        nr=1:M-1;
        ind=1;
        sdre=SD*(r(ind,1))/sqrt(N)*ones(2*M-1,1);
        axes(xax(1));[nllr,nllc]=size(r);
        xusd1(2*k+1,1)=line(nr,r(ind,2:nllc)'/r(ind,1),'color',color,...
                'erasemode',ermode,'userdata',kstr);
        xusd1(2*k+1,2)=line(-nr,r(ind,2:nllc)'/r(ind,1),'color',color,...
                'erasemode',ermode,'userdata',kstr);

        xusd1(2*k+2,1:2)=line([-M+1:M-1],[sdre -sdre]/r(ind,1),'color',color,...
           'linestyle',':','erasemode',ermode,'Visible','off',...
           'tag','conf','userdata',kstr)';
        hnr=[xusd1(2*k+1,1:2),xusd1(2*k+2,1:2)];
        if newplot,axis(axis),axis('auto'),end
        if nu>0
        nr=-M+1:M-1;
        set(xax(2),'vis','on')
        ind1=3;ind2=2;indy=1;indu=4;
        sdreu=SD*sqrt(r(indy,1)*r(indu,1)+2*(r(indy,2:M)*r(indu,2:M)'))...
             /sqrt(N)*ones(2*M-1,1);
        axes(xax(2))
        xusd2=get(xax(2),'userdata');set(xax(2),'userdata',[]);
        xusd2(2*k+1,1)=line(nr,...
           [r(ind1,M:-1:1) r(ind2,2:M) ]'/(sqrt(r(indy,1)*r(indu,1))),...
           'Erasemode',ermode,'color',color,'userdata',kstr);

       xusd2(2*k+2,1:2)=line(nr,[sdreu -sdreu]/(sqrt(r(indy,1)*r(indu,1))),...
           'LineStyle',':','EraseMode',ermode,'Visible','off','color',color...
            ,'userdata',kstr,'tag','conf')';
       if newplot,axis(axis),axis('auto')
       end
       set(xax(2),'userdata',xusd2)
       hnr=[hnr,xusd2(2*k+1,1),xusd2(2*k+2,1:2)];
       end %if nu>0
       if strcmp(get(hsd,'checked'),'on')
           set(idnonzer(xusd1(2*k+2,1:2)),'Visible','on')
           eval('set(idnonzer(xusd2(2*k+2,1:2)),''Visible'',''on'')','');
       end

     usd=[idnonzer(get(khax,'userdata'));hnr(:)];
     set(khax,'userdata',usd);
     else
      xusd1(2*k+1,1)=-1;
     end  % if doplot
     set(xax(1),'Userdata',xusd1)
    end % if docalc
  end %for k=models
  iduital(6);

end %if Figno


end % for figures