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