I have three odors that will be presented at the beginning of each of the three blocks of my experiment (one in the beginning of each block). They are marked as serial ports (port.fearodor, port.disgustodor and port.neutralodor) and I need them not to be erased till the end of the block.
I also need to counterbalance the presentation of these three odors between the blocks in all different combinations, so 6 different sequences between the participants.
I thought to assign different group ID (1 to 6) to each participant in the beginning of the experiment and then create 6 different lists with each one of these sequences of the presented odors.
However, I have trouble to make it work properly and I’m not sure this is the right way. This is what I have done so far:
…
<port fearodor>
/ items = ("00000001")
</ port >
<port disgustodor>
/ items = ("00000010")
</ port >
<port neutralodor>
/ items = ("00000100")
</ port >
….
<list odortports1>
/ items = (port.fearodor, port.disgustodor, port.neutralodor)
/ selectionrate = always
</list>
<list odortports 2>
/ items = (port.disgustodor, port.neutralodor, port.fearodor)
/ selectionrate = always
</list>
<list odortports 3>
/ items = (port.neutralodor, port.fearodor, port.disgustodor)
/ selectionrate = always
</list>
<list odortports 4>
/ items = (port.fearodor, port.neutralodor, port.disgustodor)
/ selectionrate = always
</list>
<list odortports5>
/ items = (port.disgustodor, port.fearodor, port.neutralodor)
/ selectionrate = always
</list>
<list odortports6>
/ items = (port.neutralodor,port.disgustodor,port.fearodor)
/ selectionrate = always
</list>
…
<trial odor>
/ ontrialbegin = [
if (mod(script.groupid, 6)==1) trial.odor.insertstimulustime(list.odorports1.nextvalue, 0)
else if (mod(script.groupid, 6)==2) trial.odor.insertstimulustime(list. odorports2.nextvalue, 0)
else if (mod(script.groupid, 6)==3) trial.odor.insertstimulustime(list. odorports3.nextvalue, 0)
else if (mod(script.groupid, 6)==4) trial.odor.insertstimulustime(list. odorports4.nextvalue, 0)
else if (mod(script.groupid, 6)==5) trial.odor.insertstimulustime(list. odorports5.nextvalue, 0)
else if (mod(script.groupid, 6)==6) trial.odor.insertstimulustime(list. odorports6.nextvalue, 0)
]
/ stimulustimes = [0=empty]
/ trialduration = 10 ## the minimum
</trial>
…
<block MorphTask>
/ trials = [1= odor; 2=…]
</block>
…
<expt complete>
/blocks = […; 3-5 = MorphTask; 6 =…]
…
</expt>
Could you please help?