-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathread_metadata_file.m
62 lines (62 loc) · 2.81 KB
/
read_metadata_file.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function result = read_metadata_file(sample_metadata_file_name)
% Read the channel semantics file and extract the relevant information
sample_metadata_lines = read_file_into_cellstring(sample_metadata_file_name) ;
result = struct() ;
for line_index = 1: length(sample_metadata_lines) ,
line = strtrim(sample_metadata_lines{line_index}) ;
if isempty(line) ,
% skip empty lines
continue
end
tokens = strtrim(strsplit(line, ':')) ;
if length(tokens) ~= 2 ,
error('Unable to parse line in channel semantics file: "%s"', line) ;
end
field_name = tokens{1} ;
field_value_as_string = tokens{2} ;
if strcmp(field_name, 'neuron_channel_index') ,
field_value = str2double(field_value_as_string) ;
if field_value ~= 0 && field_value ~= 1 ,
error('Bad %s field in metadata file: "%s"', field_name, field_value_as_string) ;
end
result.neuron_channel_index = field_value ;
elseif strcmp(field_name, 'background_channel_index') ,
field_value = str2double(field_value_as_string) ;
if field_value ~= 0 && field_value ~= 1 ,
error('Bad %s field in metadata file: "%s"', field_name, field_value_as_string) ;
end
result.background_channel_index = field_value ;
elseif strcmp(field_name, 'is_x_flipped') ,
try
field_value = str2logical(field_value_as_string) ;
catch me
if strcmp(me.identifier, 'str2logical:bad_input') ,
error('Bad value for %s field in metadata file: "%s"', field_name, field_value_as_string) ;
else
rethrow(me) ;
end
end
result.is_x_flipped = field_value ;
elseif strcmp(field_name, 'is_y_flipped') ,
try
field_value = str2logical(field_value_as_string) ;
catch me
if strcmp(me.identifier, 'str2logical:bad_input') ,
error('Bad value for %s field in metadata file: "%s"', field_name, field_value_as_string) ;
else
rethrow(me) ;
end
end
result.is_y_flipped = field_value ;
elseif strcmp(field_name, 'shift') ,
field_value = str2double(field_value_as_string) ;
if field_value ~= round(field_value) ,
error('Bad %s field in metadata file: "%s"', field_name, field_value_as_string) ;
end
result.shift = field_value ;
else
% Just retain the value as a string
result.(field_name) = field_value_as_string ;
end
end
end