def get_triggers(self, code=None, bitwise_comparison=False): """Get list of received triggers. For not missing any triggers the history has to be updated regularly (e.g. by calling this method)! Returns None if no history is used. If bitwise_comparision = True, the function performs a bitwise comparison (logical and) between code and received input and waits until a certain bit pattern is set. Parameters code -- a specific code to get (int) (optional) bitwise_comparison -- make a bitwise comparison (default=False) """ if self.interface.has_input_history: self.interface.clear() counter_list = [] if code is None: code = self._default_code for event in self.interface.input_history.get_whole_buffer(): if code is None: #get them all counter_list.append(event) elif compare_codes(event, code, bitwise_comparison): counter_list.append(event) return counter_list else: return None
def trigger_count(self, code=None, bitwise_comparison=False): """Get the number of received triggers. For not missing any triggers the history has to be updated regularly (e.g. by calling this method)! Returns None if no history is used. If bitwise_comparision = True, the function performs a bitwise comparison (logical and) between code and received input and waits until a certain bit pattern is set. Parameters code -- a specific code to count (int) (optional) bitwise_comparison -- make a bitwise comparison (default=False) """ if self.interface.has_input_history: self.interface.clear() counter = 0 if code is None: code = self._default_code for event in self.interface.input_history.get_whole_buffer(): if code is None: #count all counter += 1 elif compare_codes(event, code, bitwise_comparison): counter += 1 return counter else: return None
def wait(self, code=None, bitwise_comparison=False): """Wait for a trigger. Returns the code received and the reaction time [code, rt]. If bitwise_comparison = True, the function performs a bitwise comparison (logical and) between code and received input and waits until a certain bit pattern is set. Parameters code -- a specific code to wait for (int) (optional) bitwise_comparison -- make a bitwise comparison (default=False) See Also -------- design.experiment.register_wait_callback_function """ if expyriment.control.defaults._skip_wait_functions: return None, None start = get_time() found = None rt = None if code is None: code = self._default_code self.interface.clear() while True: rtn_callback = expyriment._active_exp._execute_wait_callback() if isinstance(rtn_callback, expyriment.control.CallbackQuitEvent): return rtn_callback, int((get_time() - start) * 1000) read = self.interface.poll() if read is not None: if code is None: #return for every event rt = int((get_time() - start) * 1000) found = read break elif compare_codes(read, code, bitwise_comparison): rt = int((get_time() - start) * 1000) found = read break if Keyboard.process_control_keys(): break if self._logging: expyriment._active_exp._event_file_log( "TriggerInput,received,{0},wait".format(found)) return found, rt
def wait(self, code=None, bitwise_comparison=False): """Wait for a trigger. Returns the code received and the reaction time [code, rt]. If bitwise_comparison = True, the function performs a bitwise comparison (logical and) between code and received input and waits until a certain bit pattern is set. Parameters code -- a specific code to wait for (int) (optional) bitwise_comparison -- make a bitwise comparison (default=False) See Also -------- design.experiment.register_wait_callback_function """ if expyriment.control.defaults._skip_wait_functions: return None, None start = get_time() found = None rt = None if code is None: code = self._default_code self.interface.clear() while True: rtn_callback = expyriment._active_exp._execute_wait_callback() if isinstance(rtn_callback, expyriment.control.CallbackQuitEvent): return rtn_callback, int((get_time() - start) * 1000) read = self.interface.poll() if read is not None: if code is None: # return for every event rt = int((get_time() - start) * 1000) found = read break elif compare_codes(read, code, bitwise_comparison): rt = int((get_time() - start) * 1000) found = read break if Keyboard.process_control_keys(): break if self._logging: expyriment._active_exp._event_file_log("TriggerInput,received,{0},wait".format(found)) return found, rt
def check(self, codes=None, bitwise_comparison=False): """Check for response codes. If bitwise_comparison = True, the function performs a bitwise comparison (logical and) between codes and received input. Parameters ---------- codes : int or list, optional certain bit pattern or list of bit pattern to wait for, if codes is not set (None) the function returns for any event that differs from the baseline bitwise_comparison : bool, optional make a bitwise comparison (default=False) Returns ------- key : int key code or None """ while True: read = self._interface.poll() if read is not None: if codes is None and read != self._baseline: if self._logging: expyriment._active_exp._event_file_log( "{0},received,{1},check".format( self.__class__.__name__, read), 2) return read elif compare_codes(read, codes, bitwise_comparison): if self._logging: expyriment._active_exp._event_file_log( "{0},received,{1},check".format( self.__class__.__name__, read)) return read else: return None