Merge ctdac9 v2.m
Jump to navigation
Jump to search
% MERGE_ctdac9.M % DEC 97, JUL 98, 9/99 % John Ubante, SRW % Input: none % Look for: upused.txt, for pairing of ctd and ac9 files; % LIST/list_ac9merge_ctd % Output: $ctd$ac9.strip % Assumptions: 1) This function called from directory with data, % 2) The strip lists located in % /home/scratch51/bbop/WORK/LIST/, % 3) ac9file have just left sac9proc and begin with "m" % 4) ac9files have 'core' name beginning with the % first 'z' % 4) ctdfiles are flat files that are already "stripped" % 5) ctdfiles have 'core' name beginning withb the % first 'X' % Purpose: Merge ac9 and ctd datasets and create a strip- % like file that contains the columns listed in % [list_ac9merge_ctd; list_ac9merge_ac9] % Calls: ctd2strip,merge_2files % Maintain: {filename, columnarraylist, disp_text} % Uses: PnB ac9 processing % Example: merge_ctdac9 % Notes: Based on merge_merac9 as written for bbop ac9 processing %Edited by Erik S. 6/7/2010 ' % % %' are altered areas function merge_ctdac9(pb) % initialize local variables if findstr(computer,'PCWIN') LIST='z:\links\WORK\LIST'; else LIST = '/home/eriks/LIST/'; %LIST='/home/data241/bbop/RADIOMETRY/ARCHIVE_lcd/LIST/'; end list_ctdac9=[]; list_ac9merge_ac9 = 'list_ac9merge_ac9'; HERE=pwd; check=[]; % check for list files cd ../.. % in $WORK/LIST eval([ 'cd ' LIST ]); [s,m]=unix([ 'ls ' list_ac9merge_ac9] ); if s sprintf('Check your %s in %s.',list_ac9merge_ac9,LIST) return end eval([ 'cd ' HERE ]) clear HERE % copy strip lists HERE % if not already HERE [s,m]=unix([ 'ls ' list_ac9merge_ac9 ]); if size(m,2)~=size(list_ac9merge_ac9,2)+1 eval([ '!cp ' LIST list_ac9merge_ac9 ' .' ]); end clear s m LIST %load list file name_list=list_load('upused.txt',[ 1:6 ],{'dum','dum','list_ac9bmdz', ... 'dum','dum','list_ctd'}); % $$$ % check for upused.txt in pwd % $$$ [s,m]=unix('ls upused.txt'); % $$$ if isempty(m) % $$$ msg=sprintf('Check your upused.txt.'); % $$$ disp(msg) % $$$ return % $$$ end % $$$ clear s m % $$$ % $$$ % load upused.txt % $$$ fid=fopen('upused.txt','r'); % $$$ while fid~=-1 % $$$ check=fgetl(fid); % $$$ if check~=-1, % $$$ if(check(1) ~= '#') % $$$ list_ctdac9=[list_ctdac9; check]; % $$$ end % $$$ else % $$$ break; % $$$ end % $$$ end % $$$ clear fid check % $$$ % $$$ % $$$ % parse ctd & ac9 names % $$$ % into lists % $$$ for i=1:size(list_ctdac9,1), % $$$ list_ac9(i,:)=parse(list_ctdac9(i,:),3); % $$$ list_ctd(i,:)=parse(list_ctdac9(i,:),6); % $$$ end % check to see if lists % lengths are equal if size(list_ctd,1)~=size(list_ac9bmdz,1) error('You do not have 1 to 1 correspondence in your list_ctdac9.') end ifread=ones(size(list_ctd,1),2); % check presence of ctd files badfilectr=0; for ifile=1:size(list_ctd,1) [s,m]=unix(['ls ',list_ctd(ifile,:)]); if s badfilectr=badfilectr+1; ifread(ifile,1)=0; end end clear ifile if badfilectr list_ctd msg=sprintf('%ifile missing ctd file(s).',badfilectr); disp(msg) warning('Your ctdlist includes a file not in pwd.') end clear s m badfilectr msg % check presence of ac9 files badfilectr=0; for ifile=1:size(list_ac9bmdz,1) [s,m]=unix(['ls ',list_ac9bmdz(ifile,:)]); if s badfilectr=badfilectr+1; ifread(ifile,2)=0; end end clear ifile if badfilectr list_ac9bmdz msg=sprintf('%ifile missing ac9 file(s).',badfilectr); disp(msg) warning('Your ac9list includes a file not in pwd.') end clear s m badfilectr msg % loop through pairs for i=find(all(ifread')), ctd_file=list_ctd(i,:); ac9_lcd=list_ac9bmdz(i,:); % create output name location1=find(ctd_file=='X'); output=ctd_file(location1(1):location1(1)+7); output=[output '.' ctd_file(size(ctd_file,2))]; location1=find(ac9_lcd=='z'); location2=find(ac9_lcd=='.'); output=[output '.' ac9_lcd(location1+2:location2-1) '.']; output=[output ac9_lcd(size(ac9_lcd,2)) '.strip'] clear location1 location2 % strip em ctd_base=ctd_file(1:8) pb ctd2strip_v2(pb,ctd_base)% % %------------------------------------ mofified to have no ctd_head return ctd_head = % % fid=fopen('ctd_head','w');% % % for j=1:size(ctd_head,1), % % fprintf(fid,'%s\n',ctd_head(j,:)');% % % end %fclose(fid); eval([ '!cat ctd_head_n > ' ctd_file '.strip']); eval([ '!cat ' ctd_file ' >> ' ctd_file '.strip']); % %eval([ '!cat ctd_head > ' ctd_file '.strip']); % %eval([ '!cat ' ctd_file ' >> ' ctd_file '.strip']); %eval('!\rm ctd_head' ); ctd_strip=[ctd_file '.strip'] ac9_strip=[ac9_lcd '.strip']; %eval([ '!bbopstrip -f ' list_ac9merge_ac9 ' ' ac9_lcd ' ' ac9_strip ]) %ac9_lcd E_BBstrip(pb,ac9_lcd,list_ac9merge_ac9); ac9_strip = strcat(ac9_lcd,'.strip');% % call merge_2files msg=sprintf('Merging %s and %s into %s.',ctd_file,ac9_lcd,output); disp(msg)% [data,header]=merge_2files(ctd_strip,ac9_strip); % write merged stripfile to disk fid=fopen('merging_header.temp','w'); for j=1:size(header,1) fprintf(fid,'%3s\n',header(j,:)'); end fclose(fid); save merging_data.temp data -ascii eval([ '!cat merging_header.temp merging_data.temp > ' output ]); eval('!\rm merging_header.temp merging_data.temp'); %clear output fid header data j % rm strip files % eval([ '!rm ' ctd_strip ' ' ac9_strip ]) end % end for loop clear i ctd2strip_v2 ac9_strip % rm strip list files % $$$ eval([ '!rm ' list_ac9merge_ac9 ' ' list_ac9merge_mer ]); % MERGE_2FILES.M % NOV 97 % John Ubante % Input: [mer,ac9]:string % Output: [headAB:char array,fileAB:{200x(N1+N2-1)}] % Assumptions: errorflag=(-9.9e+35); depth will be the second column of mer % data and the first column of ac9 data % Purpose: to paste 2 strip-version files together using binned depths % as index; to place errorflag values at depths that don't exist % if there is an error with inputted files, program will return % to keyboard % Calls: read_strip, unique % Uses: 97 ac9 processing, esp. called from merge_merac9.m % % Example: [data,header]=merge_2files('mer.strip','ac9.strip') % NOTES: in script, "fileA" refers to SECOND parameter and "fileB" % refers to FIRST parameter; function [fileAB,headAB]=merge_2files(ctd,ac9); % declare local variables errorflag=-9.9e+35; depthrange=[1:220]; % note that the 0m depth line is still added fileAB=[]; headAB=['#filename ',ctd,' ',ac9]; % load stripped files %eval(['[fileA,headA]=read_strip(ac9);']) %eval(['[fileB,headB]=read_strip(ctd);']) eval(['[fileA,headA]=hdrload(ac9);']); eval(['[fileB,headB]=hdrload(ctd);']); clear ctd ac9 %add depth column in 2 for ctd, will take out at the end fileB=[fileB(:,1) fileB(:,3) fileB(:,2:size(fileB,2))]; %zerodepth=fileB(1,:); % remove lines with % errorflag for depth indA=find(fileA(:,1)==errorflag); fileA(indA,:)=[]; indB=find(fileB(:,2)==errorflag); fileB(indB,:)=[]; clear indA indB % ensure depths are % positive values fileA(:,1)=abs(fileA(:,1)); fileB(:,2)=abs(fileB(:,2)); % ensure depths are % integral values for i=1:size(fileB,1) if fileB(i,2)~=round(fileB(i,2)) %fileB(i,2) %round(fileB(i,2)) error('Depth is not integral in first parameter. Try again.') end end for i=1:size(fileA,1) if fileA(i,1)~=round(fileA(i,1)) fileA(i,1); error('Depth is not integral in second parameter. Try again.') end end clear i % remove depths outside of % depthrange indA=find(fileA(:,1)<min(depthrange)); fileA(indA,:)=[]; indA=find(fileA(:,1)>max(depthrange)); fileA(indA,:)=[]; indB=find(fileB(:,2)<min(depthrange)); fileB(indB,:)=[]; indB=find(fileB(:,2)>max(depthrange)); fileB(indB,:)=[]; clear indA indB % ensure depths are unique if size(unique(fileA(:,1)),1)~=size(fileA,1) error('Depth is not unique in second parameter. Try again.') end if size(unique(fileB(:,2)),1)~=size(fileB,1) error('Depth is not unique in first parameter. Try again.') end % ensure depths are monotonic if sort(fileA(:,1))~=fileA(:,1) error('Depth is not monotonic in second parameter. Try again.') keyboard end if sort(fileB(:,2))~=fileB(:,2) error('Depth is not monotonic in first parameter. Try again.') keyboard end % $$$ % join using depths % $$$ for i=depthrange % $$$ % fill in depth with errorflag if % $$$ % missing % $$$ if size(fileB,1)<i % $$$ fileB=[fileB;errorflag,i,ones(1,size(fileB,2)-2)*errorflag]; % $$$ elseif fileB(i,2)~=i % $$$ fileB=[fileB(1:i,:);errorflag,i,ones(1,size(fileB,2)-2)*errorflag;fileB(i:size(fileB,1),:)]; % $$$ end % $$$ if size(fileA,1)<i % $$$ fileA=[fileA;i,ones(1,size(fileA,2)-1)*errorflag]; % $$$ elseif fileA(i,1)~=i % $$$ fileA=[fileA(1:i,:);i,ones(1,size(fileA,2)-1)*errorflag;fileA(i:size(fileA,1),:)]; % $$$ end % $$$ % do IT % $$$ fileAB(i,:)=[fileB(i,:),fileA(i,2:size(fileA,2))]; % $$$ % $$$ end % end for % join using depths, % replaces section above emask=ones(size(depthrange,2),size(fileB,2))*errorflag; irow=find(fileB(:,2) >= depthrange(1,1) & fileB(:,2) <= ... depthrange(end)); if(isempty(irow)); error('No data in depthrange 1') end for i = 1:size(irow,1); emask(fileB(irow(i,1),2),:) = fileB(irow(i,1),:); end fileB=emask; clear emask irow emask=ones(size(depthrange,2),size(fileA,2))*errorflag; irow=find(fileA(:,1) > depthrange(1,1) & fileA(:,1) <= ... depthrange(size(depthrange,2))); if(isempty(irow)); error('No data in depthrange 2') end for i = 1:size(irow,1); emask(fileA(irow(i,1),1),:) = fileA(irow(i,1),:); end fileA=emask; %leaves out bin_1.0_depth fileAB=[fileB,fileA(:,2:size(fileA,2))]; % $$$ % add 0m depth % $$$ zerodepth(1,size(fileB,2)+1:size(fileB,2)+size(fileA,2)-1)=errorflag; % $$$ fileAB=[zerodepth; fileAB]; % $$$ clear fileA fileB i depthrange errorflag zerodepth %remove extra depth channel %in col 2 fileAB(:,2)=[]; headAB=char(headAB,headB(2:size(headB,1),:),headA(3:size(headA,1),:)); clear headA headB % $$$ % force headers' width = width % $$$ width=size(headA(1,:),2)+size(headB(1,:),2); % $$$ headA(:,width)=' '; % $$$ headB(:,width)=' '; % $$$ headAB(1,width)=' '; % $$$ % combine headers % $$$ headAB=[headAB;headB(2:size(headB,1),:);headA(3:size(headA,1),:)]; % $$$ clear width headA headB return