📄 getsegytracedata.m
字号:
% GetSegyTraceData : Get Segy trace data if filehandle
%
% Call :
%
% tracedata=GetSegyTraceData(segyid,ns,SegyHeader,SkipData
%
%
% (C) 2001-2004 Thomas Mejer Hansen, tmh@gfy.ku.dk/thomas@cultpenguin.com
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%
function tracedata=GetSegyTraceData(segyid,ns,SegyHeader,SkipData)
%
% Get Segy Trace Data.
%
%
SkipData=[];
if nargin==0,
SegymatVerbose(exist('segyid'))
SegymatVerbose([mfilename,' : SEGYID not specified - exiting'])
tracedata=[];
return
end
if nargin==1
SegymatVerbose([mfilename,' : NS not specified - exiting'])
tracedata=[];
return
end
if nargin==2
SegyHeader.DataFormat='float32';
SegyHeader.BytesPerSample=32;
SegyHeader.DataSampleFormat=5; % IEEE
SegymatVerbose(['Dataformat not specified - dataformat->',SegyHeader.DataFormat])
end;
if isempty(SkipData)==1, SkipData=0; end
Revision=SegyHeader.SegyFormatRevisionNumber;
if Revision>0, Revision=1; end
Format=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).format;
BPS=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).bps;
if (SkipData==1)
SkipBytes=ns*BPS/8;
fseek(segyid,SkipBytes,'cof');
tracedata=[];
else
% SegymatVerbose([mfilename,' : ',Format,'. ns=',num2str(ns)])
try
tracedata=fread(segyid,ns,Format);
catch
SegymatVerbose([mfilename,' : Error using fread - Possibly ''ns'' is negative -' ...
' check byteorder-'])
tracedata=[];
end
if (strcmp(Format,'uint32')==1), % IBM FLOATING POINT
% CONVERT FROM FLOATING POINT
verbose=1;
if verbose>1, SegymatVerbose([mfilename,'Converting from IBM, DataFormat :',SegyHeader.DataFormat]); end
try
tracedata=ibm2num(uint32(tracedata));
catch
% SegymatVerbose([mfilename,' : SOMETHING BAD HAPPENED WHEN CONVERTING FROM IBM FLOATS TO IEEE. ARE YOU SURE DATA ARE IBM FLOAT FORMATTED ?' ])
% tracedata=0.*tracedata;
% return
end
end;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -