📄 readsegytraceheadervalue.m
字号:
% ReadSegyTraceHeaderValue : Read a spedicifc trace header value%% Call:% % By Name% cdp=ReadSegyTraceHeaderValue(filename,'key','cdp');% SourceX=ReadSegyTraceHeaderValue(filename,'key','SourceX');% SourceY=ReadSegyTraceHeaderValue(filename,'key','SourceY');%% % By location in Trace Header% SourceX=ReadSegyTraceHeaderValue(filename,'pos',70,'precision','int32');%% function hval=ReadSegyTraceHeaderValue(filename,varargin);%pos,type)pos=0;precision='int32';ninput=nargin;% TRANSFORM VARARGING INTO PARAMETERScargin=1;while (cargin<ninput) % ENDIAN FORMAT endian='ieee-be'; % Big Endian is default if strcmp(varargin{cargin},'endian') cargin=cargin+1; eval(['endian_tight=varargin{cargin};']) if endian_tight=='l', disp(['USING LITTLE ENDIAN TYPE']) endian='ieee-le'; else disp(['USING BIG ENDIAN TYPE']) end end if strcmp(varargin{cargin},'pos') cargin=cargin+1; eval(['pos=',num2str(varargin{cargin}),';']); disp(['Reading at header postision : pos=',num2str(pos)]) end if strcmp(varargin{cargin},'precision') cargin=cargin+1; eval(['precision=''',varargin{cargin},''';']); disp(['precision : ',precision]) end if strcmp(varargin{cargin},'key') cargin=cargin+1; eval(['key=''',varargin{cargin},''';']); if strcmp(key,'TraceSequenceLine'), pos=0; precision='int32'; elseif strcmp(key,'TraceSequenceFile'), pos=4; precision='int32'; elseif strcmp(key,'cdp'), pos=20; precision='int32'; elseif strcmp(key,'SourceX'), pos=72; precision='int32'; elseif strcmp(key,'SourceY'), pos=76; precision='int32'; else disp(sprintf('Trace Header Value %s not defined',key)) pos=0; precision='int32'; hval=[]; return end disp(sprintf('key=%s, pos=%d, precision=%s ',key,pos,precision)) end cargin=cargin+1; endif nargin<2 pos=0;end if nargin<3 type='int32';endif exist('endian')==1, segyid = fopen(filename,'r',endian); else segyid = fopen(filename,'r','ieee-be'); % ALL DISK FILES ARE IN BIGend % ENDIAN FORMAT, ACCORDING TO [SegyHeader]=ReadSegyHeader(filename);Revision=SegyHeader.SegyFormatRevisionNumber;if Revision>0, Revision=1; endif (SegyHeader.DataSampleFormat>length(SegyHeader.Rev(Revision+1).DataSampleFormat)); SegymatVerbose([mfilename,' : WARNING : YOU HAVE SELECTED (OR THE FILE IS FORMATTED SUCH THAT) A DATASAMPLE FORMAT THAT IS NOT DEFINED. \nREMEBER IEEE IS NOT SPECIFIED IN THE SEGY REV0 STANDARD !']) if (Revision==0) SegymatVerbose([mfilename,' : TRYING TO USE REVISION 1 AS OPPOSED TO REVISION 0']) Revision=1; if (SegyHeader.DataSampleFormat>length(SegyHeader.Rev(Revision+1).DataSampleFormat)); SegymatVerbose([mfilename,' : FATAL ERROR : STILL THE DATASAMPLE FORMAT IS NOT SUPPRTED - EXITING (Report error to tmh@gfy.ku.dk)']) else SegymatVerbose([mfilename,' : APPARENT SUCCES CHANING FROM Revision 0 to 1 - Continuing']) SegyHeader.SegyFormatRevisionNumber=1; % FORCING REVISION TO BE 1 !!! end endend FormatName=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).name;Format=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).format;BPS=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).bps;txt=['SegyRevision ',sprintf('%0.4g',Revision),', ',FormatName,'(',num2str(SegyHeader.DataSampleFormat),')'];%Revision=SegyHeader.SegyFormatRevisionNumber;%if Revision>0, Revision=1; end%FormatName=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).name;%Format=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).format; %BPS=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).bps; %txt=['SegyRevision ',sprintf('%0.4g',Revision),',%',FormatName,'(',num2str(SegyHeader.DataSampleFormat),')'];%fseek(segyid,0,'eof'); DataEnd=ftell(segyid);DataStart=3600+3200*SegyHeader.NumberOfExtTextualHeaders;fseek(segyid,DataStart,'bof'); % Go to the beginning of the filentraces=(DataEnd-DataStart)./(240+(SegyHeader.ns)*(BPS/8));hval=zeros(1,ntraces);for itrace=1:ntraces if ((itrace/1000)==round(itrace/1000)) progress_txt(itrace,ntraces,'Trace #') end %GOTO START OF TRACE HEADER skip=DataStart+(itrace-1)*(240+(BPS/8)*SegyHeader.ns); fseek(segyid,skip,'bof'); fseek(segyid,pos,'cof'); hval(itrace)=fread(segyid,1,precision);end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -