Calspec.m
Jump to navigation
Jump to search
% Title: CALSPEC.M % Date: 02/2000 % Author: EB/SRW % Input: list_file:string % Output: [returns:dimension] % Files: list_file(qcal.txt), calfile.txt % Assumes: list_file in local dir with file names and intervals, % calibration files are in the local directory, % header of ac9.dat files end with 'aquisition binsize', % Purpose: calculate spectral average of calibration file % Calls: % Uses: ac9 calibration % Example: calsec('qcal.txt') % NOTES: % 02/2000 % Wetlabs recommends calibrating a,c separately therefore this needs % to be modified to accomodate ac9.dat files that don't have a or c. % Need a channel flag and then place error flags in the unused signal. %function fig=calspec(list_file,autorun,filetype,prop) function fig=calspec(varargin) [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('calspec: command line pairs not correctly formed'); return end if isempty(ac9.par.prop), msgbox('Select an IOP, rerun calspec'); return end if isempty(ac9.par.fluid), msgbox('Select a fluid, rerun calspec'); return end if ac9.par.fluid, % 1 for water if ~isfield(ac9.par,'instr_num'), msgbox('Select an AC9, rerun calspec'); return end if ~isfield(ac9.par,'Tref'), msgbox('Select a factory cal, rerun calspec'); return end Tref=ac9.par.Tref; if isempty(Tref), msgbox('Tref is empty, check factory cal, rerun calspec'); return end end qcal=qcaled_cb('list_load','list_file',ac9.par.list_file) fig=calspecplot(0); set(fig,'Userdata',ac9); calspecplot(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 for ifile=1:length(fileval), %size(udata.list.fname,1), if(fileval(ifile)>0), ival=fileval(ifile); file=deblank(qcal.list.fname(ifile,:)) 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=read_ac9([file '.dat']); %temp=read_ac9(file); %eval(['temp=read_ac9(''' shrink(file) '.dat'');']); temp=exciseit(temp,20); else temp=read_strip([file '.da2']); %eval(['temp=readstr(''' shrink(file) '.da2'');']); end; minmin=str2num(qcal.list.t1(ifile,:)); % in decimal minutes maxmin=str2num(qcal.list.t2(ifile,:)); if maxmin==0, maxmin=temp(end,1); end time=temp(:,1)/60000; range=find(time>minmin & time<maxmin); temp2=medfilt1(temp,15); if ac9.par.filetype==1 chan2=temp2(range,2:19); ref2=temp2(range,24:41); itemp2=temp2(range,20); else chan2=temp2(range,3:20); ref2=temp2(range,24:41); itemp2=temp2(range,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 chan3=mean(chan2); specdata=mean(chan2); stddata=std(chan2); ndata=size(chan2,1); udata=get(fig,'Userdata'); udata.data(ifile).file=file; udata.data(ifile).specdata=specdata(I(ichannels)); udata.data(ifile).specdata; udata.data(ifile).nspecdata=udata.data(ifile).specdata - ... udata.data(ifile).specdata(6); udata.data(ifile).stddata=stddata(I(ichannels)); udata.data(ifile).inttemp=mean(exciseit(itemp2,0,-1000,1000)); udata.data(ifile).ndata=ndata*ones(1,9); set(fig,'Userdata',udata); udata.han=calspecplot(2) set(fig,'Userdata',udata); calspecplot(3) calspecplot(4) leg_names =(''); leg_names=strvcat(leg_names,strrep(udata.data(ifile).file,'_','\_')) if ~ac9.par.autorun disp('press return key or go button for next plot'); uiwait(fig); if isempty(get(findall(0,'Tag','goBut'),'Userdata')), break end end; end end %ifile figure(fig); udata.leg_names=leg_names; a=legend(udata.han,udata.leg_names,-1); udata.legend=a; set(fig,'Userdata',udata); %Query list_file save and write mean value files ButtonName=questdlg('Save list_file and write mean value files?'); switch ButtonName, case 'Yes', qcaled_cb('save'); for ifile=1:size(udata.data,2), ispec=[udata.par.wave; udata.data(ifile).specdata; udata.data(ifile).stddata; udata.data(ifile).ndata]; save([udata.data(ifile).file '.txt'],'ispec','-ascii') end end %TODO %add legends