def test_stream_between_remote_nodes(): # this is done at Manager level the manager do known the connection man = create_manager(auto_close_at_exit = False) nodegroup = man.create_nodegroup() nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeSender' ) nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeReceiver' ) # create ndoes sender = nodegroup.create_node('FakeSender', name = 'sender') stream_spec = dict(protocol = 'tcp', interface = '127.0.0.1', port = '*', transfertmode = 'plaindata', streamtype = 'analogsignal', dtype = 'float32', shape = (-1, 16), compression ='', scale = None, offset = None, units = '' ) sender.configure(sample_interval = 0.001) sender.outputs['signals'].configure(**stream_spec) sender.initialize() receiver = nodegroup.create_node('FakeReceiver', name = 'receiver') receiver.configure() receiver.inputs['signals'].connect(sender.outputs['signals']) receiver.initialize() # start them for a while sender.start() receiver.start() print(nodegroup.any_node_running()) time.sleep(2.) sender.stop() receiver.stop() print(nodegroup.any_node_running()) man.close()
def test_npbufferdevice(): man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup() dev = nodegroup.create_node('NumpyDeviceBuffer', name='dev') dev.configure(nb_channel=7, sample_interval=0.0001) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata') dev.initialize() # create stream nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeReceiver') receivers = [ nodegroup.create_node('FakeReceiver', name='receiver{}'.format(i)) for i in range(3) ] for receiver in receivers: receiver.configure() receiver.input.connect(dev.output) receiver.initialize() nodegroup.start_all_nodes() print(nodegroup.any_node_running()) time.sleep(1.) nodegroup.stop_all_nodes() print(nodegroup.any_node_running()) man.close()
def test_stream_between_remote_nodes(): # this is done at Manager level the manager do known the connection man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup('nodegroup') nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeSender') nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeReceiver') # create ndoes sender = nodegroup.create_node('FakeSender', name='sender') stream_spec = dict(protocol='tcp', interface='127.0.0.1', port='*', transfermode='plaindata', streamtype='analogsignal', dtype='float32', shape=(-1, 16), compression='', scale=None, offset=None, units='') sender.configure(sample_interval=0.001) sender.outputs['signals'].configure(**stream_spec) sender.initialize() receiver = nodegroup.create_node('FakeReceiver', name='receiver') receiver.configure() receiver.inputs['signals'].connect(sender.outputs['signals']) receiver.initialize() # start them for a while sender.start() receiver.start() #~ print(nodegroup.any_node_running()) time.sleep(2.) sender.stop() receiver.stop() #~ print(nodegroup.any_node_running()) man.close()
def test_play_sinus(): # play a buffer to audio out sr = 44100.0 nb_channel = 2 chunksize = 4096 man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup() audioin = nodegroup.create_node("NumpyDeviceBuffer", name="audioin") audioout = nodegroup.create_node("PyAudio", name="audioout") audioin.configure(sample_interval=1.0 / sr, chunksize=chunksize, nb_channel=nb_channel) audioin.output.configure(protocol="inproc", transfertmode="plaindata") audioin.initialize() audioout.configure( nb_channel=nb_channel, sample_rate=sr, input_device_index=None, output_device_index=0, format="float32", chunksize=chunksize, ) audioout.input.connect(audioin.output) audioout.initialize() audioout.start() audioin.start() time.sleep(2.0) man.close()
def test_npbufferdevice(): man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup() #~ sigs = None sigs = np.random.randn(2560, 7).astype('float64') dev = nodegroup.create_node('NumpyDeviceBuffer', name='dev') dev.configure(nb_channel=7, sample_interval=0.0001, chunksize=256, buffer=sigs) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') dev.initialize() # create stream nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeReceiver') receivers = [nodegroup.create_node('FakeReceiver', name='receiver{}'.format(i)) for i in range(3)] for receiver in receivers: receiver.configure() receiver.input.connect(dev.output) receiver.initialize() channel_info = receivers[0].input.params['channel_info'] assert len(channel_info) == 7 nodegroup.start_all_nodes() #~ print(nodegroup.any_node_running()) time.sleep(1.) nodegroup.stop_all_nodes() #~ print(nodegroup.any_node_running()) man.close()
def test_play_sinus(): # play a buffer to audio out sr = 44100. nb_channel = 2 chunksize = 4096 man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup() audioin = nodegroup.create_node('NumpyDeviceBuffer', name='audioin') audioout = nodegroup.create_node('PyAudio', name='audioout') audioin.configure(sample_interval=1. / sr, chunksize=chunksize, nb_channel=nb_channel) audioin.output.configure(protocol='inproc', transfertmode='plaindata') audioin.initialize() audioout.configure(nb_channel=nb_channel, sample_rate=sr, input_device_index=None, output_device_index=0, format='float32', chunksize=chunksize) audioout.input.connect(audioin.output) audioout.initialize() audioout.start() audioin.start() time.sleep(2.) man.close()
def dev_remote_viewer_local(): man = create_manager() # this create the dev in a separate process (NodeGroup) nodegroup = man.create_nodegroup() dev = nodegroup.create_node('WebCamAV', name='cam0') dev.configure(camera_num=0) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata') dev.initialize() #view is a Node in local QApp app = pg.mkQApp() viewer = ImageViewer() viewer.configure() viewer.input.connect(dev.output) viewer.initialize() viewer.show() dev.start() viewer.start() app.exec_()
def test_npbufferdevice(): man = create_manager(auto_close_at_exit = False) nodegroup = man.create_nodegroup() dev = nodegroup.create_node('NumpyDeviceBuffer', name = 'dev') dev.configure( nb_channel = 7, sample_interval = 0.0001) stream_dict = dict(protocol = 'tcp', interface = '127.0.0.1', port = '*', transfertmode = 'plaindata', streamtype = 'analogsignal', dtype = 'float32', shape = (-1, 16), compression ='', scale = None, offset = None, units = '' ) dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfertmode = 'plaindata') dev.initialize() # create stream nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeReceiver' ) receivers = [ nodegroup.create_node('FakeReceiver', name = 'receiver{}'.format(i)) for i in range(3) ] for receiver in receivers: receiver.configure() receiver.input.connect(dev.output) receiver.initialize() nodegroup.start_all_nodes() print(nodegroup.any_node_running()) time.sleep(1.) nodegroup.stop_all_nodes() print(nodegroup.any_node_running()) man.close()
def dev_remote_viewer_remote(): # no QApp all Nodes are remoted even the viewer. # note that dev and viewer are in the same NodeGroup # so they are in the same process man = create_manager() nodegroup = man.create_nodegroup() dev = nodegroup.create_node('WebCamAV', name='cam0') dev.configure(camera_num=0) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata') dev.initialize() viewer = nodegroup.create_node('ImageViewer', name='viewer0') viewer.configure() viewer.input.connect(dev.output) viewer.initialize() viewer.show() dev.start() viewer.start() time.sleep(10.)
def test_play_sinus(): # play a buffer to audio out sr = 44100. nb_channel = 2 chunksize = 4096 man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup() audioin = nodegroup.create_node('NumpyDeviceBuffer', name='audioin') audioout = nodegroup.create_node('PyAudio', name='audioout') audioin.configure(sample_interval=1./sr, chunksize=chunksize, nb_channel=nb_channel) audioin.output.configure(protocol='inproc', transfertmode='plaindata') audioin.initialize() audioout.configure(nb_channel=nb_channel, sample_rate=sr, input_device_index=None, output_device_index=0, format='float32', chunksize=chunksize) audioout.input.connect(audioin.output) audioout.initialize() audioout.start() audioin.start() time.sleep(2.) man.close()
def lauch_qtimefreq(transfermode, axisorder, localworker): # TODO test with other axis order #~ man = create_manager(auto_close_at_exit = True) man = create_manager(auto_close_at_exit=False) ng = man.create_nodegroup() app = pg.mkQApp() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1. / sample_rate, chunksize=chunksize, buffer=buffer) if transfermode == 'sharedmem': buffer_size = int(62. * sample_rate) else: buffer_size = 0 dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode=transfermode, buffer_size=buffer_size, double=True) dev.initialize() if localworker: nodegroup_friends = None else: nodegroup_friends = [man.create_nodegroup() for _ in range(4)] viewer = QTimeFreq() viewer.configure(with_user_dialog=True, nodegroup_friends=nodegroup_friends) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params['nb_column'] = 4 viewer.params['refresh_interval'] = 1000 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=3000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_register_node_type_from_module(): man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup('nodegroup') nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'NoneRegisteredClass') node = nodegroup.create_node('NoneRegisteredClass') man.close()
def lauch_qoscilloscope(transfermode, axisorder): man = create_manager(auto_close_at_exit=False) ng = man.create_nodegroup() app = pg.mkQApp() length = int(sample_rate * 20) t = np.arange(length) / sample_rate buffer = np.random.rand(length, nb_channel) * .3 buffer += np.sin(2 * np.pi * 1.2 * t)[:, None] * .5 buffer = buffer.astype('float32') #~ dev =NumpyDeviceBuffer() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1. / sample_rate, chunksize=chunksize, buffer=buffer) if transfermode == 'plaindata': dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') elif transfermode == 'sharedmem': dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='sharedmem', buffer_size=int(sample_rate * 62.), axisorder=axisorder, double=True) dev.initialize() viewer = QOscilloscope() viewer.configure(with_user_dialog=True) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params['decimation_method'] = 'min_max' 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_() man.close()
def test_visual_node_both_in_main_qapp_and_remote_qapp(): man = create_manager(auto_close_at_exit = False) nodegroup = man.create_nodegroup() nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeSender' ) nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'ReceiverWidget' ) # create ndoes sender = nodegroup.create_node('FakeSender', name = 'sender') stream_spec = dict(protocol = 'tcp', interface = '127.0.0.1', port = '*', transfertmode = 'plaindata', streamtype = 'analogsignal', dtype = 'float32', shape = (-1, 16), compression ='', scale = None, offset = None, units = '' ) sender.configure(sample_interval = 0.001) sender.output.configure(**stream_spec) sender.initialize() #receiver0 is in remote QApp (in nodegroup) receiver0 = nodegroup.create_node('ReceiverWidget', name = 'receiver0', tag ='<b>I am in distant QApp</b>') receiver0.configure() receiver0.input.connect(sender.output) receiver0.initialize() receiver0.show() #receiver1 is in local QApp app = pg.mkQApp() receiver1 = ReceiverWidget(name = 'receiver1', tag ='<b>I am in local QApp</b>') receiver1.configure() receiver1.input.connect(sender.output) receiver1.initialize() receiver1.show() # start them for a while sender.start() receiver0.start() receiver1.start() print(nodegroup.any_node_running()) def terminate(): sender.stop() receiver0.stop() receiver1.stop() receiver1.close() app.quit() timer = QtCore.QTimer(singleShot = True, interval = 1000) timer.timeout.connect(terminate) timer.start() app.exec_() receiver0.close() man.close()
def test_visual_node_both_in_main_qapp_and_remote_qapp(): man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup('nodegroup') nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeSender') nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'ReceiverWidget') # create ndoes sender = nodegroup.create_node('FakeSender', name='sender') stream_spec = dict(protocol='tcp', interface='127.0.0.1', port='*', transfermode='plaindata', streamtype='analogsignal', dtype='float32', shape=(-1, 16), compression ='', scale = None, offset = None, units = '') sender.configure(sample_interval=0.001) sender.output.configure(**stream_spec) sender.initialize() # receiver0 is in remote QApp (in nodegroup) receiver0 = nodegroup.create_node('ReceiverWidget', name='receiver0', tag='<b>I am in distant QApp</b>') receiver0.configure() receiver0.input.connect(sender.output) receiver0.initialize() receiver0.show() # receiver1 is in local QApp app = pg.mkQApp() receiver1 = ReceiverWidget(name='receiver1', tag='<b>I am in local QApp</b>') receiver1.configure() receiver1.input.connect(sender.output) receiver1.initialize() receiver1.show() # start them for a while sender.start() receiver0.start() receiver1.start() def terminate(): sender.stop() receiver0.stop() receiver1.stop() receiver1.close() app.quit() timer = QtCore.QTimer(singleShot=True, interval=2000) timer.timeout.connect(terminate) timer.start() app.exec_() receiver0.close() man.close()
def lauch_qoscilloscope(transfermode, axisorder): man = create_manager(auto_close_at_exit=False) ng = man.create_nodegroup() app = pg.mkQApp() length = int(sample_rate*20) t = np.arange(length)/sample_rate buffer = np.random.rand(length, nb_channel)*.3 buffer += np.sin(2*np.pi*1.2*t)[:,None]*.5 # add offset buffer += np.random.randn(nb_channel)[None, :]*50 buffer[:, -1] = 0 buffer = buffer.astype('float32') #~ dev =NumpyDeviceBuffer() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize, buffer=buffer) if transfermode== 'plaindata': dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') elif transfermode== 'sharedmem': dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='sharedmem', buffer_size=int(sample_rate*62.), axisorder=axisorder, double=True) dev.initialize() viewer = QOscilloscope() viewer.configure(with_user_dialog=True) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params['decimation_method'] = 'min_max' #~ viewer.params['scale_mode'] = 'by_channel' 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_() man.close()
def lauch_qtimefreq(transfermode, axisorder, localworker): # TODO test with other axis order #~ man = create_manager(auto_close_at_exit = True) man = create_manager(auto_close_at_exit=False) ng = man.create_nodegroup() app = pg.mkQApp() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize, buffer=buffer) if transfermode=='sharedmem': buffer_size = int(62.*sample_rate) else: buffer_size = 0 dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode=transfermode, buffer_size=buffer_size, double=True) dev.initialize() if localworker: nodegroup_friends = None else: nodegroup_friends = [man.create_nodegroup() for _ in range(4)] viewer = QTimeFreq() viewer.configure(with_user_dialog=True, nodegroup_friends=nodegroup_friends) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params['nb_column'] = 4 viewer.params['refresh_interval'] = 1000 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=3000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_TimeFreqWorker(): # test only one worker man = create_manager(auto_close_at_exit=False) #~ man = create_manager(auto_close_at_exit = True) ng = man.create_nodegroup() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize, buffer=buffer.transpose(), timeaxis=1,) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='sharedarray', sharedarray_shape=(nb_channel, 2048*50), ring_buffer_method = 'double') dev.initialize() workers = [] for i in range(nb_channel): worker = ng.create_node('TimeFreqWorker') worker.configure(max_xsize=30., channel=i, local=False) worker.input.connect(dev.output) worker.output.configure() worker.initialize() workers.append(worker) # compute wavelet : 3 s. of signal at 500Hz import scipy.signal xsize, wf_size, sub_sr= 3., 2048, 500. wavelet_fourrier = generate_wavelet_fourier(wf_size, 1., 100., 2.5, sub_sr, 2.5, 0) filter_b = scipy.signal.firwin(9, 1. / 20., window='hamming') filter_a = np.array([1.]) dev.start() time.sleep(.5) for worker in workers: worker.start() # change the wavelet on fly for worker in workers: worker.on_fly_change_wavelet(wavelet_fourrier=wavelet_fourrier, downsample_factor=20, sig_chunk_size=2048*20, plot_length=int(sub_sr*xsize), filter_a=filter_a, filter_b=filter_b) head = 0 for i in range(4): time.sleep(.5) head += int(sample_rate*.5) for worker in workers: worker.compute_one_map(head) dev.stop() man.close()
def test_stream_between_local_and_remote_nodes(): # this is done at Manager level the manager do known the connection man = create_manager(auto_close_at_exit=False) nodegroup = man.create_nodegroup('nodegroup') nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeSender') # create ndoes sender = nodegroup.create_node('FakeSender', name='sender') stream_spec = dict(protocol='tcp', interface='127.0.0.1', port='*', transfertmode='plaindata', streamtype='analogsignal', dtype='float32', shape=(-1, 16), compression='', scale=None, offset=None, units='') sender.configure(sample_interval=0.001) sender.output.configure(**stream_spec) sender.initialize() # create local nodes in QApplication app = pg.mkQApp() receiver = FakeReceiver() receiver.configure() receiver.input.connect(sender.output) receiver.initialize() # start them for a while sender.start() receiver.start() def terminate(): sender.stop() receiver.stop() app.quit() timer = QtCore.QTimer(singleShot=True, interval=2000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_qtimefreq_distributed_worker(): #logger.level = logging.DEBUG man = create_manager(auto_close_at_exit=False) nodegroup_friends = [man.create_nodegroup() for _ in range(4)] app = pg.mkQApp() ng = man.create_nodegroup() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1. / sample_rate, chunksize=chunksize, buffer=buffer) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') dev.initialize() viewer = QTimeFreq() viewer.configure(with_user_dialog=True, nodegroup_friends=nodegroup_friends) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params['nb_column'] = 4 viewer.params['refresh_interval'] = 1000 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=3000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_qtimefreq_local_worker(): #~ man = create_manager(auto_close_at_exit = True) man = create_manager(auto_close_at_exit=False) ng = man.create_nodegroup() app = pg.mkQApp() dev = ng.create_node('NumpyDeviceBuffer') dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize, buffer=buffer) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') dev.initialize() viewer = QTimeFreq() viewer.configure(with_user_dialog=True) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params['nb_column'] = 4 viewer.params['refresh_interval'] = 1000 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=3000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_qtimefreq_distributed_worker(): # ~ man = create_manager(auto_close_at_exit = True) man = create_manager(auto_close_at_exit=False) nodegroup_friends = [man.create_nodegroup() for _ in range(4)] app = pg.mkQApp() ng = man.create_nodegroup() dev = ng.create_node("NumpyDeviceBuffer") dev.configure(nb_channel=nb_channel, sample_interval=1.0 / sample_rate, chunksize=chunksize, buffer=buffer) dev.output.configure(protocol="tcp", interface="127.0.0.1", transfermode="plaindata") dev.initialize() viewer = QTimeFreq() viewer.configure(with_user_dialog=True, nodegroup_friends=nodegroup_friends) viewer.input.connect(dev.output) viewer.initialize() viewer.show() viewer.params["nb_column"] = 4 viewer.params["refresh_interval"] = 1000 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=3000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_stream_between_local_and_remote_nodes(): # this is done at Manager level the manager do known the connection man = create_manager(auto_close_at_exit = False) nodegroup = man.create_nodegroup() nodegroup.register_node_type_from_module('pyacq.core.tests.fakenodes', 'FakeSender' ) # create ndoes sender = nodegroup.create_node('FakeSender', name = 'sender') stream_spec = dict(protocol = 'tcp', interface = '127.0.0.1', port = '*', transfertmode = 'plaindata', streamtype = 'analogsignal', dtype = 'float32', shape = (-1, 16), compression ='', scale = None, offset = None, units = '' ) sender.configure(sample_interval = 0.001) sender.output.configure(**stream_spec) sender.initialize() # create local nodes in QApplication app = pg.mkQApp() receiver = FakeReceiver() receiver.configure() receiver.input.connect(sender.output) receiver.initialize() # start them for a while sender.start() receiver.start() def terminate(): sender.stop() receiver.stop() app.quit() timer = QtCore.QTimer(singleShot = True, interval = 2000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def dev_remote_viewer_local(): man = create_manager() # this create the dev in a separate process (NodeGroup) nodegroup = man.create_nodegroup() dev = nodegroup.create_node('WebCamAV', name = 'cam0') dev.configure(camera_num = 0) dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfermode = 'plaindata') dev.initialize() #view is a Node in local QApp app = pg.mkQApp() viewer = ImageViewer() viewer.configure() viewer.input.connect(dev.output) viewer.initialize() viewer.show() dev.start() viewer.start() app.exec_()
def dev_remote_viewer_remote(): # no QApp all Nodes are remoted even the viewer. # note that dev and viewer are in the same NodeGroup # so they are in the same process man = create_manager() nodegroup = man.create_nodegroup() dev = nodegroup.create_node('WebCamAV', name = 'cam0') dev.configure(camera_num = 0) dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfermode = 'plaindata') dev.initialize() viewer = nodegroup.create_node('ImageViewer', name = 'viewer0') viewer.configure() viewer.input.connect(dev.output) viewer.initialize() viewer.show() dev.start() viewer.start() time.sleep(10.)
import pyacq # get sigs localdir, filenames, params = tdc.download_dataset(name='olfactory_bulb') filename = filenames[0] #only first file sigs = np.fromfile(filename, dtype=params['dtype']).reshape(-1, params['total_channel']) sigs = sigs.astype('float32') sample_rate = params['sample_rate'] # This will impact the latency chunksize = 1024 # Here a convinient fonction to create a fake device in background # by playing signal more or less at the good speed man = pyacq.create_manager(auto_close_at_exit=True) ng0 = man.create_nodegroup() # process in background dev = tridesclous.online.make_pyacq_device_from_buffer(sigs, sample_rate, nodegroup=ng0, chunksize=chunksize) # The device have 16 channel, take some take 2 tetrodes only # In fcat this dataset is absolutly not 2 tetrodes but for the demo, it is OK :) channel_groups = { 0: { 'channels': [5, 6, 7, 8] }, 1: { 'channels': [1, 2, 3, 4] },
tau_level=0.005, smooth_time=0.0005, level_step=1., level_max=120., calibration=93.979400086720375, loss_params=loss_params, chunksize=chunksize, backward_chunksize=backward_chunksize, debug_mode=False, ) stream_spec = dict(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata') man = pyacq.create_manager() ng0 = man.create_nodegroup() # process for device ng1 = man.create_nodegroup() # process for processing dev = ng0.create_node('PyAudio') dev.configure(nb_channel=nb_channel, sample_rate=sample_rate, input_device_index=10, output_device_index=10, format='float32', chunksize=chunksize) dev.output.configure(**stream_spec) dev.initialize() ng1.register_node_type_from_module('hearinglosssimulator', 'InvCGCNode') node = ng1.create_node('HLSNode')
""" Simple webcam viewer Streams video frames from a WebCamAV Node to an ImageViewer Node. """ from pyacq import create_manager, ImageViewer from pyqtgraph.Qt import QtCore, QtGui man = create_manager() # this create the dev in a separate process (NodeGroup) nodegroup = man.create_nodegroup() dev = nodegroup.create_node('WebCamAV', name = 'cam0') dev.configure(camera_num = 0) dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfermode = 'plaindata') dev.initialize() #view is a Node in local QApp app = QtGui.QApplication([]) viewer = ImageViewer() viewer.configure() viewer.input.connect(dev.output) viewer.initialize() viewer.show() dev.start() viewer.start() app.exec_()
def test_OnlinePeeler(): dataio = DataIO(dirname='test_onlinepeeler') catalogueconstructor = CatalogueConstructor(dataio=dataio) catalogue = catalogueconstructor.load_catalogue() #~ print(catalogue) #~ def print_dict(d): #~ for k, v in d.items(): #~ if type(v) is dict: #~ print('k', k, 'dict') #~ print_dict(v) #~ else: #~ print('k', k, type(v)) #~ print_dict(catalogue) #~ from pyacq.core.rpc.serializer import MsgpackSerializer #~ serializer = MsgpackSerializer() #~ serializer.dumps(catalogue) #~ exit() sigs = dataio.datasource.array_sources[0] sigs = sigs.astype('float32') sample_rate = dataio.sample_rate in_group_channels = dataio.channel_groups[0]['channels'] #~ print(channel_group) chunksize = 1024 # Device node man = pyacq.create_manager(auto_close_at_exit=True) ng0 = man.create_nodegroup() #~ ng0 = None ng1 = man.create_nodegroup() #~ ng1 = None dev = make_pyacq_device_from_buffer(sigs, sample_rate, nodegroup=ng0, chunksize=chunksize) app = pg.mkQApp() dev.start() # Node QOscilloscope oscope = QOscilloscope() oscope.configure(with_user_dialog=True) oscope.input.connect(dev.output) oscope.initialize() oscope.show() oscope.start() oscope.params['decimation_method'] = 'min_max' oscope.params['mode'] = 'scan' # Node Peeler if ng1 is None: peeler = OnlinePeeler() else: ng1.register_node_type_from_module('tridesclous.online', 'OnlinePeeler') peeler = ng1.create_node('OnlinePeeler') peeler.configure(catalogue=catalogue, in_group_channels=in_group_channels, chunksize=chunksize) peeler.input.connect(dev.output) stream_params = dict(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') peeler.outputs['signals'].configure(**stream_params) peeler.outputs['spikes'].configure(**stream_params) peeler.initialize() peeler.start() # Node traceviewer tviewer = OnlineTraceViewer() tviewer.configure(peak_buffer_size = 1000, catalogue=catalogue) tviewer.inputs['signals'].connect(peeler.outputs['signals']) tviewer.inputs['spikes'].connect(peeler.outputs['spikes']) tviewer.initialize() tviewer.show() tviewer.start() tviewer.params['xsize'] = 3. tviewer.params['decimation_method'] = 'min_max' tviewer.params['mode'] = 'scan' #~ tviewer.params['mode'] = 'scroll' tviewer.auto_gain_and_offset(mode=1) #~ tviewer.gain_zoom(.3) tviewer.gain_zoom(.1) def ajust_yrange(): oscope.auto_gain_and_offset(mode=1) timer = QtCore.QTimer(interval=1000, singleShot=True) timer.timeout.connect(ajust_yrange) timer.start() def terminate(): dev.stop() oscope.stop() peeler.stop() tviewer.stop() app.quit() app.exec_()
def test_TdcOnlineWindow(): # get sigs localdir, filenames, params = download_dataset(name='olfactory_bulb') filename = filenames[0] #only first file sigs = np.fromfile(filename, dtype=params['dtype']).reshape(-1, params['total_channel']) sigs = sigs.astype('float32') sample_rate = params['sample_rate'] chunksize = 1024 # Device node man = pyacq.create_manager(auto_close_at_exit=True) #~ ng0 = man.create_nodegroup() ng0 = None dev = make_pyacq_device_from_buffer(sigs, sample_rate, nodegroup=ng0, chunksize=chunksize) channel_groups = { 0: { 'channels': [5, 6, 7, 8] }, 1: { 'channels': [1, 2, 3, 4] }, 2: { 'channels': [9, 10, 11] }, } workdir = 'test_tdconlinewindow' #~ if os.path.exists(workdir): #~ shutil.rmtree(workdir) app = pg.mkQApp() # nodegroup_firend #~ nodegroup_friends = [man.create_nodegroup() for chan_grp in channel_groups] nodegroup_friends = None w = TdcOnlineWindow() w.configure(channel_groups=channel_groups, chunksize=chunksize, workdir=workdir, nodegroup_friends=nodegroup_friends) w.input.connect(dev.output) w.initialize() w.show() w.start() dev.start() #~ def terminate(): #~ dev.stop() #~ w.stop() #~ app.quit() #~ man.close() if __name__ == '__main__': app.exec_()
def test_TimeFreqWorker(): # test only one worker man = create_manager(auto_close_at_exit=False) #~ man = create_manager(auto_close_at_exit = True) ng = man.create_nodegroup() dev = ng.create_node('NumpyDeviceBuffer') dev.configure( nb_channel=nb_channel, sample_interval=1. / sample_rate, chunksize=chunksize, buffer=buffer.transpose(), timeaxis=1, ) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='sharedarray', sharedarray_shape=(nb_channel, 2048 * 50), ring_buffer_method='double') dev.initialize() workers = [] for i in range(nb_channel): worker = ng.create_node('TimeFreqWorker') worker.configure(max_xsize=30., channel=i, local=False) worker.input.connect(dev.output) worker.output.configure() worker.initialize() workers.append(worker) # compute wavelet : 3 s. of signal at 500Hz import scipy.signal xsize, wf_size, sub_sr = 3., 2048, 500. wavelet_fourrier = generate_wavelet_fourier(wf_size, 1., 100., 2.5, sub_sr, 2.5, 0) filter_b = scipy.signal.firwin(9, 1. / 20., window='hamming') filter_a = np.array([1.]) dev.start() time.sleep(.5) for worker in workers: worker.start() # change the wavelet on fly for worker in workers: worker.on_fly_change_wavelet(wavelet_fourrier=wavelet_fourrier, downsample_factor=20, sig_chunk_size=2048 * 20, plot_length=int(sub_sr * xsize), filter_a=filter_a, filter_b=filter_b) head = 0 for i in range(4): time.sleep(.5) head += int(sample_rate * .5) for worker in workers: worker.compute_one_map(head) dev.stop() man.close()
def tridesclous_onlinepeeler(): dataio = DataIO(dirname='tridesclous_onlinepeeler') catalogue = dataio.load_catalogue(chan_grp=0) #~ catalogue.pop('clusters') #~ def print_dict(d): #~ for k, v in d.items(): #~ if type(v) is dict: #~ print('k', k, 'dict') #~ print_dict(v) #~ else: #~ print('k', k, type(v)) #~ print_dict(catalogue) #~ from pyacq.core.rpc.serializer import MsgpackSerializer #~ serializer = MsgpackSerializer() #~ b = serializer.dumps(catalogue) #~ catalogue2 = serializer.loads(b) #~ print(catalogue2['clusters']) #~ exit() sigs = dataio.datasource.array_sources[0] sigs = sigs.astype('float32').copy() sample_rate = dataio.sample_rate in_group_channels = dataio.channel_groups[0]['channels'] #~ print(channel_group) chunksize = 1024 # Device node man = pyacq.create_manager(auto_close_at_exit=True) ng0 = man.create_nodegroup() #~ ng0 = None ng1 = man.create_nodegroup() #~ ng1 = None ng2 = man.create_nodegroup() #~ ng2 = None dev = make_pyacq_device_from_buffer(sigs, sample_rate, nodegroup=ng0, chunksize=chunksize) #~ print(type(dev)) #~ exit() #~ print(dev.output.params) #~ exit() app = pg.mkQApp() dev.start() # Node QOscilloscope oscope = QOscilloscope() oscope.configure(with_user_dialog=True) oscope.input.connect(dev.output) oscope.initialize() oscope.show() oscope.start() oscope.params['decimation_method'] = 'min_max' oscope.params['mode'] = 'scan' oscope.params['scale_mode'] = 'by_channel' # Node Peeler if ng1 is None: peeler = OnlinePeeler() else: ng1.register_node_type_from_module('tridesclous.online', 'OnlinePeeler') peeler = ng1.create_node('OnlinePeeler') peeler.configure(catalogue=catalogue, in_group_channels=in_group_channels, chunksize=chunksize) #~ print(dev.output.params) #~ print(peeler.input.connect) #~ exit() peeler.input.connect(dev.output) #~ exit() stream_params = dict(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') peeler.outputs['signals'].configure(**stream_params) peeler.outputs['spikes'].configure(**stream_params) peeler.initialize() peeler.start() # Node traceviewer if ng2 is None: tviewer = OnlineTraceViewer() else: ng2.register_node_type_from_module('tridesclous.online', 'OnlineTraceViewer') tviewer = ng2.create_node('OnlineTraceViewer') tviewer.configure(catalogue=catalogue) tviewer.inputs['signals'].connect(peeler.outputs['signals']) tviewer.inputs['spikes'].connect(peeler.outputs['spikes']) tviewer.initialize() tviewer.show() tviewer.start() tviewer.params['xsize'] = 3. tviewer.params['decimation_method'] = 'min_max' tviewer.params['mode'] = 'scan' tviewer.params['scale_mode'] = 'same_for_all' #~ tviewer.params['mode'] = 'scroll' tfr_viewer = QTimeFreq() tfr_viewer.configure(with_user_dialog=True, nodegroup_friends=None) tfr_viewer.input.connect(dev.output) tfr_viewer.initialize() tfr_viewer.show() tfr_viewer.params['refresh_interval'] = 300 tfr_viewer.params['timefreq', 'f_start'] = 1 tfr_viewer.params['timefreq', 'f_stop'] = 100. tfr_viewer.params['timefreq', 'deltafreq'] = 5 tfr_viewer.start() def ajust_yrange(): oscope.auto_scale() tviewer.auto_scale() tviewer.params_controller.apply_ygain_zoom(.3) timer = QtCore.QTimer(interval=1000, singleShot=True) timer.timeout.connect(ajust_yrange) timer.start() def terminate(): dev.stop() oscope.stop() peeler.stop() tviewer.stop() app.quit() app.exec_()
""" Simple webcam viewer Streams video frames from a WebCamAV Node to an ImageViewer Node. """ from pyacq import create_manager, ImageViewer from pyqtgraph.Qt import QtCore, QtGui man = create_manager() # this create the dev in a separate process (NodeGroup) nodegroup = man.create_nodegroup() dev = nodegroup.create_node('WebCamAV', name='cam0') dev.configure(camera_num=0) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') dev.initialize() #view is a Node in local QApp app = QtGui.QApplication([]) viewer = ImageViewer() viewer.configure() viewer.input.connect(dev.output) viewer.initialize() viewer.show() dev.start() viewer.start()
def test_RawRecorder(): man = create_manager(auto_close_at_exit=False) ng0 = man.create_nodegroup() ng1 = man.create_nodegroup() app = pg.mkQApp() #~ transfermode sample_rates = [100., 1000., 10000.] nb_channels = [16, 32, 1] dtypes = ['float32', 'int16', 'float64'] chunksizes = [25, 250, 2000] devices = [] for i in range(3): sample_rate, nb_channel = sample_rates[i], nb_channels[i] chunksize, dtype = chunksizes[i], dtypes[i] length = int(sample_rate * 3) length = length - length % chunksize t = np.arange(length) / sample_rate buffer = np.random.rand(length, nb_channel) * .3 buffer += np.sin(2 * np.pi * 1.2 * t)[:, None] * .5 buffer = buffer.astype(dtype) dev = ng0.create_node('NumpyDeviceBuffer', name='dev{}'.format(i)) #~ dev = NumpyDeviceBuffer() dev.configure(nb_channel=nb_channel, sample_interval=1. / sample_rate, chunksize=chunksize, buffer=buffer) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') dev.initialize() devices.append(dev) dirname = './test_rec' if os.path.exists(dirname): shutil.rmtree(dirname) rec = RawRecorder() #~ rec = ng1.create_node('RawRecorder') rec.configure(streams=[dev.output for dev in devices], autoconnect=True, dirname=dirname) rec.initialize() rec.add_annotations(yep='abc', yop=12.5, yip=1) def terminate(): for dev in devices: dev.stop() dev.close() rec.stop() rec.close() app.quit() rec.start() for dev in devices: dev.start() # start for a while timer = QtCore.QTimer(singleShot=True, interval=2000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()
def test_RawRecorder(): man = create_manager(auto_close_at_exit=False) ng0 = man.create_nodegroup() ng1 = man.create_nodegroup() app = pg.mkQApp() #~ transfermode sample_rates = [100., 1000., 10000.] nb_channels = [16, 32, 1] dtypes = ['float32', 'int16', 'float64'] chunksizes = [25, 250, 2000] devices = [] for i in range(3): sample_rate, nb_channel = sample_rates[i], nb_channels[i] chunksize, dtype = chunksizes[i], dtypes[i] length = int(sample_rate*3) length = length - length%chunksize t = np.arange(length)/sample_rate buffer = np.random.rand(length, nb_channel)*.3 buffer += np.sin(2*np.pi*1.2*t)[:,None]*.5 buffer = buffer.astype(dtype) dev = ng0.create_node('NumpyDeviceBuffer', name='dev{}'.format(i)) #~ dev = NumpyDeviceBuffer() dev.configure(nb_channel=nb_channel, sample_interval=1./sample_rate, chunksize=chunksize, buffer=buffer) dev.output.configure(protocol='tcp', interface='127.0.0.1', transfermode='plaindata') dev.initialize() devices.append(dev) dirname = './test_rec' if os.path.exists(dirname): shutil.rmtree(dirname) rec = RawRecorder() #~ rec = ng1.create_node('RawRecorder') rec.configure(streams=[dev.output for dev in devices], autoconnect=True, dirname=dirname) rec.initialize() rec.add_annotations(yep='abc', yop=12.5, yip=1) def terminate(): for dev in devices: dev.stop() dev.close() rec.stop() rec.close() app.quit() rec.start() for dev in devices: dev.start() # start for a while timer = QtCore.QTimer(singleShot=True, interval=2000) timer.timeout.connect(terminate) timer.start() app.exec_() man.close()