124 lines
4.5 KiB
Python
124 lines
4.5 KiB
Python
import numpy as np
|
|
import os
|
|
import nixio as nix
|
|
from IPython import embed
|
|
|
|
|
|
def read_chirp_spikes(dataset):
|
|
spikes_file = os.path.join(dataset, "chirpspikess1.dat")
|
|
if not os.path.exists(spikes_file):
|
|
print("found no chirps!")
|
|
return {}
|
|
with open(spikes_file, 'r') as f:
|
|
lines = f.readlines()
|
|
spikes = {}
|
|
for l in lines:
|
|
l = l.strip()
|
|
if "index" in l and "chirp" not in l:
|
|
index = int(l.split(":")[-1])
|
|
if "deltaf" in l and "true" not in l:
|
|
df = l.split(":")[-1].strip()
|
|
if "contrast" in l and "true" not in l:
|
|
contrast = l.split(":")[-1].strip()
|
|
if "chirpsize" in l:
|
|
cs = l.split(":")[-1].strip()
|
|
if "#Key" in l:
|
|
spikes[(index, df, contrast, cs)] = {}
|
|
if "chirp index" in l:
|
|
ci = int(l.split(":")[-1])
|
|
if "beat phase" in l:
|
|
phase = float(l.split(":")[-1])
|
|
spikes[(index, df, contrast, cs)][(ci, phase)] = []
|
|
if len(l.strip()) != 0 and "#" not in l:
|
|
spikes[(index, df, contrast, cs)][(ci, phase)].append(float(l))
|
|
return spikes
|
|
|
|
|
|
def read_chirp_eod(dataset):
|
|
eod_file = os.path.join(dataset, "chirpeodampls.dat")
|
|
if not os.path.exists(eod_file):
|
|
print("found no chirpeodampls.dat!")
|
|
return {}
|
|
with open(eod_file, 'r') as f:
|
|
lines = f.readlines()
|
|
chirp_eod = {}
|
|
for l in lines:
|
|
l = l.strip()
|
|
if "index" in l and "chirp" not in l:
|
|
index = int(l.split(":")[-1])
|
|
if "deltaf" in l and "true" not in l:
|
|
df = l.split(":")[-1].strip()
|
|
if "contrast" in l and "true" not in l:
|
|
contrast = l.split(":")[-1].strip()
|
|
if "chirpsize" in l:
|
|
cs = l.split(":")[-1].strip()
|
|
if "#Key" in l:
|
|
chirp_eod[(index, df, contrast, cs)] = ([], [])
|
|
if len(l.strip()) != 0 and "#" not in l:
|
|
time = float(l.split()[0])
|
|
ampl = float(l.split()[1])
|
|
chirp_eod[(index, df, contrast, cs)][0].append(time)
|
|
chirp_eod[(index, df, contrast, cs)][1].append(ampl)
|
|
return chirp_eod
|
|
|
|
|
|
def read_chirp_times(dataset):
|
|
chirp_times_file = os.path.join(dataset, "chirpss.dat")
|
|
if not os.path.exists(chirp_times_file):
|
|
print("found no chirpss.dat!")
|
|
return {}
|
|
with open(chirp_times_file, 'r') as f:
|
|
lines = f.readlines()
|
|
chirp_times = {}
|
|
for l in lines:
|
|
l = l.strip()
|
|
if "index" in l and "chirp" not in l:
|
|
index = int(l.split(":")[-1])
|
|
if "deltaf" in l and "true" not in l:
|
|
df = l.split(":")[-1].strip()
|
|
if "contrast" in l and "true" not in l:
|
|
contrast = l.split(":")[-1].strip()
|
|
if "chirpsize" in l:
|
|
cs = l.split(":")[-1].strip()
|
|
if "#Key" in l:
|
|
chirp_times[(index, df, contrast, cs)] = []
|
|
if len(l.strip()) != 0 and "#" not in l:
|
|
chirp_times[(index, df, contrast, cs)].append(float(l.split()[1]) * 1000.)
|
|
return chirp_times
|
|
|
|
|
|
def read_chirp_stimulus(dataset):
|
|
base = dataset.split(os.path.sep)[-1] + ".nix"
|
|
nix_file = nix.File.open(os.path.join(dataset, base), nix.FileMode.ReadOnly)
|
|
b = nix_file.blocks[0]
|
|
data = {}
|
|
for t in b.tags:
|
|
if "Chirps" in t.name:
|
|
stims = []
|
|
index = int(t.name.split("_")[-1])
|
|
df = t.metadata["RePro-Info"]["settings"]["deltaf"]
|
|
cs = t.metadata["RePro-Info"]["settings"]["chirpsize"]
|
|
stim_da = t.references["GlobalEFieldStimulus"]
|
|
si = stim_da.dimensions[0].sampling_interval
|
|
for mt in b.multi_tags:
|
|
if mt.positions[0] >= t.position[0] and \
|
|
mt.positions[0] < (t.position[0] + t.extent[0]):
|
|
break
|
|
for i in range(len(mt.positions)):
|
|
start_index = int(mt.positions[i] / si)
|
|
end_index = int((mt.positions[i] + mt.extents[i]) / si) - 1
|
|
stim = stim_da[start_index:end_index]
|
|
time = stim_da.dimensions[0].axis(len(stim)) + mt.positions[i]
|
|
stims.append((time, stim))
|
|
data[(index, df, cs)] = stims
|
|
nix_file.close()
|
|
return data
|
|
|
|
if __name__ == "__main__":
|
|
data_dir = "../data"
|
|
dataset = "2018-11-09-ad-invivo-1"
|
|
#spikes = load_chirp_spikes(os.path.join(data_dir, dataset))
|
|
#chirp_times = load_chirp_times(os.path.join(data_dir, dataset))
|
|
#chirp_eod = load_chirp_eod(os.path.join(data_dir, dataset))
|
|
stim = read_chirp_stimulus(os.path.join(data_dir, dataset))
|