Skip to content

Commit

Permalink
Merge pull request #74 from drammock/master
Browse files Browse the repository at this point in the history
enable multiple instances of screen_text
  • Loading branch information
larsoner committed Sep 25, 2013
2 parents a50dfe6 + 6cda9e9 commit fa896e0
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 88 deletions.
2 changes: 1 addition & 1 deletion examples/generate_stimuli.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from os import path as op
import numpy as np
from scipy.io import savemat, wavfile
from expyfun.tdt_controller import get_tdt_rates
from expyfun._tdt_controller import get_tdt_rates


def generate_stimuli(num_trials=10, num_freqs=4, stim_dur=0.5, min_freq=500.0,
Expand Down
91 changes: 53 additions & 38 deletions examples/keypress_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
participant='foo', session='001') as ec:
ec.wait_secs(isi)

# the screen_prompt method
pressed = ec.screen_prompt('screen_prompt\npress any key',
max_wait=wait_dur, timestamp=True)
###############
# screen_prompt
pressed = ec.screen_prompt('press any key\n\nscreen_prompt(max_wait={})'
''.format(wait_dur), max_wait=wait_dur,
timestamp=True)
ec.write_data_line('screen_prompt', pressed)
if pressed[0] is None:
message = 'no keys pressed'
Expand All @@ -36,57 +38,62 @@
ec.screen_prompt(message, msg_dur)
ec.wait_secs(isi)

# the wait_for_presses method, relative to master clock
ec.screen_text('press a few keys\n\nwait_for_presses\nmax_wait={}\n'
'timestamp relative to master clock'.format(wait_dur))
pressed = ec.wait_for_presses(wait_dur, relative_to=0.0)
ec.write_data_line('wait_for_presses relative_to 0.0', pressed)
##################
# wait_for_presses
ec.screen_text('press some keys\n\nwait_for_presses(max_wait={})'
''.format(wait_dur))
pressed = ec.wait_for_presses(wait_dur)
ec.write_data_line('wait_for_presses', pressed)
if not len(pressed):
message = 'no keys pressed'
else:
message = ['{} pressed at {} secs'
message = ['{} pressed after {} secs'
''.format(key, round(time, 4)) for key, time in pressed]
message = '\n'.join(message)
ec.screen_prompt(message, msg_dur)
ec.wait_secs(isi)

# the wait_for_presses method, relative to method call
ec.screen_text('press a few keys\n\nwait_for_presses\nmax_wait={}\n'
'timestamp relative to when method called'.format(wait_dur))
pressed = ec.wait_for_presses(wait_dur, relative_to=None)
ec.write_data_line('wait_for_presses relative_to None', pressed)
############################################
# wait_for_presses, relative to master clock
ec.screen_text('press some keys\n\nwait_for_presses(max_wait={},\n'
'relative_to=0.0)'.format(wait_dur))
pressed = ec.wait_for_presses(wait_dur, relative_to=0.0)
ec.write_data_line('wait_for_presses relative_to 0.0', pressed)
if not len(pressed):
message = 'no keys pressed'
else:
message = ['{} pressed after {} secs'
message = ['{} pressed at {} secs'
''.format(key, round(time, 4)) for key, time in pressed]
message = '\n'.join(message)
ec.screen_prompt(message, msg_dur)
ec.wait_secs(isi)

# listen_presses / get_presses with wait_secs, relative to listen_presses
ec.screen_text('press a few keys\n\nlisten_presses()\nwait_secs({})\n'
'get_presses()'.format(wait_dur))
##########################################
# listen_presses / wait_secs / get_presses
ec.screen_text('press some keys\n\nlisten_presses()\nwait_secs({0}, '
'hog_cpu_time={0})\nget_presses()'.format(wait_dur))
ec.listen_presses()
ec.wait_secs(wait_dur, hog_cpu_time=wait_dur)
pressed = ec.get_presses() # relative_to=0.0
ec.write_data_line('get_presses after wait_secs', pressed)
ec.write_data_line('listen / wait / get_presses', pressed)
if not len(pressed):
message = 'no keys pressed'
else:
message = ['{} pressed at {} secs'
message = ['{} pressed after {} secs'
''.format(key, round(time, 4)) for key, time in pressed]
message = '\n'.join(message)
ec.screen_prompt(message, msg_dur)
ec.wait_secs(isi)

# listen_presses / get_presses with wait_secs, relative to master clock
ec.screen_text('press a few keys\n\nlisten_presses()\nwait_secs({})\n'
'get_presses(relative_to=0.0)'.format(wait_dur))
####################################################################
# listen_presses / wait_secs / get_presses, relative to master clock
ec.screen_text('press a few keys\n\nlisten_presses()\nwait_secs({0}, '
'hog_cpu_time={0})\nget_presses(relative_to=0.0)'
''.format(wait_dur))
ec.listen_presses()
ec.wait_secs(wait_dur, hog_cpu_time=wait_dur)
pressed = ec.get_presses(relative_to=0.0)
ec.write_data_line('get_presses after wait_secs, relative_to 0.0', pressed)
ec.write_data_line('listen / wait / get_presses relative_to 0.0', pressed)
if not len(pressed):
message = 'no keys pressed'
else:
Expand All @@ -96,43 +103,51 @@
ec.screen_prompt(message, msg_dur)
ec.wait_secs(isi)

# the listen_presses / get_presses methods, relative to master clock
###########################################
# listen_presses / while loop / get_presses
disp_time = wait_dur
countdown = ec.current_time + disp_time
ec.listen_presses()
ec.call_on_next_flip(ec.listen_presses)
ec.screen_text('press some keys\n\nlisten_presses()\nwhile loop {}\n'
'get_presses()'.format(disp_time))
while ec.current_time < countdown:
cur_time = round(countdown - ec.current_time, 1)
if cur_time != disp_time:
disp_time = cur_time
ec.screen_text('press a few keys\n\nlisten_presses\n{}\ntimestamp '
'relative to master clock'.format(disp_time))
pressed = ec.get_presses(relative_to=0.0)
ec.write_data_line('get_presses relative_to 0.0', pressed)
# redraw text with updated disp_time
ec.screen_text('press some keys\n\nlisten_presses()\n'
'while loop {}\nget_presses()'.format(disp_time))
pressed = ec.get_presses()
ec.write_data_line('listen / while / get_presses', pressed)
if not len(pressed):
message = 'no keys pressed'
else:
message = ['{} pressed at {} secs'
message = ['{} pressed after {} secs'
''.format(key, round(time, 4)) for key, time in pressed]
message = '\n'.join(message)
ec.screen_prompt(message, msg_dur)
ec.wait_secs(isi)

# the listen_presses / get_presses methods, relative to method call
#####################################################################
# listen_presses / while loop / get_presses, relative to master clock
disp_time = wait_dur
countdown = ec.current_time + disp_time
ec.listen_presses()
ec.call_on_next_flip(ec.listen_presses)
ec.screen_text('press some keys\n\nlisten_presses()\nwhile loop {}\n'
'get_presses(relative_to=0.0)'.format(disp_time))
while ec.current_time < countdown:
cur_time = round(countdown - ec.current_time, 1)
if cur_time != disp_time:
disp_time = cur_time
ec.screen_text('press a few keys\n\nlisten_presses\n{}\ntimestamp '
'relative to when method called'.format(disp_time))
pressed = ec.get_presses()
ec.write_data_line('get_presses relative_to None', pressed)
# redraw text with updated disp_time
ec.screen_text('press some keys\n\nlisten_presses()\nwhile loop {}'
'\nget_presses(relative_to=0.0)'.format(disp_time))
pressed = ec.get_presses(relative_to=0.0)
ec.write_data_line('listen / while / get_presses relative_to 0.0', pressed)
if not len(pressed):
message = 'no keys pressed'
else:
message = ['{} pressed after {} secs'
message = ['{} pressed at {} secs'
''.format(key, round(time, 4)) for key, time in pressed]
message = '\n'.join(message)
ec.screen_prompt(message, msg_dur)
8 changes: 4 additions & 4 deletions examples/simple_experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from scipy import io as sio

from expyfun import ExperimentController
from expyfun.utils import set_log_level
from expyfun._utils import set_log_level
from generate_stimuli import generate_stimuli

set_log_level('INFO')
Expand Down Expand Up @@ -145,7 +145,7 @@
ec.flip_and_play()
ec.wait_secs(len(concat_wavs) / float(ec.stim_fs))
ec.screen_text('Go!')
pressed = ec.wait_for_presses(max_resp_time + concat_dur, min_resp_time,
pressed = ec.wait_for_presses(max_resp_time + 1, min_resp_time,
live_keys, False)
answers = [str(x + 1) for x in mass_trial_order]
correct = [press == ans for press, ans in zip(pressed, answers)]
Expand All @@ -156,5 +156,5 @@

# end experiment
ec.screen_prompt('All done! You got {0} correct out of {1} tones. Press '
'any key to close.'.format(running_total, num_trials))
ec.wait_secs(0.1)
'any key to close.'.format(running_total, num_trials),
max_wait=feedback_dur)
Loading

0 comments on commit fa896e0

Please sign in to comment.