123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # -*- coding: utf-8 -*-
- from neo.io.basefromrawio import BaseFromRaw
- from neo.rawio.blackrockrawio import BlackrockRawIO
- def _move_channel_indexes_and_analogsignals(from_block, to_block):
- if len(from_block.segments) != len(to_block.segments):
- raise ValueError('Can not assign segments between block 1 and 2. Different number of '
- 'segments present.')
- for seg_id in range(len(from_block.segments)):
- for ana in from_block.segments[seg_id].analogsignals:
- # redirect links from data object to container objects
- ana.segment = to_block.segments[seg_id]
- ana.channel_index.block = to_block
- # add links from container objects to analogsignal
- ana.segment.analogsignals.append(ana)
- # channel index was already relinked for another segment
- if ana.channel_index not in to_block.channel_indexes:
- to_block.channel_indexes.append(ana.channel_index)
- # remove (now) duplicated units from channel_index, remove irregular signals
- ana.channel_index.units = []
- ana.channel_index.irregularlysampledsignals = []
- class BlackrockIO_single_nsx(BlackrockRawIO, BaseFromRaw):
- """
- Supplementary class for reading BlackRock data using only a single nsx file.
- """
- name = 'Blackrock IO for single nsx'
- description = "This IO reads a pair of corresponding nev and nsX files of the Blackrock " \
- "" + "(Cerebus) recording system."
- _prefered_signal_group_mode = 'split-all'
- def __init__(self, filename, nsx_to_load=None, **kargs):
- BlackrockRawIO.__init__(self, filename=filename, nsx_to_load=nsx_to_load, **kargs)
- BaseFromRaw.__init__(self, filename)
- class BlackrockIO(BlackrockIO_single_nsx):
- name = 'Blackrock IO'
- description = "This IO reads .nev/.nsX files of the Blackrock (Cerebus) recording system."
- def __init__(self, filename, nsx_to_load='all', **kargs):
- BlackrockIO_single_nsx.__init__(self, filename)
- if nsx_to_load == 'all':
- self._selected_nsx = self._avail_nsx
- else:
- self._selected_nsx = [nsx_to_load]
- self._nsx_ios = []
- for nsx in self._selected_nsx:
- self._nsx_ios.append(BlackrockIO_single_nsx(filename, nsx_to_load=nsx, **kargs))
- def read_block(self, **kargs):
- bl = self._nsx_ios[0].read_block(**kargs)
- for nsx_ios in self._nsx_ios[1:]:
- nsx_block = nsx_ios.read_block(**kargs)
- _move_channel_indexes_and_analogsignals(nsx_block, bl)
- del nsx_block
- return bl
- def read_segment(self, **kargs):
- seg = self._nsx_ios[0].read_segment(**kargs)
- for nsx_ios in self._nsx_ios[1:]:
- nsx_seg = nsx_ios.read_segment(**kargs)
- seg.analogsignals.extend(nsx_seg.analogsignals)
- for ana in nsx_seg.analogsignals:
- ana.segment = seg
- ana.channel_index = None
- del nsx_seg
- return seg
|