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

📄 s_trace_numbers.m

📁 基于Matlab的地震数据处理显示和测井数据显示于处理的小程序
💻 M
字号:
function [index,ierr]=s_trace_numbers(seismic,varargin)% Function outputs sequential trace numbers of seismic input traces based on % header values% See also: "s_select"%% Written by: E. R.: April 15, 2000% Last updated: September 13, 2004: Second output argument%%          [index,ierr]=s_trace_numbers(seismic,varargin)% INPUT% seismic  seismic structure% varargin one or more arguments;%          The first input argument is a string; it can be a header mnemonic or %          it can contain a logical expression involving header values.%          A "pseudo-header" 'trace_no' can also be used.%          If the second input argument is a string containing only a header %          mnemonic there must be a third arguments containing a vector %          of values. No defaults            % OUTPUT% index    column vector with indices of trace numbers% ierr     error code%          no error:                                         ierr = 0%          Header has no values matching the ones requested: ierr = 1%          Header has no values within range specified:      ierr = 2%          No header mnemonics found in expression:          ierr = 3%          Not a valid logical expression:                   ierr = 4%          If the second output argument is not supplied and an error occurs %          the function aborts with the appropriate error message%% EXAMPLES OF USAGE       %          index=s_trace_numbers(seismic,'offset',[100:100:2000])%          index=s_trace_numbers(seismic, ...%                'iline_no > 1000 & iline_no < 1100 & xline_no == 1000')% EXAMPLES%          seismic=s_data;%          index=s_trace_numbers(seismic,'cdp',105,inf)%          index=s_trace_numbers(seismic,'cdp >= 105')   % This is equivalent to %                                                        % the previous commandif ~isstruct(seismic)   error('First input argument "seismic" must be a structure.')endierr=0;if iscell(varargin{1})%  varargin=varargin{1};           % Bug????endif ~ischar(varargin{1})            % Traces given explicitely   if length(varargin) > 1      index=max([1,varargin{1}]):min([size(seismic.traces,2),varargin{2}]);   else      index=varargin{1};   endelseif length(varargin) > 1        % Traces defined via header   header=varargin{1};   header_vals=s_gh(seismic,header);   if length(varargin) == 2         % Range of header values specified      hidx=varargin{2};      index=ismember_ordered(header_vals,hidx);      index=reshape(index,1,[]);      if isempty(index)         if nargout <= 1            disp(' Requested header values:')            disp(hidx)            error(['Header "',header,'" has no values matching the ones requested'])         else            ierr=1;            index=[];         end      end   elseif length(varargin) == 3                             % First and last header value specified      ha=varargin{2};             he=varargin{3};      index=find(header_vals >= ha & header_vals <= he);      if isempty(index)         if nargout <= 1            error(['Header "',header,'" has no values within range specified (',num2str([ha,he]),')'])         else            ierr=2;            index=[];         end      end   endelse                               % Traces defined via logical expression   [index,ierr]=find_trace_index(seismic,varargin{1});end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [index,ierr]=find_trace_index(seismic,expression)% Function finds index of traces whose header values match a logical expression%% INPUT% seismic       seismic data set% expression    logical expression involving header values% OUTPUT% index         index of trace numbers (traces "seismic.traces(:,index)" are selected)% ierr          error codeglobal S4Mierr=0;words=lower(unique(extract_words(expression)));       % Find all the words in the logical expression%       Find all the header mnemonics in "words" and assign header values to variables with those names if S4M.case_sensitive   idx=find(ismember(seismic.header_info(:,1),words));else   idx=find(ismember(lower(seismic.header_info(:,1)),words));endif isempty(idx) & sum(ismember(words,'trace_no')) == 0  disp([' No header mnemonics found in expression "',expression,'"'])  disp(' header mnemonics available')  disp(seismic.header_info(:,1)')  if nargout == 1     error(' Abnormal termination')  else     ierr=3;     index=[];     return  endendnh=length(idx);for ii=1:nh  eval([lower(char(seismic.header_info(idx(ii),1))),' = seismic.headers(idx(ii),:);']);end                tryindex=eval(['find(',lower(expression),')']);                catchdisp([' The argument of keyword "traces" (',expression,')'])disp(' is probably not a valid logical expression')if nargout == 1   error(' Abnormal termination')else   ierr=4;   index=[];end                end

⌨️ 快捷键说明

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