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