def read_spiketrain(fh, block_id, array_id): nix_block = fh.handle.blocks[block_id] nix_da = nix_block.data_arrays[array_id] params = { 'times': nix_da[:], # TODO think about lazy data loading 'dtype': nix_da.dtype, 't_start': Reader.Help.read_quantity(nix_da.metadata, 't_start'), 't_stop': Reader.Help.read_quantity(nix_da.metadata, 't_stop') } name = Reader.Help.get_obj_neo_name(nix_da) if name: params['name'] = name if 'left_sweep' in nix_da.metadata: params['left_sweep'] = Reader.Help.read_quantity(nix_da.metadata, 'left_sweep') if len(nix_da.dimensions) > 0: s_dim = nix_da.dimensions[0] params['sampling_rate'] = s_dim.sampling_interval * getattr(pq, s_dim.unit) if nix_da.unit: params['units'] = nix_da.unit st = SpikeTrain(**params) for key, value in Reader.Help.read_attributes(nix_da.metadata, 'spiketrain').items(): setattr(st, key, value) st.annotations = Reader.Help.read_annotations(nix_da.metadata, 'spiketrain') return st
def _align_to_zero(self, spiketrains=None): if spiketrains is None: spiketrains = self.spiketrains t_lims = [(st.t_start, st.t_stop) for st in spiketrains] tmin = min(t_lims, key=lambda f: f[0])[0] tmax = max(t_lims, key=lambda f: f[1])[1] unit = spiketrains[0].units for count, spiketrain in enumerate(spiketrains): annotations = spiketrain.annotations spiketrains[count] = SpikeTrain( np.array(spiketrain.tolist()) * unit - tmin, t_start=0 * unit, t_stop=tmax - tmin) spiketrains[count].annotations = annotations return spiketrains