📄 s_check.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 setglobal S4Mparam.verbose=logical(0);verbose=param.verbose;ier=logical(0);if nargin ~= 1 disp(' One argument (seismic data set) required') returnendif ~istype(seismic,'seismic') disp('Input to "s_check" is not a seismic data set') returnend% Establish name of input structure for reference laterdataset=inputname(1); if isempty(dataset) dataset=' Input argument "seismic"';else dataset=['"',dataset,'"'];endif ~isstruct(seismic) disp([' ',dataset,' is not a structure']) returnend % Check if required fields are presentfields=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)]) endend% Check if traces are empty[nsamp,ntr]=size(seismic.traces);if nsamp*ntr == 0 disp([' Traces of ',dataset,' are empty']) returnelse 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 agreeif seismic.step <= 0 disp(' Sample interval must be positive') returnendif ~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);endif (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=size(seismic.header_info,1); 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); endelseif 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') endend% Check for NaNsidx=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') endendif ~ier disp([' No formal errors found in ',dataset,])end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -