Fixdepth ac9 pnb.m
Jump to navigation
Jump to search
% FIXDEPTH_AC9.M
% 29 SEP 97, 04 JUN 2000
% John Ubante, SRW
% Input: stripped mer, ac9 files [time depth]
% Output: returns scale and offset of regression of ac9 on mer
% steps_ac9$cruisename:
% [startindex, X, Y, endindex, X, Y, avedepth, avetime]
% depthoffset_$cruisename: [scale offset]
% Assumptions: you are in a $cruisename/acmpc directory
% Purpose: to find values that will align stupid ac9
% values to less stupid mer values
% Calls: {shrink,xnr,elimexp,jexcise,combine}
% Maintain: {filename, columnarraylist, disp_text}
% Example: fixdepth_ac9
% Notes:
% 06/2000 Doesn't account for instrument position on cage.
% Changed to function, pass arrays retrieve from mat file.
%
function [scale,offset,matrix]=fixdepth_ac9(mer,ac9)
% declare local variables
mat_in_flag=-1.0e+40;
flag=-9.9e+35;
matrixnull=[];
matrix=matrixnull;
yesno=2;
ctr=0;
matrixoffset=0;
matrixbrand='mer';
numsteps=[];
xmax=0; % get cruisename
pwdd = pwd;
indslash = find(pwdd(1,:)=='/');
cruisename = pwdd(1,indslash(1,size(indslash,2)-1)+1:indslash(1,size(indslash,2))-1);
clear indslash pwdd
% load mer and ac9 data
%load mat_in.depth;
% $$$ % separate mer and ac9 data
% $$$ indflag=find(mat_in(:,1)==mat_in_flag);
% $$$ mer=mat_in(1:indflag-1,:);
% $$$ ac9=mat_in(indflag+1:size(mat_in,1),:);
% $$$ clear flag mat_in indflag
% check for sign on depth and
% make positive
if mean(mer(:,2))<0
mer(:,2)=-mer(:,2);
end % end if
if mean(ac9(:,2))<0
ac9(:,2)=-ac9(:,2);
end % end if
% check for validity of data
if size(mer,2)~=2
disp('Your mer data is not in 2 column format');
end
if size(ac9,2)~=2
disp('Your ac9 data is not in 2 column format')
end
% begin step interval loop
dataset=mer;
while(yesno)
ctr=ctr+1;
% if first step of data ask for number
% of step intervals
if ctr==1
% plot data real big
fig=figure;
set (gcf,'units','inches', 'pos',[2.5 2 8 5])
plot(dataset(:,1),dataset(:,2))
set(gca,'ydir','rev')
titlestr=['Depth vs. Index in ',matrixbrand,' data of ',cruisename];
title(titlestr);
grid on;
disp(' ')
disp('A whole step is defined as a step preceeded and followed by sloped data.')
disp('Count the bottom step only if both plots display a leading slope.')
numsteps(yesno)=input('Count the whole steps enter the value: ');
disp('Select the boundaries of your first interval.')
else
disp('Select the boundaries of your next interval.')
end % end if
% get zoom points
[x,y]=ginput(2);
% zoom in
if y(1)<y(2)
if x(1)<x(2)
axis([x(1),x(2),y(1),y(2)])
else
axis([x(2),x(1),y(1),y(2)])
end
else
if x(1)<x(2)
axis([x(1),x(2),y(2),y(1)])
else
axis([x(2),x(1),y(2),y(1)])
end % end if
end % end if
% if y(1) > y(2)
% axis([x(1),x(2),y(2),y(1)]);
% else
% axis([x,y]);
% end
hold on;
grid off;
plot(dataset(:,1),dataset(:,2),'ro');
titlestr=['Zoom of step interval #',num2str(ctr),' of ',cruisename];
title(titlestr);
plot([x(1), x(2)], [0, 0], 'g-.');
hold off;
% get start and end points of step interval
disp('click on start and finish of step interval')
[x,y]=ginput(2);
% convert x(:) to indices
for i=1:2
find(x(i)<=dataset(:,1));
xind(i)=ans(1);
end
% find interval's averages
aved=mean(dataset(xind(1):xind(2),2));
avet=mean(dataset(xind(1):xind(2),1));
% add step interval data to matrix
%matrix=[matrix;x(1),dataset(xind(1),:),x(2),dataset(xind(2),:),aved,avet];
matrix=[matrix;xind(1),dataset(xind(1),:),xind(2),dataset(xind(2),:),aved,avet];
% plot dataset real big with
% already checked step intervals
plot(dataset(:,1),dataset(:,2),'g')
set(gca,'ydir','rev')
titlestr=['Depth vs. Index in ',matrixbrand,' data of ',cruisename];
title(titlestr)
hold on
% loop to plot done step intervals
for i=matrixoffset+1:size(matrix,1),
plot(dataset(matrix(i,1):matrix(i,4),1),dataset(matrix(i,1):matrix(i,4),2),'m')
end % end for loop
clear i
plot(matrix(matrixoffset+1:size(matrix,1),2),matrix(matrixoffset+1:size(matrix,1),3),'ro')
plot(matrix(matrixoffset+1:size(matrix,1),5),matrix(matrixoffset+1:size(matrix,1),6),'ro')
grid on;
% after numsteps intervals, ask if points ok
if ctr==numsteps(yesno)
titlestr=['Selected steps in ',matrixbrand,' of ',cruisename];
title(titlestr);
done=input('Are these points ok? ','s');
% if points ok, exit loop
if (done=='y'|done=='Y')
% eval(['save steps_ac9' cruisename '.dat matrix -ascii']);
disp('You RULE!!');
yesno=yesno-1;
dataset=ac9;
matrixnull=matrix;
ctr=0;
matrixoffset=size(matrix,1);
matrixbrand='ac9';
grid on
set (gcf, 'pos',[0.9 5 5.5 5])
else
matrix=matrixnull;
ctr=0;
end % end if
end % end if
end % end while loop
clear yesno titlestr aved avet ctr done fig matrixnull matrixoffset x y dataset
clear matrixbrand
temp=numsteps(1);
numsteps(1)=numsteps(2);
numsteps(2)=temp;
clear temp
grid on
set (gcf, 'pos',[6.5 5 5.5 5])
hold off
% DIAGNOSTIC PLOT: superimpose all step intervals from both datasets on to one plot.
% The x axis will represent index_end - index_start. The y axis will be depth.
% Because of the different sample rates between the two instruments, rescale the
% x axis for the ac9 to match its corresponding mer step interval. DAMN!!!
% FINISH LATER
figb=figure;
set(gca,'ydir','rev')
% set up plot
% begin looping through each line of matrix
dataset=mer;
for i=1:numsteps(1)
hold on
x=dataset(matrix(i,1):matrix(i,4),1)-dataset(matrix(i,1),1);
if max(x)> xmax
xmax=max(x);
end % end if
y=dataset(matrix(i,1):matrix(i,4),2)-dataset(matrix(i,1),2);
plot(x,y,'ro')
plot(x,y,'g')
hold off
end % end for
hold on
plot([0 xmax],[0 0],'w--')
hold off
clear xmax
done=input('Are these steps ok? ','s');
if (done=='y'|done=='Y')
close(figb)
clear figb
else
disp('re-run by typing "fixdepth_ac9" at the prompt');
return%break;
end % end if
% DO LATER: if numsteps(1)~=numsteps(2) then remove the steps in the cruise
% with more steps until the number of steps are same, ensuring that only steps
% without corresponding steps are eliminated.
% DO NOW: Find offset and scale for ac9 data [depthave timeave]
dt_mer=matrix(1:numsteps(1),7:8);
dt_ac9=matrix(numsteps(1)+1:sum(numsteps),7:8);
[p,S]=polyfit(dt_mer(:,1),dt_ac9(:,1),1);
% eval(['save scaleoffset' cruisename '.dat p -ascii']);
scale=p(1);
offset=p(2);
r=corrcoef(dt_mer(:,1)',dt_ac9(:,1)')
sprintf('YOUR SCALE _IS_: %3.3e',scale)
sprintf('YOUR OFFSET _IS_: %3.3e',offset)
plot(dt_mer(:,1),dt_ac9(:,1),'o');
hold on
plot(dt_mer(:,1),polyval(p,dt_mer(:,1)),'k')
ax=axis;
axis([min(ax(1),ax(3)) max(ax(2),ax(4)) min(ax(1),ax(3)) max(ax(2),ax(4))]);
return