Two types of image stimuli, 9 of each, want experiment to randomly select four of each kind for every trial

I am drawing images from an excel spreadsheet. I have 18 total image stimuli, 9 exponential graphs, and 9 reciprocal graphs. Each trial, the participant will see 8 total graph images. I want the order of exponential and reciprocal stimuli to be random, but I only want four exponential and four reciprocal graphs shown for each subject. How do I implement this? I was thinking a for loop that somehow says that if 4 stimuli in the first 9 rows are chosen move on to the other rows? But I do not know what the code should look like or where in the experiment it should go.

What I would do in this circumstance is ditch the Excel file and start with two arrays, e.g.

exponential=[['graph1.png','e'],['graph2.png','e'],['graph3.png','e'],['graph4.png','e'],['graph5.png','e'],['graph6.png','e'],['graph7.png','e'],['graph8.png','e'],['graph9.png','e']]

reciprocal=[['graph10.png','r'],['graph11.png','r'],['graph12.png','r'],['graph13.png','r'],['graph14.png','r'],['graph15.png','r'],['graph16.png','r'],['graph17.png','r'],['graph18.png','r']]

shuffle(exponential)
shuffle(reciprocal)
graphs=[]
for Idx in range(4):
     graphs.append(exponential[Idx])
     graphs.append(reciprocal[Idx])
shuffle(graphs)

Then have a trials loop with no conditions file and nReps=8 where your image file is graphs[trials.thisN][0] and your answer is graphs[trials.thisN][1]

However, you will also need to save the data by adding the following to your main trial or feedback routine.
thisExp.addData(‘Graph’,graphs[trials.thisN][0])
thisExp.addData(‘Answer’,graphs[trials.thisN][1])

For more conditions (like a word list) I use a pretrials loop to append the data into the array instead of adding the information into the code component itself.

Best wishes,

Wakefield

1 Like

Thanks so much! I understand your code until you say the image file is graphs[trials.thisN][0] and your answer is graphs[trials.thisN][1]. Am I supposed to indicate the answer somewhere? When I put this into the image it says no image has been found at that path. Screen Shot 2020-06-12 at 10.49.04 AM


If you have any further guidance on how to fix this please let me know.

It was also not liking the addData function when I tried it.

Thanks again!

Sorry. One more thing. A problem I am having is that it won’t let me cast a list of images into an array. Is that something that is possible in psychopy?

The array should be the file names.

You need a before graphs in your image component The answer goes in the keyboard component (again with a )

1 Like

Screen Shot 2020-06-12 at 11.45.44 AM Screen Shot 2020-06-12 at 11.45.27 AM

I have the array as the file names. I tried putting ‘a’ and ‘$’ in front of the name in the image component and I keep getting the error that ‘graphs’ is undefined, even though it is defined in the code that I have thanks to you. Is there something else I’m missing?

What does the error message look like when you have a $ in front of graphs?

Screen Shot 2020-06-12 at 1.01.04 PM Screen Shot 2020-06-12 at 1.00.51 PM Screen Shot 2020-06-12 at 1.00.38 PM

This is what the error looks like now. I also included the keyboard response section to make sure I am filling that out correctly.

Thanks again!!!

Did you create a loop called trials around your Routine?

Ok got it!! Can’t thank you enough for this seriously!!!

1 Like