---
API: 2.1
OpenSesame: 3.3.12
Platform: nt
---
set width 1024
set uniform_coordinates yes
set title "Visual search"
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 psycho
set round_decimals 2
set mouse_backend psycho
set keyboard_backend psycho
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\\Gebruiker\\Documents\\Teaching_AY2223_S2\\Experimentation\\OpenSesame_Exercises\\s8_visual_search"
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 psycho
set clock_backend psycho
set canvas_backend psycho
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 18
set continuous no
set column_order ""
set break_if_on_first yes
set break_if never
setcycle 0 condition conjunction
setcycle 0 set_size 1
setcycle 0 target_present present
setcycle 1 condition feature_shape
setcycle 1 set_size 1
setcycle 1 target_present present
setcycle 2 condition feature_color
setcycle 2 set_size 1
setcycle 2 target_present present
setcycle 3 condition conjunction
setcycle 3 set_size 5
setcycle 3 target_present present
setcycle 4 condition feature_shape
setcycle 4 set_size 5
setcycle 4 target_present present
setcycle 5 condition feature_color
setcycle 5 set_size 5
setcycle 5 target_present present
setcycle 6 condition conjunction
setcycle 6 set_size 15
setcycle 6 target_present present
setcycle 7 condition feature_shape
setcycle 7 set_size 15
setcycle 7 target_present present
setcycle 8 condition feature_color
setcycle 8 set_size 15
setcycle 8 target_present present
setcycle 9 condition conjunction
setcycle 9 set_size 1
setcycle 9 target_present absent
setcycle 10 condition feature_shape
setcycle 10 set_size 1
setcycle 10 target_present absent
setcycle 11 condition feature_color
setcycle 11 set_size 1
setcycle 11 target_present absent
setcycle 12 condition conjunction
setcycle 12 set_size 5
setcycle 12 target_present absent
setcycle 13 condition feature_shape
setcycle 13 set_size 5
setcycle 13 target_present absent
setcycle 14 condition feature_color
setcycle 14 set_size 5
setcycle 14 target_present absent
setcycle 15 condition conjunction
setcycle 15 set_size 15
setcycle 15 target_present absent
setcycle 16 condition feature_shape
setcycle 16 set_size 15
setcycle 16 target_present absent
setcycle 17 condition feature_color
setcycle 17 set_size 15
setcycle 17 target_present absent
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 instructions always
run reset_feedback always
run block_loop always
run feedback always
define inline_script correct_response_script
set description "Executes Python code"
set _run ""
___prepare__
if var.target_present == 'present':
var.correct_response = 'right'
elif var.target_present == 'absent':
var.correct_response = 'left'
else:
raise Exception('target_present should be absent or present, not %s' % var.target)
__end__
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 sequence experiment
set flush_keyboard yes
set description "The main sequence of the experiment"
run experimental_loop always
run end_of_experiment always
define loop experimental_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 experimental blocks"
set cycles 4
set continuous no
set column_order practice
set break_if_on_first yes
set break_if never
setcycle 0 target_shape square
setcycle 0 target_color yellow
setcycle 1 target_shape circle
setcycle 1 target_color yellow
setcycle 2 target_shape square
setcycle 2 target_color blue
setcycle 3 target_shape circle
setcycle 3 target_color blue
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="Your average response time was [avg_rt]ms
Your accuracy was [acc]%
Press any key to continue" x=0 y=0 z_index=0
define sketchpad fixation_dot
set start_response_interval no
set duration 500
set description "Displays stimuli"
draw fixdot color=white show_if=always style=default x=0 y=0 z_index=0
define sketchpad green_dot
set duration 500
set description "Displays stimuli"
draw fixdot color=green show_if=always style=default 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="INSTRUCTIONS
Search for the [target_color] [target_shape]" x=-32 y=-160 z_index=0
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 the right-arrow key if you find it
Press the left-arrow key if you don't
Press any key to begin" x=0 y=160 z_index=0
draw rect color="[target_color]" fill=1 h=120 penwidth=1 show_if="[target_shape] = square" w=120 x=-64.0 y=-64.0 z_index=0
draw circle color="[target_color]" fill=1 penwidth=1 r=60 show_if="[target_shape] = circle" x=0.0 y=0.0 z_index=0
define keyboard_response keyboard_response
set timeout infinite
set flush yes
set event_type keypress
set duration keypress
set description "Collects keyboard responses"
define logger logger
set description "Logs experimental data"
set auto_log yes
define sketchpad red_dot
set duration 500
set description "Displays stimuli"
draw fixdot color=red show_if=always style=default x=0 y=0 z_index=0
define reset_feedback reset_feedback
set description "Resets the feedback variables, such as 'avg_rt' and 'acc'"
define inline_script search_display_script
set description "Executes Python code"
set _run "c.show()"
___prepare__
import random
def draw_shape(c, x, y, color, shape):
"""
Draws a single shape.
Arguments:
c: A Canvas.
x: An x coordinate.
y: A y coordinate.
color: A color (yellow or blue)
shape: A shape (square or circle)
"""
if shape == 'square':
c += Rect(x=x-25, y=y-25, w=50, h=50, color=color, fill=True)
elif shape == 'circle':
c += Circle(x=x, y=y, r=25, color=color, fill=True)
else:
raise Exception('Invalid shape: %s' % shape)
if color not in ['yellow', 'blue']:
raise Exception('Invalid color: %s' % color)
def draw_feature_color_distractor(c, x, y):
"""
Draws a single distractor in the feature-color condition: an object that
has a different color from the target, but can have any shape.
Arguments:
c: A Canvas.
x: An x coordinate.
y: A y coordinate.
"""
shapes = ['circle', 'square']
shape = random.choice(shapes)
if var.target_color == 'yellow':
color = 'blue'
elif var.target_color == 'blue':
color = 'yellow'
else:
raise Exception('Invalid target_color: %s' % var.target_color)
draw_shape(c, x, y, color=color, shape=shape)
def draw_feature_shape_distractor(c, x, y):
"""
Draws a single distractor in the feature-shape condition: an object that
has a different shape from the target, but can have any color.
Arguments:
c: A Canvas.
x: An x coordinate.
y: A y coordinate.
"""
colors = ['yellow', 'blue']
color = random.choice(colors)
if var.target_shape == 'circle':
shape = 'square'
elif var.target_shape == 'square':
shape = 'circle'
else:
raise Exception('Invalid target_shape: %s' % var.target_shape)
draw_shape(c, x, y, color=color, shape=shape)
def draw_conjunction_distractor(c, x, y):
"""
Draws a single distractor in the conjunction condition: an object that
can have any shape and color, but cannot be identical to the target.
arguments:
c: A Canvas.
x: An x coordinate.
y: A y coordinate.
"""
conjunctions = [
('yellow', 'circle'),
('blue', 'circle'),
('yellow', 'square'),
('blue', 'square'),
]
conjunctions.remove( (var.target_color, var.target_shape) )
color, shape = random.choice(conjunctions)
draw_shape(c, x, y, color=color, shape=shape)
def draw_distractor(c, x, y):
"""
Draws a single distractor.
Arguments:
c: A Canvas.
x: An x coordinate.
y: A y coordinate.
"""
if var.condition == 'conjunction':
draw_conjunction_distractor(c, x, y)
elif var.condition == 'feature_shape':
draw_feature_shape_distractor(c, x, y)
elif var.condition == 'feature_color':
draw_feature_color_distractor(c, x, y)
else:
raise Exception('Invalid condition: %s' % var.condition)
def draw_target(c, x, y):
"""
Draws the target.
arguments:
c: A Canvas.
x: An x coordinate.
y: A y coordinate.
"""
draw_shape(c, x, y, color=var.target_color, shape=var.target_shape)
def draw_canvas():
"""
Draws the search canvas.
Returns:
A Canvas.
"""
c = Canvas()
xy_list = xy_random(n=var.set_size, width=500, height=500, min_dist=75)
if var.target_present == 'present':
x, y = xy_list.pop()
draw_target(c, x, y)
elif var.target_present != 'absent':
raise Exception(
'Invalid value for target_present %s' % var.target_present)
for x, y in xy_list:
draw_distractor(c, x, y)
return c
c = draw_canvas()
__end__
define sequence trial_sequence
set flush_keyboard yes
set description "A single trial"
run correct_response_script always
run fixation_dot always
run search_display_script always
run keyboard_response always
run green_dot "[correct] = 1"
run red_dot "[correct] = 0"
run logger always