movingcomb/open_nixio.py

44 lines
1.6 KiB
Python

import nixio as nix
from IPython import embed
from collections import defaultdict
def open_nixio(nix_file, avg_opt):
# Opening file using nixio
f = nix.File.open(nix_file, nix.FileMode.ReadOnly)
b = f.blocks[0] # first block
meta = b.metadata
mt = b.multi_tags['moving object-1']
tags = b.tags["MovingObjects_1"]
# Important parts of nixio file
curr_comb = tags.metadata["RePro-Info"]["settings"]["object"]
comb_pos = mt.positions[:] #
spikes = b.data_arrays["Spikes-1"][:] # spikes for all trials in one recording
# All feature tags: ['GlobalEField', 'GlobalEFieldAM', 'LocalEField', 'I', 'EOD Rate', 'EOD Amplitude',
# 'AmplifierMode', 'abs_time', 'delay', 'amplitude', 'speed', 'lateral position', 'direction']
feature_dict = {}
for feat in mt.features:
feature_dict.update({feat.data.name[16:]: mt.features[feat.data.name].data[:]})
# Spike data in intervals of comb position + speed
intervals_dict = defaultdict(list)
for idx, position in enumerate(comb_pos):
if idx == (len(comb_pos)-1):
break
curr_speed = feature_dict['speed'][idx]
curr_pos = comb_pos[idx]
curr_dir = feature_dict['direction'][idx]
curr_spikes = spikes[(spikes < comb_pos[idx + 1]) & (spikes > comb_pos[idx])]
if avg_opt == 'average':
intervals_dict[(curr_speed, curr_dir, curr_comb)].append(curr_spikes)
else:
intervals_dict.update({(curr_speed, curr_dir, curr_pos, curr_comb): curr_spikes})
# Spike data at baseline
# comb_baseline = spikes[(spikes < comb_pos[0])]
return curr_comb, intervals_dict