Calviewplot.m

From Pnb
Jump to navigation Jump to search
% NOTES:
%               Enters new times, temp into qcaled window
%      
function out=calviewplot(action)
  switch action
   case 0
    %initialize figure
    fig=figure;
    out=fig;
    zoom on % leave here, erases buttondownfcn if moved afterward
    set(findall(0,'Tag','calviewBut'),'Userdata',fig);
    %put the pointer into the go button
    set(findall(0,'Tag','goBut'),'Userdata',...
		      findall(0,'Tag','calviewBut'));
    set(0,'CurrentFig',fig);
    set(fig,'pos',[130 30 600 520]);
    set(fig,'Tag','calviewFig');
    %initialize the plots
    subplot(221); %calplot
    set(gca,'Tag','calplot');
    set(gca,'ButtonDownFcn','calviewplot(3)')
    subplot(425); %tempplot
    set(gca,'Tag','tempplot');
    subplot(414); %specplot
    set(gca,'Tag','specplot');
    h=subplot(222); %dummy for table
    get(gca,'Pos');
    wavepos=[ans(1:2) ans(3)/3 ans(4)];
    meanpos=[wavepos(1)+wavepos(3) wavepos(2) wavepos(3:4)];
    stdpos=[meanpos(1)+wavepos(3) wavepos(2) wavepos(3:4)];
    table(fig,wavepos,meanpos,stdpos);
    delete(h);
    %
    rbutpos=[meanpos(1) wavepos(2) wavepos(3) wavepos(4)/10];
    rbut(fig,rbutpos)
    subplot(426); %stdplot
    set(gca,'Tag','stdplot');
    signature('calview.m');
    %if this window gets closed, calviewBut should be cleared
    %set(fig,'Close','disp(''Use Go for next file, or Quit to close all'')');
   case 1
    [ax_han,fig]=get_ax;
    axes(ax_han(1));
    udata=get(fig,'Userdata'); %global for all files
    prop='a';
    if udata.par.prop,
      prop='c';
    end
    ylabel([prop '-' prop '_w (m^{-1})']);
    xlabel('time (min)');
    axes(ax_han(2));
    ylabel('instr. temp. (C)');
    axes(ax_han(3));
    ylabel([prop '-' prop '_w (m^{-1})']);
    xlabel('\lambda (nm)');
    axes(ax_han(5));
    ylabel('Std. Dev.');
    xlabel('\lambda (nm)');
   case 2
    ax_han=get_ax;
    udata=get(ax_han(1),'Userdata');
    %initialize calplot
    calviewplot1(udata);
    axis auto
    t_lim=udata.t_lim;
    calviewmask(t_lim)
    zoom reset
    calviewplot2(udata);
    %calculate the stats
    calviewplot(6)
   case 3
    %calplot callback
    ax_han=get_ax;
    udata=get(ax_han(1),'Userdata');
    newdata=get(ax_han(3),'Userdata');
    %calculate the stats
    calviewstats(udata,newdata);
    %plot new spectra
    newdata=get(ax_han(3),'Userdata');
    calviewplot3(udata,newdata);
    %update the stats table
    newdata=get(ax_han(3),'Userdata');
    calviewplot4(udata,newdata);
    %update stdplot
    calviewplot5(udata,newdata);
   case 4
    %AllChan callback
    ax_han=get_ax;
    axes(ax_han(1));
    udata=get(gca,'Userdata');
    t_lim=get(gca,'Xlim');
    zoom out
    calviewplot1(udata);
    calviewmask(t_lim);
   case 5
    %AllTime callback
    %calviewplot1;
    calviewmask([0 0]);
    calviewplot(3)
   case 6
    [ax_han,fig]=get_ax;
    %ResetStats callback
    l_han=findobj(ax_han(5),'Type','line')
    delete(l_han)
    set(ax_han(5),'userdata',[])
    l_han=findobj(ax_han(3),'Type','line')
    delete(l_han)
    set(ax_han(3),'userdata',[])
    calviewplot(3)
   case 7
    %ResetTime callback
    ax_han=get_ax;
    udata=get(ax_han(1),'Userdata');
    t_lim=udata.t_lim;
    calviewmask(t_lim)
    calviewplot(3)
   case 8
       [ax_han,fig]=get_ax()
       axes(ax_han(1));
       ax=axis
       minmin=ax(1);
       maxmin=ax(2);
       t1=sprintf('%5.2f',minmin)
       t2=sprintf('%5.2f',maxmin)
       set(findobj('Tag','t1Box'),'String',t1);

       set(findobj('Tag','t2Box'),'String',t2);
       mtemp=sprintf('%6.1f',get(ax_han(2),'Userdata'))
       set(findobj('Tag','InttempBox'),'String',mtemp);
       qcaled_cb('update');
    
       return
       
       
  end
  return
  
function [ax_han,fig]=get_ax()
  fig=get(findall(0,'Tag','calviewBut'),'Userdata');
  ax_han(1)=findobj(fig,'Tag','calplot');
  ax_han(2)=findobj(fig,'Tag','tempplot');
  ax_han(3)=findobj(fig,'Tag','specplot');
  ax_han(5)=findobj(fig,'Tag','stdplot');
  return
  
function calviewstats(udata,newdata)
  ax_han=get_ax;
  axes(ax_han(1));
  ax=axis
  minmin=ax(1);
  maxmin=ax(2);
  %new values from calplot axes
  t1=sprintf('%5.2f',minmin)
  t2=sprintf('%5.2f',maxmin)
  mtemp=sprintf('%6.1f',get(ax_han(2),'Userdata'))
  %pass array to qcaled_cb to update text fields
  isishandle = ishandle(findobj('Tag','QcaledFig1'))
  if ishandle(findobj('Tag','QcaledFig1')),
    %file text boxes with current file parameters
    qcaled_cb('gettextfields');
    %update with new values from calplot axes
    findobj('Tag','t1Box')
    set(findobj('Tag','t1Box'),'String',t1);
    set(findobj('Tag','t2Box'),'String',t2);
    set(findobj('Tag','InttempBox'),'String',mtemp);
    qcaled_cb('update');
  else
    display('qcal.txt file has not been updated, it is up to you');
  end
% $$$   udata=get(ax_han(1),'Userdata');
  par=udata.par;
  time2=udata.time2;
  chan2=udata.chan2;
  itemp2=udata.itemp2;
  I=udata.I;
  ichannels=udata.ichannels;
  range=find(time2>minmin & time2<maxmin);
% $$$   newdata=get(ax_han(3),'Userdata');
  newdata.avespec=mean(chan2(range,I(ichannels)));
  newdata.npts=length(range)*ones(1,9);
  newdata.stdspec=std(chan2(range,I(ichannels)));
  set(ax_han(3),'Userdata',newdata);
  return

function calviewmask(t_lim)
  ax_han=get_ax;
  axes(ax_han(1));
  h=findobj(gca,'Type','line');
%check for t_lim and adjust
  if exist('t_lim') & ~isempty(t_lim),
    minmin=t_lim(1);
    maxmin=t_lim(2);
    if maxmin==0,
      t_data=get(h(1),'xdata');
      maxmin=ceil(t_data(end));
    end
    set(ax_han(1),'XLim',[minmin maxmin])
  end
  return

function [ax]=calviewplot1(udata)
%this makes the initial plot of the data using times from file
  ax_han=get_ax;
  axes(ax_han(1));
  h_old=findobj(gca,'Type','line');
  if ~isempty(h_old),
    delete(h_old)
  end
% $$$   udata=get(gca,'Userdata');
  title(strrep(udata.file,'_','\_'));
  %change plot to line to avoid reinitializing
  h=line(udata.time2,udata.chan2(:,udata.I(udata.ichannels)));
  mylines(h,'c');
% $$$   %check for t_lim and adjust
% $$$   if exist('t_lim') & ~isempty(t_lim),
% $$$     minmin=t_lim(1);
% $$$     maxmin=t_lim(2);
% $$$     if maxmin==0,
% $$$       t_data=get(h(1),'xdata');
% $$$       maxmin=ceil(t_data(end));
% $$$     end
% $$$     set(ax_han(1),'XLim',[minmin maxmin])
% $$$   end
  %zoom reset
  l_han=legend(udata.channels(udata.ichannels,:),-1);
  l_pos=get(l_han,'pos');
  a_pos=get(ax_han(1),'pos');
  set(l_han,'pos',[l_pos(1) a_pos(2)+a_pos(4)-l_pos(4) l_pos(3: ...
						  4)]);
  return

function calviewplot2(udata)
%returns max. int. temp, only called once per file
%change plot to line to avoid reinitializing
  ax_han=get_ax;
% $$$   udata=get(ax_han(1),'Userdata');
  axes(ax_han(2));
  %remove previous lines first
  h=get(gca,'chil');
  delete(h);
  line(udata.time2,udata.itemp2);
  mtemp=max(get(findobj(gca,'Type','line'),'ydata'));
  %store mtemp in axis rather than returning it
  set(gca,'Userdata',mtemp);
  return

function calviewplot3(udata,newdata)
  %plot/replot spec data and store in axis
  ax_han=get_ax
% $$$   udata=get(ax_han(1),'Userdata')
  axes(ax_han(3));
% $$$   newdata=get(ax_han(3),'Userdata');
  l_han=errorbar(udata.par.wave,newdata.avespec,newdata.stdspec);
  hold on
  if isfield(newdata,'specdata'),
    plot(udata.par.wave,newdata.specdata,'k')
  else
    newdata.specdata=[];
  end
  hold off
  newdata.specdata=[newdata.specdata; newdata.avespec];
  set(gca,'Tag','specplot');
  set(gca,'Userdata',newdata);
  return

function calviewplot4(udata,newdata)
  ax_han=get_ax;
% $$$   udata=get(ax_han(1),'Userdata');
% $$$   newdata=get(ax_han(3),'Userdata');  
  strvcat(sprintf('%3.0f\n',udata.par.wave));
  set(findobj('Tag','WaveBox'),'String',ans);
  sprintf('%7.4f\n',newdata.avespec);
  set(findobj('Tag','MeanBox'),'String',ans);
  sprintf('%7.4f\n',newdata.stdspec);
  set(findobj('Tag','StdBox'),'String',ans);
  return

function calviewplot5(udata,newdata)
  %plot/replot std of calplot spectra
  ax_han=get_ax;
% $$$   udata=get(ax_han(1),'Userdata');
  axes(ax_han(5));
  %stddata=get(gca,'Userdata');
% $$$   newdata=get(ax_han(3),'Userdata');
  hold on
  plot(udata.par.wave,newdata.stdspec);
  if isfield(newdata,'stddata'),
    plot(udata.par.wave,newdata.stddata,'k')
  else
    %first time through, initialize these fields
    newdata.stddata=[];
    newdata.ndata=[];
    %problem is that if the plot rescales, the markers don't move
    %with the line always, huh?
    for ip=1:9,
      h(ip)=line(udata.par.wave(ip),newdata.stdspec(ip));
    end
    mylines(h,'mc');
  end
  hold off
  newdata.stddata=[newdata.stddata; newdata.stdspec];
  newdata.ndata=[newdata.ndata; newdata.npts];
  title(['npts = ' num2str(mean(newdata.npts))]);
  set(ax_han(5),'Tag','stdplot');
  set(ax_han(3),'Userdata',newdata);
  return

function []=rbut(fig,rbutpos)
  uicontrol('Parent',fig, ...
	    'Callback','calviewplot(2)',... 
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',rbutpos, ...
	    'String','Reset time', ...
	    'Style','Push', ...
	    'Tag','ResetTimeBut');
  uicontrol('Parent',fig, ...
	    'Callback','calviewplot(4)', ...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',rbutpos, ...
	    'String','All chan', ...
	    'Style','Push', ...
	    'Tag','AllChanBut');
  uicontrol('Parent',fig, ...
	    'Callback','calviewplot(5)',...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',[rbutpos(1) rbutpos(2)+1.1*rbutpos(4) rbutpos(3:4)], ...
	    'String','All time', ...
	    'Style','Push', ...
	    'Tag','AllTimeBut');
  uicontrol('Parent',fig, ...
	    'Callback','calviewplot(6)', ...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',[rbutpos(1)+1.1*rbutpos(3) rbutpos(2) rbutpos(3:4)], ...
	    'String','Reset stats', ...
	    'Style','Push', ...
	    'Tag','ResetStatsBut');
  uicontrol('Parent',fig, ...
	    'Callback','calviewplot(7)', ...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',[rbutpos(1)+1.1*rbutpos(3) rbutpos(2)+1.1*rbutpos(4)...
		    rbutpos(3:4)], ...
	    'String','Reset time', ...
	    'Style','Push', ...
	    'Tag','ResetTimeBut');
  return
  
function []=table(fig,wavepos,meanpos,stdpos)
  uicontrol('Parent',fig, ...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',wavepos, ...
	    'hor','right', ...
	    'String','', ...
	    'Style','text', ...
	    'Tag','WaveBox');
  uicontrol('Parent',fig, ...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',meanpos, ...
	    'hor','right', ...
	    'String','', ...
	    'Style','text', ...
	    'Tag','MeanBox');
  uicontrol('Parent',fig, ...
	    'Units','norm', ...
	    'BackgroundColor',[.8 .8 .8], ...
	    'Position',stdpos, ...
	    'hor','right', ...
	    'String','', ...
	    'Style','text', ...
	    'Tag','StdBox');
  return

% TODO

% Add colored symbols to std and ts plots to match the colors on calplot

% Make buttondown on legend names plot that/those channels for all
% time with the greatest resolution.
% Unclick names to get all the lines back

%should newdata be saved in the figure udata rather than the
%axes. Make the figure udata the place to pass data to other figures

calviewplot