Пример #1
0
    def processDeviceEvents(self):
        for device in self.devices:
            try:
                events = device._getNativeEventBuffer()

                while len(events) > 0:
                    evt = events.popleft()
                    e = device._getIOHubEventObject(evt)
                    if e is not None:
                        for l in device._getEventListeners(
                                e[DeviceEvent.EVENT_TYPE_ID_INDEX]):
                            l._handleEvent(e)

                filtered_events = []
                for filter in device._filters.values():
                    filtered_events.extend(filter._removeOutputEvents())

                for i in range(len(filtered_events)):
                    e = filtered_events[i]
                    for l in device._getEventListeners(
                            e[DeviceEvent.EVENT_TYPE_ID_INDEX]):
                        l._handleEvent(e)

            except Exception:
                printExceptionDetailsToStdErr()
                print2err("Error in processDeviceEvents: ", device, " : ",
                          len(events), " : ", e)
                print2err(
                    "Event type ID: ", e[DeviceEvent.EVENT_TYPE_ID_INDEX],
                    " : ",
                    EventConstants.getName(e[DeviceEvent.EVENT_TYPE_ID_INDEX]))
                print2err("--------------------------------------")
Пример #2
0
def printEventTypesWithDataDemo():
    # Create an instance of the ExperimentDataAccessUtility class
    # for the selected DataStore file. This allows us to access data
    # in the file based on Device Event names and attributes.
    # 
    experiment_data=ExperimentDataAccessUtility('..\hdf5_files' , 'events.hdf5')
    
    # Get any event tables that have >=1 event saved in them
    #
    events_by_type=experiment_data.getEventsByType()
    
    # print out info on each table
    #
    for event_id, event_gen in events_by_type.iteritems():
        event_constant=EventConstants.getName(event_id)
        print "{0} ({1}): {2}".format(event_constant,event_gen.table.nrows,event_gen)

    # Close the HDF5 File
    #
    experiment_data.close()
def printEventTypesWithDataDemo():
    # Create an instance of the ExperimentDataAccessUtility class
    # for the selected DataStore file. This allows us to access data
    # in the file based on Device Event names and attributes.
    # 
    experiment_data=ExperimentDataAccessUtility('..\hdf5_files' , 'events.hdf5')
    
    # Get any event tables that have >=1 event saved in them
    #
    events_by_type=experiment_data.getEventsByType()
    
    # print out info on each table
    #
    for event_id, event_gen in events_by_type.iteritems():
        event_constant=EventConstants.getName(event_id)
        print "{0} ({1}): {2}".format(event_constant,event_gen.table.nrows,event_gen)

    # Close the HDF5 File
    #
    experiment_data.close()
Пример #4
0
 def _processDeviceEventIteration(self):
     for device in self.devices:
         try:
             events = device._getNativeEventBuffer()
             #if events and len(events)>0:
             #    ioHub.print2err("_processDeviceEventIteration.....", device._event_listeners)
             while len(events) > 0:
                 evt = events.popleft()
                 e = device._getIOHubEventObject(evt)
                 if e is not None:
                     for l in device._getEventListeners(
                             e[DeviceEvent.EVENT_TYPE_ID_INDEX]):
                         l._handleEvent(e)
         except:
             printExceptionDetailsToStdErr()
             print2err("Error in processDeviceEvents: ", device, " : ",
                       len(events), " : ", e)
             print2err(
                 "Event type ID: ", e[DeviceEvent.EVENT_TYPE_ID_INDEX],
                 " : ",
                 EventConstants.getName(e[DeviceEvent.EVENT_TYPE_ID_INDEX]))
             print2err("--------------------------------------")
Пример #5
0
 def _processDeviceEventIteration(self):
     for device in self.devices:
         try:
             events=device._getNativeEventBuffer()
             #if events and len(events)>0:
             #    ioHub.print2err("_processDeviceEventIteration.....", device._event_listeners)
             while len(events)>0:
                 evt=events.popleft()
                 e=device._getIOHubEventObject(evt)
                 if e is not None:
                     for l in device._getEventListeners(e[DeviceEvent.EVENT_TYPE_ID_INDEX]):
                         l._handleEvent(e)
         except:
             printExceptionDetailsToStdErr()
             print2err("Error in processDeviceEvents: ", device, " : ", len(events), " : ", e)
             print2err("Event type ID: ",e[DeviceEvent.EVENT_TYPE_ID_INDEX], " : " , EventConstants.getName(e[DeviceEvent.EVENT_TYPE_ID_INDEX]))
             print2err("--------------------------------------")
Пример #6
0

def getEventDetails(session_path, frame_event_lookup_file, filters,
                    batch_size):
    session_folder = os.path.normpath(os.path.abspath(session_path))
    datastore_reader = openDataStoreReader(session_folder)
    frame_events_lookup = np.load(
        os.path.join(session_folder, frame_event_lookup_file))['events']
    event_types = filters.get('event_type',
                              np.unique(frame_events_lookup['event_type']))

    for etype in event_types:
        filters['event_type'] = [
            etype,
        ]
        filtered_table_rows = Picker(frame_events_lookup).pick_data(
            'event_table_row_index', **filters)
        event_table = datastore_reader.getEventTable(etype)
        while len(filtered_table_rows) > 0:
            row_nums = [int(i) for i in filtered_table_rows[:batch_size]]
            yield event_table[row_nums]
            filtered_table_rows = filtered_table_rows[batch_size:]
    datastore_reader.close()


if __name__ == '__main__':
    for event_details_batch in getEventDetails(SESSION_PATH, FRAME_EVENT_FILE,
                                               FILTERS, BATCH_SIZE):
        for event in event_details_batch:
            print EventConstants.getName(
                event['type']), event['time'], event['filter_id']
Пример #7
0
    [s.draw() for s in STIM_LIST]
    flip_time = window.flip()

    # Update text fields based on all Keyboard Event types that have occurred
    # since the last call to getEvents of clearEvents(). This means that the most
    # recent event in the list of a given event type is what you will see.
    #
    for event in keyboard.getEvents():
        #print 'KB EVT: ',  event, '\n'
        key_text_stim.setText(event.key)
        ucode_stim.setText('{0:#06x} = {1}'.format(event.ucode,
                                                   unichr(event.ucode)))
        modifiers_stim.setText(str(event.modifiers))
        if event.type == EventConstants.KEYBOARD_CHAR:
            keypress_duration_stim.setText("%.6f" % (event.duration))
        event_type_stim.setText(EventConstants.getName(event.type))

        demo_timeout_start = event.time

        if (event.key.lower() == 'q'
                and ('CONTROL_LEFT' in event.modifiers
                     or 'CONTROL_LEFT' in event.modifiers)):
            QUIT_EXP = True
            break

    if flip_time - demo_timeout_start > 15.0:
        print "Ending Demo Due to 15 Seconds of Inactivity."
        break

    # Send a message to the iohub with the message text that a flip
    # occurred and what the mouse position was. Since we know the
Пример #8
0
    def _processDeviceEventIteration(self):
        for device in self.devices:
            try:
                events = device._getNativeEventBuffer()

                while len(events) > 0:
                    evt = events.popleft()
                    e = device._getIOHubEventObject(evt)
                    if e is not None:
                        for l in device._getEventListeners(e[DeviceEvent.EVENT_TYPE_ID_INDEX]):
                            l._handleEvent(e)


                filtered_events = []
                for filter in device._filters.values():
                    filtered_events.extend(filter._removeOutputEvents())

                for i in range(len(filtered_events)):
                    e = filtered_events[i]
                    for l in device._getEventListeners(e[DeviceEvent.EVENT_TYPE_ID_INDEX]):
                        l._handleEvent(e)


            except:
                printExceptionDetailsToStdErr()
                print2err("Error in processDeviceEvents: ", device, " : ", len(events), " : ", e)
                print2err("Event type ID: ",e[DeviceEvent.EVENT_TYPE_ID_INDEX], " : " , EventConstants.getName(e[DeviceEvent.EVENT_TYPE_ID_INDEX]))
                print2err("--------------------------------------")
Пример #9
0
    # Redraw stim and window flip...
    #
    [s.draw() for s in STIM_LIST]
    flip_time=window.flip()

    # Update text fields based on all Keyboard Event types that have occurred
    # since the last call to getEvents of clearEvents(). This means that the most
    # recent event in the list of a given event type is what you will see.
    #    
    for event in keyboard.getEvents():
        key_text_stim.setText(event.key)
        ucode_stim.setText('{0:#06x} = {1}'.format(event.ucode,unichr(event.ucode)))
        modifiers_stim.setText(str(event.modifiers))
        if event.type == EventConstants.KEYBOARD_CHAR:
            keypress_duration_stim.setText("%.6f"%(event.duration))
        event_type_stim.setText(EventConstants.getName(event.type))
    
        if event.key.lower()=='q' and ('CONTROL_LEFT' in event.modifiers or 'CONTROL_LEFT' in event.modifiers):
            QUIT_EXP=True
            break

    # Send a message to the iohub with the message text that a flip 
    # occurred and what the mouse position was. Since we know the 
    # psychopy-iohub time the flip occurred on, we can set that directly 
    # in the event.
    #self.hub.sendMessageEvent("Flip %s"%(str(currentPosition),), sec_time=flip_time)

# Done demo loop, cleanup explicitly
#
io.quit()
import os
from common import openDataStoreReader, Picker
import numpy as np

SESSION_PATH = r'..\..\Results\Default_Experiment\s1'
FRAME_EVENT_FILE = r'session_vframe_events.npz'
FILTERS = dict(event_type=[EventConstants.MONOCULAR_EYE_SAMPLE,], video_id=[0,], filter_id=[23,])
BATCH_SIZE = 100

def getEventDetails(session_path, frame_event_lookup_file, filters, batch_size):
    session_folder = os.path.normpath(os.path.abspath(session_path))
    datastore_reader = openDataStoreReader(session_folder)
    frame_events_lookup = np.load(os.path.join(session_folder, frame_event_lookup_file))['events']
    event_types = filters.get('event_type', np.unique(frame_events_lookup['event_type']))

    for etype in event_types:
        filters['event_type'] = [etype,]
        filtered_table_rows = Picker(frame_events_lookup).pick_data('event_table_row_index', **filters)
        event_table = datastore_reader.getEventTable(etype)
        while len(filtered_table_rows) > 0:
            row_nums = [int(i) for i in filtered_table_rows[:batch_size]]
            yield event_table[row_nums]
            filtered_table_rows = filtered_table_rows[batch_size:]
    datastore_reader.close()


if __name__ == '__main__':
        for event_details_batch in getEventDetails(SESSION_PATH, FRAME_EVENT_FILE, FILTERS, BATCH_SIZE):
            for event in event_details_batch:
                print EventConstants.getName(event['type']), event['time'], event['filter_id']