Is it possible to keep repeating blocks based on subject's responses?


Author
Message
psychbrain
psychbrain
New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)New Member (8 reputation)
Group: Forum Members
Posts: 1, Visits: 4
I am trying to program a study in which subjects choose among three tasks of varying levels of difficulty to perform. They perform this task, and then they choose again. This cycle would continue for 90 minutes. I have tried using the monkey to run the program, and while I have been able to branch to the different tasks, I have not found a way to get the program to keep running until the allotted time runs out. The highest number of blocks the monkey has done is 3.

1) Is the placement of the timeout element in the below syntax adequate for my task?
2) Is it possible for me to have a separate block that would allow the cycle discussed above? If not, is there a way I could achieve what I'm going for?

Thanks for any answers.

<parameters>
/completetaskduration = 5400000
</parameters>

<trial taskselect>
/ stimulusframes = [1 = intro_paid]
/ validresponse = (parameters.responsekey_1back, parameters.responsekey_2back, parameters.responsekey_3back)
/ recorddata = true
</trial>

<block TaskSelect>
/trials = [1 = taskselect]
/ recorddata = true
/ branch = [if (trial.taskselect.response == parameters.responsekey_1back) {block.1back}]
/ branch = [if (trial.taskselect.response == parameters.responsekey_2back) {block.2back}]
/ branch = [if (trial.taskselect.response == parameters.responsekey_3back) {block.3back}]

/ screencolor = black
</block>

<block 1back>
/ preinstructions = (page.getready)
/ onblockbegin = [
    values.N = 1;
    values.currenttarget = 0;
    list.items.reset();
    values.lastIndex = 1;
    expressions.fillitemlist;    
    values.Hits = 0;
    values.FalseA = 0;
    values.Misses = 0;
    values.CorrReject = 0;
    values.TotalBlocks += 1;
    values.starttrialcounter = 0;
    values.questionscounter = 0;
]
/ trials = [1 = startpreincentive;
2 - 37 = noreplace(
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive);
38 = trial.taskselect;
]
/ screencolor  = (0, 0, 0)
/ timeout = parameters.completetaskduration
/ branch = [block.TaskSelect]
</block>

<block 2back>
/ preinstructions = (page.getready)
/ onblockbegin = [
    values.N = 2;
    values.currenttarget = 0;
    list.items.reset();
    values.lastIndex = 1;
    expressions.fillitemlist;    
    values.Hits = 0;
    values.FalseA = 0;
    values.Misses = 0;
    values.CorrReject = 0;
    values.TotalBlocks += 1;
    values.starttrialcounter = 0;
    values.questionscounter = 0;
]
/ trials = [1 = startpreincentive;
2 - 37 = noreplace(
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive);
38 = trial.taskselect;
]
/ screencolor  = (0, 0, 0)
/ timeout = parameters.completetaskduration
/ branch = [block.TaskSelect]
</block>

<block 3back>
/ preinstructions = (page.getready)
/ onblockbegin = [
    values.N = 3;
    values.currenttarget = 0;
    list.items.reset();
    values.lastIndex = 1;
    expressions.fillitemlist;    
    values.Hits = 0;
    values.FalseA = 0;
    values.Misses = 0;
    values.CorrReject = 0;
    values.TotalBlocks += 1;
    values.starttrialcounter = 0;
    values.questionscounter = 0;
]
/ trials = [1 = startpreincentive;
2 - 37 = noreplace(
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive);
38 = trial.taskselect;
]
/ screencolor  = (0, 0, 0)
/ timeout = parameters.completetaskduration
/ branch = [block.TaskSelect]
</block>

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 104K
psychbrain - 1/14/2020
I am trying to program a study in which subjects choose among three tasks of varying levels of difficulty to perform. They perform this task, and then they choose again. This cycle would continue for 90 minutes. I have tried using the monkey to run the program, and while I have been able to branch to the different tasks, I have not found a way to get the program to keep running until the allotted time runs out. The highest number of blocks the monkey has done is 3.

1) Is the placement of the timeout element in the below syntax adequate for my task?
2) Is it possible for me to have a separate block that would allow the cycle discussed above? If not, is there a way I could achieve what I'm going for?

Thanks for any answers.

<parameters>
/completetaskduration = 5400000
</parameters>

<trial taskselect>
/ stimulusframes = [1 = intro_paid]
/ validresponse = (parameters.responsekey_1back, parameters.responsekey_2back, parameters.responsekey_3back)
/ recorddata = true
</trial>

<block TaskSelect>
/trials = [1 = taskselect]
/ recorddata = true
/ branch = [if (trial.taskselect.response == parameters.responsekey_1back) {block.1back}]
/ branch = [if (trial.taskselect.response == parameters.responsekey_2back) {block.2back}]
/ branch = [if (trial.taskselect.response == parameters.responsekey_3back) {block.3back}]

/ screencolor = black
</block>

<block 1back>
/ preinstructions = (page.getready)
/ onblockbegin = [
    values.N = 1;
    values.currenttarget = 0;
    list.items.reset();
    values.lastIndex = 1;
    expressions.fillitemlist;    
    values.Hits = 0;
    values.FalseA = 0;
    values.Misses = 0;
    values.CorrReject = 0;
    values.TotalBlocks += 1;
    values.starttrialcounter = 0;
    values.questionscounter = 0;
]
/ trials = [1 = startpreincentive;
2 - 37 = noreplace(
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive);
38 = trial.taskselect;
]
/ screencolor  = (0, 0, 0)
/ timeout = parameters.completetaskduration
/ branch = [block.TaskSelect]
</block>

<block 2back>
/ preinstructions = (page.getready)
/ onblockbegin = [
    values.N = 2;
    values.currenttarget = 0;
    list.items.reset();
    values.lastIndex = 1;
    expressions.fillitemlist;    
    values.Hits = 0;
    values.FalseA = 0;
    values.Misses = 0;
    values.CorrReject = 0;
    values.TotalBlocks += 1;
    values.starttrialcounter = 0;
    values.questionscounter = 0;
]
/ trials = [1 = startpreincentive;
2 - 37 = noreplace(
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive);
38 = trial.taskselect;
]
/ screencolor  = (0, 0, 0)
/ timeout = parameters.completetaskduration
/ branch = [block.TaskSelect]
</block>

<block 3back>
/ preinstructions = (page.getready)
/ onblockbegin = [
    values.N = 3;
    values.currenttarget = 0;
    list.items.reset();
    values.lastIndex = 1;
    expressions.fillitemlist;    
    values.Hits = 0;
    values.FalseA = 0;
    values.Misses = 0;
    values.CorrReject = 0;
    values.TotalBlocks += 1;
    values.starttrialcounter = 0;
    values.questionscounter = 0;
]
/ trials = [1 = startpreincentive;
2 - 37 = noreplace(
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, nontargetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive
nontargetpreincentive, nontargetpreincentive, targetpreincentive, targetpreincentive);
38 = trial.taskselect;
]
/ screencolor  = (0, 0, 0)
/ timeout = parameters.completetaskduration
/ branch = [block.TaskSelect]
</block>

> 1) Is the placement of the timeout element in the below syntax adequate for my task?

No. You've placed the /timeout in the <block> elements, meaning each individual *block* would have a maximum allowed duration of 90 minutes, not the overall task across all blocks.

You'll want to remove the /timeout from the <block> elements and instead do something at the <expt> level along the following lines

<expt>
/ stop = [script.elapsedtime >= parameters.completetaskduration]
...
</expt>

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search