% function [Catalog] = CatalogSelectRange(fullcatalog,...) % Select lines/values from catalog % Input parameters are pairs: % names of fields % and % range of values % for numeric there are: [minval maxval] or [val] or {val1, val2, val3, ...} % for strings there are: 'valtext' or {'valtext1', 'valtext2', 'valtext3', ...} % eg. CatalogSelectRange(fullcatalog,'Mw',[0 4.5]) % % (c) Jan Wiszniowski IG PAS % Modyfied 2016.02.04 - numerical comparison with tolerance 1e-14 function [Catalog] = CatalogSelectRange(fullcatalog,varargin) Catalog = fullcatalog ; range = true(size(fullcatalog(1).val)) ; na_varargin = numel(varargin) ; for i= 1:2:na_varargin-1 if ~ischar(varargin{i}) warning(['Wrong type of parameter ' num2str(i)]) continue end index = find(strcmp(varargin{i},{fullcatalog.field})) ; if length(index) ~= 1 warning(['Can not select field ' varargin{i}]) continue end if fullcatalog(index).type == 3 lrange = varargin{i+1} ; if ischar(lrange) range = range & strcmp(lrange,fullcatalog(index).val) ; elseif iscell(lrange) l_range = false(size(range)) ; for j = 1:numel(lrange) llrange = lrange{j} ; if ischar(llrange) l_range = l_range | strcmp(llrange,fullcatalog(index).val) ; end end range = range & l_range ; else warning(['Wrong type of walues for parameter ' varargin{i}]) end else lrange = varargin{i+1} ; nnel = numel(lrange) ; if isnumeric(lrange) tol = abs(lrange) ./ 1e15 ; if nnel == 2 range = range & fullcatalog(index).val >= lrange(1)-tol(1) & fullcatalog(index).val <= lrange(2)+tol(2) ; elseif nnel == 1 range = range & abs(fullcatalog(index).val - lrange(1)) <= tol(1) ; end elseif iscell(lrange) l_range = false(size(range)) ; for j = 1:numel(lrange) llrange = lrange{j} ; tol = abs(llrange) ./ 1e15 ; if isnumeric(llrange) if numel(llrange) == 2 l_range = l_range | fullcatalog(index).val >= llrange(1)-tol(1) & fullcatalog(index).val <= llrange(2)+tol(2) ; elseif numel(llrange) == 1 l_range = l_range | abs(range & fullcatalog(index).val - llrange(1)) <= tol(1); end else warning(['Wrong type of walues for parameter ' varargin{i}]) end end range = range & l_range ; else warning(['Wrong type of walues for parameter ' varargin{i}]) end end end for i = 1:numel(fullcatalog) if fullcatalog(i).type == 3 Catalog(i).val = {fullcatalog(i).val{range}}' ; else Catalog(i).val = fullcatalog(i).val(range) ; end end end