function [params,err] = updateUI(UIFIG,action,n,funName,paramsLo,paramsHi,freeList,varargin) h= get(UIFIG,'UserData'); plot = 0; switch action case 'slider' val = get(h.slider(n),'Value'); set(h.number(n),'String',num2str(val)); case 'number' valstr = get(h.number(n),'String'); val = str2num(valstr); mn = get(h.slider(n),'Min'); if valmx set(h.slider(n),'Max',val); end set(h.slider(n),'Value',val); plot =1; case 'all' case 'reset' id = max(1,length(h.errHist)-3):length(h.errHist); h.errHist = h.errHist(id); set(h.errPlot,'XData',1:length(h.errHist)); set(h.errPlot,'YData',h.errHist); set(h.errFig,'YLim',[0,max(h.errHist)*1.1]); set(h.errFig,'XLim',[0,length(h.errHist)+1]); set(UIFIG,'UserData',h); return case 'fit' count = 0; for i=1:length(h.slider); vars(i) = get(h.slider(i),'Value'); if get(h.holdBtn(i),'Value') count = count+1; newFreeList{count} = get(h.text(i),'String'); end end if count>0 params = var2params(vars,h.stuff{2},h.stuff{3}); if get(h.plotBtn,'Value') params.plot =1; else params.plot = 0; end evalStr = sprintf('[params,err] = fit(''%s'',params,newFreeList',h.stuff{1}); for j=1:length(h.stuff{4}) evalStr = sprintf('%s,h.stuff{4}{%d}',evalStr,j); end evalStr = [evalStr,');']; eval(evalStr) vars = params2var(params,newFreeList); for i=1:length(vars) for j=1:length(h.text) if strcmp(newFreeList{i},get(h.text(j),'String')) set(h.slider(j),'Value',vars(i)); set(h.number(j),'String',num2str(vars(i))); end end end end end if get(h.plotBtn,'Value') %plot %get all parameters for i=1:length(h.slider) vars(i) = get(h.slider(i),'Value'); end params = var2params(vars,h.stuff{2},h.stuff{3}); params.plot= 1; evalStr = sprintf('err = %s(params',h.stuff{1}); for j=1:length(h.stuff{4}) evalStr = sprintf('%s,h.stuff{4}{%d}',evalStr,j); end evalStr = [evalStr,');']; eval(evalStr) h.errHist = [h.errHist,err]; set(h.errPlot,'XData',1:length(h.errHist)); set(h.errPlot,'YData',h.errHist); set(h.errFig,'XLim',[0,length(h.errHist)+1]); %set(h.errFig,'XTick',[-inf,inf]); ylim = get(h.errFig,'YLim'); if ylim(2)< max(h.errHist)*1.1 set(h.errFig,'YLim',[0,max(h.errHist)*1.1]); end set(UIFIG,'UserData',h); else for i=1:length(h.slider) vars(i) = get(h.slider(i),'Value'); end params = var2params(vars,h.stuff{2},h.stuff{3}); err = NaN; end