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