Exemplo n.º 1
0
def test_eeg_OpenBCI():
    # in main App
    app = QtGui.QApplication([])

    dev = OpenBCI()
    dev.configure(device_handle='/dev/ttyUSB0')
    dev.outputs['chan'].configure(protocol='tcp', interface='127.0.0.1',transfermode='plaindata',)
    dev.outputs['aux'].configure(protocol='tcp', interface='127.0.0.1',transfermode='plaindata',)
    dev.initialize()

    viewer = QOscilloscope()
    viewer.configure()
    viewer.input.connect(dev.outputs['chan'])
    viewer.initialize()
    viewer.show()

    # dev.print_register_settings()
    dev.start()
    viewer.start()

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

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

    app.exec_()
Exemplo n.º 2
0
def test_openephys_gui_relay():
    # in main App
    app = QtGui.QApplication([])
    
    dev = OpenEphysGUIRelay()
    dev.configure(openephys_url='tcp://127.0.0.1:20000')
    dev.outputs['signals'].configure()
    dev.initialize()
    
    pprint(dev.outputs['signals'].params)
    
    viewer = QOscilloscope()
    viewer.configure()
    viewer.input.connect(dev.outputs['signals'].params)
    viewer.initialize()
    viewer.show()
    
    dev.start()
    viewer.start()
    
    def terminate():
        viewer.stop()
        dev.stop()
        viewer.close()
        dev.close()
        app.quit()
    
    # start for a while
    timer = QtCore.QTimer(singleShot=True, interval=5000)
    #~ timer.timeout.connect(terminate)
    #~ timer.start()
    
    app.exec_()
Exemplo n.º 3
0
def test_brainampsocket():
    # in main App
    app = QtGui.QApplication([])
    
    dev = BrainAmpSocket()
    #~ dev.configure(brainamp_host = '194.167.217.129', brainamp_port = 51244)
    dev.configure(brainamp_host='194.167.217.84', brainamp_port=51244)
    dev.outputs['signals'].configure(protocol='tcp', interface='127.0.0.1',transfermode='plaindata',)
    dev.outputs['triggers'].configure(protocol='tcp', interface='127.0.0.1',transfermode='plaindata',)
    dev.initialize()
    
    viewer = QOscilloscope()
    viewer.configure()
    viewer.input.connect(dev.outputs['signals'])
    viewer.initialize()
    viewer.show()
    
    dev.start()
    viewer.start()
    
    def terminate():
        viewer.stop()
        dev.stop()
        viewer.close()
        dev.close()
        app.quit()
    
    # start for a while
    timer = QtCore.QTimer(singleShot=True, interval=5000)
    timer.timeout.connect(terminate)
    #~ timer.start()
    
    app.exec_()
Exemplo n.º 4
0
    def _initialize(self, **kargs):
        QOscilloscope._initialize(self, **kargs)

        self.inputs['spikes'].set_buffer(size=self.peak_buffer_size,
                                         double=False)

        # poller onpeak
        self._last_peak = 0
        self.poller_peak = ThreadPollInput(input_stream=self.inputs['spikes'],
                                           return_data=True)
        self.poller_peak.new_data.connect(self._on_new_peak)

        self.spikes_array = self.inputs['spikes'].buffer.buffer

        self.scatters = {}
        self.change_catalogue(self.catalogue)

        self.params['xsize'] = 1.
        self.params['decimation_method'] = 'min_max'
        self.params['mode'] = 'scan'
        self.params['scale_mode'] = 'same_for_all'
        self.params['display_labels'] = True

        self.timer_scale = QT.QTimer(singleShot=True, interval=500)
        self.timer_scale.timeout.connect(self.auto_scale)
        self.timer_scale.start()
Exemplo n.º 5
0
    def _refresh(self, **kargs):
        QOscilloscope._refresh(self, **kargs)
        
        mode = self.params['mode']
        gains = np.array([p['gain'] for p in self.by_channel_params.children()])
        offsets = np.array([p['offset'] for p in self.by_channel_params.children()])
        visibles = np.array([p['visible'] for p in self.by_channel_params.children()], dtype=bool)
        
        head = self._head
        full_arr = self.inputs['signals'].get_data(head-self.full_size, head)
        if self._last_peak==0:
            return

        keep = (self.spikes_array['index']>head - self.full_size) & (self.spikes_array['index']<head)
        spikes = self.spikes_array[keep]
        
        #~ spikes = self.spikes_array['index'][keep]
        
        spikes_ind = spikes['index'] - (head - self.full_size)
        spikes_amplitude = full_arr[spikes_ind, :]
        spikes_amplitude[:, visibles] *= gains[visibles]
        spikes_amplitude[:, visibles] += offsets[visibles]
        
        if mode=='scroll':
            peak_times = self.t_vect_full[spikes_ind]
        elif mode =='scan':
            #some trick to play with fake time
            front = head % self.full_size
            ind1 = (spikes['index']%self.full_size)<front
            ind2 = (spikes['index']%self.full_size)>front
            peak_times = self.t_vect_full[spikes_ind]
            peak_times[ind1] += (self.t_vect_full[front] - self.t_vect_full[-1])
            peak_times[ind2] += (self.t_vect_full[front] - self.t_vect_full[0])
        
        for i, k in enumerate(self.catalogue['cluster_labels']):
            keep = k==spikes['label']
            if np.sum(keep)>0:
                chan = self.catalogue['max_on_channel'][i]
                if visibles[chan]:
                    self.scatters[k].setData(peak_times[keep], spikes_amplitude[keep, chan])
                else:
                    self.scatters[k].setData([], [])
            else:
                self.scatters[k].setData([], [])
Exemplo n.º 6
0
 def _initialize(self, **kargs):
     QOscilloscope._initialize(self, **kargs)
     
     self.inputs['spikes'].set_buffer(size=self.peak_buffer_size, double=False)
     
     # poller onpeak
     self._last_peak = 0
     self.poller_peak = ThreadPollInput(input_stream=self.inputs['spikes'], return_data=True)
     self.poller_peak.new_data.connect(self._on_new_peak)
     
     self.spikes_array = self.inputs['spikes'].buffer.buffer
     
     self._default_color = QtGui.QColor('#FFFFFF')#TODO
     self.scatters = {}
     for k in self.catalogue['cluster_labels']:
         color = self.catalogue['cluster_colors'].get(k, (1,1,1))
         r, g, b = color
         qcolor = QtGui.QColor(r*255, g*255, b*255)
         qcolor.setAlpha(150)
         scatter = pg.ScatterPlotItem(x=[ ], y= [ ], pen=None, brush=qcolor, size=10, pxMode = True)
         self.scatters[k] = scatter
         self.plot.addItem(scatter)
Exemplo n.º 7
0
 def _stop(self, **kargs):
     QOscilloscope._stop(self, **kargs)
     self.poller_peak.stop()
     self.poller_peak.wait()
Exemplo n.º 8
0
    aimodes={
        'Dev1/ai0': 'rse',
        'Dev1/ai1': 'rse'
    },
    airanges=(-5., 5.),  #for all channels
    magnitude_mode='float32_volt',
    aochannels=aochannels,
)

dev.outputs['aichannels'].configure(protocol='tcp',
                                    interface='127.0.0.1',
                                    transfertmode='plaindata')
dev.initialize()

# Create an oscilloscope to display data.
viewer = QOscilloscope()
viewer.configure(with_user_dialog=True)

# Connect audio stream to oscilloscope
viewer.input.connect(dev.output)

viewer.initialize()
viewer.show()
viewer.params['decimation_method'] = 'min_max'
viewer.params['ylim_max'] = 5.
viewer.params['ylim_min'] = -5.
viewer.params['mode'] = 'scan'

# Start both nodes
dev.start()
viewer.start()
Exemplo n.º 9
0
 def reset_curves_data(self):
     QOscilloscope.reset_curves_data(self)
     self.t_vect_full = np.arange(0,self.full_size, dtype=float)/self.sample_rate
     self.t_vect_full -= self.t_vect_full[-1]
Exemplo n.º 10
0
 def _stop(self, **kargs):
     QOscilloscope._stop(self, **kargs)
     self.poller_peak.stop()
     self.poller_peak.wait()
Exemplo n.º 11
0
 def __init__(self, **kargs):
     QOscilloscope.__init__(self, **kargs)
Exemplo n.º 12
0
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_()
Exemplo n.º 13
0
default_input = dev.default_input_device()
print("\nAvaliable devices:")
for device in dev.list_device_specs():
    index = device['index']
    star = "*" if index == default_input else " "
    print("  %s %d: %s" % (star, index, device['name']))

# Configure PyAudio device with a single (default) input channel.
dev.configure(nb_channel=1, sample_rate=44100., input_device_index=default_input,
              format='int16', chunksize=1024)
dev.output.configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata')
dev.initialize()


# Create an oscilloscope to display data.
viewer = QOscilloscope()
viewer.configure(with_user_dialog = True)

# Connect audio stream to oscilloscope
viewer.input.connect(dev.output)

viewer.initialize()
viewer.show()
viewer.params['decimation_method'] = 'min_max'
viewer.by_channel_params['Signal0', 'gain'] = 0.001

# Start both nodes
dev.start()
viewer.start()

app.exec_()
Exemplo n.º 14
0
def test_blackrock():
    #~ ai_channels = [1, ]
    ai_channels = [1, 2, 3, 4, 10, 11, 12, 13]
    #~ ai_channels = list(range(16, 25))
    #~ ai_channels = [20, 21, 22, 23]
    #~ ai_channels = [1, 2, 3, 4, 5, 6, 7, 8,
    #~ 17, 18, 19, 20, 21, 22, 23, 24,
    #~ 33, 34, 35, 36, 37, 38, 39, 40,
    #~ 49, 50, 51, 52, 53, 54, 55, 56,
    #~ 129,
    #~ ]

    # in main App
    app = QtGui.QApplication([])

    # for testing in background
    #~ man = create_manager(auto_close_at_exit=True)
    #~ ng0 = man.create_nodegroup()
    #~ dev = ng0.create_node('Blackrock')

    # tested in local Node
    dev = Blackrock()

    # dev.configure(nInstance=0,szInIP=b"192.168.137.1", ai_channels=ai_channels, apply_config=True)
    dev.configure(nInstance=0,
                  connection_type='central',
                  ai_channels=ai_channels,
                  apply_config=False)

    dev.outputs['aichannels'].configure(protocol='tcp',
                                        interface='127.0.0.1',
                                        transfertmode='plaindata')
    dev.initialize()

    global n
    n = 0

    viewer = QOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()
    viewer.params['scale_mode'] = 'by_channel'
    viewer.params['xsize'] = 1
    viewer.params['refresh_interval'] = 100

    dev.start()
    viewer.start()

    def terminate():
        global n

        print('stop', n)
        dev.stop()
        viewer.stop()
        print('stop OK', n)
        if n < 3:
            n += 1
            print('start', n)
            dev.start()
            viewer.start()
            print('start OK', n)
        else:
            print('terminate')
            dev.close()
            viewer.close()
            app.quit()

    # start  and stop 3 times
    timer = QtCore.QTimer(singleShot=False, interval=1000)
    timer.timeout.connect(terminate)
    timer.start()

    app.exec_()
Exemplo n.º 15
0
def test_blackrock():
    #~ ai_channels = [1, ]
    ai_channels = [1,2,3, 4, 10, 11, 12, 13]
    #~ ai_channels = list(range(16, 25))
    #~ ai_channels = [20, 21, 22, 23]
    #~ ai_channels = [1, 2, 3, 4, 5, 6, 7, 8, 
                #~ 17, 18, 19, 20, 21, 22, 23, 24, 
                #~ 33, 34, 35, 36, 37, 38, 39, 40,
                #~ 49, 50, 51, 52, 53, 54, 55, 56,
                #~ 129,
                #~ ]
    

    # in main App
    app = QtGui.QApplication([])
    
    # for testing in background
    #~ man = create_manager(auto_close_at_exit=True)
    #~ ng0 = man.create_nodegroup()
    #~ dev = ng0.create_node('Blackrock')
    
    # tested in local Node
    dev = Blackrock()
    
    # dev.configure(nInstance=0,szInIP=b"192.168.137.1", ai_channels=ai_channels, apply_config=True)
    dev.configure(nInstance=0, connection_type='central', ai_channels=ai_channels,  apply_config=False)
    
    dev.outputs['aichannels'].configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata')
    dev.initialize()
    
    global n
    n = 0


    viewer = QOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()
    viewer.params['scale_mode'] = 'by_channel'
    viewer.params['xsize'] = 1
    viewer.params['refresh_interval'] = 100
    
    
    dev.start()
    viewer.start()
    
    def terminate():
        global n
        
        print('stop', n)
        dev.stop()
        viewer.stop()
        print('stop OK', n)
        if n<3:
            n += 1
            print('start', n)
            dev.start()
            viewer.start()
            print('start OK', n)
        else:
            print('terminate')
            dev.close()
            viewer.close()
            app.quit()
    
    # start  and stop 3 times
    timer = QtCore.QTimer(singleShot=False, interval=1000)
    timer.timeout.connect(terminate)
    timer.start()

    app.exec_()
Exemplo n.º 16
0
#~ dev0 = NumpyDeviceBuffer()
dev0 = ng0.create_node('NumpyDeviceBuffer')
dev0.configure(nb_channel=nb_channel,
               sample_interval=1. / sample_rate,
               chunksize=chunksize,
               buffer=sigs)
dev0.output.configure(protocol='tcp',
                      interface='127.0.0.1',
                      transfermode='plaindata')
dev0.outputs['signals'].configure(protocol='tcp',
                                  interface='127.0.0.1',
                                  transfertmode='plaindata')
dev0.initialize()

oscope0 = QOscilloscope()
oscope0.configure(with_user_dialog=True, max_xsize=60.)
oscope0.input.connect(dev0.output)
oscope0.initialize()
oscope0.params['scale_mode'] = 'by_channel'

rec = RawRecorder()

# global UI settings
show_open_settings_menu = True
#~ auto_scale_on_start = False

# optional control pannel
# controlpanel = CustumControlPanel(...)

# node list
Exemplo n.º 17
0
def test_OnlinePeeler():
    dataio = DataIO(dirname='test_onlinepeeler')

    catalogue = dataio.load_catalogue(chan_grp=0)

    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 = 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)

    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
    peeler = 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=lighter_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'

    # waveform histogram viewer
    wviewer = OnlineWaveformHistViewer()
    wviewer.configure(peak_buffer_size=1000, catalogue=catalogue)
    wviewer.inputs['signals'].connect(peeler.outputs['signals'])
    wviewer.inputs['spikes'].connect(peeler.outputs['spikes'])
    wviewer.initialize()
    wviewer.show()
    wviewer.start()

    def terminate():
        dev.stop()
        oscope.stop()
        peeler.stop()
        tviewer.stop()
        app.quit()

    if __name__ == '__main__':
        app.exec_()
Exemplo n.º 18
0
def test_measurementcomputing_USB2533():

    app = pg.mkQApp()    
    dev = MeasurementComputing()
    
    # ai_channel_index = None
    ai_channel_index = [0, 10, 47, ]
    ai_ranges = (-10, 10)
    #~ ai_ranges = (-5, 5)
    #~ ai_ranges = (-1, 1)
    ai_mode = 'single-ended'
    #~ ai_mode = 'differential'  # this should bug whith channel>32
    
    dev.configure(board_num=0, sample_rate=10000., ai_channel_index=ai_channel_index, ai_ranges=ai_ranges, ai_mode=ai_mode)
    dev.outputs['aichannels'].configure(protocol = 'tcp', interface = '127.0.0.1', transfertmode = 'plaindata')
    dev.outputs['dichannels'].configure(protocol = 'tcp', interface = '127.0.0.1', transfertmode = 'plaindata')
    dev.initialize()
    
    viewer0 = QOscilloscope()
    viewer0.configure()
    viewer0.input.connect(dev.outputs['aichannels'])
    viewer0.initialize()
    viewer0.params['scale_mode'] = 'real_scale'
    viewer0.params['xsize'] = 5
    viewer0.params['ylim_min'] = -1.5
    viewer0.params['ylim_max'] = 1.5
    viewer0.params['refresh_interval'] = 100
    viewer0.params['show_left_axis'] = True
    


    viewer1 = QDigitalOscilloscope()
    viewer1.configure()
    viewer1.input.connect(dev.outputs['dichannels'])
    viewer1.initialize()
    
    dev.start()
    viewer0.start()
    viewer0.show()

    viewer1.start()
    viewer1.show()
    
    def terminate():
        viewer0.stop()
        viewer1.stop()
        dev.stop()
        viewer0.close()
        viewer1.close()
        dev.close()
        app.quit()
    
    # start for a while
    timer = QtCore.QTimer(singleShot = True, interval = 10000)
    timer.timeout.connect(terminate)
    #~ timer.start()
    
    app.exec_()
Exemplo n.º 19
0
 def _close(self, **kargs):
     QOscilloscope._close(self, **kargs)
Exemplo n.º 20
0
        self.output.send(np.random.normal(size=(self.chunksize, 1)).astype('float32'), index=self.head)


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



if __name__ == '__main__':
    from pyacq.viewers import QOscilloscope
    app = QtGui.QApplication([])
    
    # Create a noise generator node
    ng = NoiseGenerator()
    ng.configure()
    ng.output.configure(protocol='inproc', transfermode='sharedmem')
    ng.initialize()
    
    # Create an oscilloscope node to view the noise stream
    osc = QOscilloscope()
    osc.configure(with_user_dialog=True)
    osc.input.connect(ng.output)
    osc.initialize()
    osc.show()

    # start both nodes
    osc.start()
    ng.start()
    
Exemplo n.º 21
0
 def reset_curves_data(self):
     QOscilloscope.reset_curves_data(self)
     self.t_vect_full = np.arange(0, self.full_size,
                                  dtype=float) / self.sample_rate
     self.t_vect_full -= self.t_vect_full[-1]
Exemplo n.º 22
0
    def _refresh(self, **kargs):
        if self.visibleRegion().isEmpty():
            # when several tabs not need to refresh
            return

        with self.mutex:
            QOscilloscope._refresh(self, **kargs)

            mode = self.params['mode']
            gains = np.array(
                [p['gain'] for p in self.by_channel_params.children()])
            offsets = np.array(
                [p['offset'] for p in self.by_channel_params.children()])
            visibles = np.array(
                [p['visible'] for p in self.by_channel_params.children()],
                dtype=bool)

            head = self._head
            full_arr = self.inputs['signals'].get_data(head - self.full_size,
                                                       head)
            if self._last_peak == 0:
                return

            keep = (self.spikes_array['index'] > head - self.full_size) & (
                self.spikes_array['index'] < head)
            spikes = self.spikes_array[keep]

            spikes_ind = spikes['index'] - (head - self.full_size)
            spikes_ind = spikes_ind[spikes_ind < full_arr.shape[
                0]]  # to avoid bug if last peak is great than head
            real_spikes_amplitude = full_arr[spikes_ind, :]
            spikes_amplitude = real_spikes_amplitude.copy()
            spikes_amplitude[:, visibles] *= gains[visibles]
            spikes_amplitude[:, visibles] += offsets[visibles]

            if mode == 'scroll':
                peak_times = self.t_vect_full[spikes_ind]
            elif mode == 'scan':
                #some trick to play with fake time
                front = head % self.full_size
                ind1 = (spikes['index'] % self.full_size) < front
                ind2 = (spikes['index'] % self.full_size) > front
                peak_times = self.t_vect_full[spikes_ind]
                peak_times[ind1] += (self.t_vect_full[front] -
                                     self.t_vect_full[-1])
                peak_times[ind2] += (self.t_vect_full[front] -
                                     self.t_vect_full[0])

            for i, k in enumerate(self.all_plotted_labels):
                keep = k == spikes['cluster_label']
                if np.sum(keep) > 0:
                    if k >= 0:
                        chan = self.catalogue['extremum_channel'][i]
                        if visibles[chan]:
                            times, amps = peak_times[keep], spikes_amplitude[
                                keep, chan]
                        else:
                            times, amps = [], []

                    else:
                        chan_max = np.argmax(np.abs(
                            real_spikes_amplitude[keep, :]),
                                             axis=1)
                        keep2 = visibles[chan_max]
                        chan_max = chan_max[keep2]
                        keep[keep] &= keep2
                        times, amps = peak_times[keep], spikes_amplitude[
                            keep, chan_max]

                    self.scatters[k].setData(times, amps)

                else:
                    self.scatters[k].setData([], [])
Exemplo n.º 23
0
    star = "*" if index == default_input else " "
    print("  %s %d: %s" % (star, index, device['name']))

# Configure PyAudio device with a single (default) input channel.
dev.configure(nb_channel=1,
              sample_rate=44100.,
              input_device_index=default_input,
              format='int16',
              chunksize=1024)
dev.output.configure(protocol='tcp',
                     interface='127.0.0.1',
                     transfermode='plaindata')
dev.initialize()

# Create an oscilloscope to display data.
viewer = QOscilloscope()
viewer.configure(with_user_dialog=True)

# Connect audio stream to oscilloscope
viewer.input.connect(dev.output)

viewer.initialize()
viewer.show()
viewer.params['decimation_method'] = 'min_max'
viewer.by_channel_params['Signal0', 'gain'] = 0.001

# Start both nodes
dev.start()
viewer.start()

app.exec_()
Exemplo n.º 24
0
 def __init__(self, **kargs):
     QOscilloscope.__init__(self, **kargs)
     self.mutex = Mutex()
Exemplo n.º 25
0
 def _configure(self, peak_buffer_size = 10000, catalogue=None, **kargs):
     QOscilloscope._configure(self, **kargs)
     self.peak_buffer_size = peak_buffer_size
     self.catalogue = catalogue
     assert catalogue is not None
Exemplo n.º 26
0
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_()
Exemplo n.º 27
0
 def _start(self, **kargs):
     QOscilloscope._start(self, **kargs)
     self._last_peak = 0
     self.poller_peak.start()
Exemplo n.º 28
0
def test_OnlinePeeler():
    dataio = DataIO(dirname='test_onlinepeeler')
    
    catalogueconstructor = CatalogueConstructor(dataio=dataio)
    catalogue = catalogueconstructor.load_catalogue()
    #~ print(catalogue)
    
    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 = 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)
    

    
    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
    peeler = 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 terminate():
        dev.stop()
        oscope.stop()
        peeler.stop()
        tviewer.stop()
        app.quit()
    
    app.exec_()
Exemplo n.º 29
0
 def _close(self, **kargs):
     QOscilloscope._close(self, **kargs)
Exemplo n.º 30
0
def test_measurementcomputing_USB1608_FS_PLUS():

    app = pg.mkQApp()
    dev = MeasurementComputing()

    ai_channel_index = None
    #ai_channel_index = [0, 2, 3, 4 ]
    #ai_channel_index = [0, 1, 2, 3 ]
    ai_ranges = (-10, 10)

    ai_mode = None

    dev.configure(board_num=0,
                  sample_rate=1000,
                  ai_channel_index=ai_channel_index,
                  ai_ranges=ai_ranges,
                  ai_mode=ai_mode)
    dev.outputs['aichannels'].configure(protocol='tcp',
                                        interface='127.0.0.1',
                                        transfertmode='plaindata')
    dev.initialize()

    #~ viewer = ReceiverWidget()
    #~ viewer.configure()
    #~ viewer.input.connect(dev.outputs['ai_channel_index'])
    #~ viewer.initialize()

    viewer = QOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.outputs['aichannels'])
    viewer.initialize()
    viewer.params['scale_mode'] = 'by_channel'
    viewer.params['xsize'] = 5
    viewer.params['refresh_interval'] = 100

    dev.start()
    viewer.start()
    viewer.show()

    def terminate():
        viewer0.stop()
        viewer1.stop()
        dev.stop()
        viewer0.close()
        viewer1.close()
        dev.close()
        app.quit()

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

    app.exec_()
Exemplo n.º 31
0
 def _configure(self, peak_buffer_size=100000, catalogue=None, **kargs):
     QOscilloscope._configure(self, **kargs)
     self.peak_buffer_size = peak_buffer_size
     self.catalogue = catalogue
     assert catalogue is not None
Exemplo n.º 32
0
def test_measurementcomputing_USB1608_FS_PLUS():

    app = pg.mkQApp()    
    dev = MeasurementComputing()
    

    ai_channel_index = None
    #ai_channel_index = [0, 2, 3, 4 ]
    #ai_channel_index = [0, 1, 2, 3 ]
    ai_ranges = (-10, 10)
    
    ai_mode = None
    
    dev.configure(board_num=0, sample_rate=1000, ai_channel_index=ai_channel_index, ai_ranges=ai_ranges, ai_mode=ai_mode)
    dev.outputs['aichannels'].configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata')
    dev.initialize()
    
    #~ viewer = ReceiverWidget()
    #~ viewer.configure()
    #~ viewer.input.connect(dev.outputs['ai_channel_index'])
    #~ viewer.initialize()
    
    viewer = QOscilloscope()
    viewer.configure(with_user_dialog=True)
    viewer.input.connect(dev.outputs['aichannels'])
    viewer.initialize()
    viewer.params['scale_mode'] = 'by_channel'
    viewer.params['xsize'] = 5
    viewer.params['refresh_interval'] = 100

    
    dev.start()
    viewer.start()
    viewer.show()
    
    def terminate():
        viewer0.stop()
        viewer1.stop()
        dev.stop()
        viewer0.close()
        viewer1.close()
        dev.close()
        app.quit()
    
    # start for a while
    timer = QtCore.QTimer(singleShot = True, interval = 10000)
    timer.timeout.connect(terminate)
    #~ timer.start()

    app.exec_()
Exemplo n.º 33
0
def test_OnlinePeeler_no_catalogue():

    localdir, filenames, params = download_dataset(name='olfactory_bulb')
    filename = filenames[0]  #only first file
    #~ print(params)
    sigs = np.fromfile(filename,
                       dtype=params['dtype']).reshape(-1,
                                                      params['total_channel'])
    sigs = sigs.astype('float32')
    sample_rate = params['sample_rate']
    #~ dataio.set_data_source(type='RawData', filenames=filenames, **params)
    #~ channel_group = {0:{'channels':[5, 6, 7, 8]}}
    #~ dataio.set_channel_groups(channel_group)
    #~ print(filenames)
    #~ print(sigs.shape)
    #~ exit()

    channel_indexes = [5, 6, 7, 8]

    chunksize = 1024

    #case 1 before medians estimation
    #~ empty_catalogue = make_empty_catalogue(
    #~ channel_indexes=channel_indexes,
    #~ n_left=-20, n_right=40, internal_dtype='float32',
    #~ peak_detector_params={'relative_threshold': np.inf},
    #~ signals_medians = None,
    #~ signals_mads = None,
    #~ )
    #case 2 after medians estimation
    preprocessor_params = {}
    signals_medians, signals_mads = estimate_medians_mads_after_preprocesing(
        sigs[:, channel_indexes],
        sample_rate,
        preprocessor_params=preprocessor_params)
    empty_catalogue = make_empty_catalogue(
        channel_indexes=channel_indexes,
        n_left=-20,
        n_right=40,
        internal_dtype='float32',
        preprocessor_params=preprocessor_params,
        peak_detector_params={'relative_threshold': 10},
        clean_waveforms_params={},
        signals_medians=signals_medians,
        signals_mads=signals_mads,
    )

    print(empty_catalogue)
    #~ print(empty_catalogue['signal_preprocessor_params'])
    #~ exit()

    #~ in_group_channels = dataio.channel_groups[0]['channels']
    #~ print(channel_group)

    chunksize = 1024

    # Device node
    #~ man = 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)

    #~ 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
    peeler = OnlinePeeler()
    peeler.configure(catalogue=empty_catalogue,
                     in_group_channels=channel_indexes,
                     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=empty_catalogue)
    tviewer.inputs['signals'].connect(peeler.outputs['signals'])
    tviewer.inputs['spikes'].connect(peeler.outputs['spikes'])
    tviewer.initialize()
    tviewer.show()
    tviewer.params['xsize'] = 3.
    tviewer.params['decimation_method'] = 'min_max'
    tviewer.params['mode'] = 'scan'
    tviewer.params['scale_mode'] = 'same_for_all'
    tviewer.start()

    # waveform histogram viewer
    wviewer = OnlineWaveformHistViewer()
    wviewer.configure(peak_buffer_size=1000, catalogue=empty_catalogue)
    wviewer.inputs['signals'].connect(peeler.outputs['signals'])
    wviewer.inputs['spikes'].connect(peeler.outputs['spikes'])
    wviewer.initialize()
    wviewer.show()
    wviewer.start()

    def auto_scale():
        oscope.auto_scale()
        tviewer.auto_scale()

    def terminate():
        dev.stop()
        oscope.stop()
        peeler.stop()
        tviewer.stop()
        app.quit()

    timer = QT.QTimer(singleShot=True, interval=500)
    timer.timeout.connect(auto_scale)
    timer.start()

    if __name__ == '__main__':
        app.exec_()
Exemplo n.º 34
0
 def _start(self, **kargs):
     QOscilloscope._start(self, **kargs)
     self._last_peak = 0
     self.poller_peak.start()
Exemplo n.º 35
0
dev.configure(sample_rate=sr,
    chunksize=1000,
    aichannels=aichannels, 
    aimodes = {'Dev1/ai0':'rse', 'Dev1/ai1': 'rse'},
    airanges= (-5., 5.),#for all channels
    magnitude_mode='float32_volt',
    aochannels=aochannels,
    )


dev.outputs['aichannels'].configure(protocol='tcp', interface='127.0.0.1', transfertmode='plaindata')
dev.initialize()


# Create an oscilloscope to display data.
viewer = QOscilloscope()
viewer.configure(with_user_dialog = True)

# Connect audio stream to oscilloscope
viewer.input.connect(dev.output)

viewer.initialize()
viewer.show()
viewer.params['decimation_method'] = 'min_max'
viewer.params['ylim_max'] = 5.
viewer.params['ylim_min'] = -5.
viewer.params['mode'] = 'scan'

# Start both nodes
dev.start()
viewer.start()
Exemplo n.º 36
0
def test_measurementcomputing_USB2533():

    app = pg.mkQApp()
    dev = MeasurementComputing()

    # ai_channel_index = None
    ai_channel_index = [
        0,
        10,
        47,
    ]
    ai_ranges = (-10, 10)
    #~ ai_ranges = (-5, 5)
    #~ ai_ranges = (-1, 1)
    ai_mode = 'single-ended'
    #~ ai_mode = 'differential'  # this should bug whith channel>32

    dev.configure(board_num=0,
                  sample_rate=10000.,
                  ai_channel_index=ai_channel_index,
                  ai_ranges=ai_ranges,
                  ai_mode=ai_mode)
    dev.outputs['aichannels'].configure(protocol='tcp',
                                        interface='127.0.0.1',
                                        transfertmode='plaindata')
    dev.outputs['dichannels'].configure(protocol='tcp',
                                        interface='127.0.0.1',
                                        transfertmode='plaindata')
    dev.initialize()

    viewer0 = QOscilloscope()
    viewer0.configure()
    viewer0.input.connect(dev.outputs['aichannels'])
    viewer0.initialize()
    viewer0.params['scale_mode'] = 'real_scale'
    viewer0.params['xsize'] = 5
    viewer0.params['ylim_min'] = -1.5
    viewer0.params['ylim_max'] = 1.5
    viewer0.params['refresh_interval'] = 100
    viewer0.params['show_left_axis'] = True

    viewer1 = QDigitalOscilloscope()
    viewer1.configure()
    viewer1.input.connect(dev.outputs['dichannels'])
    viewer1.initialize()

    dev.start()
    viewer0.start()
    viewer0.show()

    viewer1.start()
    viewer1.show()

    def terminate():
        viewer0.stop()
        viewer1.stop()
        dev.stop()
        viewer0.close()
        viewer1.close()
        dev.close()
        app.quit()

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

    app.exec_()