Documentation of iduiio


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


Function Synopsis

goto_ws=iduiio(arg,arg2,arg3,onoff)

Help text

IDUIIO Handles estimation of parametric models in input-output form.
   Arguments:
   open      Creates the model structure editor for this case
   orders    Adjusts the information after that a change in the
             order popups has been made
   ordedit   Adjusts the popups after a change in the chosen
             model structure has been made
   mname     Puts a default model name in the corresponding box
   estimate  Effectuates the actual estimation
   close     Closes the dialog box

Cross-Reference Information

This function calls This function is called by

Listing of function iduiio

function goto_ws=iduiio(arg,arg2,arg3,onoff)

%   L. Ljung 4-4-94
%   Copyright (c) 1986-98 by The MathWorks, Inc.
%   $Revision: 3.8 $  $Date: 1997/12/03 23:16:12 $

set(0,'Showhiddenhandles','on');

global XIDio XIDhw XIDparest XIDmse XIDiter XIDlayout XIDss XIDsumb
usd=get(XIDhw(3,1),'userdata');
nu=usd(1);ny=usd(2);nustr=usd(3:2+nu);nystr=usd(3+nu:ny+nu+2);
if nargin<2,update=1;else update=0;end
if strcmp(arg,'open')
   iduistat('Adjusting the Orders Editor ...')

   if nargin<4,
       ll1=iduiwok(20);onoff='off';
       if ishandle(ll1),onoff=get(ll1,'vis');end
   end
   FigName=idlaytab('figname',21);
   [fl,fi]=figflag(FigName,1);oldpos=[50 200];
   if fl
      nn=get(fi,'userdata');oldpos=get(fi,'pos');
      if any(nn(1:2)~=[nu ny])
         close(fi)
      elseif ~all(nn==usd)
         close(fi)
      end
   end
   if ~figflag(FigName,0)
       iduistat('Opening the Orders Editor ...')
       layout
       butw=0.75*mStdButtonWidth;

       PW = iduilay2(3*0.75+1.1);%4*butw+2*bb+5*ftb;
       pos = iduilay1(PW,2);
       if ny>1|nu>4,nmu=min(1,nu);else nmu=nu;end
       Lay2Pos = iduilay1(PW,2,nmu+4);

       figpos = [oldpos(1:2) PW pos(1,2)+pos(1,4)+Lay2Pos(1,2)+Lay2Pos(1,4)];
       f = figure('tag','sitb21','NumberTitle','off','Name',FigName,...
                  'HandleVisibility','callback','vis','off',...
                  'Color',get(0,'DefaultUIControlBackgroundColor'),...
                  'Menubar','none','Integerhandle','off',...
                  'Position',figpos,...
                  'userdata',usd);
       XIDmse(2) = f;
       s1='iduipoin(1);';s2='iduipoin(1);iduistat(''Compiling ...'');';
       s3='iduipoin(3);';

% ******************
       % LEVEL 1

       uicontrol(f,'pos',pos(1,:),'style','frame');
       uicontrol(f,'pos',pos(2,:),'string','Close',...
                'style','push',...
             'callback','iduiio(''close'')');
       uicontrol(f,'pos',pos(3,:),'string','Help','style','push',...
                 'callback',...
       'iduihelp(''iduiarx.hlp'',''Help: The ARX structure'');');


% ****************
       % LEVEL 2

       lev2 = pos(1,2)+pos(1,4);
       pos=iduilay1(PW,4*(nmu+3),nmu+3,lev2,[],[1.1 0.75 0.75 0.75]);


%       uicontrol(f,'pos',pos(1,:),'style','frame');
       uicontrol(f,'Style','frame','Position', ...
        [pos(1,1:2) figpos(3)-2*mEdgeToFrame figpos(4)-pos(1,2)-mEdgeToFrame])
       kbas=4*(nmu+1)+4;
       XIDss(1,6)=uicontrol(f,'pos',pos(kbas+3,:)+[0 0 2*butw 0],...
                  'vis','off','style','popup','string',...
                  'K=0 (Output Error)| Estimate K','userdata',[],'value',2);
       XIDio(1,6)=uicontrol(f,'pos',pos(kbas+3,:)); %nd
       XIDio(1,5)=uicontrol(f,'pos',pos(kbas+4,:)); %nc
       uicontrol(f,'pos',[pos(kbas+2,:)],...
              'style','text','string','Noise input',...
              'Horizontalalignment','left');

%*****************

       %LEVEL 3: ALL THE INPUTS
       kbas=4;
       XIDss(1,7)=uicontrol(f,'pos',pos(3+kbas,:)+[0 0 2*butw 0],...
            'style','pop','vis','off','string',...
            ' X0 = 0|Estimate X0');
       XIDss(2,7)=uicontrol(f,'pos',pos(2+kbas,:),...
            'style','text','vis','off','string',...
            'Initial state','Horizontalalignment','left');
       if nu>0
          XIDss(1,8)=uicontrol(f,'pos',pos(7+kbas,:)+[0 0 2*butw 0],...
            'style','pop','vis','off','string',...
            ' D = 0|Estimate D');
          XIDss(2,8)=uicontrol(f,'pos',pos(6+kbas,:),...
            'style','text','vis','off','string',...
            'Delay from u','Horizontalalignment','left');
          for kk=1:nmu
            XIDio(kk,2)=uicontrol(f,'pos',pos(kbas+3+4*kk,:)); %nf
            XIDio(kk,1)=uicontrol(f,'pos',pos(kbas+4+4*kk,:)); %nb
            XIDio(kk,3)=uicontrol(f,'pos',pos(kbas+5+4*kk,:)); %nk
            if nu>4|ny>1
              str='All Inputs';
            else
              if kk==nustr(kk)
               str=['Input # ',int2str(kk)];
              else
               str=['Input # ',int2str(kk),'(',int2str(nustr(kk)),')'];
              end
            end
            XIDio(kk,7)=uicontrol(f,'pos',pos(kbas+2+4*kk,:),'style',...
             'text','string',str,'Horizontalalignment','left');
          end %for kk=
          XIDio(nmu+1,1)=uicontrol(f,'pos',pos(kbas+3,:),'style','text',...
                  'string','Poles','Horizontalalignment','left');
          XIDio(nmu+1,2)=uicontrol(f,'pos',pos(kbas+4,:),'style','text',...
                  'string','Zeros+1','Horizontalalignment','left');
          XIDio(nmu+1,3)=uicontrol(f,'pos',pos(kbas+5,:),'style','text',...
                  'string','Delay','Horizontalalignment','left');
%          if nu>4|ny>1,str='';else str='Inputs';end
          str = '';
          XIDio(nmu+1,7)=uicontrol(f,'pos',pos(kbas+2,:),'style','text',...
                  'string',str,'Horizontalalignment','left');
       end % if nu>0

% *******************
       % LEVEL 4

       XIDparest(12)=uicontrol(f,'pos',pos(2,:),...
              'style','text','string','Common poles:',...
              'Horizontalalignment','left');
%       XIDio(1,4)=uicontrol(f,'pos',pos(3,:)+[0 0 2*butw 0]); %na
       XIDio(1,4)=uicontrol(f,'pos',pos(3,:)); %na

       % LEVEL 5

       lev5 = pos(1,2)+pos(1,4);
       % Make the text uicontrol which holds the equation
       XIDparest(15)=uicontrol(f,'pos',[pos(2,1) lev5 PW-2*pos(2,1) pos(2,4)],...
          'style','text','userdata',0);
       s4=[s1,'idparest(''orders'');',s3];
       s5=[s1,'iduiio(''orders'');',s3];
       set(XIDio([1:nmu],[1,3]),'style','popup',...
             'callback',s4,'value',2);
       set(XIDio([1:nmu],[2]),'style','popup','string',...
           'nf=0|nf=1|nf=2|nf=3|nf=4|nf=5|nf=6|nf=7|nf=8|nf=9|nf>9',...
                 'callback',s5);
       set(XIDio(1,4),'style','popup','callback',s4);
       set(XIDio(1,5),'style','popup','string',...
          'nc=0|nc=1|nc=2|nc=3|nc=4|nc=5|nc=6|nc=7|nc=8|nc=9|nc>9',...
                 'callback',s5);
       set(XIDio(1,6),'style','popup','string',...
          'nd=0|nd=1|nd=2|nd=3|nd=4|nd=5|nd=6|nd=7|nd=8|nd=9|nd>9',...
                 'callback',s5);
       set(get(f,'children'),'units','normal')
       if length(XIDlayout)>20,if XIDlayout(21,3)
        eval('set(f,''pos'',XIDlayout(21,1:4))','')
       end,end

   end
   Mtype=get(XIDparest(4),'value');
   iduims('setpop',Mtype,nu,ny);
   set(XIDparest(15),'string',get(XIDparest(10),'string'));
   idparest('ordedit');
   set(XIDmse(2),'vis',onoff)
   iduistat('')

 elseif strcmp(arg,'orders')
   if nu>4,nmu=min(1,nu);else nmu=nu;end
   na=get(XIDio(1,4),'value')-1;
   if na==10,na=get(XIDio(1,4),'UserData');if isempty(na),na=10;end,end
   nc=get(XIDio(1,5),'value')-1;
   if nc==10,nc=get(XIDio(1,5),'UserData');if isempty(nc),nc=10;end,end
   nd=get(XIDio(1,6),'value')-1;
   if nd==10,nd=get(XIDio(1,6),'UserData');if isempty(nd),nd=10;end,end

   for ku=1:nmu
      nb=get(XIDio(ku,1),'value')-1;
      if nb==10,nb=get(XIDio(ku,1),'UserData');if isempty(nb),nb=10;end,end
      nk=get(XIDio(ku,3),'value')-1;
      if nk==10,nk=get(XIDio(ku,3),'UserData');if isempty(nk),nk=10;end,end
      nf=get(XIDio(ku,2),'value')-1;
      if nf==10,nf=get(XIDio(ku,2),'UserData');if isempty(nf),nf=10;end,end
      nbv(ku)=nb;nkv(ku)=nk;nfv(ku)=nf;
   end
   if nu>4,nbv=nb*ones(1,nu);nkv=nk*ones(1,nu);nfv=nf*ones(1,nu);end

if nu>1
   nbstr='[';nfstr='[';nkstr='[';
   for ku=1:nu
      nbstr=[nbstr,int2str(nbv(ku))];if ku~=nmu,nbstr=[nbstr,' '];end
      nfstr=[nfstr,int2str(nfv(ku))];if ku~=nmu,nfstr=[nfstr,' '];end
      nkstr=[nkstr,int2str(nkv(ku))];if ku~=nmu,nkstr=[nkstr,' '];end
   end
   nbstr=[nbstr,']'];
   nkstr=[nkstr,']'];
   nfstr=[nfstr,']'];
elseif nu==1
   nbstr=int2str(nbv(1));nkstr=int2str(nkv(1));nfstr=int2str(nfv(1));
else
   nbstr=[];nkstr=[];nfstr=[];
end
Mtype=get(XIDparest(4),'value');
str=' ';
if any(Mtype==[1 2])
  str=[str,int2str(na),' '];
end
if any(Mtype==[1 2 3 4])&nu>0
   str=[str,nbstr,' '];
end
if any(Mtype==[2 4])
    str=[str,int2str(nc),' '];
end
if any(Mtype==[4])
    str=[str,int2str(nd),' '];
end
if any(Mtype==[3 4])
    str=[str,nfstr,' '];
end
if any(Mtype==[1 2 3 4])&nu>0
   str=[str,nkstr];
end
set(XIDparest(3),'string',str)
iduiio('mname');
elseif strcmp(arg,'ordedit')
      stopp=0;
      Mtype=get(XIDparest(4),'value');
      if Mtype==5,
         set(0,'Showhiddenhandles','off');
         return
      end % LL%
      sl1=get(XIDparest(3),'string');
      if any(sl1==':')&any(Mtype==[2 3 4])
         errordlg('Multiple model estimation is not supported for this model structure.');
         set(0,'Showhiddenhandles','off');
         return
      end
      eval('nn=eval([''['',sl1,'']'']);','stopp=1;');
      if stopp,iduiio('mname');
         set(0,'Showhiddenhandles','off');
         return
      end

      corleng=[2*nu+1 2*nu+2 3*nu 3*nu+2 0 length(nn)];
      if length(nn)~=corleng(Mtype),
           errordlg('Incorrect number of orders specified.');
           set(0,'Showhiddenhandles','off');
           return
      end
      na=[];nb=[];nc=[];nd=[];nf=[];nk=[];
      if Mtype==1,na=nn(1);nb=nn(2:nu+1);nk=nn(nu+2:2*nu+1);
      elseif Mtype==2, na=nn(1);nb=nn(2:nu+1);nc=nn(nu+2);nk=nn(nu+3:2*nu+2);
      elseif Mtype==3, nb=nn(1:nu);nf=nn(nu+1:2*nu);nk=nn(2*nu+1:3*nu);
      elseif Mtype==4, nb=nn(1:nu);nc=nn(nu+1);nd=nn(nu+2);...
                       nf=nn(nu+3:2*nu+2);nk=nn(2*nu+3:3*nu+2);
      end

    if ~isempty(na),set(XIDio(1,4),'value',min(na+1,11),'UserData',na);end
    if ~isempty(nc),set(XIDio(1,5),'value',min(nc+1,11),'UserData',nc);end
    if ~isempty(nd),set(XIDio(1,6),'value',min(nd+1,11),'UserData',nd);end
    for ku=1:nu
        set(XIDio(ku,3),'value',min(nk(ku)+1,11),'UserData',nk(ku));
   set(XIDio(ku,1),'value',min(nb(ku)+1,11),'UserData',nb(ku));
        if ~isempty(nf),
            set(XIDio(ku,2),'value',min(nf(ku)+1,11),'UserData',nf(ku));
        end
    end

elseif strcmp(arg,'mname')
   goto_ws=0;na=[];nb=[];nc=[];nd=[];nf=[];nk=[];
   modnam=deblank(get(XIDparest(3),'string'));
   Mtype=get(XIDparest(4),'value');
   if any(modnam==':')&any(Mtype==[2 3 4])
    errordlg('Multiple model estimation is not supported for this model structure.');
    goto_ws=1;
    set(0,'Showhiddenhandles','off');
    return
   end

   modnam=deblank(get(XIDparest(3),'string'));
   eval('nn=eval([''['',modnam,'']'']);',...
             'goto_ws=1;');
   if goto_ws==1
       mname=modnam;
   else
       Mtype=get(XIDparest(4),'value');
       if Mtype==1,
   if nu==0 ordstr=['na=nn(1);'];
        else       ordstr=['na=nn(1);nb=nn(2);nk=nn(nu+2);'];end
       elseif Mtype==2
        if nu==0 ordstr=['na=nn(1);nc=nn(2);'];
        else ordstr=['na=nn(1);nb=nn(2);nc=nn(nu+2);nk=nn(nu+3);'];end
       elseif Mtype==3
       ordstr=['nb=nn(1);nf=nn(nu+1);nk=nn(2*nu+1);'];
       elseif Mtype==4
       ordstr=['nb=nn(1);nc=nn(nu+1);nd=nn(nu+2);nf=nn(nu+3);nk=nn(2*nu+3);'];
       end
       eval(ordstr,'errordlg(''Incorrect number of orders specified.'');');
       nastr=int2str(na);ncstr=int2str(nc);ndstr=int2str(nd);
       nkstr=int2str(nk);nfstr=int2str(nf);nbstr=int2str(nb);
       if Mtype==2
          mname=['amx',nastr,nbstr,ncstr,nkstr];
       elseif Mtype==3
          mname=['oe',nbstr,nfstr,nkstr];
       elseif Mtype==4
          mname=['bj',nbstr,ncstr,ndstr,nfstr,nkstr];
       elseif Mtype==1
          mname=['arx',nastr,nbstr,nkstr];
       end
   end
   set(XIDparest(7),'string',mname);
elseif strcmp(arg,'estimate') % Covers I/O and 'By name'
   iduistat('Estimating model by iterative search ...')
   goto_ws=0;
   cmdstr=['if strcmp(get(XIDparest(2),''interruptible''),''On''),',...
            'set(XIDiter(1),''pointer'',''arrow'');',...
           'end,set(XIDiter(7),''userdata'',0);'];
   eval(cmdstr,'')  %Resetting the Stop-button
   Mtype=get(XIDparest(4),'value');
   if nargin>1,Mtype=6;end
   usepem=0;
   usd=get(XIDparest(2),'UserData');
   slim=deblank(usd(1,:));lim=eval(slim);
   stol=deblank(usd(2,:));tol=eval(stol);
   smaxiter=deblank(usd(3,:));maxiter=eval(smaxiter);
   sindex=deblank(usd(4,:));index=eval(['[',sindex,']']);
   if ~isempty(index),usepem=1;end
     if nargin==1
        modnam=deblank(get(XIDparest(3),'string'));
        if isempty(modnam)
           errordlg('You must supply model orders or a name in the Orders: edit box.');
           set(0,'Showhiddenhandles','off');
           return
        end
        eval('nn=eval([''['',modnam,'']'']);',...
             'goto_ws=1;');
        % Here we must distinguish the case when orders have been
        % given in the ws
        if goto_ws %
            sumb=findobj(get(0,'children'),'flat','tag','sitb30');
            modtag=get(XIDparest(3),'userdata');
            if isempty(modtag)
                 modeln=findobj([XIDsumb(1);sumb(:)],...
                       'type','text','string',modnam);
                 if ~isempty(modeln),
                       modax=get(modeln(1),'parent');
                 else
                       modax=[];
                 end
            else
                 modax=findobj([XIDsumb(1);sumb(:)],...
                       'type','axes','tag',modtag);
            end
            if ~isempty(modax)
               modax=modax(1);
               modlin=findobj(modax,'tag','modelline');
               if ~isempty(modlin)
                  eval('nn=iduicalc(''unpack'',get(modlin,''UserData''),1);')
                  goto_ws=0;
               end
            end % ~isempty(modeln)
         end % if goto_ws
        if goto_ws,
           set(0,'Showhiddenhandles','off');
           return
        end
     else
        nn=arg2;
     end
   if any(Mtype==[2,3,4])
       if any(nn<0)
          errordlg('No order or delay can be negative.');
          set(0,'Showhiddenhandles','off');
          return
       end
       na=[];nb=[];nc=[];nd=[];nf=[];nk=[];
       if Mtype==2
       ordstr=['na=nn(1);nb=nn(2:nu+1);nc=nn(nu+2);nk=nn(nu+3:2*nu+2);'];
       elseif Mtype==3
       ordstr=['nb=nn(1:nu);nf=nn(nu+1:2*nu);nk=nn(2*nu+1:3*nu);'];
       elseif Mtype==4
       ordstr=['nb=nn(1:nu);nc=nn(nu+1);nd=nn(nu+2);nf=nn(nu+3:2*nu+2);',...
               'nk=nn(2*nu+3:3*nu+2);'];
       end
       stopp=0;
       eval(ordstr,'stopp=1;')
       if stopp,
          errordlg('Incorrect number of orders specified.');
          set(0,'Showhiddenhandles','off');
          return
       end

       if ~isempty(na),nastr=int2str(na);end
       if ~isempty(nc),ncstr=int2str(nc);end
       if ~isempty(nd),ndstr=int2str(nd);end

      for sku=1:nu
        if sku==1,
          if ~isempty(nb),nbstr=int2str(nb(sku));end
          if ~isempty(nk),nkstr=int2str(nk(sku));end
          if ~isempty(nf),nfstr=int2str(nf(sku));end
        else
          if ~isempty(nb) nbstr=[nbstr,' ',int2str(nb(sku))];end
          if ~isempty(nk) nkstr=[nkstr,' ',int2str(nk(sku))];end
          if ~isempty(nf) nfstr=[nfstr,' ',int2str(nf(sku))];end
        end
      end
   if nu>1,
      nbstr=[' nb = [',nbstr,']'];nkstr=[' nk = [',nkstr,']'];
      if ~isempty(nf),nfstr=[' nf = [',nfstr,']'];end
      if ~isempty(na),nastr=[' na = ',nastr];end
     if ~isempty(nc), ncstr=[' nc = ',ncstr];end
     if ~isempty(nd),ndstr=[' nd = ',ndstr];end
   end
   end %if any(Mtype ...
      corleng=[2*nu+1 2*nu+2 3*nu 3*nu+2 0 length(nn)];
      if length(nn)~=corleng(Mtype),
           errordlg('Incorrect number of orders specified.');
           set(0,'Showhiddenhandles','off');
           return
      end
      model=get(XIDparest(7),'string');
      [eDat,eDat_info,eDat_n]=iduigetd('e');
      TSamp=eval(eDat_info(1,:));

        if Mtype==2&~usepem  %ARMAX
        if nu==0
          ordstr=[int2str(na),int2str(nc)];ordstr2=ordstr;
        else
          ordstr=[int2str(na(1)),int2str(nb(1)),int2str(nc),...
                     int2str(nk(1))];
     ordstr2=[int2str(na),' ',int2str(nb(1)),' ',int2str(nc),...
                     ' ',int2str(nk(1))];
        end

        eval('LASTM=armax(eDat,[na nb nc nk],maxiter,tol,lim,[],TSamp);')
      if nu<2
             mod_info=str2mat(eDat_info,[' ',model,' = armax(',eDat_n,',[',...
                   ordstr2,'],',...
                   smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
           else
             mod_info=str2mat(eDat_info,nastr,nbstr,ncstr,nkstr,...
                   [' ',model,' = armax(',eDat_n,',[na nb nc nk],',...
                    smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
           end

        elseif Mtype==3&~usepem   %OE
      if sum(nb)==0
             errordlg(['The OE model does not make sense',...
                        '  if all NB-orders are zero.']);
             set(0,'Showhiddenhandles','off');
             return
           end

           eval('LASTM=oe(eDat,[nb nf nk],maxiter,tol,lim,[],TSamp);')
      if nu<2,
              mod_info=str2mat(eDat_info,[' ',model,' = oe(',eDat_n,',[',...
            int2str(nb),' ',int2str(nf),' ',int2str(nk),'],',...
                 smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
           else
             mod_info=str2mat(eDat_info,nbstr,nfstr,nkstr,...
                 [' ',model,' = oe(',eDat_n,',[nb nf nk],',...
                 smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
           end

        elseif Mtype==4&~usepem    %BJ

           eval('LASTM=bj(eDat,[nb nc nd nf nk],maxiter,tol,lim,[],TSamp);')
      if nu<2,
               mod_info=str2mat(eDat_info,[' ',model,' = bj(',eDat_n,',[',...
            int2str(nb),' ',int2str(nc),' ',int2str(nd),...
                 ' ',int2str(nf),' ',int2str(nk),'],',...
                 smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
           else
               mod_info=str2mat(eDat_info,nbstr,ncstr,ndstr,nfstr,nkstr,...
                 [' ',model,' = bj(',eDat_n,',[nb nc nd  nf nk],',...
                 smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
           end

        elseif usepem            % PEM
           if isempty(na),na=0;end
           if isempty(nc),nc=0;end
           if isempty(nd),nd=0;end
           if isempty(nf),nf=zeros(1,nu);end
           nn=[na nb nc nd nf nk];
      eval('LASTM=pem(eDat,nn,index,maxiter,tol,lim,[],TSamp);')
      if nu<2
              mod_info=str2mat(eDat_info,[' ',model,' = pem(',eDat_n,...
                 ',[',int2str(nn(1)),...
             int2str(nn(2)),' ',int2str(nn(3)),' ',int2str(nn(4)),' ',...
                 int2str(nn(5)),' ',int2str(nn(6)),'],',...
                 sindex,',',smaxiter,',',stol,',',slim,',[]',...
                 num2str(TSamp),')']);
           else
              mod_info=str2mat(eDat_info,nastr,nbstr,ncstr,ndstr,nfstr,...
                  nkstr,[' ',model,' = pem(',eDat_n,...
                 ',[na nb nc nd nf nk],',...
                 sindex,',',smaxiter,',',stol,',',slim,',[]',...
                 num2str(TSamp),')']);
           end

        if nargin==3,model=arg3;end
      elseif Mtype==6  % Model by name
         oldmod=nn;[nro,nco]=size(oldmod);
         if nro<3 | nco<7
            errordlg(str2mat(['The entry in the Orders: edit field is ', ...
		'not a model of ''theta''-format.'],'',['You may also have' ...
		' chosen an unfortunate name, coinciding with an ',...
		'internal variable name. If so, change the model',...
		' name by double-clicking on its icon, and edit',...
		' accordingly.']));
            set(0,'Showhiddenhandles','off');
            return
         end
         if oldmod(2,7)==50,oldmod=ss2th(oldmod);end %OPTIONER P PSOBS
         eval('LASTM=pem(eDat,oldmod,index,maxiter,tol,lim,[],TSamp);')
    model_old=deblank(get(XIDparest(3),'string'));

         if nargin>2
            mod_info=arg3;firstrow=2;
         else
            mod_info=eDat_info;firstrow=1;
         end
         [rmi,cmi]=size(mod_info);
         mod_info=str2mat(mod_info(firstrow:rmi,:),...
            [model,' = pem(',eDat_n,',',model_old,',',...
            sindex,',',smaxiter,',',stol,',',slim,',[],',num2str(TSamp),')']);
      end %  if Mtype
         mod_nam=model;
         mod_nam=mod_nam(find(mod_nam~=' '));
         eval('iduiinsm(LASTM,str2mat('''',mod_info),mod_nam);')

elseif strcmp(arg,'close')
    set(XIDmse(2),'Visible','off')
    set(XIDparest(15),'userdata',0);
end
set(0,'Showhiddenhandles','off');