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

📄 s_check.m

📁 地震、测井方面matlab代码,解释的比较详细
💻 M
字号:
function s_check(seismic)
% Function checks if seismic data set is consistent and complies with
% specifications
% Written by: E. R., August 15, 2001
% Last updated: September 1, 2003: Check for structure type
%
%           s_check(seismic)
% INPUT
% seismic   seismic data set

global S4M

param.verbose=logical(0);

verbose=param.verbose;

ier=logical(0);

if nargin ~= 1
  disp(' One argument (seismic data set) required')
  return
end

if ~istype(seismic,'seismic')
   disp('Input to "s_check" is not a seismic data set')
   return
end

%       Establish name of input structure for reference later
dataset=inputname(1);   
if isempty(dataset)
   dataset=' Input argument "seismic"';
else
   dataset=['"',dataset,'"'];
end

if ~isstruct(seismic)
   disp([' ',dataset,' is not a structure'])
   return
end 

%       Check if required fields are present
fields=fieldnames(seismic);
required={'first','last','step','units','traces'};
index=find(~ismember(required,fields));
if ~isempty(index)
   disp([' ',dataset,' does not have the required field(s): ',cell2str(required(index))])
   ier=logical(1);
else
   if verbose
      disp([' ',dataset,' has the required fields: ',cell2str(required)])
   end
end

%       Check if traces are empty
[nsamp,ntr]=size(seismic.traces);
if nsamp*ntr == 0
   disp([' Traces of ',dataset,' are empty'])
   return
else
   if verbose
     disp([' ',dataset,' has ',num2str(ntr),' trace(s) with ',num2str(nsamp), ...
                  ' sample(s)'])
   end  
end 

%       Check if start time, end time, sample interval and # of samples agree
if seismic.step <= 0
  disp(' Sample interval must be positive')
  return
end
if ~isnearinteger((seismic.last-seismic.first)/seismic.step,1.0e-7)
   disp([' Difference of end and start time not integer multiple of sample interval'])
   ier=logical(1);
end
if (seismic.last-seismic.first)/seismic.step+1 ~= nsamp
   disp([' Start or end time error is ',  ...
    num2str((seismic.last-seismic.first)-seismic.step*(nsamp-1)),' ',seismic.units])
   disp(['              equivalent to ',  ...
    num2str((seismic.last-seismic.first)/seismic.step+1-nsamp),' sample(s)'])
   ier=logical(1);
end

%       Check headers (if there are any)
if ismember('headers',fields)
  [nh,mh]=size(seismic.headers);
  if ismember('header_info',fields)

% 	Check for identical headers
    if S4M.case_sensitive
      mnems=unique(seismic.header_info(:,1));
      if length(mnems) < nh
        disp(' Curve mnemonics are not unique (headers are case-sensitive)')
        ier=logical(1);
        for ii=1:length(mnems)
          idx=find(ismember(seismic.header_info(:,1),mnems{ii}));
          if length(idx) > 1
            disp(['     ',cell2str(seismic.header_info(idx,1),', ')])
          end
        end
      end

    else
      mnems=unique(lower(seismic.header_info(:,1)));
      if length(mnems) < nh
        disp(' Curve mnemonics are not unique (headers are not case-sensitive):')
        ier=logical(1);
        for ii=1:length(mnems)
          idx=find(ismember(lower(seismic.header_info(:,1)),mnems{ii}));
          if length(idx) > 1
            disp(['     ',cell2str(seismic.header_info(idx,1),', ')])
          end
        end
      end 
    end

    if iscell(seismic.header_info)
      [nhi,mhi]=size(seismic.header_info);    
      if nhi ~= nh
        disp(' Number of headers differs from number of rows of field "header_info"')
        ier=logical(1);
      end
      if mh ~= ntr
        alert(' Number of headers values differs from number of traces')
        ier=logical(1);
      end
    else
      disp(' Headers are present but there is no field "header_info"')
      if mh ~= ntr
        disp(' Number of headers values differs from number of traces')
        ier=logical(1);
      end
    end
  else
    disp(' Field "header_info" must be a cell array')
    ier=logical(1);
  end
elseif ismember('header_info',fields)
  disp(' Field "header_info" is present, but there are no headers')
  ier=logical(1);
else
  if verbose
    disp(' No headers present')
  end
end

%       Check for NaNs
idx=find(isnan(seismic.traces));
if isempty(idx) & ismember('null',fields)
  alert(' Field "null" exists, but traces have no null values')
  ier=logical(1);
elseif ~isempty(idx) & ~ismember('null',fields)
  alert(' Field "null" does not exist, but traces have null values')
  ier=logical(1);
else
  if verbose
    disp(' No problem with null values')
  end
end

if ~ier
  disp([' No formal errors found in ',dataset,])
end 


⌨️ 快捷键说明

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