Millisecond Forums

Organising branches within branches

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

By a.finlay - 6/7/2022

I am creating an experiment requiring the following layout:

Where trial 1 will lead to one of the trials 2-5 depending on the participant’s choice
And trial 2 will lead to one of the survey pages 1-8 depending on the participant’s choice and so on.
I have used branches at the trial level, for example trial 1…

<trial choice>
/ stimulusframes = [5=frontpage, logo, coffee, hotchoc, tea, iced]
/ inputdevice = mouse
/ validresponse = (coffee, hotchoc, tea, iced)
/ branch = [
    if (trial.choice.response==picture.coffee) trial.choicecoffee]
/ branch = [
    if (trial.choice.response==picture.hotchoc) trial.choice.hotchoc]
/ branch = [
    if (trial.choice.response==picture.tea) trial.choice.tea]
/ branch = [
    if (trial.choice.response==picture.iced) trial.choiceiced]
</trial>

… and put all of these trials into a block. When I do this, all trials run in the order they are presented rather than following the specified branches.
I have tried putting all trials in separate blocks and using branches at a block level but that still hasn’t worked.

Any help would be much appreciated!
Thanks 😊

By Dave - 6/7/2022

a.finlay - 6/7/2022
I am creating an experiment requiring the following layout:

Where trial 1 will lead to one of the trials 2-5 depending on the participant’s choice
And trial 2 will lead to one of the survey pages 1-8 depending on the participant’s choice and so on.
I have used branches at the trial level, for example trial 1…

<trial choice>
/ stimulusframes = [5=frontpage, logo, coffee, hotchoc, tea, iced]
/ inputdevice = mouse
/ validresponse = (coffee, hotchoc, tea, iced)
/ branch = [
    if (trial.choice.response==picture.coffee) trial.choicecoffee]
/ branch = [
    if (trial.choice.response==picture.hotchoc) trial.choice.hotchoc]
/ branch = [
    if (trial.choice.response==picture.tea) trial.choice.tea]
/ branch = [
    if (trial.choice.response==picture.iced) trial.choiceiced]
</trial>

… and put all of these trials into a block. When I do this, all trials run in the order they are presented rather than following the specified branches.
I have tried putting all trials in separate blocks and using branches at a block level but that still hasn’t worked.

Any help would be much appreciated!
Thanks 😊


> and put all of these trials into a block.

Only <trial choice> belongs in the <block>'s /trials. Nothing else.
By Dave - 6/7/2022

Dave - 6/7/2022
a.finlay - 6/7/2022
I am creating an experiment requiring the following layout:

Where trial 1 will lead to one of the trials 2-5 depending on the participant’s choice
And trial 2 will lead to one of the survey pages 1-8 depending on the participant’s choice and so on.
I have used branches at the trial level, for example trial 1…

<trial choice>
/ stimulusframes = [5=frontpage, logo, coffee, hotchoc, tea, iced]
/ inputdevice = mouse
/ validresponse = (coffee, hotchoc, tea, iced)
/ branch = [
    if (trial.choice.response==picture.coffee) trial.choicecoffee]
/ branch = [
    if (trial.choice.response==picture.hotchoc) trial.choice.hotchoc]
/ branch = [
    if (trial.choice.response==picture.tea) trial.choice.tea]
/ branch = [
    if (trial.choice.response==picture.iced) trial.choiceiced]
</trial>

… and put all of these trials into a block. When I do this, all trials run in the order they are presented rather than following the specified branches.
I have tried putting all trials in separate blocks and using branches at a block level but that still hasn’t worked.

Any help would be much appreciated!
Thanks 😊


> and put all of these trials into a block.

Only <trial choice> belongs in the <block>'s /trials. Nothing else.

The basic structure is really simple and goes like this:

<defaults>
/ inputdevice = mouse
</defaults>

<block example>
/ trials = [1=choice] // run the choice trial
</block>

<trial choice>
/ stimulusframes = [1=a, b, c, pickone]
/ validresponse = (a, b, c)
/ branch = [
    // go to follow-up trial based on response to the choice trial
    if (trial.choice.response == "a") {
        return trial.choiceA;
    } else if (trial.choice.response == "b") {
        return trial.choiceB;
    } else if (trial.choice.response == "c") {
        return trial.choiceC;
    };
]
</trial>

<trial choiceA>
/ stimulusframes = [1=a1, a2, wherenext]
/ validresponse = (a1, a2)
/ branch = [
    // go to follow-up surveypage based on response
    if (trial.choiceA.response == "a1") {
        return surveypage.a1page;
    } else if (trial.choiceA.response == "a2") {
        return surveypage.a2page;
    };
]
</trial>

<trial choiceB>
/ stimulusframes = [1=b1, b2, wherenext]
/ validresponse = (b1, b2)
/ branch = [
    // go to follow-up surveypage based on response
    if (trial.choiceB.response == "b1") {
        return surveypage.b1page;
    } else if (trial.choiceB.response == "b2") {
        return surveypage.b2page;
    };
]
</trial>

<trial choiceC>
/ stimulusframes = [1=c1, c2, wherenext]
/ validresponse = (c1, c2)
/ branch = [
    // go to follow-up surveypage based on response
    if (trial.choiceC.response == "c1") {
        return surveypage.c1page;
    } else if (trial.choiceC.response == "c2") {
        return surveypage.c2page;
    };
]
</trial>

<surveypage a1page>
/ caption = "You've reached surveypage A1"
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<surveypage a2page>
/ caption = "You've reached surveypage A2"
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<surveypage b1page>
/ caption = "You've reached surveypage B1"
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<surveypage b2page>
/ caption = "You've reached surveypage B2"
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<surveypage c1page>
/ caption = "You've reached surveypage C1"
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<surveypage C2page>
/ caption = "You've reached surveypage C2"
/ showpagenumbers = false
/ showquestionnumbers = false
</surveypage>

<text a>
/ items = ("A")
/ position = (40%, 50%)
</text>

<text b>
/ items = ("B")
/ position = (50%, 50%)
</text>

<text c>
/ items = ("C")
/ position = (60%, 50%)
</text>

<text a1>
/ items = ("A1")
/ position = (45%, 50%)
</text>

<text a2>
/ items = ("A2")
/ position = (55%, 50%)
</text>

<text b1>
/ items = ("B1")
/ position = (45%, 50%)
</text>

<text b2>
/ items = ("B2")
/ position = (55%, 50%)
</text>

<text c1>
/ items = ("C1")
/ position = (45%, 50%)
</text>

<text c2>
/ items = ("C2")
/ position = (55%, 50%)
</text>

<text pickone>
/ items = ("Pick one:")
/ position = (50%, 20%)
</text>

<text wherenext>
/ items = ("Where to next?")
/ position = (50%, 20%)
</text>