Millisecond Forums

Branching + creating proper blocks

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

By liznik - 11/1/2016

So the idea of the task is when someone chooses the risky selection, they go to the trial that contains an image that rewards them points. However, when I run the task, it doesn't send them there once they have selected the risky or safe option. Additionally, I know that the block needs to include ALL the trials, but rather then running the trials based on their branch conditions, it is just running them all separately.  
I removed the script that I had for the images, since it is done correctly and not an issue. 

****TRIALS******

<values>
/randomnum = "NA"
/cutoff1=10
/cutoff2=50
/cutoff3=90
/cutoff4=100
/score = 0
</values>
for risky choices this means theres a 10% chance of the worst outcome, 40% 2nd worse.... etc


<trial gain10object>
/ stimulusframes = [1=gain10object]
/ ontrialend = [
  values.score = values.score +=10]
/ timeout = 500
</trial>

<trial gain20house>
/ stimulusframes = [1=gain20house]
/ ontrialend = [
  values.score = values.score +=20]
/ timeout = 500
</trial>

<trial lose10animal>
/ stimulusframes = [1=lose10animal]
/ ontrialend = [
  values.score = values.score -=10]
/ timeout = 500
</trial>

<trial lose20place>
/ stimulusframes = [1=lose20place]
/ ontrialend = [
  values.score = values.score -=20]
/ timeout = 50
</trial>

<page pre>
^^TEXT
</page>

<page post>
^^TEXT
</page>

<block test>
/ preinstructions = (page.pre)
/postinstructions = (page.post)
/trials = [
1-10 = replace(choiceriskyleft, choiceriskyright, gain10object, gain20house, lose10animal, lose20place)
</block>



<trial choiceriskyleft>
/ontrialbegin = [values.randomnum = rand(1,100)]
/stimulusframes = [1 = yellowstarriskyleft, redblocksaferight]
/validresponse = ("f", "j")
/branch= [if (values.randomnum <=values.cutoff1 && response=="f") trial.gain10object]
/branch =[if (values.randomnum <=values.cutoff1 && response=="j") trial.gain20house]
/branch =[if (values.randomnum >values.cutoff1 && values.randomnum >=values.cutoff2 && response=="f") trial.gain20house]
/branch =[if (values.randomnum >values.cutoff1 && values.randomnum >=values.cutoff2 && response=="j") trial.gain10object]
/branch =[if (values.randomnum >values.cutoff2 && values.randomnum >=values.cutoff3 && response=="f") trial.lose10animal]
/branch =[if (values.randomnum >values.cutoff2 && values.randomnum >=values.cutoff3 && response=="j") trial.gain20house]
/branch =[if (values.randomnum >values.cutoff3 && values.randomnum >=values.cutoff4 && response=="f") trial.lose20place]
/branch =[if (values.randomnum >values.cutoff3 && values.randomnum >=values.cutoff4 && response=="j") trial.lose10animal]
</trial>


<trial choiceriskyright>
/ontrialbegin = [values.randomnum = rand(1,100)]
/stimulusframes = [1 = yellowstarriskyright, redblocksafeleft]
/validresponse = ("f", "j")
/branch= [if (values.randomnum <=values.cutoff1 && response=="j") trial.gain10object]
/branch =[if (values.randomnum <=values.cutoff1 && response=="f") trial.gain20house]
/branch =[if (values.randomnum >values.cutoff1 && values.randomnum >=values.cutoff2 && response=="j") trial.gain20house]
/branch =[if (values.randomnum >values.cutoff1 && values.randomnum >=values.cutoff2 && response=="f") trial.gain10object]
/branch =[if (values.randomnum >values.cutoff2 && values.randomnum >=values.cutoff3 && response=="j") trial.lose10animal]
/branch =[if (values.randomnum >values.cutoff2 && values.randomnum >=values.cutoff3 && response=="f") trial.gain20house]
/branch =[if (values.randomnum >values.cutoff3 && values.randomnum >=values.cutoff4 && response=="j") trial.lose20place]
/branch =[if (values.randomnum >values.cutoff3 && values.randomnum >=values.cutoff4 && response=="f") trial.lose10animal]
</trial>
By Dave - 11/1/2016

#1: If you want to determine which gain or loss trial to run contingent on a subject's choice in the choice trials, it makes no sense to include gain and loss trials in the <block>'s /trials attribute. You cannot know that you want to run them. You will want to exclusively invoke them via /branch at the <trial>-level.

<block test>
/ preinstructions = (page.pre)
/postinstructions = (page.post)
/trials = [
1-10 = replace(choiceriskyleft, choiceriskyright, gain10object, gain20house, lose10animal, lose20place)
</block>

#2: This is invalid syntax on multiple grounds and hence cannot work.
<trial choiceriskyleft>
...
/branch= [if (values.randomnum <=values.cutoff1 && response=="f") trial.gain10object]
/branch =[if (values.randomnum <=values.cutoff1 && response=="j") trial.gain20house]
...
</trial>

(a) "response" has no meaning. You need to fully reference the respective <trial>'s response property:
(b) The response property does not return "f" or "j". It returns the respective key's numerical scan code. See the "Keyboard Scan Codes" topic in the documentation as well as Tools -> Keyboard Scancodes... for those values. The scancode for F is 33, the scancode for J is 36. In sum, the /branch logic needs to read

<trial choiceriskyleft>
...
/branch= [if (values.randomnum <=values.cutoff1 && trial.choiceriskyleft.response==33) trial.gain10object]
/branch =[if (values.randomnum <=values.cutoff1 && trial.choiceriskyleft.response==36) trial.gain20house]
...
</trial>

and so forth.

#3: Further,

<trial gain10object>
/ stimulusframes = [1=gain10object]
/ ontrialend = [
  values.score = values.score +=10]

/ timeout = 500
</trial>

is wrong. "+=" and "-=" are the increment and decrement operators, respectively. If you want to increment values.score by X, you simply state

<trial gain10object>
/ stimulusframes = [1=gain10object]
/ ontrialend = [ values.score +=10]
/ timeout = 500
</trial>

i.e., add 10 to values.score.

Similarly., to decrement values.score, state

<trial lose10animal>
/ stimulusframes = [1=lose10animal]
/ ontrialend = [values.score -=10]
/ timeout = 500
</trial>

i.e., subtract 10 from values.score.

Hope this helps.