# SSI Mentorship meeting Wednesday 26th April 2023
Coding project - visual experiment. Each trial consists of:
- Indicator, specifying which side of the screen to focus on
- Prompt, which instructs the paricipant to select a specific colour (task 1) or shape (task 2)
- Stimuli - four stimuli are presented, and the participant must select the correct one (the "target").
Options:
- psychtoolbox (Octave/MATLAB)
- lab.js, or similar
- PsychoPy
## Implementation of online randomisation in python.
You could re-arrange/relabel your stimuli so that they can be distinguished from one another, e.g.:
```
stim\
<colour>_<shape>_<number>.png
-- OR use a directory structure --
<colour>\
<shape>\
1.png
2.png
orange\
square\1.png 2.png ...
triangle\1.png 2.png ...
circle\1.png
```
You could then automatically scan your stimulus files to create a labelled stimulus data structure:
```python
stim = {
'orange' : {
'triangle' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
'square' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
'circle' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
},
'yellow' : {
'triangle' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
'square' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
'circle' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
},
'green' : {
'triangle' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
'square' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
'circle' : ['1.png', '2.png', '3.png', '4.png', '5.png'],
},
}
```
Then you could randomly select stimuli as needed:
```python
import random
all_colours = list(stim.keys())
target_colour = random.choice(all_colours)
# list comprehension
non_target_colours = [c for c in all_colours if c != target_colour]
all_shapes = list(stim[target_colour].keys())
target_shape = random.choice(all_shapes)
target_candidates = stim[target_colour][target_shape]
# select the first orange triangle
stimfile = target_candidates[0]
# select a random orange triangle
stimfile = random.choice(target_candidates)
```
A basic experiment could just be to have a single block with e.g. 10 trials, where you just randomly choose a stimulus to present - your stimuli could just be a list:
```python
stim = ['1.png', '2.png', '3.png', '4.png', '5.png']
# run within each trial
current_stim = random.choice(stim)
# OR do this before any trial
trial_order = stim + stim
random.shuffle(trial_order)
for trial_number in range(10):
current_stim = trial_order[i]
```
Tasks (both of us):
- Play around and become more familiar with psychopy!