---
API: 2.1
OpenSesame: 3.2.7
Platform: nt
---
set width 1024
set uniform_coordinates yes
set title "BCE dual task"
set subject_parity even
set subject_nr 0
set start experiment
set sound_sample_size -16
set sound_freq 48000
set sound_channels 2
set sound_buf_size 1024
set sampler_backend legacy
set round_decimals 2
set mouse_backend xpyriment
set keyboard_backend legacy
set height 768
set fullscreen no
set form_clicks no
set foreground white
set font_underline no
set font_size 18
set font_italic no
set font_family mono
set font_bold no
set experiment_path "C:\\Users\\vexne\\OneDrive\\Dokumente\\ARBEITARBEIT\\Misc\\OpenSesame"
set disable_garbage_collection yes
set description "A template containing a practice and an experimental phase"
set coordinates uniform
set compensation 0
set color_backend legacy
set clock_backend legacy
set canvas_backend xpyriment
set bidi yes
set background black
define loop block_loop
set source_file ""
set source table
set skip 0
set repeat 1
set order random
set offset no
set item trial_sequence
set description "A single block of trials"
set cycles 48
set continuous no
set column_order ""
set break_if_on_first yes
set break_if "[count_trial_sequence] > 12 and [practice] = yes"
setcycle 0 T1 1
setcycle 0 T2 2
setcycle 0 compatibility incompatible
setcycle 0 correct_response_T1 y
setcycle 0 correct_response_T2 n
setcycle 0 soa 40
setcycle 1 T1 4
setcycle 1 T2 2
setcycle 1 compatibility compatible
setcycle 1 correct_response_T1 x
setcycle 1 correct_response_T2 n
setcycle 1 soa 40
setcycle 2 T1 6
setcycle 2 T2 2
setcycle 2 compatibility compatible
setcycle 2 correct_response_T1 x
setcycle 2 correct_response_T2 n
setcycle 2 soa 40
setcycle 3 T1 9
setcycle 3 T2 2
setcycle 3 compatibility incompatible
setcycle 3 correct_response_T1 y
setcycle 3 correct_response_T2 n
setcycle 3 soa 40
setcycle 4 T1 1
setcycle 4 T2 3
setcycle 4 compatibility compatible
setcycle 4 correct_response_T1 y
setcycle 4 correct_response_T2 m
setcycle 4 soa 40
setcycle 5 T1 4
setcycle 5 T2 3
setcycle 5 compatibility incompatible
setcycle 5 correct_response_T1 x
setcycle 5 correct_response_T2 m
setcycle 5 soa 40
setcycle 6 T1 6
setcycle 6 T2 3
setcycle 6 compatibility incompatible
setcycle 6 correct_response_T1 x
setcycle 6 correct_response_T2 m
setcycle 6 soa 40
setcycle 7 T1 9
setcycle 7 T2 3
setcycle 7 compatibility compatible
setcycle 7 correct_response_T1 y
setcycle 7 correct_response_T2 m
setcycle 7 soa 40
setcycle 8 T1 1
setcycle 8 T2 7
setcycle 8 compatibility compatible
setcycle 8 correct_response_T1 y
setcycle 8 correct_response_T2 m
setcycle 8 soa 40
setcycle 9 T1 4
setcycle 9 T2 7
setcycle 9 compatibility incompatible
setcycle 9 correct_response_T1 x
setcycle 9 correct_response_T2 m
setcycle 9 soa 40
setcycle 10 T1 6
setcycle 10 T2 7
setcycle 10 compatibility incompatible
setcycle 10 correct_response_T1 x
setcycle 10 correct_response_T2 m
setcycle 10 soa 40
setcycle 11 T1 9
setcycle 11 T2 7
setcycle 11 compatibility compatible
setcycle 11 correct_response_T1 y
setcycle 11 correct_response_T2 m
setcycle 11 soa 40
setcycle 12 T1 1
setcycle 12 T2 8
setcycle 12 compatibility incompatible
setcycle 12 correct_response_T1 y
setcycle 12 correct_response_T2 n
setcycle 12 soa 40
setcycle 13 T1 4
setcycle 13 T2 8
setcycle 13 compatibility compatible
setcycle 13 correct_response_T1 x
setcycle 13 correct_response_T2 n
setcycle 13 soa 40
setcycle 14 T1 6
setcycle 14 T2 8
setcycle 14 compatibility compatible
setcycle 14 correct_response_T1 x
setcycle 14 correct_response_T2 n
setcycle 14 soa 40
setcycle 15 T1 9
setcycle 15 T2 8
setcycle 15 compatibility incompatible
setcycle 15 correct_response_T1 y
setcycle 15 correct_response_T2 n
setcycle 15 soa 40
setcycle 16 T1 1
setcycle 16 T2 2
setcycle 16 compatibility incompatible
setcycle 16 correct_response_T1 y
setcycle 16 correct_response_T2 n
setcycle 16 soa 130
setcycle 17 T1 4
setcycle 17 T2 2
setcycle 17 compatibility compatible
setcycle 17 correct_response_T1 x
setcycle 17 correct_response_T2 n
setcycle 17 soa 130
setcycle 18 T1 6
setcycle 18 T2 2
setcycle 18 compatibility compatible
setcycle 18 correct_response_T1 x
setcycle 18 correct_response_T2 n
setcycle 18 soa 130
setcycle 19 T1 9
setcycle 19 T2 2
setcycle 19 compatibility incompatible
setcycle 19 correct_response_T1 y
setcycle 19 correct_response_T2 n
setcycle 19 soa 130
setcycle 20 T1 1
setcycle 20 T2 3
setcycle 20 compatibility compatible
setcycle 20 correct_response_T1 y
setcycle 20 correct_response_T2 m
setcycle 20 soa 130
setcycle 21 T1 4
setcycle 21 T2 3
setcycle 21 compatibility incompatible
setcycle 21 correct_response_T1 x
setcycle 21 correct_response_T2 m
setcycle 21 soa 130
setcycle 22 T1 6
setcycle 22 T2 3
setcycle 22 compatibility incompatible
setcycle 22 correct_response_T1 x
setcycle 22 correct_response_T2 m
setcycle 22 soa 130
setcycle 23 T1 9
setcycle 23 T2 3
setcycle 23 compatibility compatible
setcycle 23 correct_response_T1 y
setcycle 23 correct_response_T2 m
setcycle 23 soa 130
setcycle 24 T1 1
setcycle 24 T2 7
setcycle 24 compatibility compatible
setcycle 24 correct_response_T1 y
setcycle 24 correct_response_T2 m
setcycle 24 soa 130
setcycle 25 T1 4
setcycle 25 T2 7
setcycle 25 compatibility incompatible
setcycle 25 correct_response_T1 x
setcycle 25 correct_response_T2 m
setcycle 25 soa 130
setcycle 26 T1 6
setcycle 26 T2 7
setcycle 26 compatibility incompatible
setcycle 26 correct_response_T1 x
setcycle 26 correct_response_T2 m
setcycle 26 soa 130
setcycle 27 T1 9
setcycle 27 T2 7
setcycle 27 compatibility compatible
setcycle 27 correct_response_T1 y
setcycle 27 correct_response_T2 m
setcycle 27 soa 130
setcycle 28 T1 1
setcycle 28 T2 8
setcycle 28 compatibility incompatible
setcycle 28 correct_response_T1 y
setcycle 28 correct_response_T2 n
setcycle 28 soa 130
setcycle 29 T1 4
setcycle 29 T2 8
setcycle 29 compatibility compatible
setcycle 29 correct_response_T1 x
setcycle 29 correct_response_T2 n
setcycle 29 soa 130
setcycle 30 T1 6
setcycle 30 T2 8
setcycle 30 compatibility compatible
setcycle 30 correct_response_T1 x
setcycle 30 correct_response_T2 n
setcycle 30 soa 130
setcycle 31 T1 9
setcycle 31 T2 8
setcycle 31 compatibility incompatible
setcycle 31 correct_response_T1 y
setcycle 31 correct_response_T2 n
setcycle 31 soa 130
setcycle 32 T1 1
setcycle 32 T2 2
setcycle 32 compatibility incompatible
setcycle 32 correct_response_T1 y
setcycle 32 correct_response_T2 n
setcycle 32 soa 300
setcycle 33 T1 4
setcycle 33 T2 2
setcycle 33 compatibility compatible
setcycle 33 correct_response_T1 x
setcycle 33 correct_response_T2 n
setcycle 33 soa 300
setcycle 34 T1 6
setcycle 34 T2 2
setcycle 34 compatibility compatible
setcycle 34 correct_response_T1 x
setcycle 34 correct_response_T2 n
setcycle 34 soa 300
setcycle 35 T1 9
setcycle 35 T2 2
setcycle 35 compatibility incompatible
setcycle 35 correct_response_T1 y
setcycle 35 correct_response_T2 n
setcycle 35 soa 300
setcycle 36 T1 1
setcycle 36 T2 3
setcycle 36 compatibility compatible
setcycle 36 correct_response_T1 y
setcycle 36 correct_response_T2 m
setcycle 36 soa 300
setcycle 37 T1 4
setcycle 37 T2 3
setcycle 37 compatibility incompatible
setcycle 37 correct_response_T1 x
setcycle 37 correct_response_T2 m
setcycle 37 soa 300
setcycle 38 T1 6
setcycle 38 T2 3
setcycle 38 compatibility incompatible
setcycle 38 correct_response_T1 x
setcycle 38 correct_response_T2 m
setcycle 38 soa 300
setcycle 39 T1 9
setcycle 39 T2 3
setcycle 39 compatibility compatible
setcycle 39 correct_response_T1 y
setcycle 39 correct_response_T2 m
setcycle 39 soa 300
setcycle 40 T1 1
setcycle 40 T2 7
setcycle 40 compatibility compatible
setcycle 40 correct_response_T1 y
setcycle 40 correct_response_T2 m
setcycle 40 soa 300
setcycle 41 T1 4
setcycle 41 T2 7
setcycle 41 compatibility incompatible
setcycle 41 correct_response_T1 x
setcycle 41 correct_response_T2 m
setcycle 41 soa 300
setcycle 42 T1 6
setcycle 42 T2 7
setcycle 42 compatibility incompatible
setcycle 42 correct_response_T1 x
setcycle 42 correct_response_T2 m
setcycle 42 soa 300
setcycle 43 T1 9
setcycle 43 T2 7
setcycle 43 compatibility compatible
setcycle 43 correct_response_T1 y
setcycle 43 correct_response_T2 m
setcycle 43 soa 300
setcycle 44 T1 1
setcycle 44 T2 8
setcycle 44 compatibility incompatible
setcycle 44 correct_response_T1 y
setcycle 44 correct_response_T2 n
setcycle 44 soa 300
setcycle 45 T1 4
setcycle 45 T2 8
setcycle 45 compatibility compatible
setcycle 45 correct_response_T1 x
setcycle 45 correct_response_T2 n
setcycle 45 soa 300
setcycle 46 T1 6
setcycle 46 T2 8
setcycle 46 compatibility compatible
setcycle 46 correct_response_T1 x
setcycle 46 correct_response_T2 n
setcycle 46 soa 300
setcycle 47 T1 9
setcycle 47 T2 8
setcycle 47 compatibility incompatible
setcycle 47 correct_response_T1 y
setcycle 47 correct_response_T2 n
setcycle 47 soa 300
run trial_sequence
define sequence block_sequence
set flush_keyboard yes
set description "A sequence containing a single block of trials followed by feedback to the participant"
run block_loop always
run reset_feedback always
run feedback "[practice] = no"
define sketchpad end_of_experiment
set start_response_interval no
set duration keypress
set description "A sketchpad notifying the participant that the experiment is finished"
draw textline center=1 color=white font_bold=no font_family=mono font_italic=no font_size=18 html=yes show_if=always text="Press any key to exit" x=0 y=0 z_index=0
define sketchpad end_of_practice
set start_response_interval no
set duration keypress
set description "A sketchpad notifying the participant that the practice phase is finished"
draw textline center=1 color=white font_bold=no font_family=mono font_italic=no font_size=18 html=yes show_if=always text="End of practice.
First task, left hand: y odd, x even
Second task, right hand: m odd, n even
Press any key to continue" x=0 y=0 z_index=0
define sequence experiment
set flush_keyboard yes
set description "The main sequence of the experiment"
run prepare_variables always
run instructions always
run practice_loop always
run end_of_practice always
run experimental_loop always
run end_of_experiment always
define loop experimental_loop
set source_file ""
set source table
set skip 0
set repeat 4
set order random
set offset no
set item block_sequence
set description "A loop containing one or more experimental blocks"
set cycles 1
set continuous no
set column_order practice
set break_if_on_first yes
set break_if never
setcycle 0 practice no
run block_sequence
define feedback feedback
set reset_variables yes
set duration keypress
set description "Provides feedback to the participant"
draw textline center=1 color=white font_bold=no font_family=mono font_italic=no font_size=18 html=yes show_if=always text="Take a break!
Press any key to continue" x=0 y=0 z_index=0
define sketchpad instructions
set start_response_interval no
set duration keypress
set description "A sketchpad containing the instructions for the participant"
draw textline center=1 color=white font_bold=no font_family=mono font_italic=no font_size=18 html=yes show_if=always text="Left hand: y for odd, x for even
Right hand: n for even, m for odd
***
You will see two numbers appearing shortly one after the other. Indicate, if the numbers are odd or even.
Use your left hand to react to the first number. Press y if it's odd, and x if it's even.
Use your right hand to react to the second numer. Press n if it's even, and m if it's odd.
Your middle fingers react to odd numbers, while your index fingers react to even numbers.
Don't delay your response until both numbers are visible, react as fast and accuratly as you can, and first to the number that appears first.
Press any key to begin!" x=0 y=0 z_index=0
define logger logger
set description "Logs experimental data"
set auto_log yes
define inline_script new_inline_script
set description "Executes Python code"
___run__
fix_cv.show() # canvas show function returns a timestamp
clock.sleep(500) # break after fixation
start_time = stim_cv.show() #we can use this timestamp as the trials' start time
while True: # we loop this whole section until one of two break conditions is met
# show second frame whenever necessary
if clock.time()-start_time > var.soa: # check internal clock, if the difference between current clock time and start time surpasses soa
stim2_cv.show() # the 2nd canvas with both stimuli is shown
# get a response
k,t = kb.get_key() #get_key returns a key,timestamp tuple which here is called k,t and can be used to check which key was pressed at which timepoint later
if k == None: # as long as no key is pressed, keep looping
pass
elif k in ['m','n'] and var.resp2 == None: # if there's nothing yet stored in resp2, and the key-part of the key/timestamp-tuple is filled with one of the two possible answers to Task 2, store that as response 2, and determine the response time by substrating the start_time of the trial from the timestamp part of the tuple
var.resp2 = k
var.resp2_time = t-start_time
elif k in ['x','y'] and var.resp1 == None: # see above, now for task 1
var.resp1 = k
var.resp1_time = t-start_time
if var.resp1 != None and var.resp2 != None: # the loop of the trial breaks when both answers are given
break
if clock.time()-start_time > timeout: # if the timeout is met before both answers are given, the loop is also broken, setting the feedback to "too slow"
var.correct = 0
var.miss = 1
break # loop breaks after timeout
if var.miss == 1: # if it was a timeout, set the variable "first response" to 0 for the feedbacks
var.first_response = 0
elif var.resp1_time < var.resp2_time: # check to which stimulus was responded first to select the right feedback
var.first_response = 1
else:
var.first_response = 2
# set the feedback options
# if both correct and first responded to T1: correct
if var.resp1 == var.correct_response_T1 and var.first_response == 1 and var.resp2 == var.correct_response_T2:
var.correct = 1
var.feedback = 'Correct!'
# if first responded to T2: wrong order
elif var.first_response == 2:
var.correct = 0
var.feedback = 'Wrong order!'
# if not responded: too slow
elif var.first_response == 0:
var.feedback = 'Too slow!'
# everything else is just wrong
else:
var.correct = 0
var.feedback = 'Wrong!'
# you can also specify more cases, if only one is correct
feedback_cv.text(var.feedback)
feedback_cv.show()
clock.sleep(1000)
__end__
___prepare__
# create the 4 canvases needed, with black background
fix_cv = Canvas(background_color=(0,0,0))
stim_cv = Canvas(background_color=(0,0,0))
stim2_cv = Canvas(background_color=(0,0,0))
feedback_cv = Canvas(background_color=(0,0,0))
# init keyboard
# limit to relevant keys and timeout very short
# short timeout as preparation for the loop in the run phase? --> making it so, that the input is checked again and again rapidly for precise measurement
kb = Keyboard(keylist=['m','n','y','x'],timeout = 2)
# draw stimuli
# all canvases get the fixation dot added
fix_cv.fixdot(style= 'medium-open')
stim_cv.fixdot(style= 'medium-open')
stim2_cv.fixdot(style= 'medium-open')
# stim_cv and stim2_cv get the Task 1 Stimulus added, 96 pixels to the left of the fixation (center is 0,0, -96: to the left)
stim_cv.text(var.T1,x=-96,y=0)
stim2_cv.text(var.T1,x=-96,y=0)
# stim2_cv also gets the Task 2 Stimulus, to the right
stim2_cv.text(var.T2,x=96,y=0)
# init more variables
var.miss = 0 # needed for feedback checks, has to be initialized first, so as it doesn't cause crashes later when the feedback preparation checks for the relevant variables and they're nonexistent
var.resp1 = None
var.resp2 = None
var.resp1_time = 0
var.resp2_time = 0
timeout = 2500
__end__
define loop practice_loop
set source_file ""
set source table
set skip 0
set repeat 1
set order random
set offset no
set item block_sequence
set description "A loop containing one or more practice blocks"
set cycles 1
set continuous no
set column_order practice
set break_if_on_first yes
set break_if never
setcycle 0 practice yes
run block_sequence
define inline_script prepare_variables
set description "Executes Python code"
set _run ""
set _prepare "var.count_trial_sequence = 0"
define reset_feedback reset_feedback
set description "Resets the feedback variables, such as 'avg_rt' and 'acc'"
define sequence trial_sequence
set flush_keyboard yes
set description "A single trial"
run new_inline_script always
run logger always