loadANTS.m
author A.M. Thurnherr <athurnherr@yahoo.com>
Sun, 21 Oct 2018 19:52:56 -0400
changeset 43 b63fa355644c
parent 41 d7ab920c1de6
permissions -rwxr-xr-x
commit to merge with changes from EN620
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
%======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
%                    L O A D A N T S . M 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
%                    doc: Thu Jul 21 22:53:21 2011
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
%                    dlm: Thu Aug  4 10:54:24 2011
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
%                    (c) 2011 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
%                    uE-Info: 18 71 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
%======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
% NOTES:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
%   - very restrictive subset of ANTS standard:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
%       - no empty lines
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
%       - no in-record comments
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
% HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
%   Jul 21, 2011: - began working on it
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
%	Jul 23, 2011: - made it work
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
%	Aug  4, 2011: - replaced "creator" by "Matlab_import"
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
%				  - BUG: %PARAM names with . were not handled correctly
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
function dta_struct = loadANTS(file_name)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
fid = fopen(file_name);                                     % open file
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
if fid < 0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
    error(sprintf('%s: not such file',file_name));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
dta_struct = struct('Matlab_import',sprintf('loadANTS(''%s'')',file_name));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
l = fgetl(fid);                                             % handle metadata
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
while ischar(l) & regexp(l,'^#')
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
    if regexp(l,'^#ANTS#ERROR#')
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
        error(l);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
    elseif regexp(l,'^#ANTS#PARAMS#')
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
        [tmp,tmp,ptk] = regexp(l,'([\w\.]+){([^}]*)}');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
        for i=1:length(ptk)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
        	pname = matlabotomize(token1(i,l,ptk));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
			if sum(size(ptk{i})) < 4	% empty def
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
				if isfield(dta_struct,pname)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
					dta_struct = rmfield(dta_struct,pname);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
				end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
			else
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
				numval = str2double(token2(i,l,ptk));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
				if isfinite(numval) | strcmpi(token2(i,l,ptk),'nan')
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
					dta_struct = setfield(dta_struct,pname,numval);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
				else
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
					dta_struct = setfield(dta_struct,pname,token2(i,l,ptk));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
				end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
			end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
        end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
    elseif regexp(l,'^#ANTS#FIELDS#')
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
        [tmp,tmp,ftk] = regexp(l,'{([^}]*)}');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
        fields = cell(1,length(ftk));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
        for i=1:length(ftk)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
             fields{i} = matlabotomize(token(i,l,ftk));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
        end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
    end % elseif
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
    l = fgetl(fid);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
end % while
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
if ischar(l)												% not empty file
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
	isnumeric = zeros(1,length(fields));					% determine data types
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
    [tmp,tmp,tk] = regexp(l,'([^ \t]+)');					% split into tokens
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
	for i=1:length(fields)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
		numval = str2double(token(i,l,tk));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
		if isfinite(numval) | strcmpi(token(i,l,tk),'nan')
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
			isnumeric(i) = 1;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
		end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
	end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
dta = cell(length(fields),1);								% init data cell array
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
while ischar(l)                                             % loop through records
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
    [tmp,tmp,tk] = regexp(l,'([^ \t]+)');					% split into tokens
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
    for i=1:length(tk)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
    	if isnumeric(i)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
    		dta{i} = [dta{i} str2double(token(i,l,tk))];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
    	else
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
    		dta{i} = [dta{i} {token(i,l,tk)}];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
    	end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
    end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    83
    l = fgetl(fid);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
for i=1:length(fields)                                       % copy to structure
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
	dta_struct = setfield(dta_struct,fields{i},dta{i});
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
end
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    90
fclose(fid);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
return
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
%----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
function tk = token(i,str,tki)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    97
	tk = str(tki{i}(1):tki{i}(2));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
	return;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
function tk = token1(i,str,tki)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
	tk = str(tki{i}(1,1):tki{i}(1,2));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
	return;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   104
function tk = token2(i,str,tki)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   105
	tk = str(tki{i}(2,1):tki{i}(2,2));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
	return
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   107
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   108
function s = matlabotomize(s)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   109
	s = strrep(s,'.','_');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   110
	s = strrep(s,'3','three');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111