# Random selection of stimuli without repeating in different blocks

OS (e.g. Win10): Win 10
PsychoPy version (e.g. 1.84.x): 1.85.2
Standard Standalone? (y/n) y

I have a list of 96 prime-target pairs for lexical decision. Presenting these in a random order is no problem at all, but the poor participants are bombarded with these things and I don’t want them to get fatigued. Hence I would like to present 3 x 32 prime-target pairs separated by breaks.

I can get PsychoPy to present 3 x 32 trials with breaks in between BUT there is a distinct possibility that the same prime-target pair may be presented in more than one block, with the result that some trials appear more than once while others do not appear at all. In essence what I want to achieve is the following:

Block 1: randomly select any 32 from 96 trials and present them. After the 32nd trial, give the participant a break
Block 2: randomly select any 32 from the 64 trials that haven’t been used so far and present them. Then give the participant another break
Block 3: present the remaining 32 trials in a random order. End.

I am new to PsychoPy (though for the most part I have found it very accessible and intuitive, so thank you!) and I am not familiar with coding in Python either. I apologise if this is a really simple fix and I’m just being silly.

David

Hi David,

Welcome along…

Well, below is a quick code snippet to show you how a tiny bit of Python can go a long way…

You don’t need to break your trials into blocks. The easiest arrangement to have here is a single loop surrounding your trial routine so that it will run all 96 trials in random order. What you can then have is a pause routine that interrupts that single loop, but only on trials 32 and 64.

i.e. insert a new routine. Just put a text stimulus on it saying something like “Take a break. Then press any key to continue.” Set it to last indefinitely (i.e. don’t give it a duration). Insert a keyboard component too, also set to last indefinitely and to force the end of the routine. The trick is to use a tiny bit of code that will only let this routine appear on the two specified trials. So insert a code component. In its `Begin routine` tab, put something like the code below. I’m assuming your loop is called `trials`. If it is called something else, use that name instead. Also, remember that Python is zero-based, so we will insert the pause after trials 31 and 63:

``````# Conditionally execute this pause routine:
if not trials.thisN in [31, 63]: # on most trials:
continueRoutine = False # don't even start this routine``````
1 Like

Hello.
This solution works fine for me in Psychopy on my local computer, but when I try it out on Pavlovia it doesn’t work – the text stimulus I show participants to indicate the rest break shows up between every trial, not just at the specified break/pause points. Any suggestions on how to correct this?

Thanks,

Anthony

The suggested code is in Python. Python doesn’t run in a browser, so to use your experiment online, you need to provide a JavaScript version. In your code component, select the “Auto -> JS” option, which will try to automatically translate the Python to JavaScript.

You might still need to manually tweak it further, if the auto-translation doesn’t get it right.