0001 function [data,meta] = generic_pres_proc(fname,p)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 data = [];
0022 meta = [];
0023
0024 if nargin < 2
0025 p = struct([]);
0026 end
0027
0028 p = proc_input_params(p);
0029
0030 if ~exist(fname)
0031 fprintf('Did not find file: %s\n', fname);
0032 return
0033 end
0034
0035
0036 data = loadtxt(fname, 'skipline', p.skipline, 'delim', p.delim, 'verbose', p.verbose);
0037 col_names = data(1,:);
0038
0039
0040 PL = set_pres_col_const(col_names);
0041 meta.PL = PL;
0042
0043
0044 if p.strip_colnames
0045 data(1,:) = [];
0046 end
0047
0048
0049 nmasks = length(p.mask);
0050 for imask = 1:nmasks
0051 mask_name = p.mask(imask).name;
0052 crit_col = p.mask(imask).crit_col_lbl;
0053 mask_crit = p.mask(imask).crits;
0054 if ~iscell(mask_crit)
0055 mask_crit = {mask_crit};
0056 end
0057
0058 tmpdata = data(:,PL.(crit_col));
0059
0060 str_mask = cellfun(@isstr,tmpdata);
0061 num_mask = cellfun(@isnumeric,tmpdata);
0062
0063 is_crit_str = cellfun(@isstr, mask_crit);
0064 is_crit_num = cellfun(@isnumeric, mask_crit);
0065
0066 if ~(all(is_crit_str) | all(is_crit_num))
0067 fprintf(['generic_pres_proc: Cannot handle mixed type criteria right now' ...
0068 ' ...\n']);
0069 continue
0070 end
0071
0072 meta.(mask_name) = false(size(tmpdata,1),1);
0073 if all(is_crit_str)
0074 if ~p.mask(imask).is_partial;
0075 meta.(mask_name)(str_mask) = ismember(tmpdata(str_mask), mask_crit);
0076 else
0077 items = strfind(tmpdata(str_mask), mask_crit{1});
0078 meta.(mask_name)(str_mask) = ~cellfun(@isempty,items);
0079 end
0080 else
0081 meta.(mask_name)(num_mask) = ismember([tmpdata{num_mask}], [mask_crit{:}]);
0082 end
0083
0084 end
0085
0086 end
0087
0088 function p = proc_input_params(p)
0089
0090 if ~isfield(p,'skipline') p.skipline = 3; end
0091 if ~isfield(p,'delim') p.delim = 9; end
0092 if ~isfield(p,'verbose') p.verbose = 'off'; end
0093
0094
0095 if ~isfield(p,'strip_colnames') p.strip_colnames = true; end
0096
0097
0098 if ~isfield(p,'mask') p.mask = []; end
0099
0100 end