def test_QTriggeredOscilloscope():
    app = pg.mkQApp()

    dev = NumpyDeviceBuffer()
    dev.configure(
        nb_channel=nb_channel,
        sample_interval=1. / sample_rate,
        chunksize=chunksize,
        buffer=buffer,
        timeaxis=1,
    )
    dev.output.configure(protocol='tcp',
                         interface='127.0.0.1',
                         transfermode='sharedarray',
                         sharedarray_shape=(nb_channel, 2048 * 50),
                         ring_buffer_method='double',
                         timeaxis=1,
                         dtype='float32')
    dev.initialize()

    viewer = QTriggeredOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()

    viewer.trigger.params['threshold'] = 1.
    viewer.trigger.params['debounce_mode'] = 'after-stable'
    viewer.trigger.params['front'] = '+'
    viewer.trigger.params['debounce_time'] = 0.1
    viewer.triggeraccumulator.params['stack_size'] = 3
    viewer.triggeraccumulator.params['left_sweep'] = -.2
    viewer.triggeraccumulator.params['right_sweep'] = .5

    viewer2 = QOscilloscope()
    viewer2.configure(with_user_dialog=True)
    viewer2.input.connect(dev.output)
    viewer2.initialize()
    viewer2.show()

    def terminate():
        viewer.stop()
        viewer2.stop()
        dev.stop()
        viewer.close()
        viewer2.close()
        dev.close()
        app.quit()

    dev.start()
    viewer.start()
    viewer2.start()

    # start for a while
    timer = QtCore.QTimer(singleShot=True, interval=2000)
    timer.timeout.connect(terminate)
    timer.start()

    app.exec_()
def make_pyacq_device_from_buffer(sigs, sample_rate, nodegroup = None, chunksize=1024):
    length, nb_channel = sigs.shape
    length -= length%chunksize
    sigs = sigs[:length, :]
    dtype = sigs.dtype
    
    if nodegroup is None:
        dev = NumpyDeviceBuffer()
    else:
        dev = nodegroup.create_node('NumpyDeviceBuffer')
    dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize, buffer=sigs)
    dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata')
    dev.initialize()
    
    return dev
    
Beispiel #3
0
def test_QDigitalOscilloscope():
    
    app = pg.mkQApp()
    
    length = int(sample_rate*200)
    t = np.arange(length)/sample_rate
    buffer = np.zeros((length, 3), dtype='uint8')
    nb_channel = buffer.shape[1]*8
    for i in range(nb_channel):
        b = i//8
        mask =  1 << i%8
        cycle_size = int((i+1)*sample_rate/2)
        period = np.concatenate([np.zeros(cycle_size, dtype='uint8'), np.ones(cycle_size, dtype='uint8')] * int(1+length/cycle_size/2))[:length]
        buffer[:, b] += period*mask

    #~ print(buffer.shape, buffer.dtype)
    #~ exit()
    
    channel_info = [ {'name': 'di{}'.format(c)} for c in range(nb_channel) ]
    
    dev =NumpyDeviceBuffer()
    dev.configure(nb_channel=buffer.shape[1], sample_interval=1./sample_rate, chunksize=chunksize, buffer=buffer)
    dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata')
    # hack for channel names
    dev.output.params['channel_info'] = channel_info
    dev.initialize()

    
    viewer = QDigitalOscilloscope()
    #~ viewer = QOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()

    def terminate():
        viewer.stop()
        dev.stop()
        viewer.close()
        dev.close()
        app.quit()
    
    dev.start()
    viewer.start()
    
    # start for a while
    timer = QtCore.QTimer(singleShot=True, interval=2000)
    timer.timeout.connect(terminate)
    timer.start()
    
    app.exec_()
Beispiel #4
0
def make_pyacq_device_from_buffer(sigs,
                                  sample_rate,
                                  nodegroup=None,
                                  chunksize=1024):
    length, nb_channel = sigs.shape
    length -= length % chunksize
    sigs = sigs[:length, :]
    dtype = sigs.dtype
    channel_names = ['channel{}'.format(c) for c in range(sigs.shape[1])]

    if nodegroup is None:
        dev = NumpyDeviceBuffer()
    else:
        dev = nodegroup.create_node('NumpyDeviceBuffer')
    dev.configure(nb_channel=nb_channel,
                  sample_interval=1. / sample_rate,
                  chunksize=chunksize,
                  buffer=sigs,
                  channel_names=channel_names)
    dev.output.configure(protocol='tcp',
                         interface='127.0.0.1',
                         transfermode='plaindata')
    dev.initialize()

    return dev
def test_QTriggeredOscilloscope():
    app = pg.mkQApp()
    
    dev = NumpyDeviceBuffer()
    dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize,
                    buffer=buffer, timeaxis=1,)
    dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='sharedarray',
                            sharedarray_shape=(nb_channel, 2048*50), ring_buffer_method = 'double', timeaxis = 1,
                            dtype = 'float32')
    dev.initialize()
    
    viewer = QTriggeredOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()

    viewer.trigger.params['threshold'] = 1.
    viewer.trigger.params['debounce_mode'] = 'after-stable'
    viewer.trigger.params['front'] = '+'
    viewer.trigger.params['debounce_time'] = 0.1
    viewer.triggeraccumulator.params['stack_size'] = 3
    viewer.triggeraccumulator.params['left_sweep'] = -.2
    viewer.triggeraccumulator.params['right_sweep'] = .5
    
    viewer2 = QOscilloscope()
    viewer2.configure(with_user_dialog=True)
    viewer2.input.connect(dev.output)
    viewer2.initialize()
    viewer2.show()

    def terminate():
        viewer.stop()
        viewer2.stop()
        dev.stop()
        viewer.close()
        viewer2.close()
        dev.close()
        app.quit()
    
    dev.start()
    viewer.start()
    viewer2.start()
    
    # start for a while
    timer = QtCore.QTimer(singleShot=True, interval=2000)
    timer.timeout.connect(terminate)
    timer.start()
    
    app.exec_()
Beispiel #6
0
    

# Not necessary for this example, but registering the node class would make it
# easier for us to instantiate this type of node in a remote process via
# Manager.create_node()
register_node_type(StreamMonitor)


if __name__ == '__main__':
    from pyacq.devices import NumpyDeviceBuffer
    app = QtGui.QApplication([])
    
    # Create a data source. This will continuously emit chunks from a numpy
    # array.
    data = np.random.randn(2500, 7).astype('float64')
    dev = NumpyDeviceBuffer()
    # Configure the source such that it emits 50-element chunks twice per second. 
    dev.configure(nb_channel=7, sample_interval=0.01, chunksize=50, buffer=data)
    dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata')
    dev.initialize()
    
    # Create a monitor node
    mon = StreamMonitor()
    mon.configure()
    mon.input.connect(dev.output)
    mon.initialize()

    # start both nodes
    mon.start()
    dev.start()