⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lasheaderunits.m

📁 基于matlab的反演程序,用于地球物理勘探中射线追踪及偏移成像程序.
💻 M
字号:
function lasheader = lasheaderunits(lasheader,units,logsonly)

% lasheader = lasheaderunits(lasheader,units,logsonly)
%
% Given an las header in a string matrix (such as is provided by
% readlas) LASHEADERUNITS cchanges its units from whatever it is to
% either metric or imperial. The second argument (units) should either
% be the string 'metric' or 'imperial'. The third argument is a logical
% flag. If 1, then only units corresponding to logs are changed and depths
% are left alone. It defaults to 0.
%
% G.F. Margrave, CCR, Aug 94
%
% 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(nargin<3)
    logsonly=0;
end

[nlines,nchar]=size(lasheader);
%
%  need to modify the lasheader
%
	k=4;
	%start with fourth line
	units=lower(units);

	if( ~strcmp(units,'metric') & ~strcmp(units,'imperial') )
		error(' units string must be either imperial or metric')
	end
	flag=0;
	if( strcmp(units,'metric') )
		flag=1;
	end
	str=lasheader(k,:);
	[nrows,ncols]=size(lasheader);

	% define the units fields
		ft= '.FT  ';
		ft2= '.F   ';
		m=  '.M   ';
		mm= '.MM  ';
		in= '.IN  ';
		cm= '.CM  ';
		kgm='.KG/M';
		lbf='.LB/F';
		om= '.OHMM';
		of= '.OHMF';
		msm='.US/M';
		msm2='.USM ';
		msf='.US/F';
		kg= '.KG  ';
		lb= '.LB  ';

		m2ft = 3.2808;
		ft2m = 1/m2ft;

		mm2in= .03937;
		in2mm= 1./mm2in;

		cm2in= 10*mm2in;
		in2cm= 1./cm2in;

		kg2lb= 2.2046;
		lb2kg= 1/kg2lb;

		kgm2lbf = kg2lb*m2ft;
		lbf2kgm = 1/kgm2lbf;

		msm2msf = ft2m;
		msf2msm = 1./msm2msf;

		om2of = m2ft;
		of2om = 1./om2of;

	while( ~strcmp(str(1:2),'~A') )
%
		ind=find(str=='.');
		if(isempty(ind)) izone=6:10;
		else izone=ind(1):ind(1)+4;
		end
		test=str(izone);
		ind=find(str==':');
		number=str(izone(5)+1:ind-1);
		cmt=str(ind:length(str));
		if( str(1)=='~')
			if( strcmp(upper(str(1:6)),'~CURVE') )
				chgnum=0;
			else
				chgnum=1;
			end
		end
        %if logsonly is 1, then only information in the ~Curve block is changed
        %if logsonly is 0, then all changes are made
		if(~isempty(ind) & ind>(izone(5)+1))
		if( flag==1 )
			%convert from imperial to metric
			if( strcmp(test,ft) | strcmp(test,ft2) )
				%convert to meters
                testold=test;
				test=m;
				if( chgnum & ~logsonly)
					number=str_num2num(number,ft2m);
                elseif(chgnum)
                    test=testold; %change it back
				end
			elseif( strcmp(test,in) )
				%comvert to mm
                testold=test;
				test=mm;
				if( chgnum & ~logsonly)
					number=str_num2num(number,in2mm);
                elseif(chgnum)
                    test=testold;
				end
			elseif( strcmp(test,lb) )
				%convert to kg
                testold=test;
				test=kg;
				if( chgnum & ~logsonly)
					number=str_num2num(number,lb2kg);
                elseif(chgnum)
                    test=testold;
				end
			elseif( strcmp(test,lbf) )
				%convert to kgm
                testold=test;
				test=kgm;
				if( chgnum & ~logsonly)
					number=str_num2num(number,lbf2kgm);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,msf) )
				%convert to msm
                testold=test;
				test=msm;
				if( chgnum & ~logsonly)
					number=str_num2num(number,msf2msm);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,of) )
				%convert to om
                testold=test;
				test=om;
				if( chgnum & ~logsonly)
					number=str_num2num(number,of2om);
                elseif(chgnum)
                    test=testold;%change it back
				end
			end
		else % convert from metric to imperial
			if( strcmp(test,m) )
				%convert to ft
                testold=test;
				test=ft;
				if( chgnum & ~logsonly)
					number=str_num2num(number,m2ft);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,mm) )
				%comvert to in
                testold=test;
				test=in;
				if( chgnum & ~logsonly)
					number=str_num2num(number,mm2in);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,cm) )
				%comvert to in
                testold=test;
				test=in;
				if( chgnum & ~logsonly)
					number=str_num2num(number,cm2in);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,kg) )
				%convert to lb
                testold=test;
				test=lb;
				if( chgnum & ~logsonly)
					number=str_num2num(number,kg2lb);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,kgm) )
				%convert to lbf
                testold=test;
				test=lbf;
				if( chgnum & ~logsonly)
					number=str_num2num(number,kgm2lbf);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,msm) | strcmp(test,msm2) )
				%convert to msf
                testold=test;
				test=msf;
				if( chgnum & ~logsonly)
					number=str_num2num(number,msm2msf);
                elseif(chgnum)
                    test=testold;%change it back
				end
			elseif( strcmp(test,om) )
				%convert to of
                testold=test;
				test=of;
				if( chgnum & ~logsonly)
					number=str_num2num(number,om2of);
                elseif(chgnum)
                    test=testold;%change it back
				end
			end
		end

		str= [str(1:izone(1)-1) test number cmt];

		lasheader(k,:)=str;
		end

		k=k+1;
		str=lasheader(k,:);

	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -