Calview.m
Jump to navigation
Jump to search
%cl: calview() | calview('list_file','foo.txt')
% running from cl will always read list_file, gui interaction even if
% open
%check for list_file in command line
%yes: qcaled(list_file), ac9init, calview(list_file,etc.)
%no: "select file dialog, restart", qcaled
%gui: CB: list_file=ac9cal.filename.udata.name (must be current)
%calview(list_file)
%check for list_file in command line
%yes: qcaled(list_file), ac9init, calview(list_file,etc.)
%no: "select file dialog, restart", qcaled
%qcaled has to update filename with any changes to filetext
%ac9init gets qcal filename from qcaled, if ok then call calview
% list~=qcaled.filename.udata.name, open list_file
%include in filename.udata the handle of the corresponding qcaled
%check to see that filename.udata.name are the same in ac9cal and
% qcaled to make sure that qcaled hasn't been closed or modified
%lock out qcaled when cv,cs,ts are running
%closing qcaled should clear ac9cal.filename.udata.name
%has to be an active list_file to run calview and saved copy must
%be up to date, make ac9calinit check for this
%what if qcal.txt is modified outside of qcaled?
% $$$ function calview(list_file,autorun,filetype)
% $$$
% $$$ ac9calinit %get the contents of the list_file
% $$$
% $$$ calviewinit, set up the figures
% $$$
% $$$ for ifile,
% $$$ calview_main, read the data and plot; modify; save
% $$$ end
% $$$
% $$$ qcalsave, query save of new qcal.txt
% $$$
% $$$ return
% Title: CALVIEW.M
% Date: 02/2000
% Author: EB/SRW
% Input: parfile:string
% Output: [returns:dimension]
% Files: list_file(qcal.txt)
% Assumes: list_file in local dir with file names and intervals,
% Order of wavelengths in *.dat file
% a650 a676 a715 c510 c555 c630 a412 a440 a488
% c650 c676 c715 a510 a555 a630 c412 c440 c488
% Purpose: what do I do?
% Calls: function names
% Uses: ac9cal_cb
% Example: calview() | calview('list_file','foo.txt')
% NOTES: autorun []=all,man;>0=ran,man;0=all,auto
% Now plots all wavelengths, zoom to see details.
% Does not modify list_file if run from the command line.
% User asked to save the modified filetext to qcal.txt
% at the end program if run from ac9cal_gui.
% Varargin passed to calview only update ac9.par in calview,
% can't pass them on to ac9cal as function arguments,
% not in correct form.
%function fig=calview(list_file,autorun,filetype,prop,mode)
function fig=calview(varargin)
% $$$ h_ac9=findall(0,'Tag','ac9calFig');
% $$$ if isempty(h_ac9),
% $$$ % No ac9cal gui, start and read defaults
% $$$ end
% $$$ ac9=ac9cal_cb('par_update');
[ac9calfig,ac9]=ac9cal;
%assign command line parameters to local variables
narg=length(varargin);
nrow=narg/2;
if nrow==round(nrow),
for iarg=1:2:length(varargin),
eval(['ac9.par.' varargin{iarg} '= varargin{iarg+1};']);
end
else
display('calview: command line pairs not correctly formed');
return
end
%check that all parameters have been defined
if isempty(ac9.par.prop),
msgbox('Select an IOP, rerun calview');
return
end
if isempty(ac9.par.fluid),
msgbox('Select a fluid, rerun calview');
return
end
if ac9.par.fluid, % 1 for water
if ~isfield(ac9.par,'instr_num'),
msgbox('Select an AC9, rerun calview');
return
end
if ~isfield(ac9.par,'Tref'),
msgbox('Select a factory cal, rerun calview');
return
end
Tref=ac9.par.Tref;
if isempty(Tref),
msgbox('Tref is empty, check factory cal, rerun calview');
return
end
end
qcal=qcaled_cb('list_load','list_file',ac9.par.list_file);
fig=calviewplot(0);
set(fig,'Userdata',ac9);
calviewplot(1);
filetext=qcal.FileText.str;
fileval=qcal.FileText.val;
channels=ac9.sort_channels;
I=ac9.I; %index of channels from .dat file is sorted alphabetically
ichannels=ac9.isort_channels; %index of channels in sorted array
specdata=[];
stddata=[];
ndata=[];
leg_names='';
for ifile=1:length(fileval), %size(udata(1).list.fname,1),
if(fileval(ifile)>0),
ival=fileval(ifile);
%file=deblank(udata(1).list.fname(ifile,:))
file=deblank(qcal.list.fname(ifile,:));
%add some check to make sure a commented line hasn't been chosen
if filetext(ival,1)=='#',
display('uncomment this file, save and rerun');
break;
end
set(findobj('Tag','FileText'),'Value',ival);
if ac9.par.filetype==1
[temp,head]=read_ac9([file '.dat']);
%[temp,head]=read_ac9(file);
%eval(['temp=read_ac9(''' file '.dat'');']);
temp=exciseit(temp,20);
time=temp(:,1)/60000;
chan=temp(:,2:19);
itemp=temp(:,20);
temp2=medfilt1(temp,15);
time2=temp2(:,1)/60000;
chan2=temp2(:,2:19);
itemp2=temp2(:,20);
else
temp=read_strip([file '.da2']);
%eval(['temp=read_strip(''' file '.da2'');']);
time=temp(:,1)/60000;
chan=temp(:,3:20);
itemp=temp(:,21);
temp2=medfilt1(temp,15);
time2=temp2(:,1)/60000;
depth2=temp2(:,2);
chan2=temp2(:,3:20);
itemp2=temp2(:,21);
end;
if ac9.par.fluid,
%add wetlabs temperature correction
%get Tcal from a list file
Tcaldate=qcal.list.date(ifile,:);
%Tcalfile=['watertemp_' ac9.par.instr_num '.txt'];
Tcalfile=[ac9.par.instr_num ac9.par.Tcalfile];
Tcalfile=fullfile(ac9.par.calroot_dir, ac9.par.instr_num, ...
ac9.par.Tcaldir, Tcalfile);
qcal.list.tcal=read_text(Tcalfile);
find( datenum(Tcaldate)==datenum(parse(qcal.list.tcal,1)) );
Tcal=0;
if ~isempty(ans),
Tcal=parse(qcal.list.tcal(ans(1),:),2);
%add cal check
if ~strcmp(Tcal,'Reserved');
Tcal=str2num(Tcal);
else
msgbox('Enter Tcal into line 5 of the qcal.txt and rerun');
close(fig);
return
end
else
qcal.list.tcal;
disp(['Tcaldate is not in this list, check ' Tcalfile]);
return
end
if Tcal>0,
del_ts=ac9.par.sit*(Tcal-ac9.par.Tref);
del_ts=[del_ts del_ts];
for irow=1:size(chan2,1),
chan2(irow,:)=chan2(irow,:)-del_ts(I);
end
end
end
%put this data into the figure
caldata.file=file;
caldata.par=ac9.par;
caldata.I=I;
caldata.channels=channels;
caldata.ichannels=ichannels;
caldata.time2=time2;
caldata.chan2=chan2;
caldata.itemp2=itemp2;
% $$$ t_lim=[str2num(udata(1).list.t1(ifile,:))
% $$$ str2num(udata(1).list.t2(ifile,:)) ];
t_lim=[str2num(qcal.list.t1(ifile,:))
str2num(qcal.list.t2(ifile,:)) ];
caldata.t_lim=t_lim;
%put the data into the calplot user data
set(findobj(fig,'Tag','calplot'),'Userdata',caldata);
%put a spectral plot for entire range on same page
%fill edit boxes on qcaled
%get the time fields to pass as t_lim
%put into calviewplot and get t_lim from fig.udata.t_lim
calviewplot(2);
% $$$ specdata=get(findobj('Tag','specplot'),'Userdata');
% $$$ stddata=get(findobj('Tag','stdplot'),'Userdata');
newdata=get(findobj(fig,'Tag','specplot'),'Userdata');
%save to calplot figure userdata
udata=get(fig,'Userdata');
%wavelength should be global, get from udata.par.wave
%udata(ifile).wave=par.wave;
%udata.data should be a structure array of the data
%udata(ifile).file=file;
%udata(ifile).specdata=newdata.specdata(end,:);
%udata(ifile).nspecdata=udata(ifile).specdata - ...
% udata(ifile).specdata(6);
%udata(ifile).stddata=newdata.stddata(end,:);
%udata(ifile).ndata=newdata.ndata(end,:);
udata.data(ifile).file=file;
udata.data(ifile).specdata=newdata.specdata(end,:);
udata.data(ifile).nspecdata=udata.data(ifile).specdata - ...
udata.data(ifile).specdata(6);
udata.data(ifile).stddata=newdata.stddata(end,:);
udata.data(ifile).ndata=newdata.ndata(end,:);
set(fig,'Userdata',udata);
%leg_names=strvcat(leg_names,strrep(udata(ifile).file,'_','\_'));
leg_names=strvcat(leg_names,strrep(udata.data(ifile).file,'_','\_'));
if ~ac9.par.autorun
x1_han(1)=findobj(fig,'Tag','calplot');
ax1 = axis(x1_han)
ax1 = ax1(1)
disp('press left mouse and hold to zoom in on an area');
disp('press left mouse to zoom out');
%disp('write down beginning and ending minute to use');
%disp('press return key to continue to next file ');
disp('press return key to confirm zoom then press "go" to go to next file')
disp('');
disp('');
uiwait(fig)
% pause
x2_han(1)=findobj(fig,'Tag','calplot');
ax2 = axis(x1_han)
ax2 = ax2(1)
if ax2 ~= ax1
figure(1)
calviewplot(8)
end
%uiwait(fig);
if isempty(get(findall(0,'Tag','goBut'),'Userdata')),
break
end
end %ac9.par.autorun
end
end %ifile
set(fig,'Close','delete(gcf)')
%save list?
%backup old list file
%Query list_file save
get(findobj('Tag','SaveBut'),'Value')
if get(findobj('Tag','SaveBut'),'Value'),
ButtonName=questdlg('Save list_file ?');
switch ButtonName,
case 'Yes',
qcaled_cb('save');
end
end
pooh=1;
while(pooh)
%Problem: file commented out of filetext during calview
%Following: save original list of files, check that files are subset
%of that list.
%Better: ac9cal_update will parse the qcaled_gui into a structure and
%put it into the figure userdata. This becomes locked while program
%is running. Querry save at end if filetext has been changed, save
%flag is up.
% $$$ if ~get(findobj('Tag','SaveBut'),'Value'),
udata=get(fig,'Userdata');
%Exclude files that have been commented out of filetext
% $$$ tdata=get(findobj('Tag','FileText'),'Userdata');
% $$$ fval0=tdata.fval;
%%%%%fval0=qcal.FileText.val
% $$$ ac9cal_init
%get new fval, not in qcaled.udata
% $$$ tdata=qcaled_cb('parse');
%%%%%qcal=qcaled_cb('parse');
% $$$ udata=get(findobj('Tag','FileText'),'Userdata');
%tdata.fval must be a subset of fval0
% $$$ if all(ismember(qcal.FileText.val,fval0)),
% $$$ for i=1:length(fval0),
% $$$ find(fval0(i)==qcal.FileText.val)
% $$$ if isempty(ans),
% $$$ udata.data(i)=[];
% $$$ leg_names(i,:)=[]
% $$$ end
% $$$ end
% $$$ else
% $$$ %else won't be needed if the uncomment is blocked during program run
% $$$ msgbox(['files added which are not included in calview, ' ...
% $$$ ' rerun calview with new files or run calspec']);
% $$$ break
% $$$ end
%put a replot in to show overlay again after commenting out file
%Move this up to show the spectra first
% $$$ %Query to run a modified version of calspec using averages in data
% $$$ ButtonName=questdlg('Show overlay of spectra, aka calspec?');
% $$$ switch ButtonName,
% $$$ case 'Yes',
% $$$ fig=calspecplot(0);
% $$$ set(fig,'Userdata',udata);
% $$$ calspecplot(1);
% $$$ udata.han=calspecplot(2)
% $$$ set(fig,'Userdata',udata);
% $$$ calspecplot(3)
% $$$ calspecplot(4)
% $$$ udata.leg_names=leg_names;
% $$$ a=legend(udata.han,udata.leg_names,-1);
% $$$ udata.legend=a;
% $$$ set(fig,'Userdata',udata);
% $$$ end
% $$$ end
%save means last
%Query write mean value files
%Only wrote the first one, not using the file to get fval
if ~ac9.par.spectra,
meanBut=questdlg('What now?','', ...
'Save means and quit', ...
'Quit w/o saving means',...
'View spectra', ...
'View spectra');
else
meanBut='View';
end
switch meanBut(1:4),
case 'Save',
for ifile=1:length(udata.data),
ispec=[udata.par.wave;
udata.data(ifile).specdata;
udata.data(ifile).stddata;
udata.data(ifile).ndata];
save([udata.data(ifile).file '.txt'],'ispec','-ascii');
pooh=0;
end
case 'Quit'
pooh=0;
otherwise
fig=calspecplot(0);
set(fig,'Userdata',udata);
calspecplot(1);
udata.han=calspecplot(2)
set(fig,'Userdata',udata);
calspecplot(3)
calspecplot(4)
udata.leg_names=leg_names;
a=legend(udata.han,udata.leg_names,-1);
udata.legend=a;
set(fig,'Userdata',udata);
if ~ac9.par.spectra,
% $$$ listBut=questdlg('Edit list?')
% $$$ switch listBut(1:2)
% $$$ case 'Ye'
% $$$ h=msgbox('Comment and save list, then press OK');
% $$$ set(h,'Delete',' uiresume( findobj(''Tag'',''calspecFig'')) ' );
% $$$ uiwait(fig);
% $$$ end
else
ac9.par.spectra=0;
end
end
end % while pooh
return
%OUTLINE
%Select range of data(finalize),
% Calc new stats and plot,
% Makes new entries in filetext via qcaled,
%Push go,
% Save filetext to tempfile
% Calc ave from time in list, save to calviewfig.udata(ifile).ave
% and calviewfig.udata(ifile).name for writing later
%Query filetext save
% YES:
% Writes qcal.txt file
% Writes ave files
% Calls calspec for comparison
% NO:
% Bails, no further action
%TODO
%Add Pegau temperature correction,
% needs Tref from wetlabs cal
% needs T of water during field calibration
%qcaled('ac9 factory cal')
% parse ac9cal.dat and put into factory.user
% instrument and date list boxes
% add inst and date to ac9cal_def like a,c for batching
%change to qcaled to make updated put ac9calinit into qcaled, real
%time update to a structure made available via qcaled.userdata
%calviewplot('ac9_data')
%serial number list box
%cal location box
%cal number, date list box, parse ac9cal.dat
%tref list box
%caltype button A | Q
%
%
%
%in calviewplot
%calview from ac9cal_cb doesn't pick up the iop
%Add calspec plotting to end of calview
%Starting calview, calspec, ts-cal should disables add/remove buttons
%Add tool tips to buttons
%What about putting buttons into menus
%Add zoom/unzoom in menu for each plot
%Std/linreg plot doesn't come up with color symbols
%Dump results and averages, old/new to dialog and querry save
%Editting list should turn on save flag, check this flag before recalculating
%Add reset option to copy filetext.udata -> filetext.string
%Add ndata to data kept, have to change ts_cal input format, need to
% calculate weighted average
%Command line launch
%uncommenting a file in qcaled after starting the program is bad
%add Tref to calplot somewhere and note of correction