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

📄 ds_header_sort.m

📁 实现地震勘探中
💻 M
字号:
function index=ds_header_sort(dataset,varargin)% Function sorts the headers of the dataset structure "dataset" and creates an index % vector. Intended for used with seismic data and pseudo-wells.% For seismic data this index vector can be used in "s_select" to sort the traces% For pseudo-wells this index vector can be used in "pw_select" to sort the pseudo-wells%% Written by: E. R.: July 8, 2001% Last updated: January 28, 2008: bug fix%%                   index=ds_header_sort(dataset,varargin)% INPUT% dataset    dataset structure% varargin   one or more cell arrays; the first element of each cell array is a keyword,%            the other elements are parameters. Presently, keywords are:%            'headers'  List of headers to be sorted%                       General form: {'headers',{header1,sort_dir1},{header2,sort_dir2}, ...%                       {header3,sort_dir3}}%                       First the traces are are sorted by trace header "header1", then by%                       trace header "header2", ...%                       "sort_dir1", "sort_dir2", ... denote sort directions. Possible%                       values are 'increasing' or 'decreasing.  Default is 'increasing'.%                       No default.%            'sortdir'  Default sort direction ('increasing' or 'decreasing'); %                       used if sort direction is not given explicitly with each header%                       Default: 'increasing'%                       This value is overruled by any explicitly given sort direction:%                       ds_header_sort(seismic,{'headers',{'cdp','decreasing'}}) is the same as%                       ds_header_sort(seismic,{'headers','cdp'},'{'sortdir','decreasing'})%                       Default: {'sortdir','increasing'}% OUTPUT% index      column vector with trace indices%% EXAMPLES%            seismic=s_data;%            %      Select the five traces with the highest CDP numbers in decreasing order%            index=ds_header_sort(seismic,{'headers',{'cdp','decreasing'}})%            seismic1=s_select(seismic,{'traces',index(1:5)})%%            seismic3=s_data_3d;%            %      Select the five traces closest to the well location (1010,2606)%            seismic3=s_header_math(seismic3,'add','offset=sqrt((iline_no-1010)^2+(xline_no-2606)^2)', ...%                     'n/a','Distance to well location');%            index3a=ds_header_sort(seismic3,{'headers',{'offset','increasing'}});%            seismic3a=s_select(seismic3,{'traces',index3a(1:5)});%            ds_header(seismic3a)%%            %          Sort the traces (increasing inline, decreasing cross-line)%            index3b=ds_header_sort(seismic3,{'headers',{'xline_no','increasing'}, ...%                    {'iline_no','decreasing'}});%            seismic3b=s_select(seismic3,{'traces',index3b});%            disp('    iline_no    xline_no')%            disp([seismic3b.headers(1,1:25)',seismic3b.headers(2,1:25)'])%%            %          Sort the traces (decreasing both inline and cross-line)%            index3c=ds_header_sort(seismic3,{'headers',{'xline_no'},{'iline_no'}}, ...%                    {'sortdir','decreasing'});%            seismic3c=s_select(seismic3,{'traces',index3c});%            disp('    iline_no    xline_no')%            disp([seismic3c.headers(1,1:25)',seismic3c.headers(2,1:25)'])% UPDATE HISTORY%            January 2, 2001; compact/new header structure; use of "sortrows"%            December 10, 2007: Generalize for use with pseudo-wells; bug fix%       Check input datasetswitch dataset.typecase 'seismic'   ntr=size(dataset.traces,2);case 'pseudo-wells'   ntr=panelsize(dataset,2);otherwise   error(' First input argument must be a seismic or a pseudo-well dataset.')end%     	Set default values for input argumentsparam.headers=[];param.sortdir='increasing';%       Replace defaults by actual input argumentsparam=assign_input(param,varargin);%       Check input argumentsif isempty(param.headers)   error(' At lest one header for sorting must be specified.')end%       If there is only one header specified param.headers{1} is a string;if ~iscell(param.headers{1})   param.headers={param.headers};  endnk=length(param.headers);%       Reserve room for arraysheaders=zeros(ntr,nk);% 	Get header values to be sortedfor ii=1:nk   if iscell(param.headers{ii}) && length(param.headers{ii}) == 2      if strcmpi(param.headers{ii}(2),'increasing')         headers(:,ii)=ds_gh(dataset,param.headers{ii}(1))';      else         headers(:,ii)=-ds_gh(dataset,param.headers{ii}(1))';      end   else      if strcmpi(param.sortdir,'increasing')         headers(:,ii)=ds_gh(dataset,param.headers{ii})';      else         headers(:,ii)=-ds_gh(dataset,param.headers{ii})';      end     endend%   Sort headers[dummy,index]=sortrows(headers); %#ok The first output argument is not requiredindex=index';

⌨️ 快捷键说明

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