예제 #1
0
 def on_mouse_press(self, x, y, buttons, modifiers):
     if self.state < self.STATE_IGNORE_INPUT: return
     if self.state == self.STATE_WAIT:
         self.logger.write(system_time=get_time(), mode=director.settings['mode'], trial=self.current_trial,
                           event_source="TASK", event_type=self.states[self.state], state=self.states[self.state],
                           event_id="END", **self.log_extra)
         self.gen_probe()
         self.state = self.STATE_STUDY
         if director.settings['player'] == 'ACT-R':
             self.client_actr.update_display(self.probe.actr_chunks, clear=True)
         t = get_time()
         self.start_time = t
         self.logger.write(system_time=t, mode=director.settings['mode'], trial=self.current_trial,
                           event_source="TASK", event_type=self.states[self.state], state=self.states[self.state], 
                           event_id="START", **self.log_extra)
         if director.settings['eyetracker'] and self.client:
             self.dispatch_event("hide_headposition")
             self.client.addDispatcher(self.d)
             self.client.startFixationProcessing()
     elif self.state == self.STATE_SEARCH:
         self.logger.write(system_time=get_time(), mode=director.settings['mode'], trial=self.current_trial,
                           event_source="USER", event_type=self.states[self.state], state=self.states[self.state], 
                           event_id="MOUSE_PRESS", mouse_x=x, mouse_y=y, **self.log_extra)
         if director.settings['player'] != "ACT-R":
             x, y = director.get_virtual_coordinates(x, y)
         for obj in self.cm.objs_touching_point(x - (self.screen[0] - self.screen[1]) / 2, y):
             if obj != self.probe and obj.chunk == self.probe.chunk:
                 self.trial_done()
     else:
         t = get_time()
         self.study_time = t - self.start_time
         self.logger.write(system_time=t, mode=director.settings['mode'], trial=self.current_trial,
                           event_source="TASK", event_type=self.states[self.state], state=self.states[self.state], 
                           event_id="END", **self.log_extra)
         self.show_shapes()
         window = director.window.get_size()
         nx = int(window[0] / 2)
         ny = int(window[1] / 2 - self.probe.cshape.r * .75 * (window[1] / self.screen[1]))
         t = get_time()
         self.start_time = t
         self.state = self.STATE_SEARCH
         self.logger.write(system_time=t, mode=director.settings['mode'], trial=self.current_trial,
                           event_source="TASK", event_type=self.states[self.state], state=self.states[self.state], 
                           event_id="START", **self.log_extra)
         self.logger.write(system_time=t, mode=director.settings['mode'], trial=self.current_trial,
                           event_source="TASK", event_type=self.states[self.state], state=self.states[self.state], 
                           event_id="MOUSE_RESET", mouse_x=nx, mouse_y=ny, **self.log_extra)
         if director.settings['player'] == "ACT-R":
             self.client_actr.set_cursor_location([nx, ny])
         else:
             director.window.set_mouse_position(nx, ny)
         director.window.set_mouse_visible(True)
예제 #2
0
 def iViewXEvent(self, inResponse):
     eyedata = {}
     eyedata.update(self.log_extra)
     for i, _ in enumerate(self.smi_spl_header):
         eyedata[self.smi_spl_header[i]] = inResponse[i]
     self.logger.write(system_time=get_time(), mode=director.settings['mode'], state=self.states[self.state], 
                       trial=self.current_trial, event_source="SMI", event_type="ET_SPL", **eyedata)
예제 #3
0
 def trial_done(self):
     self.trial_complete = True
     t = get_time()
     self.search_time = t - self.start_time
     self.logger.write(system_time=t, mode=director.settings['mode'], trial=self.current_trial,
                       event_source="TASK", event_type=self.states[self.state], state=self.states[self.state],
                       event_id="END", **self.log_extra)
     self.state = self.STATE_RESULTS
     self.logger.write(system_time=t, mode=director.settings['mode'], trial=self.current_trial,
                       event_source="TASK", event_type=self.states[self.state], state=self.states[self.state],
                       study_time=self.study_time, search_time=self.search_time, **self.log_extra)
     
     tmp = self.logger.file.getvalue()
     data = tarfile.TarInfo("%s/trial-%02d.txt" % (director.settings['filebase'], self.current_trial))
     data.size = len(tmp)
     self.tarfile.addfile(data, StringIO(tmp))
     
     tmp = StringIO()
     screenshot().save(tmp, "png")
     data = tarfile.TarInfo("%s/trial-%02d.png" % (director.settings['filebase'], self.current_trial))
     data.size = len(tmp.getvalue())
     tmp.seek(0)
     self.tarfile.addfile(data, tmp)
     
     self.logger.close()
     if director.settings['eyetracker'] and self.client:
         self.client.removeDispatcher(self.d)
         self.client.stopFixationProcessing()
     
     if director.settings['player'] == 'ACT-R' and director.settings['mode'] != 'Experiment':
         self.client_actr.trigger_event(":trial-complete")
     else:
         self.next_trial()
예제 #4
0
 def next_trial(self):
     self.trial_complete = False
     if self.current_trial == self.total_trials:
         self.logger.close(True)
         self.tarfile.close()
         director.scene.dispatch_event("show_intro_scene")
     else:
         self.search_time = -1
         self.study_time = -1
         director.window.set_mouse_visible(False)
         self.clear_shapes()
         self.log_extra = {'screen_width':self.screen[0],
                           'screen_height': self.screen[1]}
         if director.settings['player'] == 'Human' and director.settings['mode'] == 'Experiment':
             self.log_extra['datestamp'] = director.settings['si']['timestamp']
             self.log_extra['encrypted_rin'] = director.settings['si']['encrypted_rin']
         self.state = self.STATE_WAIT
         self.current_trial += 1
         self.gen_combos()
         self.add(self.ready_label)
         
         self.logger.open(StringIO())
         self.logger.write(system_time=get_time(), mode=director.settings['mode'], trial=self.current_trial,
                           event_source="TASK", event_type=self.states[self.state], state=self.states[self.state],
                           event_id="START", **self.log_extra)
         self.dispatch_event("new_trial", self.current_trial, self.total_trials)
         if self.client:
             self.dispatch_event("show_headposition")
             
         if director.settings['player'] == 'ACT-R':
             X = VisualChunk(None, "text", self.screen[0] / 2, self.screen[1] / 2, value="Click mouse when ready!", width=self.ready_label.element.content_width, height=self.ready_label.element.content_height)
             self.client_actr.update_display([X], clear=True)
예제 #5
0
 def iViewXEvent(self, inResponse):
     eyedata = {}
     eyedata.update(self.log_extra)
     eyedata["smi_type"] = inResponse[0]
     eyedata["smi_time"] = inResponse[1]
     eyedata["smi_fx"] = inResponse[2]
     eyedata["smi_fy"] = inResponse[3]
     self.logger.write(system_time=get_time(), mode=director.settings['mode'], state=self.states[self.state], 
                       trial=self.current_trial, event_source="SMI", event_type="ET_FIX", **eyedata)
예제 #6
0
 def on_mouse_motion(self, x, y, dx, dy):
     if self.state < self.STATE_IGNORE_INPUT: return
     if self.state == self.STATE_SEARCH:
         self.logger.write(system_time=get_time(), mode=director.settings['mode'], trial=self.current_trial,
                           event_source="USER", event_type=self.states[self.state], state=self.states[self.state], 
                           event_id="MOUSE_MOTION", mouse_x=x, mouse_y=y, **self.log_extra)