Millisecond Forums

Redefine value in each trial

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

By skotturi - 6/2/2014

Dear Community, 

I am trying to use the Prospective Time Estimation task provided by Inquisit. 
Instead of just doing one trial at a fixed time interval of 53 seconds, I am trying to do multiple trials of random length. 

Instead of using:
<values>
...
/timeinterval = 5300
</values>

I'm using:
<values>
...
/timeinterval = ceil(rand(45,75))*1000
</values>
To achieve a random time interval in between 45 & 75 seconds. 

I'm currently just running two experiment blocks:
<expt >
/blocks = [1 = timeestimationstart, 2=timeestimationstart]
</expt>

This works except that the time interval variable isn't reassigned the second time, so my interval is the same for both trials. 
I have tried to force the reevaluation of the timeinterval variable:
<trial start>
/stimulustimes = [0=start, circle]
/timeout = [values.timeinterval = ceil(rand(45, 75))*1000]
/branch = [trial.end]
/recorddata = false
</trial>

But this fails with "Expression '[values.timeinterval' is invalid. Expression contains an unknown element or property name."
I could just hardcode a second timeinterval, a second trial and second variable to be exported but I'd prefer a more elegant solution. 
It's been a while since I've coded much in Inquisit, been spending most of my time in python, js & R. Thus I'm undoubtedly over thinking this, I think...

The code I'm working with can be found here (the prospective task): http://www.millisecond.com/download/library/TimeEstimation/

Cheers, 
Sante





By Dave - 6/2/2014

#1:
Values are -- by design -- static. I.e. the expression in

<values>
...
/timeinterval = ceil(rand(45,75))*1000
</values>

will get evaluated once and then values.timeinterval will remain unchanged. It is supposed to.

#2:
This
<trial start>
...
/timeout = [values.timeinterval = ceil(rand(45, 75))*1000]
...
</trial>

is simply invalid syntax. The correct way to express it would be simply

<trial start>
...
/timeout = ceil(rand(45, 75))*1000
...
</trial>

#3:

The proper way to do this is
<values>
...
/timeinterval = 5300
</values>

<trial start>
...
/ontrialbegin = [values.timeinterval = ceil(rand(45, 75))*1000]
/timeout = values.timeinterval
...
</trial>
By skotturi - 6/3/2014

Great, that works and makes a lot more sense. 
The /ontrialbegin method was just what I was looking for!
Cheers, 
Sante