www.pudn.com > logtools.rar > toptotime.m, change:2004-08-13,size:4583b


function topout=toptotime(topin,tzobj)  % topout=toptotime(topin,tzobj) % % TOPTOTIME converts an array of well tops from depth to time given a % time-depth (tz) function. The input arguments can have a variety of forms % as detailed below: % %	topin ... a simple [n] vector of depths of the tops %	tzobj ... this can be a time-depth object as used by LOGSEC, or a %	          simple [m,2] matrix where the first column is depth and %	          the second is time %	topout ... an array of times of tops of the same type as topin.  % % T.N. Bishop, July 94  %  (based on G. Margrave's logtotime.m) % % LOGSEC tz objects are container objects with datatype 'tzsc'. The container % has the following attributes: %	'tmatrix' ... stores a matrix of [nz,nx] of the times for the time %	              depth curves %   'zmatrix' ... stores a matrix of [nz,nx] of the depths for the time %                 depth curves %	'x' ... stores a vector of length nx of the x coordinates of the curves % % NOTE: It is illegal for you to use this software for a purpose other % than non-profit education or research UNLESS you are employed by a CREWES % Project sponsor. By using this software, you are agreeing to the terms % detailed in this software's Matlab source file.   % BEGIN TERMS OF USE LICENSE % % This SOFTWARE is maintained by the CREWES Project at the Department % of Geology and Geophysics of the University of Calgary, Calgary, % Alberta, Canada.  The copyright and ownership is jointly held by  % its author (identified above) and the CREWES Project.  The CREWES  % project may be contacted via email at:  crewesinfo@crewes.org %  % The term 'SOFTWARE' refers to the Matlab source code, translations to % any other computer language, or object code % % Terms of use of this SOFTWARE % % 1) Use of this SOFTWARE by any for-profit commercial organization is %    expressly forbidden unless said organization is a CREWES Project %    Sponsor. % % 2) A CREWES Project sponsor may use this SOFTWARE under the terms of the  %    CREWES Project Sponsorship agreement. % % 3) A student or employee of a non-profit educational institution may  %    use this SOFTWARE subject to the following terms and conditions: %    - this SOFTWARE is for teaching or research purposes only. %    - this SOFTWARE may be distributed to other students or researchers  %      provided that these license terms are included. %    - reselling the SOFTWARE, or including it or any portion of it, in any %      software that will be resold is expressly forbidden. %    - transfering the SOFTWARE in any form to a commercial firm or any  %      other for-profit organization is expressly forbidden. % % END TERMS OF USE LICENSE  if( isearthobj(tzobj) ) 	tmtx=objget(tzobj,'tmatrix'); 	zmtx=objget(tzobj,'zmatrix'); 	xtz=objget(tzobj,'x'); 	tzid=objget(tzobj,'objmodified'); else 	tmtx=tzobj(:,2); 	zmtx=tzobj(:,1); 	tzid=[]; end   % determine the tz function to use  [nlegs,ntz]=size(tmtx);  if( ntz==1 )  	tz1=tmtx;  	zt1=zmtx; 		tz2=[]; 		zt2=[];  else 	% check for exact equality  	ind=find(xtz==x); 	if(~isempty(ind)) 		tz1=tmtx(:,ind); 		zt1=zmtx(:,ind); 		tz2=[]; 		zt2=[]; 	else 		 		%make sure its ordered 		[xtz,ix]=sort(xtz); 		ind=surround(xtz,x);  		%end cases 		if(isempty(ind)) 			if(x<xtz(1)) 				tz1=tmtx(:,ix(1)); 				zt1=zmtx(:,ix(1)); 				tz2=[]; 				zt2=[]; 			else 				tz1=tmtx(:,ix(ntz)); 				zt1=zmtx(:,ix(ntz)); 				tz2=[]; 				zt2=[]; 			end 		else 			%keep two functions 			zt1=zmtx(:,ix(ind)); 			tz1=tmtx(:,ix(ind)); 			zt2=zmtx(:,ix(ind+1)); 			tz2=tmtx(:,ix(ind+1)); 			f2=-(x-xtz(ind))/(xtz(ind)-xtz(ind+1)); 			f1=-(x-xtz(ind+1))/(xtz(ind+1)-xtz(ind)); 		end 	end end %disp('tz function determined') %      the above code mostly taken from G.Margrave's %      logtotime.m %      i dont know what it does, but will leave it in %      there for now since what i am using is the first %      simple case where tz1=tmtx, zt1=zmtx %      if this is a problem later on, take it out %   ntops = length(topin);   if(ntops<1)     fprintf(' no.of tops < 1, ntops=  %d  \n',ntops);     return;   end    for itop=1:ntops     z=topin(itop);     ind=surround(zt1,z);     if(length(ind)==1)  %interpolate, 2 surrounding pts.       rat=(tz1(ind+1)-tz1(ind))/(zt1(ind+1)-zt1(ind));       t=tz1(ind) + rat*(z-zt1(ind));     elseif(length(ind)==2) %no interp.needed, right on pt.       t=tz1(ind(2));     elseif(length(ind)==0)  %out of range       t=NaN;     else  %hopefully, wont ever get this       t=NaN;       fprintf(' wierd ind in toptotime =  %d  \n',ind);     end     topout(itop)=t;   end