By Lizzy - 2/28/2016
I'm trying to program a task where on each trial, two stimuli are presented, drawn from two of four possible lists (32 male angry faces, 32 male happy,32 female angry, 32 female happy). I need to ensure that across 64 trials, each item in each list is presented exactly once, and that all 16 combination pairs (FH left - FH right, FH left - FA right, FH left - MA right, FH left - MH right, FA left - FH right, FA left - FA right, FA left - MA right, FA left - MH right, ....) are each presented 4 times.
I'm creating 16 different trials for these 16 combination pairs, and within these trials, want to choose the lists that I draw from to select the pictures. The problem occurs when I try to set the item in my picture element. I want to overwrite whatever is in there with a new list item that I draw from the appropriate list on each trial, but that doesn't seem to be working.
Here's the relevant script: <list VSListFH> / items = ("HF1.bmp", "HF2.bmp", "HF3.bmp", "HF4.bmp", "HF5.bmp", "HF6.bmp", "HF7.bmp", "HF8.bmp", "HF9.bmp", "HF10.bmp", "HF11.bmp", "HF12.bmp", "HF13.bmp", "HF14.bmp", "HF15.bmp", "HF16.bmp", "HF17.bmp", "HF18.bmp", "HF19.bmp", "HF20.bmp", "HF21.bmp", "HF22.bmp", "HF23.bmp", "HF24.bmp", "HF25.bmp", "HF26.bmp", "HF27.bmp", "HF28.bmp", "HF29.bmp", "HF30.bmp", "HF31.bmp", "HF32.bmp") / replace = false / selectionrate = always </list>
<list VSListFA> / items = ("AF1.bmp", "AF2.bmp", "AF3.bmp", "AF4.bmp", "AF5.bmp", "AF6.bmp", "AF7.bmp", "AF8.bmp", "AF9.bmp", "AF10.bmp", "AF11.bmp", "AF12.bmp", "AF13.bmp", "AF14.bmp", "AF15.bmp", "AF16.bmp", "AF17.bmp", "AF18.bmp", "AF19.bmp", "AF20.bmp", "AF21.bmp", "AF22.bmp", "AF23.bmp", "AF24.bmp", "AF25.bmp", "AF26.bmp", "AF27.bmp", "AF28.bmp", "AF29.bmp", "AF30.bmp", "AF31.bmp", "AF32.bmp") / replace = false / selectionrate = always </list>
<list VSListMH> / items = ("HM1.bmp", "HM2.bmp", "HM3.bmp", "HM4.bmp", "HM5.bmp", "HM6.bmp", "HM7.bmp", "HM8.bmp", "HM9.bmp", "HM10.bmp", "HM11.bmp", "HM12.bmp", "HM13.bmp", "HM14.bmp", "HM15.bmp", "HM16.bmp", "HM17.bmp", "HM18.bmp", "HM19.bmp", "HM20.bmp", "HM21.bmp", "HM22.bmp", "HM23.bmp", "HM24.bmp", "HM25.bmp", "HM26.bmp", "HM27.bmp", "HM28.bmp", "HM29.bmp", "HM30.bmp", "HM31.bmp", "HM32.bmp") / replace = false / selectionrate = always </list>
<list VSListMA> / items = ("AM1.bmp", "AM2.bmp", "AM3.bmp", "AM4.bmp", "AM5.bmp", "AM6.bmp", "AM7.bmp", "AM8.bmp", "AM9.bmp", "AM10.bmp", "AM11.bmp", "AM12.bmp", "AM13.bmp", "AM14.bmp", "AM15.bmp", "AM16.bmp", "AM17.bmp", "AM18.bmp", "AM19.bmp", "AM20.bmp", "AM21.bmp", "AM22.bmp", "AM23.bmp", "AM24.bmp", "AM25.bmp", "AM26.bmp", "AM27.bmp", "AM28.bmp", "AM29.bmp", "AM30.bmp", "AM31.bmp", "AM32.bmp") / replace = false / selectionrate = always </list>
<picture VSPicLeft> /position = (40%,50%) /items = ("Template.bmp") </picture>
<picture VSPicRight> /position = (60%,50%) /items = ("Template.bmp") </picture>
<trial VS_FHFA> /ontrialbegin = [picture.VSPicLeft.setitem(list.VSListFH.nextvalue, 1)] /ontrialbegin = [picture.VSPicRight.setitem(list.VSListFA.nextvalue, 1)] /stimulustimes = [1 = Fix; 500 = VSPicleft, VSPicRight] /inputdevice = keyboard /validresponse = ("m","x") /correctresponse = ("x") /errormessage = true(Incorrect, 1000) </trial>
<trial VS_FHMA> /ontrialbegin = [picture.VSPicLeft.setitem(list.VSListFH.nextvalue, 1)] /ontrialbegin = [picture.VSPicRight.setitem(list.VSListMA.nextvalue, 1)] /stimulustimes = [1 = Fix; 500 = VSPicleft, VSPicRight] /inputdevice = keyboard /validresponse = ("m","x") /correctresponse = ("x") /errormessage = true(Incorrect, 1000) </trial>
(and a bunch more trials)
From the debug Window I can see there is a list item selected in 'nextvalue', but it is not being set to the picture. When I try to run the script I get the error: "picture.VSPicLeft: Unable to initialize <picture VSPicLeft> item number 1. Verify the item exists and is correctly defined."
Any idea where I'm going wrong?
|
By Dave - 2/28/2016
I cannot tell you where exactly you are going wrong without the actual image files. However, this is not a good way to go about this anyway for performance reasons alone. You should instead set up an <item> element that contains all images
<item allpics> / 1 = "HF1.bmp" ... / 33 = "AF1.bmp" ... / 65 = "HM1.bmp" ... / 97 = "AM1.bmp" ... </item>
reference that <item> element in your <picture> elements
<picture VSPicLeft> /position = (40%,50%) /items = allitems / select = values.leftpic </picture>
<picture VSPicRight> /position = (60%,50%) / items = allitems /select= values.rightpic </picture>
with
<values> / leftpic = 1 / rightpic = 1 ... </values>
and then merely draw the proper *item numbers* from your various <list>s and store them in the above <values>:
* FH item numbers are 1 to 32* <list VSListFH> / items = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) ... </list>
*FA item numbers are 33 to 64* <list VSListFA> / items = (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64) ... </list> ...
with
<trial VS_FHFA> /ontrialbegin = [values.leftpic = list.VSListFH.nextvalue ] /ontrialbegin = [values.rightpic = list.VSListFA.nextvalue ] /stimulustimes = [1 = Fix; 500 = VSPicleft, VSPicRight] /inputdevice = keyboard /validresponse = ("m","x") /correctresponse = ("x") /errormessage = true(Incorrect, 1000) </trial>
|
By Lizzy - 2/29/2016
Thanks Dave for that solution. Works like a charm!
|
|