def get(self): """Pop the contents of the Block Buffer. The data returned has a length of multiples of ``block_length``. If there is a fraction of ``block_length`` data more in the buffer, that data is kept and future :meth:`append` operations will append new data to it. Returns ------- dat : Data continuous Data object """ empty = Data(np.array([]), [], [], []) if not self.dat: return empty samples = self.block_length * self.dat.fs / 1000 if not samples.is_integer(): logger.error('Samples is not an integer, pleas check your block_length and sampling frequency. Rounding errors will lead to loss of samples.') samples = int(samples) if self.dat.data.shape[0] < samples: return empty if self.dat.data.shape[0] % samples == 0: ret = self.dat.copy() self.dat = empty return ret else: marker_orig = self.dat.markers[:] remaining = self.dat.data.shape[0] % samples # first part dat1 = self.dat.copy() dat1.data = dat1.data[:-remaining] dat1.axes[0] = dat1.axes[0][:-remaining] dat1 = clear_markers(dat1) # remaining (incomplete) part dat2 = self.dat.copy() dat2.data = dat2.data[-remaining:] dat2.axes[0] = dat2.axes[0][-remaining:] t0 = dat2.axes[0][0] dat2.axes[0] -= t0 dat2.markers = map(lambda x: [x[0] - t0, x[1]], dat2.markers) dat2 = clear_markers(dat2) # Security check if len(dat1.markers) + len(dat2.markers) != len(marker_orig): logger.error('Lost marker during data split.') logger.error('Original Marker:') logger.error(marker_orig) logger.error('First Part (until %f):' % dat1.axes[0][-1]) logger.error(dat1.markers) logger.error('Second Pard (from %f):' % t0) logger.error(dat2.markers) logger.error('Original Range: %f - %f' % (self.dat.axes[0][0], self.dat.axes[0][-1])) self.dat = dat2 return dat1
def get(self): """Get all buffered data. The returned data will have *at most* the length of ``length``. Returns ------- data : Data the full contents of the ring buffer """ # no data has ever been appended to this ring buffer if self.data is None: data = np.array([]) axes = [] # the ringbuffer wrapped around at least once elif self.full: data = np.concatenate([self.data[self.idx:], self.data[:self.idx]], axis=0) axes = self.axes[:] # the ring buffer hasn't been filled completely yet else: data = self.data[:self.idx].copy() axes = self.axes[:] axes[0] = axes[0][:self.idx] d = Data(data=data, axes=axes, names=self.names[:], units=self.units[:]) d.markers = self.markers[:] d.fs = self.fs d = clear_markers(d) return d
def test_clear_markers_copy(self): """clear_markers must not modify argument.""" cpy = self.dat.copy() clear_markers(self.dat) self.assertEqual(self.dat, cpy)
def test_clear_markes_swapaxes(self): """clear_markers must work with nonstandard timeaxis.""" dat = clear_markers(swapaxes(self.dat, 1, 2), timeaxis=2) dat = swapaxes(dat, 1, 2) dat2 = clear_markers(self.dat) self.assertEqual(dat, dat2)
def test_clear_markers_w_empty_data(self): """Clearing emtpy dat should remove all markers.""" dat = self.dat.copy() dat.data = np.array([]) dat2 = clear_markers(dat) self.assertEqual(dat2.markers, [])
def test_clear_nonexisting_markers(self): """Clearing emtpy markers has no effect.""" dat = self.dat.copy() del dat.markers dat2 = clear_markers(dat) self.assertEqual(dat, dat2)
def test_clear_emtpy_markers(self): """Clearing emtpy markers has no effect.""" dat = self.dat.copy() dat.markers = [] dat2 = clear_markers(dat) self.assertEqual(dat, dat2)
def test_clear_markers(self): """Clear markers.""" dat = clear_markers(self.dat) self.assertEqual(dat.markers, self.good_markers)
def test_clear_markers_copy(self): """clear_markers must not modify argument.""" cpy = self.dat.copy() clear_markers(self.dat) self.assertEqual(self.dat, cpy)
def test_clear_markes_swapaxes(self): """clear_markers must work with nonstandard timeaxis.""" dat = clear_markers(swapaxes(self.dat, 1, 2), timeaxis=2) dat = swapaxes(dat, 1, 2) dat2 = clear_markers(self.dat) self.assertEqual(dat, dat2)
def test_clear_markers_w_empty_data(self): """Clearing emtpy dat should remove all markers.""" dat = self.dat.copy() dat.data = np.array([]) dat2 = clear_markers(dat) self.assertEqual(dat2.markers, [])
def test_clear_nonexisting_markers(self): """Clearing emtpy markers has no effect.""" dat = self.dat.copy() del dat.markers dat2 = clear_markers(dat) self.assertEqual(dat, dat2)
def test_clear_emtpy_markers(self): """Clearing emtpy markers has no effect.""" dat = self.dat.copy() dat.markers = [] dat2 = clear_markers(dat) self.assertEqual(dat, dat2)
def test_clear_markers(self): """Clear markers.""" dat = clear_markers(self.dat) self.assertEqual(dat.markers, self.good_markers)