1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- """
- This script loads a complete session in the blackrock format and converts it to a single nix file
- """
- import os
- import neo
- from neo.test.tools import (assert_same_sub_schema,
- assert_same_annotations,
- assert_same_array_annotations)
- from reachgraspio import reachgraspio
- # Choose which session you want to convert into a nix file
- # session = "l101210-001"
- session = "i140703-001"
- dataset_dir = '../datasets'
- session_path = f'{dataset_dir}/{session}'
- ##### LOAD BLACKROCK FILES ############
- session = reachgraspio.ReachGraspIO(
- filename=session_path,
- odml_directory=dataset_dir,
- verbose=False)
- block = session.read_block(lazy=False, load_waveforms=True)
- ##### SAVE NIX FILE ###################
- nix_filename = session_path + '.nix'
- if os.path.exists(nix_filename):
- print('Nix file already exists and will not be overwritten.')
- else:
- with neo.NixIO(nix_filename) as io:
- print(f'Saving nix file at {nix_filename}')
- io.write_block(block)
- ##### VALIDATION OF FILE CONTENT ######
- with neo.NixIO(nix_filename, mode='ro') as io:
- blocks = io.read_all_blocks()
- assert len(blocks) == 1
- block_new = blocks[0]
- for seg_old, seg_new in zip(block.segments, block_new.segments):
- for anasig_old, anasig_new in zip(seg_old.analogsignals, seg_new.analogsignals):
- # ignoring differences in the file_origin attribute
- anasig_old.file_origin = anasig_new.file_origin
- # ignoring nix_name annotation generated by nix file
- anasig_new.annotations.pop('nix_name')
- assert_same_sub_schema(anasig_old, anasig_new)
- assert_same_annotations(anasig_old, anasig_new)
- assert_same_array_annotations(anasig_old, anasig_new)
- del anasig_old
- print(f'AnalogSignals are equivalent.')
-
- for st_old, st_new in zip(seg_old.spiketrains, seg_new.spiketrains):
- # ignoring differences in the file_origin attribute
- st_old.file_origin = st_new.file_origin
- # ignoring nix_name annotation generated by nix file
- st_new.annotations.pop('nix_name')
- assert_same_sub_schema(st_old, st_new)
- assert_same_annotations(st_old, st_new)
- assert_same_array_annotations(st_old, st_new)
- del st_old
- print(f'Spiketrains are equivalent.')
-
- for ev_old, ev_new in zip(seg_old.events, seg_new.events):
- # ignoring differences in the file_origin attribute
- ev_old.file_origin = ev_new.file_origin
- # ignoring nix_name annotation generated by nix file
- ev_new.annotations.pop('nix_name')
- # ignore list-array type changes
- if 'color_codes' in ev_old.annotations:
- ev_old.annotations['color_codes'] = list(ev_old.annotations['color_codes'])
- assert_same_sub_schema(ev_old, ev_new)
- assert_same_annotations(ev_old, ev_new)
- assert_same_array_annotations(ev_old, ev_new)
- del ev_old
- print(f'Events are equivalent.')
-
- for ep_old, ep_new in zip(seg_old.epochs, seg_new.epochs):
- # ignoring differences in the file_origin attribute
- ep_old.file_origin = ep_new.file_origin
- # ignoring nix_name annotation generated by nix file
- ep_new.annotations.pop('nix_name')
- assert_same_sub_schema(ep_old, ep_new)
- assert_same_annotations(ep_old, ep_new)
- assert_same_array_annotations(ep_old, ep_new)
- del ep_old
- print(f'Epochs are equivalent.')
-
-
|