Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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, [])
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)
Esempio n. 8
0
 def test_clear_markers(self):
     """Clear markers."""
     dat = clear_markers(self.dat)
     self.assertEqual(dat.markers, self.good_markers)
Esempio n. 9
0
 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)
Esempio n. 10
0
 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)
Esempio n. 11
0
 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, [])
Esempio n. 12
0
 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)
Esempio n. 13
0
 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)
Esempio n. 14
0
 def test_clear_markers(self):
     """Clear markers."""
     dat = clear_markers(self.dat)
     self.assertEqual(dat.markers, self.good_markers)