psychopy.org | Reference | Downloads | Github

Neuropsychological Experiment Paradigm

What are you trying to achieve?:

We’re trying to test healthy controls and patients with neuropsychological impairments with a new experimental paradigm focusing on fractals. We have a set of 24 fractals (our target visual stimuli, t1, t2, t3, etc up to t24) which need to be encoded by our participants and then recognized within an image which includes our target (T1) and 3 distractors (D1, D2, D3). So image1 has t1, d1, d2, d3 and every image is like this. Imagine we present them 3 targets (t1, t2, t3) and then ask them to recognize them in the images with the distractors (image1 with t1, d1, d2, d3, image 2 with t2, d1, d2, d3 (different distractors obviously, image3). However, we want our participants to be able - inside the study phase - to recognize every single fractal in every single recognition test so we can’t move forward until they don’t get everything right and recognize all the fractals. This way we know they all learned the stimuli at a learning to criterion level of 100% (some of them with more trails, some with less) and we can move to the test phase. Nevertheless, we’re not talking about easy stimuli and participants with normal perceptual and mnemonic abilities, so it can be that after being presented targets 1, 2 and 3, when presented image 1, image 2 and image 3 they could possibly not recognize one of the targets - let’s say t1 -, so we thought we could instruct PsychoPy on presenting then another image1 with t1, d1, d2, d3 but in a random order - let’s say d1, d3, t1, d2 - to try to recognize t1 again. Would it be possible to tell PsychoPy to move on if they got t1 right and, most of all, to present image1 again but with a random order of t1 and distractors if they get it wrong? This random generation of images will continue if they get targets wrong and stop when they make it right.

Thank you in advance!

You need to enclose your trial routine in a second loop, which is enclosed within the outer loop that controls your trial conditions. The outer loop is connected to the conditions file, the inner loop is not. Just give the inner loop some very high number of repetitions (like 99). This means that the trial will be able to be repeated as many times as necessary.

Insert a code component on the routine. You’ll need to put some code in its “end routine” tab so that the loop can be terminated if the response was correct. Otherwise, the trial will just keep repeating. e.g. say you have a keyboard component which you’ve set up to decide whether the response is correct. Then you could just use this code:

if your_keyboard_component_name.corr:
    you_inner_loop_name.finished = True