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
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_()
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_()
# 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()