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