Millisecond Forums

how to avoid presenting specific two stimuli continuously

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

By Miffy - 8/29/2024

Dear all,

I'm very new in Inquisit. I would like to present eight upright faces and their inverted faces. In the experiment, sixteen trials are presented randomly in one block. I would like to randomize so that upright and inverted faces of the same person are not presented consecutively. I'm wondering if i can use "branch". Could you tell me how to use branch in the "trial" or "block" to avoid presenting specific stimuli continuously.
By Dave - 8/30/2024

Miffy - 8/30/2024
Dear all,

I'm very new in Inquisit. I would like to present eight upright faces and their inverted faces. In the experiment, sixteen trials are presented randomly in one block. I would like to randomize so that upright and inverted faces of the same person are not presented consecutively. I'm wondering if i can use "branch". Could you tell me how to use branch in the "trial" or "block" to avoid presenting specific stimuli continuously.

/branch is not suitable here. You'll want to use <list> elements for item selection with a /maxrunsize constraint.

<values>
/ person = 0
/ inversion = 0
</values>

<block exampleblock>
/ trials = [1-16 = trial.facetrial]
</block>

<trial facetrial>
/ ontrialbegin = [
    trial.facetrial.resetstimulusframes(); // reset stimulus presentation for current trial
    values.person = list.personlist.nextvalue; // select person
    values.inversion = list.inversionlist.nextvalue; // select uninverted or inverted version
    
    if (values.inversion) { // if inversion is selected
        trial.facetrial.insertstimulustime(text.face_inverted, 0); // show the inverted stimulus
    } else { // otherwise
        trial.facetrial.insertstimulustime(text.face_uninverted, 0); // show the uninverted stimulus
    };
]
/ validresponse = (57)
</trial>

<list personlist>
/ items = (1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8)
/ maxrunsize = 1 // don't select same person in a row
</list>

// 0 = no inversion; 1 = inversion
<list inversionlist>
/ items = (0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1)
/ selectionmode = list.personlist.currentindex
</list>

<text face_uninverted>
/ items = item.faces_uninverted
/ select = values.person
/ size = (50%, 50%)
</text>

<text face_inverted>
/ items = item.faces_inverted
/ select = values.person
/ size = (50%, 50%)
</text>

<item faces_uninverted>
/ 1 = "person01.jpg"
/ 2 = "person02.jpg"
/ 3 = "person03.jpg"
/ 4 = "person04.jpg"
/ 5 = "person05.jpg"
/ 6 = "person06.jpg"
/ 7 = "person07.jpg"
/ 8 = "person08.jpg"
</item>

<item faces_inverted>
/ 1 = "inverted_person01.jpg"
/ 2 = "inverted_person02.jpg"
/ 3 = "inverted_person03.jpg"
/ 4 = "inverted_person04.jpg"
/ 5 = "inverted_person05.jpg"
/ 6 = "inverted_person06.jpg"
/ 7 = "inverted_person07.jpg"
/ 8 = "inverted_person08.jpg"
</item>

<data>
/ columns = (
    date time subject group session blocknum blockcode trialnum trialcode response latency correct stimulusitem
    values.person values.inversion)
</data>

By Miffy - 9/1/2024

Dave - 8/30/2024
Miffy - 8/30/2024
Dear all,

I'm very new in Inquisit. I would like to present eight upright faces and their inverted faces. In the experiment, sixteen trials are presented randomly in one block. I would like to randomize so that upright and inverted faces of the same person are not presented consecutively. I'm wondering if i can use "branch". Could you tell me how to use branch in the "trial" or "block" to avoid presenting specific stimuli continuously.

/branch is not suitable here. You'll want to use <list> elements for item selection with a /maxrunsize constraint.

<values>
/ person = 0
/ inversion = 0
</values>

<block exampleblock>
/ trials = [1-16 = trial.facetrial]
</block>

<trial facetrial>
/ ontrialbegin = [
    trial.facetrial.resetstimulusframes(); // reset stimulus presentation for current trial
    values.person = list.personlist.nextvalue; // select person
    values.inversion = list.inversionlist.nextvalue; // select uninverted or inverted version
    
    if (values.inversion) { // if inversion is selected
        trial.facetrial.insertstimulustime(text.face_inverted, 0); // show the inverted stimulus
    } else { // otherwise
        trial.facetrial.insertstimulustime(text.face_uninverted, 0); // show the uninverted stimulus
    };
]
/ validresponse = (57)
</trial>

<list personlist>
/ items = (1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8)
/ maxrunsize = 1 // don't select same person in a row
</list>

// 0 = no inversion; 1 = inversion
<list inversionlist>
/ items = (0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1)
/ selectionmode = list.personlist.currentindex
</list>

<text face_uninverted>
/ items = item.faces_uninverted
/ select = values.person
/ size = (50%, 50%)
</text>

<text face_inverted>
/ items = item.faces_inverted
/ select = values.person
/ size = (50%, 50%)
</text>

<item faces_uninverted>
/ 1 = "person01.jpg"
/ 2 = "person02.jpg"
/ 3 = "person03.jpg"
/ 4 = "person04.jpg"
/ 5 = "person05.jpg"
/ 6 = "person06.jpg"
/ 7 = "person07.jpg"
/ 8 = "person08.jpg"
</item>

<item faces_inverted>
/ 1 = "inverted_person01.jpg"
/ 2 = "inverted_person02.jpg"
/ 3 = "inverted_person03.jpg"
/ 4 = "inverted_person04.jpg"
/ 5 = "inverted_person05.jpg"
/ 6 = "inverted_person06.jpg"
/ 7 = "inverted_person07.jpg"
/ 8 = "inverted_person08.jpg"
</item>

<data>
/ columns = (
    date time subject group session blocknum blockcode trialnum trialcode response latency correct stimulusitem
    values.person values.inversion)
</data>


Thank you so much for your quick and kind response. I try to embed the code in my script