Millisecond Forums

Trial sequencing

https://forums.millisecond.com/Topic12215.aspx

By NatalieM - 1/27/2014

Hello,

I have several clusters of trials that each share the same facial stimuli within each cluster. I would like to present my trials randomly in a block that includes all trials from all clusters with the constraint that no two trials from the same cluster are presented one after the other. Any suggestions on how I can accomplish this?

Thanks,
Natalie
By Dave - 1/27/2014

Either use noreplacenorepeat in the <block> element's /trials attribute

/ trials = [1-100 = noreplacenorepeat(cluster1trial, cluster2trial, cluster3trial, ...)]

and/or do trial selection via <list> elements if you require something more complex.
By NatalieM - 1/28/2014

Thanks for the info Dave. Would you please elaborate on how I can use the list function? 

Each cluster has 8 trials: 

<block A>
/trials = [1-24 = noreplacenorepeat(neutral1targetleft, hostile1targetleft, neutral1targetright, hostile1targetright, neutral1onlytargetright
neutral1onlytargetleft, neutral1onlytargetleft, neutral1onlytargetright

neutral2targetleft, hostile2targetleft, neutral2targetright, hostile2targetright, neutral2onlytargetright
neutral2onlytargetleft, neutral2onlytargetleft, neutral2onlytargetright, 

neutral3targetleft, hostile3targetleft, neutral3targetright, hostile3targetright, neutral3onlytargetright
neutral3onlytargetleft, neutral3onlytargetleft, neutral3onlytargetright,
.......

neutral19targetleft, hostile19targetleft, neutral19targetright, hostile19targetright, neutral19onlytargetright
neutral19onlytargetleft, neutral19onlytargetleft, neutral19onlytargetright,)]
</block>

I would like random selection of trials but in a sequence so that trials from the same cluster never run consecutively (e.g., neutral2targetleft does not follow or precede other trials from cluster 2).

Thanks for your help, much appreciated!

By Dave - 1/28/2014

Here's a simple, scaled-down example w/ 4 clusters of 4 trials each (16 trials total) -- trials within a cluster are selected randomly, no two trials from the same cluster are run consecutively:

<block myblock>
/ trials = [1-16 = list.masterlist]
</block>

<list masterlist>
/ items = [list.cluster1trials.nextvalue; list.cluster2trials.nextvalue; list.cluster3trials.nextvalue; list.cluster4trials.nextvalue;]
/ selectionmode = noreplacenorepeat(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
</list>

<list cluster1trials>
/ items = (trial.cluster1a, trial.cluster1b, trial.cluster1c, trial.cluster1d)
</list>

<list cluster2trials>
/ items = (trial.cluster2a, trial.cluster2b, trial.cluster2c, trial.cluster2d)
</list>

<list cluster3trials>
/ items = (trial.cluster3a, trial.cluster3b, trial.cluster3c, trial.cluster3d)
</list>

<list cluster4trials>
/ items = (trial.cluster4a, trial.cluster4b, trial.cluster4c, trial.cluster4d)
</list>

<trial cluster1a>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster1b>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster1c>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster1d>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster2a>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster2b>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster2c>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster2d>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster3a>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster3b>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster3c>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster3d>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster4a>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster4b>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster4c>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<trial cluster4d>
/ stimulusframes = [1=mytext]
/ trialduration = 500
</trial>

<text mytext>
/ items = ("<%script.currenttrial%>")
</text>

By parsonss - 3/2/2015

Hey Dave,

I am trying to adapt a dot-probe along the same lines as above. I tried your method posted here, but an error appears saying that "the /trials command selected an element that was not a type of trial"
I can only assume that it does not like the list being there, but I cant really see much of a difference between what I've done and what you posted. Any guidance?
I've put the main sections below

<block PosNeu>
/preinstructions = (blockbegin)
/trials = [1-8 = noreplace(Practice_LeftCongruentV, Practice_LeftCongruentH, Practice_LeftIncongruentV, Practice_LeftIncongruentH, Practice_RightCongruentV, Practice_RightCongruentH, Practice_RightIncongruentV, Practice_RightIncongruentH);
9-94 = list.posneuList]
/postinstructions = (blockbreak)
</block>

<list PosNeuList>
/items = [trial.numbers,
trial.PosNeuMod_LeftCongruentV,
trial.PosNeuMod_LeftCongruentH,
trial.PosNeuMod_LeftIncongruentV,
trial.PosNeuMod_LeftIncongruentH,
trial.PosNeuMod_RightCongruentV,
trial.PosNeuMod_RightCongruentH,
trial.PosNeuMod_RightIncongruentV,
trial.PosNeuMod_RightIncongruentH]

/selectionmode = noreplacenorepeat(
1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4,4,
5,5,5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,
9,9,9,9,9,9,9,9,9,9)

/maxrunsize = 2
</list>

There's also  the trials themselves, but they may take up too much room

Any advice appreciated.

Sam