forked from jgrewe/fishbook
parsing of stimuli.dat file
This commit is contained in:
parent
eba710b615
commit
ca7d64291d
105
util.py
105
util.py
@ -1,6 +1,7 @@
|
|||||||
from functools import reduce
|
from functools import reduce
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import nixio as nix
|
import nixio as nix
|
||||||
|
import re
|
||||||
import os
|
import os
|
||||||
import glob
|
import glob
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
@ -31,6 +32,104 @@ def read_info_file(file_name):
|
|||||||
return root
|
return root
|
||||||
|
|
||||||
|
|
||||||
|
def parse_metadata_line(line):
|
||||||
|
if not line.startswith("#"):
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
line = line.strip("#").strip()
|
||||||
|
parts = line.split(":")
|
||||||
|
if len(parts) == 0:
|
||||||
|
return None, None
|
||||||
|
if len(parts) == 1 or len(parts[-1].strip()) == 0:
|
||||||
|
return parts[0].strip(), None
|
||||||
|
else:
|
||||||
|
return parts[0].strip(), parts[-1].strip()
|
||||||
|
|
||||||
|
|
||||||
|
def has_signal(line, col_names):
|
||||||
|
"""
|
||||||
|
Checks whether a signal/stimulus was given in the line.
|
||||||
|
:param line: the current line of the data table
|
||||||
|
:param col_names: The names of the table header columns
|
||||||
|
:return: whether or not any of the signal entries is not empty ("-")
|
||||||
|
"""
|
||||||
|
values = line.split()
|
||||||
|
for i, n in enumerate(col_names):
|
||||||
|
if n.lower() == "signal" and i < len(values):
|
||||||
|
if len(values[i].strip()) > 0 and values[i].strip()[0] != "-":
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print(i, values[i])
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def parse_table(lines, start_index):
|
||||||
|
"""
|
||||||
|
|
||||||
|
:param lines:
|
||||||
|
:param start_index:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
data_indices = {}
|
||||||
|
stim_count = 0
|
||||||
|
names = re.split(r'\s{2,}', lines[start_index + 3][1:].strip())
|
||||||
|
while start_index < len(lines):
|
||||||
|
l = lines[start_index].strip()
|
||||||
|
if l.startswith("#"): # ignore
|
||||||
|
start_index += 1
|
||||||
|
elif len(l) > 0:
|
||||||
|
if stim_count == 0 and (has_signal(l, names)):
|
||||||
|
data_indices[stim_count] = l.split()[0]
|
||||||
|
stim_count += 1
|
||||||
|
elif stim_count > 0:
|
||||||
|
data_indices[stim_count] = l.split()[0]
|
||||||
|
stim_count += 1
|
||||||
|
start_index += 1
|
||||||
|
else:
|
||||||
|
start_index += 1
|
||||||
|
break
|
||||||
|
return data_indices, start_index
|
||||||
|
|
||||||
|
|
||||||
|
def read_stimuli_file(file_name):
|
||||||
|
repro_settings = []
|
||||||
|
settings = {}
|
||||||
|
with open(file_name, 'r') as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
index = 0
|
||||||
|
current_section = None
|
||||||
|
current_section_name = ""
|
||||||
|
while index < len(lines):
|
||||||
|
l = lines[index].strip()
|
||||||
|
if len(l) == 0:
|
||||||
|
index += 1
|
||||||
|
elif l.startswith("#") and "key" not in l.lower():
|
||||||
|
name, value = parse_metadata_line(l)
|
||||||
|
if not name:
|
||||||
|
continue
|
||||||
|
if name and not value:
|
||||||
|
if current_section:
|
||||||
|
settings[current_section_name] = current_section.copy()
|
||||||
|
|
||||||
|
current_section = {}
|
||||||
|
current_section_name = name
|
||||||
|
else:
|
||||||
|
current_section[name] = value
|
||||||
|
index += 1
|
||||||
|
elif l.lower().startswith("#key"): # table data coming
|
||||||
|
data, index = parse_table(lines, index)
|
||||||
|
settings["stim_data"] = data
|
||||||
|
# we are done with this repro run
|
||||||
|
settings[current_section_name] = current_section.copy()
|
||||||
|
repro_settings.append(settings.copy())
|
||||||
|
current_section = None
|
||||||
|
settings = {}
|
||||||
|
else:
|
||||||
|
# data lines, ignore them here
|
||||||
|
index += 1
|
||||||
|
return repro_settings
|
||||||
|
|
||||||
|
|
||||||
def find_key_recursive(dictionary, key, path=[]):
|
def find_key_recursive(dictionary, key, path=[]):
|
||||||
assert(isinstance(dictionary, dict))
|
assert(isinstance(dictionary, dict))
|
||||||
if key in dictionary.keys():
|
if key in dictionary.keys():
|
||||||
@ -155,6 +254,7 @@ def mtag_settings_to_yaml(mtag, pos_index):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
nix_file = "../../science/high_freq_chirps/data/2018-11-09-aa-invivo-1/2018-11-09-aa-invivo-1.nix"
|
nix_file = "../../science/high_freq_chirps/data/2018-11-09-aa-invivo-1/2018-11-09-aa-invivo-1.nix"
|
||||||
f = nix.File.open(nix_file, nix.FileMode.ReadOnly)
|
f = nix.File.open(nix_file, nix.FileMode.ReadOnly)
|
||||||
b = f.blocks[0]
|
b = f.blocks[0]
|
||||||
@ -164,4 +264,7 @@ if __name__ == "__main__":
|
|||||||
print(nix_metadata_to_yaml(b.metadata))
|
print(nix_metadata_to_yaml(b.metadata))
|
||||||
embed()
|
embed()
|
||||||
f.close()
|
f.close()
|
||||||
|
"""
|
||||||
|
dataset = "/Users/jan/zwischenlager/2012-03-23-ad"
|
||||||
|
settings = read_stimuli_file(os.path.join(dataset, "stimuli.dat"))
|
||||||
|
embed()
|
||||||
|
Loading…
Reference in New Issue
Block a user