class MWPixelClock(object):
    def __init__(self, conduitName):
        self.conduit = Conduit(conduitName)
        self.conduit.initialize()
        self.conduit.register_local_event_code(0,'#stimDisplayUpdate')
        self.conduit.register_callback_for_name('#stimDisplayUpdate', self.receive_event)
        self.codes = []
        self.cond = Condition()
        self.maxCodes = 100
    
    def receive_event(self, event):
        for s in event.data:
            if s is None:
                continue
            if s.has_key('bit_code'):
                self.cond.acquire()
                self.codes.append((s['bit_code'],event.time/1000000.))
                # if len(self.codes) > 2:
                #     #logging.debug('MW bit_code = %i' % s['bit_code'])
                #     #print s['bit_code']
                #     #logging.debug("MW Delta: %s" % delta_code(self.codes[-1][0], self.codes[-2][0]))
                while len(self.codes) > self.maxCodes:
                    self.codes.pop(0)
                self.cond.notifyAll()
                self.cond.release()
Example #2
0
        raster.add_event(event.time / 1000000., event.code)
        if raster.cursorX == startTime:
            raster.reset(raster.newEvents[0][0])
        rasterCond.notifyAll()
        rasterCond.release()

    mwconduit = Conduit(conduitName)
    mwconduit.initialize()
    print len(mwconduit.codec), mwconduit.codec
    print len(mwconduit.reverse_codec), mwconduit.reverse_codec

    for (i, eventName) in enumerate(eventNames):
        print "registering %s" % eventName
        # register local code?
        mwconduit.register_local_event_code(i, eventName)
        mwconduit.register_callback_for_name(eventName, receive_event)

    print len(mwconduit.codec), mwconduit.codec
    print len(mwconduit.reverse_codec), mwconduit.reverse_codec

    def draw():
        global raster, rasterCond
        rasterCond.acquire()
        raster.draw()  # passing in new time
        rasterCond.release()
        glutSwapBuffers()

    glutDisplayFunc(draw)

    global prevT
    prevT = time.time()
Example #3
0
if __name__ == "__main__":
    if fakeProducer:
        fp = EventProducer(1000, 100)
        fp.start()
    else:
        conduit_resource_name = 'python_bridge_plugin_conduit'

        client = IPCClientConduit(conduit_resource_name)
        client.initialize()
        sys.stdout.write('registering callbacks\n')
        for i in xrange(len(targetEvents)):
            eventName = targetEvents[i]
            #client.register_callback_for_name(eventName, receive_event)
            client.register_local_event_code(i, targetEvents[i])
            client.register_callback_for_name(eventName, receive_event)
            codeToName[i] = targetEvents[i]
        #print codeToName
        sys.stdout.write('waiting for events\n')

    while 1:
        update_plot()
        if fakeProducer:
            if not fp.is_alive():
                #print "Fake event producer is done producing events"
                break
        time.sleep(1.)

    #print "Joining threads"
    if fakeProducer:
        fp.join()
# ===============================

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)

    #pathFunc = lambda i : "ipc:///tmp/pixel_clock/%i" % i
    pathFunc = lambda i: "tcp://localhost:%i" % (11000 + i)
    cs = ClockSync(pathFunc, range(4))

    conduitName = 'server_event_conduit'

    conduit = Conduit(conduitName)
    conduit.initialize()
    conduit.register_local_event_code(0, '#stimDisplayUpdate')
    conduit.register_callback_for_name('#stimDisplayUpdate',
                                       cs.process_mw_event)

    offset = 0
    while 1:
        while cs.update():
            pass
        cs.match()
        mwC = [e[1] for e in cs.mwEvents]
        auC = [e[1] for e in cs.auEvents]
        if len(mwC):
            if np.any(np.array(mwC[1:]) == np.array(mwC[:-1])):
                print "Repeat found!"

        if not (cs.offset is None):
            if cs.offset != offset:
                offset = cs.offset
Example #5
0
        return auTime + self.offset


# ===============================

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)

    cs = ClockSync(pathFunc, range(4))

    conduitName = 'server_event_conduit'

    conduit = Conduit(conduitName)
    conduit.initialize()
    conduit.register_local_event_code(0, '#pixelClockOffset')
    conduit.register_callback_for_name('#pixelClockOffset',
                                       cs.process_mw_event)

    offset = 0
    while 1:
        while cs.update():
            pass
        cs.match()
        mwC = [e[1] for e in cs.mwEvents]
        auC = [e[1] for e in cs.auEvents]
        if len(mwC):
            if np.any(np.array(mwC[1:]) == np.array(mwC[:-1])):
                print "Repeat found!"

        if not (cs.offset is None):
            if cs.offset != offset:
                offset = cs.offset