seg.events.append(event) epoch_times = tstart + np.cumsum(np.array([0,1,2])) * pq.ms epoch = Epoch(name="Seg {} :: Epoch".format(idx), times=epoch_times, durations=np.array([0,1,2])*pq.ms, labels=["A+", "B+", "C+"]) seg.epochs.append(epoch) tstart = 10 *pq.s st_times = tstart + np.cumsum(np.arange(0,1,0.1)) * pq.s tstop = max(event_times[-1], epoch_times[-1], st_times[-1]) + 1 * pq.s st = SpikeTrain(name="Seg {} :: SpikeTrain".format(idx), times=st_times, t_start=tstart, t_stop=tstop) wf = np.random.random((len(st_times), nchannels, 30)) * pq.mV st.waveforms = wf st.sampling_rate = sampling_rate seg.spiketrains.append(st) unit = Unit(name="unit-{}".format(idx)) print(unit) unit.spiketrains.append(st) chx.units.append(unit) # Write the Block to file using the NixIO # Any existing file will be overwritten fname = "test_case.nix" io = NixIO(fname, "ow") io.write_block(block1) io.write_block(block2) io.close()
[-2.0, -2.0, -2.0, -2.0], [0.1, 0.1, 0.1, 0.1], [-0.1, -0.1, -0.1, -0.1], [-0.1, -0.1, -0.1, -0.1], [-3.0, -3.0, -3.0, -3.0], [0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1]], sampling_rate=1000 * Hz, units='V')) # extract spike trains from all channels st_list = [] for signal in seg.analogsignals: # use a simple threshhold detector spike_mask = np.where(np.min(signal.magnitude, axis=1) < -1.0)[0] # create a spike train spike_times = signal.times[spike_mask] st = SpikeTrain(spike_times, t_start=signal.t_start, t_stop=signal.t_stop) # remember the spike waveforms wf_list = [] for spike_idx in np.nonzero(spike_mask)[0]: wf_list.append(signal[spike_idx - 1:spike_idx + 2, :]) st.waveforms = np.array(wf_list) st_list.append(st) unit = Group() unit.spiketrains = st_list unit.analogsignals.extend(seg.analogsignals)