<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki-pnb.eri.ucsb.edu/index.php?action=history&amp;feed=atom&amp;title=Ac9cal_cb.m</id>
	<title>Ac9cal cb.m - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-pnb.eri.ucsb.edu/index.php?action=history&amp;feed=atom&amp;title=Ac9cal_cb.m"/>
	<link rel="alternate" type="text/html" href="https://wiki-pnb.eri.ucsb.edu/index.php?title=Ac9cal_cb.m&amp;action=history"/>
	<updated>2026-04-04T05:16:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>https://wiki-pnb.eri.ucsb.edu/index.php?title=Ac9cal_cb.m&amp;diff=315&amp;oldid=prev</id>
		<title>Eriks: Created page with '&lt;pre&gt; % Title:        ac9cal_cb.m % Date:         July 98 % Author:       Stephen Wolfe % Input:        [action:string] %modified 10/20/2010 by ES  function [fig]=ac9cal_cb(actio…'</title>
		<link rel="alternate" type="text/html" href="https://wiki-pnb.eri.ucsb.edu/index.php?title=Ac9cal_cb.m&amp;diff=315&amp;oldid=prev"/>
		<updated>2011-03-17T20:10:35Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;#039;&amp;lt;pre&amp;gt; % Title:        ac9cal_cb.m % Date:         July 98 % Author:       Stephen Wolfe % Input:        [action:string] %modified 10/20/2010 by ES  function [fig]=ac9cal_cb(actio…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
% Title:        ac9cal_cb.m&lt;br /&gt;
% Date:         July 98&lt;br /&gt;
% Author:       Stephen Wolfe&lt;br /&gt;
% Input:        [action:string]&lt;br /&gt;
%modified 10/20/2010 by ES&lt;br /&gt;
&lt;br /&gt;
function [fig]=ac9cal_cb(action,varargin)&lt;br /&gt;
narg=length(varargin);&lt;br /&gt;
nrow=narg/2;&lt;br /&gt;
if nrow==round(nrow),&lt;br /&gt;
  for iarg=1:2:length(varargin),&lt;br /&gt;
    eval([varargin{iarg} '= varargin{iarg+1};']);&lt;br /&gt;
  end&lt;br /&gt;
else&lt;br /&gt;
  display('ac9cal_cb: command line pairs not correctly formed');&lt;br /&gt;
  return&lt;br /&gt;
end&lt;br /&gt;
action;&lt;br /&gt;
switch action&lt;br /&gt;
 case 'init'&lt;br /&gt;
  % Read default par file&lt;br /&gt;
  % Update/define parameters with vlaues passed to function,&lt;br /&gt;
  %   list_file,autorun,filetype,yr_datum,ylimit,nyear&lt;br /&gt;
  % Returns the updated par structure&lt;br /&gt;
  parfile='ac9cal.par';&lt;br /&gt;
  %S=which('ac9cal_def.par')&lt;br /&gt;
  S = '/home/data65/pb/REPROCESS_2010/AC9/LIST/ac9cal_def.par';&lt;br /&gt;
  [par,parnames]=par_input('parfile',parfile,'def_file',S);&lt;br /&gt;
&lt;br /&gt;
  if isempty(par),&lt;br /&gt;
    disp('ac9cal_cb: par structure is empty, check par files');&lt;br /&gt;
    return&lt;br /&gt;
  end&lt;br /&gt;
  par.offset=20;&lt;br /&gt;
  if exist('list_file'),&lt;br /&gt;
    par.list_file=list_file;&lt;br /&gt;
  else&lt;br /&gt;
    if ~isfield(par,'list_file'),&lt;br /&gt;
      list_file='';&lt;br /&gt;
      par.list_file=list_file;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if exist('autorun'),&lt;br /&gt;
    par.autorun=autorun;&lt;br /&gt;
  else&lt;br /&gt;
    if ~isfield(par,'autorun'),&lt;br /&gt;
      par.autorun=0;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if exist('filetype'),&lt;br /&gt;
    par.filetype=filetype;&lt;br /&gt;
  else&lt;br /&gt;
    if ~isfield(par,'filetype'),&lt;br /&gt;
      %old=0  new=1&lt;br /&gt;
      par.filetype=1;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if ~isfield(par,'yr_datum'),&lt;br /&gt;
    if exist('yr_datum'),&lt;br /&gt;
      par.yr_datum=yr_datum;&lt;br /&gt;
    else&lt;br /&gt;
      par.yr_datum='01/01/1994';&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if ~isfield(par,'ylimit'),&lt;br /&gt;
    if exist('ylimit'),&lt;br /&gt;
      par.ylimit=ylimit;&lt;br /&gt;
    else&lt;br /&gt;
      par.ylimit=[-.01 .01];&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if ~isfield(par,'nyear'),&lt;br /&gt;
    if exist('nyear'),&lt;br /&gt;
      par.nyear=nyear;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  fig=par;&lt;br /&gt;
 case 'par_update'&lt;br /&gt;
&lt;br /&gt;
  %poll all pars and update ac9calFig.userdata&lt;br /&gt;
  %object tag should have same name as the field in the par structure&lt;br /&gt;
  &lt;br /&gt;
  %ADD: parse the par structure and then look for tags by those name&lt;br /&gt;
  %ischar(ac9.par.prop{i})&lt;br /&gt;
  %     yes: update with ac9.prop.str&lt;br /&gt;
  %      no: update with ac9.prop.val&lt;br /&gt;
&lt;br /&gt;
  fig=figure(findall(0,'Tag','ac9calFig'));&lt;br /&gt;
 %ac9 = get(fig)&lt;br /&gt;
 %ac9.UserData&lt;br /&gt;
 ac9 = get(fig,'Userdata');&lt;br /&gt;
&lt;br /&gt;
  %ac9 = get(fig)&lt;br /&gt;
  %ac9.UserData&lt;br /&gt;
  % Update fields for tags that begin with 'par_', looks in all figs&lt;br /&gt;
  h_par=figbytag('par_');&lt;br /&gt;
  &lt;br /&gt;
  for ihan=1:length(h_par),&lt;br /&gt;
    field=deblank(char(get(h_par(ihan),'Tag')));&lt;br /&gt;
    val=get(h_par(ihan));&lt;br /&gt;
    if isfield(val,'Value'),&lt;br /&gt;
      ac9=setfield2(ac9,['par.' field],val.Value);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  % Update all fields for tags in current figure&lt;br /&gt;
  h=findall(fig);&lt;br /&gt;
  %deblank(char(get(h(1),'Type')))&lt;br /&gt;
 % get(h(1))&lt;br /&gt;
%  pause&lt;br /&gt;
  %each object is field in par structure and has val and str fields&lt;br /&gt;
  for ihan=1:length(h),&lt;br /&gt;
    field=deblank(char(get(h(ihan),'Tag')));&lt;br /&gt;
    val=get(h(ihan));&lt;br /&gt;
    if isfield(val,'Value'),&lt;br /&gt;
      ac9=setfield2(ac9,[field '.val'],val.Value);&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    if isfield(val,'String'),&lt;br /&gt;
       &lt;br /&gt;
      ac9=setfield2(ac9,[field '.str'],val.String);&lt;br /&gt;
%      val.String&lt;br /&gt;
%       if isfield(ac9,'list_file')&lt;br /&gt;
%           ihan&lt;br /&gt;
%           disp('list file')&lt;br /&gt;
%       end&lt;br /&gt;
%       ihan&lt;br /&gt;
%       val&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
  %alternate way to store info in structure&lt;br /&gt;
  %one structure array with name,val,str for each object&lt;br /&gt;
% $$$   for ihan=1:length(h),&lt;br /&gt;
% $$$     name=deblank(char(get(h(ihan),'Tag')));&lt;br /&gt;
% $$$     val=get(h(ihan));&lt;br /&gt;
% $$$     par=setfield(par,['fig(' num2str(ihan) ').name'],name);&lt;br /&gt;
% $$$     if isfield(val,'Value'),&lt;br /&gt;
% $$$       par=setfield(par,['fig(' num2str(ihan) ').val'],val.Value);&lt;br /&gt;
% $$$     end&lt;br /&gt;
% $$$     if isfield(val,'String'),&lt;br /&gt;
% $$$       par=setfield(par,['fig(' num2str(ihan) ').str'],val.String);&lt;br /&gt;
% $$$     end&lt;br /&gt;
% $$$   end&lt;br /&gt;
  &lt;br /&gt;
  %Update fields in par structure with names found in ac9 structure&lt;br /&gt;
  par_fields=fieldnames(ac9.par);&lt;br /&gt;
  for ipar=1:length(par_fields),&lt;br /&gt;
    parfield=par_fields{ipar};&lt;br /&gt;
    if isfield(ac9,parfield),&lt;br /&gt;
      p1=getfield(ac9,parfield);&lt;br /&gt;
      p2=getfield(ac9.par,parfield);&lt;br /&gt;
      if ischar(p2),&lt;br /&gt;
	dumvar=p1.str;&lt;br /&gt;
      else&lt;br /&gt;
	dumvar=p1.val;&lt;br /&gt;
      end&lt;br /&gt;
      ac9=setfield2(ac9,['par.' parfield],dumvar);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
% $$$   %Obsolete&lt;br /&gt;
% $$$   iop_han=[findobj('Tag','prop') findobj('Tag','abs')];&lt;br /&gt;
% $$$   fluid_han=[findobj('Tag','fluid') findobj('Tag','air')];&lt;br /&gt;
% $$$   %par=ac9.par;&lt;br /&gt;
% $$$   if ~isfield(ac9.par,'prop'),&lt;br /&gt;
% $$$     ac9.par.prop='';&lt;br /&gt;
% $$$   end&lt;br /&gt;
% $$$   if exist('prop'),&lt;br /&gt;
% $$$     ac9.par.prop=prop;&lt;br /&gt;
% $$$   elseif ~isempty(ishandle(iop_han)),&lt;br /&gt;
% $$$     at=get(iop_han(1),'Value');&lt;br /&gt;
% $$$     ab=get(iop_han(2),'Value');&lt;br /&gt;
% $$$     if at==1,&lt;br /&gt;
% $$$       ac9.par.prop='c';&lt;br /&gt;
% $$$     elseif ab==1,&lt;br /&gt;
% $$$       ac9.par.prop='a';&lt;br /&gt;
% $$$     end&lt;br /&gt;
% $$$   end&lt;br /&gt;
% $$$   if ~isfield(ac9.par,'fluid'),&lt;br /&gt;
% $$$     ac9.par.fluid='';&lt;br /&gt;
% $$$   end&lt;br /&gt;
% $$$   if exist('fluid'),&lt;br /&gt;
% $$$     ac9.par.fluid=fluid;&lt;br /&gt;
% $$$   elseif ~isempty(ishandle(fluid_han)),&lt;br /&gt;
% $$$     wat_but=get(fluid_han(1),'Value');&lt;br /&gt;
% $$$     air_but=get(fluid_han(2),'Value');&lt;br /&gt;
% $$$     if wat_but==1,&lt;br /&gt;
% $$$       ac9.par.fluid='w';&lt;br /&gt;
% $$$     elseif air_but==1,&lt;br /&gt;
% $$$       ac9.par.air='a';&lt;br /&gt;
% $$$     end&lt;br /&gt;
% $$$  end&lt;br /&gt;
% put this check into calview, calspec&lt;br /&gt;
% $$$   if isempty(par.prop),&lt;br /&gt;
% $$$     ButtonName=questdlg('Select an IOP','','c','a','');&lt;br /&gt;
% $$$     switch ButtonName,&lt;br /&gt;
% $$$      case 'c'&lt;br /&gt;
% $$$       iop_han(2)=0;&lt;br /&gt;
% $$$       %set(iop_han(1),'Value',1);&lt;br /&gt;
% $$$       at=1;&lt;br /&gt;
% $$$       par.prop='c';&lt;br /&gt;
% $$$      case 'a'&lt;br /&gt;
% $$$       iop_han(1)=0;&lt;br /&gt;
% $$$       %set(iop_han(2),'Value',1);&lt;br /&gt;
% $$$       ab=1;&lt;br /&gt;
% $$$       par.prop='a';&lt;br /&gt;
% $$$     end&lt;br /&gt;
% $$$     set(iop_han(find(iop_han)),'Value',1);&lt;br /&gt;
% $$$   end&lt;br /&gt;
  [sort_channels,I]=sortrows(ac9.par.channels);&lt;br /&gt;
  prop='a';&lt;br /&gt;
  if ac9.par.prop,&lt;br /&gt;
    prop='c';&lt;br /&gt;
  end&lt;br /&gt;
  isort_channels=strmatch(prop,sort_channels);&lt;br /&gt;
  ac9.sort_channels=sort_channels;&lt;br /&gt;
  ac9.I=I;&lt;br /&gt;
  ac9.isort_channels=isort_channels;&lt;br /&gt;
  %ac9.par=par;&lt;br /&gt;
  &lt;br /&gt;
% $$$   udata.par.autorun=get(findobj(fig,'Tag','AutoBut'),'Value')&lt;br /&gt;
% $$$   udata.par.usefile=get(findobj(fig,'Tag','UseFileBut'),'Value')&lt;br /&gt;
% $$$   udata.par.list_file=get(findobj(fig,'Tag','list_file'),'String')&lt;br /&gt;
  set(fig,'Userdata',ac9);&lt;br /&gt;
  fig=ac9;&lt;br /&gt;
 case 'par'&lt;br /&gt;
  [ac9cal_gui_par]=goac9cal_gui_par;&lt;br /&gt;
 case 'test'&lt;br /&gt;
  ac9cal_cb('ac9cal_merge');&lt;br /&gt;
 case 'ac9cal_merge'&lt;br /&gt;
  [filename,pathname]=uigetfile('*.txt','Select ''c'' cal file');&lt;br /&gt;
  qcal=load(fullfile(pathname,filename));&lt;br /&gt;
  qcal=qcal';&lt;br /&gt;
  dcal=qcal(:,1:2);&lt;br /&gt;
  [filename,pathname]=uigetfile('*.txt','Select ''a'' cal file');&lt;br /&gt;
  qcal=load(fullfile(pathname,filename));&lt;br /&gt;
  qcal=qcal';&lt;br /&gt;
  dcal=[dcal qcal(:,2)]&lt;br /&gt;
  [filename,pathname]=uiputfile('*.txt','Save merged cal file as...');&lt;br /&gt;
  if ~isempty(filename) &amp;amp; ~filename==0,&lt;br /&gt;
    save(fullfile(pathname,filename),'dcal','-ascii');&lt;br /&gt;
  end&lt;br /&gt;
 case 'gocalview_gui'&lt;br /&gt;
  set(gcbo,'Enable','off')&lt;br /&gt;
  filename=get(findobj(gcbf,'Tag','list_file'),'UserData');&lt;br /&gt;
  if ~isempty(filename)&lt;br /&gt;
    fig=ac9cal_cb('calview_gui');&lt;br /&gt;
    set(findobj(fig,'Tag','list_file'),'String',filename);&lt;br /&gt;
    set(findobj(fig,'Tag','list_file'),'UserData',filename);&lt;br /&gt;
% $$$     set(findobj(fig,'Tag','list_file'),'String',[file{1} file{2}])&lt;br /&gt;
% $$$     set(findobj(fig,'Tag','list_file'),'UserData',file)&lt;br /&gt;
% $$$     set(gcbo,'Enable','on')&lt;br /&gt;
  else&lt;br /&gt;
    fig=nofile_gui;&lt;br /&gt;
    CbHndl=findobj(gcbo);&lt;br /&gt;
    set(fig,'UserData',CbHndl(1));&lt;br /&gt;
  end&lt;br /&gt;
 case 'gocalspec_gui'&lt;br /&gt;
  set(gcbo,'Enable','off')&lt;br /&gt;
  filename=get(findobj(gcbf,'Tag','list_file'),'UserData');&lt;br /&gt;
  if ~isempty(filename)&lt;br /&gt;
    fig=ac9cal_cb('calspec_gui');&lt;br /&gt;
    set(findobj(fig,'Tag','list_file'),'String',filename);&lt;br /&gt;
    set(findobj(fig,'Tag','list_file'),'UserData',filename);&lt;br /&gt;
% $$$     set(findobj(fig,'Tag','list_file'),'String',[file{1} file{2}])&lt;br /&gt;
% $$$     set(findobj(fig,'Tag','list_file'),'UserData',file)&lt;br /&gt;
% $$$     set(gcbo,'Enable','on')&lt;br /&gt;
  else&lt;br /&gt;
    fig=nofile_gui;&lt;br /&gt;
    CbHndl=findobj(gcbo);&lt;br /&gt;
    set(fig,'UserData',CbHndl(1));&lt;br /&gt;
  end&lt;br /&gt;
 case 'view'&lt;br /&gt;
  set(findobj('Tag','par_AttBut'),'Value',0);&lt;br /&gt;
  set(findobj('Tag','par_AbsBut'),'Value',0);&lt;br /&gt;
  set(findobj('Tag','par_h2oBut'),'Value',0);&lt;br /&gt;
  set(findobj('Tag','par_airBut'),'Value',0)&lt;br /&gt;
  ac9=ac9cal_cb('par_update');&lt;br /&gt;
  list_file=ac9.list_file.str;&lt;br /&gt;
  qcaled('list_file',list_file);&lt;br /&gt;
&lt;br /&gt;
  %qcal=qcaled_cb('parse');&lt;br /&gt;
 case 'CloseAll'&lt;br /&gt;
  file_gui_cb('CloseAll')&lt;br /&gt;
 case 'calview'&lt;br /&gt;
  set(gcbo,'Enable','off')&lt;br /&gt;
  set(gcbo,'Userdata',[]);&lt;br /&gt;
  set(findobj('Tag','goBut'),'String','Go');&lt;br /&gt;
  set(findobj('Tag','goBut'),'Callback','ac9cal_cb(''go'')');&lt;br /&gt;
  set(findobj('Tag','calspecBut'),'Enable','off')&lt;br /&gt;
  set(findobj('Tag','ts_calBut'),'Enable','off')&lt;br /&gt;
  qcaled_cb('add_off');&lt;br /&gt;
  ac9=ac9cal_cb('par_update');&lt;br /&gt;
  filename=ac9.list_file.str;&lt;br /&gt;
  if ~isempty(filename),&lt;br /&gt;
    %qcaled_cb('list_load');&lt;br /&gt;
    fig=calview('list_file',filename,'mode','gui');&lt;br /&gt;
  else&lt;br /&gt;
    msgbox('Select a qcal file and rerun program');&lt;br /&gt;
  end&lt;br /&gt;
  qcaled_cb('add_on');&lt;br /&gt;
  set(gcbo,'Enable','on')&lt;br /&gt;
  set(findobj('Tag','calspecBut'),'Enable','on')&lt;br /&gt;
  set(findobj('Tag','ts_calBut'),'Enable','on')&lt;br /&gt;
 case 'calspec'&lt;br /&gt;
  set(gcbo,'Enable','off')&lt;br /&gt;
  set(gcbo,'Userdata',[]);&lt;br /&gt;
  set(findobj('Tag','goBut'),'String','Go');&lt;br /&gt;
  set(findobj('Tag','goBut'),'Callback','ac9cal_cb(''go'')');&lt;br /&gt;
  set(findobj('Tag','calviewBut'),'Enable','off');&lt;br /&gt;
  set(findobj('Tag','ts_calBut'),'Enable','off');&lt;br /&gt;
  ac9=ac9cal_cb('par_update');&lt;br /&gt;
  filename=ac9.list_file.str;&lt;br /&gt;
  if ~isempty(filename),&lt;br /&gt;
    %qcaled_cb('list_load');&lt;br /&gt;
    fig=calspec('list_file',filename,'mode','gui');&lt;br /&gt;
  else&lt;br /&gt;
    msgbox('Select a qcal file and rerun program');&lt;br /&gt;
  end&lt;br /&gt;
  qcaled_cb('add_on');&lt;br /&gt;
  set(gcbo,'Enable','on')&lt;br /&gt;
  set(findobj('Tag','calviewBut'),'Enable','on');&lt;br /&gt;
  set(findobj('Tag','ts_calBut'),'Enable','on');&lt;br /&gt;
 case 'ts_cal'&lt;br /&gt;
  set(gcbo,'Enable','off')&lt;br /&gt;
  set(gcbo,'Userdata',[]);&lt;br /&gt;
  set(findobj('Tag','calspecBut'),'Enable','off');&lt;br /&gt;
  set(findobj('Tag','calviewBut'),'Enable','off');&lt;br /&gt;
  filename=get(findobj(findobj('Tag','QcaledFig1'),'Tag','list_file'),... ...&lt;br /&gt;
               'String');&lt;br /&gt;
  ac9=ac9cal_cb('par_update');&lt;br /&gt;
  filename=ac9.list_file.str;&lt;br /&gt;
  if ~isempty(filename),&lt;br /&gt;
    %qcaled_cb('list_load');&lt;br /&gt;
    fig=ts_cal('list_file',filename);&lt;br /&gt;
  else&lt;br /&gt;
    msgbox('Select a qcal file and rerun program');&lt;br /&gt;
  end&lt;br /&gt;
  qcaled_cb('add_on');&lt;br /&gt;
  set(gcbo,'Enable','on')&lt;br /&gt;
  set(findobj('Tag','calviewBut'),'Enable','on');&lt;br /&gt;
  set(findobj('Tag','calspecBut'),'Enable','on');&lt;br /&gt;
  set(findobj('Tag','goBut'),'String','Save cal');&lt;br /&gt;
  set(findobj('Tag','goBut'),'Callback','ac9cal_cb(''save_tsp'')');&lt;br /&gt;
 case 'save_tsp'&lt;br /&gt;
  figdata=get(findall(0,'Tag','ts_calBut'),'Userdata');&lt;br /&gt;
  fig=figdata(1).fig;&lt;br /&gt;
  udata=get(fig,'Userdata');&lt;br /&gt;
  ts_cal_out=[-999 -999 -999 udata.tsp.wave;&lt;br /&gt;
	 -999 -999 -999 udata.tsp.mdcal;&lt;br /&gt;
	 -999 -999 -999 udata.tsp.ts_cal_std;&lt;br /&gt;
	 -999 -999 -999 udata.tsp.ndata;&lt;br /&gt;
	 ];&lt;br /&gt;
  [filename,pathname]=uiputfile('*.txt','Save average cal file');&lt;br /&gt;
  if ~isempty(filename) &amp;amp; ~filename==0,&lt;br /&gt;
    fid_out=fopen(fullfile(pathname,filename),'w');&lt;br /&gt;
    foo=sprintf('%8d %6d %9d %9d %9d %9d %9d %9d %9d %9d %9d %9d ',...&lt;br /&gt;
		ts_cal_out(1,:));&lt;br /&gt;
    fprintf(fid_out,'%s\n',deblank(foo));&lt;br /&gt;
    for ifile=2:3,&lt;br /&gt;
      foo=sprintf(['%8d %6d %9d ', ...&lt;br /&gt;
		   '%9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f'],...&lt;br /&gt;
		  ts_cal_out(ifile,:));&lt;br /&gt;
      fprintf(fid_out,'%s\n',deblank(foo));&lt;br /&gt;
    end&lt;br /&gt;
    foo=sprintf('%8d %6d %9d %9d %9d %9d %9d %9d %9d %9d %9d %9d ',...&lt;br /&gt;
		ts_cal_out(4,:));&lt;br /&gt;
    fprintf(fid_out,'%s\n',deblank(foo));&lt;br /&gt;
    for ifile=1:size(udata.tsp.dcal,1),&lt;br /&gt;
      foo=sprintf(['%s %s %9.2f ',...&lt;br /&gt;
		   '%9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f'],...&lt;br /&gt;
		  udata.tsp.date(ifile,:),udata.tsp.time(ifile,:), ...&lt;br /&gt;
		  udata.tsp.jday(ifile,:),udata.tsp.dcal(ifile,:));&lt;br /&gt;
      fprintf(fid_out,'%s\n',deblank(foo));&lt;br /&gt;
    end&lt;br /&gt;
    fclose(fid_out);&lt;br /&gt;
&lt;br /&gt;
% $$$     for ifile=1:size(ispec,1),&lt;br /&gt;
% $$$       foo=sprintf('%9.5f ',ispec(ifile,:));&lt;br /&gt;
% $$$       fprintf(fid_out,'%s\n',deblank(foo));&lt;br /&gt;
% $$$     end&lt;br /&gt;
% $$$     fclose(fid_out);&lt;br /&gt;
  &lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
 case 'gosavespec'&lt;br /&gt;
  ac9cal_cb('showsavebox');&lt;br /&gt;
 case 'savespec'&lt;br /&gt;
  disp('both channels saved by calspec for now.');&lt;br /&gt;
  ac9cal_cb('hidesavebox');&lt;br /&gt;
 case 'showsavebox'&lt;br /&gt;
  set(findobj('Tag','SaveBox'),'vis','on');&lt;br /&gt;
 case 'hidesavebox'&lt;br /&gt;
  set(findobj('Tag','SaveBox'),'vis','off');&lt;br /&gt;
 case 'go'&lt;br /&gt;
  h=get(gcbo,'Userdata');&lt;br /&gt;
  fig=get(h,'Userdata');&lt;br /&gt;
  if ishandle(fig),&lt;br /&gt;
    uiresume(fig);&lt;br /&gt;
  end&lt;br /&gt;
 case 'stop'&lt;br /&gt;
  fig=get(get(findall(0,'Tag','goBut'),'Userdata'),'Userdata');&lt;br /&gt;
  if ishandle(fig),&lt;br /&gt;
    set(findall(0,'Tag','goBut'),'Userdata',[]);&lt;br /&gt;
    uiresume(fig);&lt;br /&gt;
  end&lt;br /&gt;
 case 'menus'&lt;br /&gt;
 case 'reset'&lt;br /&gt;
  ac9cal_cb('stop');&lt;br /&gt;
  fig=findall(0,'Tag','ac9calFig');&lt;br /&gt;
  set(get(fig,'Children'),'Enable','on');&lt;br /&gt;
  set(findall(fig,'Tag','goBut'),'String','Go');&lt;br /&gt;
  set(findall(fig,'Tag','goBut'),'Callback','ac9cal_cb(''go'')');&lt;br /&gt;
  set(findobj('Tag','calviewBut'),'Userdata',[]);&lt;br /&gt;
  set(findobj('Tag','calspecBut'),'Userdata',[]);&lt;br /&gt;
  set(findobj('Tag','ts_calBut'),'Userdata',[]);&lt;br /&gt;
 case 'dev_parse'&lt;br /&gt;
  %parse device files readme, ask for date&lt;br /&gt;
  %put date into instrdateBox&lt;br /&gt;
  %parse device file and store in structure in instrnumList&lt;br /&gt;
  ow=warning;&lt;br /&gt;
  warning off;&lt;br /&gt;
  instr_num='';&lt;br /&gt;
  instr_date='';&lt;br /&gt;
  ac9=get(gcbf,'User');&lt;br /&gt;
  h_instr=findobj('Tag','instrnumList');&lt;br /&gt;
  val=get(h_instr,'Value');&lt;br /&gt;
  if val==1,&lt;br /&gt;
    cal.list.num='';&lt;br /&gt;
    cal.list.date='';&lt;br /&gt;
    cal.list.air='';&lt;br /&gt;
    cal.list.qwater='';&lt;br /&gt;
    cal.list.soft='';&lt;br /&gt;
    cal.list.Tref='';&lt;br /&gt;
    ac9.par.Tref=[];&lt;br /&gt;
    ac9.par.instr_num='';&lt;br /&gt;
    ac9.par.instr_date='';&lt;br /&gt;
    ac9.par.cal=cal;&lt;br /&gt;
    set(gcbf,'User',ac9);&lt;br /&gt;
    return&lt;br /&gt;
  else&lt;br /&gt;
    str=get(h_instr,'String');&lt;br /&gt;
    ac9.par.instr_num=char(str(val));&lt;br /&gt;
  end&lt;br /&gt;
  h_date=findobj('Tag','instrdateList');&lt;br /&gt;
  val=get(h_date,'Value');&lt;br /&gt;
  %remember val is length(cal.list+1)&lt;br /&gt;
  if val==1,&lt;br /&gt;
    dev_file=fullfile(ac9.par.calroot_dir, ac9.par.instr_num, ...&lt;br /&gt;
		      ac9.par.dev_dir, ac9.par.dev_file)&lt;br /&gt;
    name_list={'cal_num',&lt;br /&gt;
	       'cal_date',&lt;br /&gt;
	       'airfile',&lt;br /&gt;
	       'qwaterfile',&lt;br /&gt;
	       'softver',&lt;br /&gt;
	       'Tref'};&lt;br /&gt;
    list_load(dev_file,[],name_list);&lt;br /&gt;
    cal.list.num=cal_num;&lt;br /&gt;
    cal.list.date=cal_date;&lt;br /&gt;
    cal.list.air=airfile;&lt;br /&gt;
    cal.list.qwater=qwaterfile;&lt;br /&gt;
    cal.list.soft=softver;&lt;br /&gt;
    cal.list.Tref=Tref;&lt;br /&gt;
    ac9.par.Tref=[];&lt;br /&gt;
    ac9.par.instr_date='';&lt;br /&gt;
    ac9.par.cal=cal;&lt;br /&gt;
    set(gcbf,'User',ac9);&lt;br /&gt;
    datestr=cellstr(strvcat('Select factory cal', ac9.par.cal.list.date));&lt;br /&gt;
    set(findall(0,'Tag','instrdateList'),'String',datestr)&lt;br /&gt;
  else&lt;br /&gt;
    str=get(h_date,'String');&lt;br /&gt;
    ac9.par.instr_date=char(str(val));&lt;br /&gt;
    fi = fopen('caldate_used_a.txt','r+');&lt;br /&gt;
    if fi == -1&lt;br /&gt;
    dlmwrite('caldate_used_a.txt',ac9.par.instr_date,'delimiter','')&lt;br /&gt;
    else&lt;br /&gt;
    dlmwrite('caldate_used_c.txt',ac9.par.instr_date,'delimiter','')&lt;br /&gt;
    end&lt;br /&gt;
    if fi ~= -1&lt;br /&gt;
    fclose(fi);&lt;br /&gt;
    end&lt;br /&gt;
    ac9.par.Tref=str2num(ac9.par.cal.list.Tref(val-1,:));&lt;br /&gt;
    set(gcbf,'User',ac9);&lt;br /&gt;
  end&lt;br /&gt;
  warning(ow);&lt;br /&gt;
 case 'ac9cal_gui'&lt;br /&gt;
  load ac9cal_gui&lt;br /&gt;
  h0 = figure('Units','points', ...&lt;br /&gt;
	      'Color',[0.8 0.8 0.8], ...&lt;br /&gt;
	      'Colormap',mat0, ...&lt;br /&gt;
	      'HandleVisibility','callback', ...&lt;br /&gt;
	      'Name','ac9cal_gui.m', ...&lt;br /&gt;
	      'Menu','none', ...&lt;br /&gt;
	      'Number','off', ...&lt;br /&gt;
	      'Position',[10 10 430 100], ...&lt;br /&gt;
	      'Tag','ac9calFig');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[20 5 75 15], ...&lt;br /&gt;
		 'String','Use list file', ...&lt;br /&gt;
		 'Style','radiobutton', ...&lt;br /&gt;
		 'Value',[1], ...&lt;br /&gt;
		 'Tool',['On = use file, ', ...&lt;br /&gt;
		    'Off = use files selected from list'], ...&lt;br /&gt;
		 'Tag','UseFileBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Callback',[...&lt;br /&gt;
		     ' h_date=findobj(''Tag'',''instrdateList'');', ...&lt;br /&gt;
		     ' set(h_date,''Value'',1), ', ...&lt;br /&gt;
		     ' ac9cal_cb(''dev_parse'') '], ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[100 5 75 15], ...&lt;br /&gt;
		 'String',{'Select ac9','101','121','148','184'}, ...&lt;br /&gt;
		 'Style','popupmenu', ...&lt;br /&gt;
		 'Value',[1], ...&lt;br /&gt;
		 'Tool','Select instrument number to calibrate', ...&lt;br /&gt;
		 'Tag','instrnumList');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Callback',' ac9cal_cb(''dev_parse'') ', ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[175 5 100 15], ...&lt;br /&gt;
		 'String',{'Select factory cal'}, ...&lt;br /&gt;
		 'Style','popupmenu', ...&lt;br /&gt;
		 'Value',[1], ...&lt;br /&gt;
		 'Tool','Select  calibration date', ...&lt;br /&gt;
		 'Tag','instrdateList');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[20 22 75 15], ...&lt;br /&gt;
		 'String','Auto adv.', ...&lt;br /&gt;
		 'Style','radiobutton', ...&lt;br /&gt;
		 'Value',par.autorun, ...&lt;br /&gt;
		 'Tool',['On = Advance files automatically, ', ...&lt;br /&gt;
		    'Off = interactive'], ...&lt;br /&gt;
		 'Tag','autorun');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.70 0.70 0.70], ...&lt;br /&gt;
		 'Callback','ac9cal_cb(''view'')', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[360 50 50 35], ...&lt;br /&gt;
		 'String','Get list', ...&lt;br /&gt;
		 'Tool','Open list file', ...&lt;br /&gt;
		 'Tag','configBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.70 0.70 0.70], ...&lt;br /&gt;
		 'Callback','ac9cal_cb(''calview'');', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[100 50 50 35], ...&lt;br /&gt;
		 'String','calview', ...&lt;br /&gt;
		 'Tool','Screen data and select interval for averaging', ...&lt;br /&gt;
		 'Tag','calviewBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.70 0.70 0.70], ...&lt;br /&gt;
		 'Callback','ac9cal_cb(''calspec'')', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[150 50 50 35], ...&lt;br /&gt;
		 'String','calspec', ...&lt;br /&gt;
		 'Tool','Calculate average spectra and overlay', ...&lt;br /&gt;
		 'Tag','calspecBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.70 0.70 0.70], ...&lt;br /&gt;
		 'Callback','tsp=ac9cal_cb(''ts_cal'')', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[200 50 50 35], ...&lt;br /&gt;
		 'String','ts_cal', ...&lt;br /&gt;
		 'Tool','View time series and calc average value',...&lt;br /&gt;
		 'Tag','ts_calBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'Callback','ac9cal_cb(''go'');', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[20 50 50 35], ...&lt;br /&gt;
		 'String','Go', ...&lt;br /&gt;
		 'Tool','Procede to next file', ...&lt;br /&gt;
		 'Tag','goBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'Callback','ac9cal_cb(''stop'');', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[300 5 50 15], ...&lt;br /&gt;
		 'String','Stop', ...&lt;br /&gt;
		 'Tool','Bail out of program and return to ac9cal',...&lt;br /&gt;
		 'Tag','stopBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[300 50 50 35], ...&lt;br /&gt;
		 'String','Report', ...&lt;br /&gt;
		 'Visible','off', ...&lt;br /&gt;
		 'Tag','repBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.70 0.70 0.70], ...&lt;br /&gt;
		 'Callback','ac9cal_cb(''reset'')', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[330 22 80 15], ...&lt;br /&gt;
		 'String','Reset Programs', ...&lt;br /&gt;
		 'Tool','Use to get buttons back if programs die', ...&lt;br /&gt;
		 'Tag','ResetBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.70 0.70 0.70], ...&lt;br /&gt;
		 'Callback','file_gui_cb(''CloseAll'')', ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[360 5 50 15], ...&lt;br /&gt;
		 'String','Quit', ...&lt;br /&gt;
		 'Tool','Close all windows', ...&lt;br /&gt;
		 'Tag','CloseAllBut');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[0.56 0.68 0.65], ...&lt;br /&gt;
		 'ListboxTop',0, ...&lt;br /&gt;
		 'Position',[100 22 175 15], ...&lt;br /&gt;
		 'Style','text', ...&lt;br /&gt;
		 'Tag','list_file', ...&lt;br /&gt;
		 'Tool','Active list file');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Callback',['val=get(gcbo,''Value''),',...&lt;br /&gt;
		    'set(findobj(''Tag'',''prop''), ', ...&lt;br /&gt;
		    ' ''Value'',val), ', ...&lt;br /&gt;
		    'set(findobj(''Tag'',''abs''), ', ...&lt;br /&gt;
		    ' ''Value'',abs(val-1)) ' ], ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[250 50 50 15], ...&lt;br /&gt;
		 'String',' c, atten', ...&lt;br /&gt;
		 'Value', par.prop, ...&lt;br /&gt;
		 'Style','radiobutton', ...&lt;br /&gt;
		 'Tag','prop');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Callback',['val=get(gcbo,''Value''),',...&lt;br /&gt;
		    'set(findobj(''Tag'',''abs''), ', ...&lt;br /&gt;
		    ' ''Value'',val), ', ...&lt;br /&gt;
		    'set(findobj(''Tag'',''prop''), ', ...&lt;br /&gt;
		    ' ''Value'',abs(val-1)) ' ], ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[300 50 50 15], ...&lt;br /&gt;
		 'String',' a, absorp', ...&lt;br /&gt;
		 'Value', ~par.prop, ...&lt;br /&gt;
		 'Style','radiobutton', ...&lt;br /&gt;
		 'Tag','abs');  &lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Callback',['val=get(gcbo,''Value''),',...&lt;br /&gt;
		    'set(findobj(''Tag'',''fluid''), ', ...&lt;br /&gt;
		    ' ''Value'',val), ', ...&lt;br /&gt;
		    'set(findobj(''Tag'',''air''), ', ...&lt;br /&gt;
		    ' ''Value'',abs(val-1)) ' ], ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[250 70 50 15], ...&lt;br /&gt;
		 'String','Water', ...&lt;br /&gt;
		 'Value', par.fluid, ...&lt;br /&gt;
		 'Style','radiobutton', ...&lt;br /&gt;
		 'Tag','fluid');&lt;br /&gt;
  h1 = uicontrol('Parent',h0, ...&lt;br /&gt;
		 'Callback',['val=get(gcbo,''Value''),',...&lt;br /&gt;
		    'set(findobj(''Tag'',''air''), ', ...&lt;br /&gt;
		    ' ''Value'',val), ', ...&lt;br /&gt;
		    'set(findobj(''Tag'',''fluid''), ', ...&lt;br /&gt;
		    ' ''Value'',abs(val-1)) ' ], ...&lt;br /&gt;
		 'Units','points', ...&lt;br /&gt;
		 'BackgroundColor',[.8 .8 .8], ...&lt;br /&gt;
		 'Position',[300 70 50 15], ...&lt;br /&gt;
		 'String','Air', ...&lt;br /&gt;
		 'Value', ~par.fluid, ...&lt;br /&gt;
		 'Style','radiobutton', ...&lt;br /&gt;
		 'Tag','air');  &lt;br /&gt;
  if nargout &amp;gt; 0, fig = h0; end&lt;br /&gt;
end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
% TODO&lt;br /&gt;
&lt;br /&gt;
% Program headers and notes&lt;br /&gt;
&lt;br /&gt;
% Update readme&lt;br /&gt;
&lt;br /&gt;
% Update TRANSFER&lt;br /&gt;
&lt;br /&gt;
% Require saveBox to be low before programs can be called&lt;br /&gt;
&lt;br /&gt;
% Add close windows button&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[ac9cal_cb]]&lt;/div&gt;</summary>
		<author><name>Eriks</name></author>
		
	</entry>
</feed>