Hello Dave!
According to a value (PSE number), which will be defined in the beginning of each experiment, I want to present only 6 out of 100 images, creating a unique set of 6 trials for each participant. The steps should be -15, -9, -3, +3, +9, and +15 from the PSE number. For example, if PSE is number 50, then the stimuli (pictures) presented to this participant will be Disgust_Fear_35/41/47/53/59/65.
Each picture Disgust_Fear_xx has two items (“a_Disgust_Fear_xx.bmp”, “b_Disgust_Fear_xx.bmp”). When picture Disgust_Fear_xx is presented as stimulus on a trial, the choice between a_Disgust_Fear_xx.bmp and b_Disgust_Fear_xx.bmp should be random.
I have tried to put all the picture elements in a list and select based on index, similar to what is proposed here
https://www.millisecond.com/forums/Topic13785.aspxThese are the relevant code parts:
…
<values>
/ primerPSE = 50
/ selectedImageNumber = 0
</values>
…
<picture Disgust_Fear_1>
/ items = ("28_Disgust_Fear_1.BMP","33_Disgust_Fear_1.BMP")
/ size = (100%,100%)
/ position = (50,50)
/ select = noreplace
</picture>
…
<picture Disgust_Fear_99>
/ items = ("28_Disgust_Fear_99.BMP","33_Disgust_Fear_99.BMP")
/ size = (100%,100%)
/ position = (50,50)
/ select = noreplace
</picture>
<list allPictures>
/items = ( picture.Disgust_Fear_1, picture.Disgust_Fear_2, picture.Disgust_Fear_3,… picture.Disgust_Fear_98, picture.Disgust_Fear_99)
</list>
<picture pic>
/ items = allPictures **
/ select = values.selectedImageNumber
</picture>
<trial minus15>
/ ontrialbegin = [
trial.minus15.resetstimulusframes();
values.selectedImageNumber = values.primerPSE - 15;
]
/ stimulustimes = [0 = Fixation; 1800 = pic; 2050 = Square; 2050 = Answer;]
/ pretrialpause = noreplace(750,1050,1350,1650,1950,2250,2550,2850)
/ beginresponsetime = 1800
/ response = timeout(2750)
/ validresponse = ("a", "l")
/ responseinterrupt = immediate
</trial>
The problem (denoted with ** above) is that I can’t put a list, or a picture element, as item of the picture pic.
I also tried to replace the list with an item element which will include the picture elements as items:
<item allPictures>
/ 1 = picture.Disgust_Fear_1
…
/ 99 = picture.Disgust_Fear_99
</item>
But I understand that this is also invalid syntax.
My very first approach was
/ stimulustimes = [0 = Fixation; 1800 = list.allPictures.item(values.selectedImageNumber); 2050 = Square; 2050 = Answer;],
but again, stimulustimes attribute does not work like that.
Another idea based on this topic
https://www.millisecond.com/forums/Topic18863.aspx , is to create an item element with 200 items and then two lists of 100 like this:
<item allPictures>
/ 1 = "28_Disgust_Fear_1.BMP"
...
/ 99 = "28_Disgust_Fear_99.BMP"
/ 100 = "33_Disgust_Fear_1.BMP"
...
/ 198 = "33_Disgust_Fear_99.BMP"
</item>
<list PicSelectorallPictures_1>
/ items = (1,2,...,98,99)
/ select = values.selectedImageNumber
</list>
<list PicSelectorPictures_2>
/ items = (100,101,...197,198)
/ select = values.selectedImageNumber
</list>
<picture pic>
/ items = allPictures
/ select = noreplace(list.PicSelectorallPictures_1.item(values.selectedImageNumber),
list.PicSelectorPictures_2.item(values.selectedImageNumber))
</picture>
<trial minus15>
/ ontrialbegin = [trial.minus15.resetstimulusframes();
values.selectedImageNumber = values.primerPSE - 15;]
/ stimulustimes = [0 = Fixation; 1800 = pic; 2050 = Square; 2050 = Answer;]
/ pretrialpause = noreplace(750,1050,1350,1650,1950,2250,2550,2850)
/ beginresponsetime = 1800
/ response = timeout(2750)
/ validresponse = ("a", "l")
/ responseinterrupt = immediate
</trial>
but again, while the script is working, I don't have the picture I want.
Any other suggestions?
Thanks in advance for your help