<div dir="ltr">ah, of course. Silly mistake, that could have been prevented by just running the example script once :-)<div><br></div><div>PG. </div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 11 November 2013 22:00, David McFarlane <span dir="ltr"><<a href="mailto:mcfarla9@msu.edu" target="_blank">mcfarla9@msu.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I would have said to set stimulus PreRelease to same as Duration and use inline code after the stimulus to look for the timeout, but I like Paul's solution much, much better and will add that to my own bag of tricks (thanks, Paul!).<br>

<br>
Just a couple more thoughts on this:<br>
<br>
1) Shouldn't the line<div class="im"><br>
<br>
    timeLeft = 120000 - Stimulus.TargetOnsetTime<br>
<br></div>
instead read<br>
<br>
    timeLeft = 120000 - (Stimulus.TargetOnsetTime - FirstOnset)<br>
<br>
?  Also, the first time the initialization line<br>
<br>
    FirstOnset = Stimulus.TargetOnsetTime<br>
<br>
runs, Stimulus.Target is 0, and that may adversely affect the Duration for the first run of Stimulus.  This could be fixed by instead using GetNextTargetOnset time, thus,<br>
<br>
    FirstOnset = GetNextTargetOnsetTime<br>
<br>
Also, timeLeft is based on the OnsetTime of the previous run of Stimulus, but I think you need to take into account how long that run lasted.  You could do that by using GetNextTargetOnsetTime instead.  Putting that all together, the inline code might instead read<div class="im">
<br>
<br>
    ' FirstOnset is a global variable which is declared in the user section of<br>
    ' the script window<br></div>
    If (FirstOnset = 0) Then FirstOnset = GetNextTargetOnsetTime<br>
    Dim timeLeft As Long<br>
    timeLeft = 120000 - (GetNextTargetOnsetTime- FirstOnset)<br>
    If (timeLeft > 0) Then<div class="im"><br>
        Stimulus.Duration = timeLeft<br>
    Else<br>
        Stimulus.Duration = 0<br>
    End If<br>
<br></div>
Finally, instead of a FirstOnset you might instead use a LastOffset, thus (also using Iif() to suit my own peculiar tastes),<br>
<br>
    ' LastOffset is a global variable which is declared in the user section of<br>
    ' the script window<br>
    If (LastOffset = 0) Then LastOffset = GetNextTargetOnsetTime + 120000<br>
    Dim timeLeft as Long<br>
    timeLeft = LastOffset - GetNextTargetOnsetTime<br>
    Stimulus.Duration = Iif( timeLeft > 0, timeLeft, 0 )<br>
    ' or set Stimulus.Duration as an attribute reference<br>
<br>
<br>
2) Alternatively, set your stimulus to use Cumulative timing mode, and set its Duration to 120000.   Define FirstOnset in global User Script as before.  Then in inline code at the start of the Procedure, use<div class="im">
<br>
<br>
    ' FirstOnset is a global variable which is declared in the user section of<br>
    ' the script window<br></div>
    If (FirstOnset = 0) Then FirstOnset = GetNextTargetOnsetTime<br>
    SetNextTargetOnsetTime FirstOnset<br>
<br>
(see the SetNextTargetOnsetTime topic in the E-Basic Help facility).  Now each run of the stimulus will behave as though it started at the onset of the first run of the stimulus, and end 12000 ms after the start of the first run.<br>

<br>
<br>
It just depends on whether you prefer to manipulate stimulus Duration or NextTargetOnsetTime.  In any case, given the general principles, Kate and others should readily figure out the specifics.<br>
<br>
I went ahead and attached a demo program for each solution.  Thanks again, Paul, for the great inspiration!<br>
<br>
-- David McFarlane<div class="im"><br>
<br>
<br>
At 11/11/2013 03:15 AM Monday, Paul Groot wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
Hi Kate,<br>
<br>
Because the 'exit list' condition is tested at the end of each trial, eprime doesn't handle timeout values that occur during the trial itself. Even if the trial only contains a single object. The solution is to limit the duration of the individual object(s).<br>

<br>
This is what I would do (assuming that the TextDisplay object is called Stimulus):<br>
<br>
1) Create a global variable in the user section of the script window:<br>
<br>
Dim FirstOnset As Long ' onsettime of first stimulus<br>
<br>
2) Insert an inline script at the start of the trial procedure that calculates the total time left, and use this value to change the stimulus duration from infinite to the leftover time:<br>
<br>
' FirstOnset is a global variable which is declared in the user section of the script window<br>
If FirstOnset=0 Then<br>
FirstOnset = Stimulus.TargetOnsetTime<br>
End If<br>
<br>
Dim timeLeft As Long<br>
timeLeft = 120000 - Stimulus.TargetOnsetTime<br>
If timeLeft>0 Then<br>
Stimulus.Duration = timeLeft<br>
Else<br>
Stimulus.Duration = 0<br>
End If<br>
<br>
Things can get a bit more complex if the trial contains several objects, though.<br>
<br>
Also also see the attached example.<br>
<br>
Best<br>
Paul<br>
<br>
<br>
<br></div><div class="im">
On 11 November 2013 03:39, Kate Cox <<mailto:<a href="mailto:katehmcox@gmail.com" target="_blank">katehmcox@gmail.com</a>><a href="mailto:katehmcox@gmail.com" target="_blank">k<u></u>atehmcox@gmail.com</a>> wrote:<br>

Hi I'm very new to eprime and have no script background so please be gentle :).<br>
What I'm trying to do: present participants with a series of mathematical equations which they must answer, using the keyboard. They must answer as many equations as they can in 2 minutes. After 2 minutes the task will terminate (and go on to the next task) even if they are part way through giving an answer. The outcomes i'm measuring are accuracy, RT of correct responses and number of correct responses in the 2 minute time window.<br>

What is working and how I have it set up: I have 300 potential equations in a list called "TrialList", which are presented on a TextDisplay. This works perfectly.<br>
Answers typed on the keyboard are echoed on the screen and logged. When an answer is complete the participant presses ENTER and the the next equation in my list is shown. This works perfectly.<br>
In the TextDisplay properties, under the Duration/Input tab I have duration as infinite, timing mode as Event, the keyboard as the only device, allowable responses is any, time limit is same as duration and End action is terminate.<br>

In the list properties, under the Reset/Exit tab I have set Exit List to "After 120 seconds"<br>
The problem: I can't get the task to terminate at exactly 2 minutes. At the moment it appears to stop when the trial that is running at 2 minute mark is terminated (ie the participant presses enter).  For example if a participant starts an equation at 1:55 then the task won't stop at 2:00 it will wait until they submit their answer and that trial is terminated. As some of my participants aren't particularly fast to provide their responses this may end up being closer to 3 minutes than 2.<br>

I'm pretty useless with script but I've found the bit that refers to the termination settings and it looks like this:<br>
Set TrialList.TerminateCondition = TimedMSecs(120000)<br>
Set TrialList.ResetCondition = Samples(300)<br>
TrialList.Reset<br>
I've tried searching this group and the Eprime guide for the answers but can't find how to fix it. I know some people have mentioned some script that terminates at a particular clock setting  but my script seems to look different to theirs so I'm not sure how to implement it. Also this maths task is part of a larger battery of tasks so how a participant performs on earlier tasks will determine where the running clock is when they get up to the maths problems (ie a participant who is faster at earlier tasks may start the math task at the 5 minute mark and someone who is slower might start it at the 7 minute mark, so the running clock will be different 2 minutes into the math task).<br>

<br>
I hope all this makes sense. Any help would be hugely appreciated.<br>
thank you in advance<br>
Kate<br>
</div></blockquote><div class="im">
<br>
-- <br>
You received this message because you are subscribed to the Google Groups "E-Prime" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:e-prime%2Bunsubscribe@googlegroups.com" target="_blank">e-prime+unsubscribe@<u></u>googlegroups.com</a>.<br>
To post to this group, send email to <a href="mailto:e-prime@googlegroups.com" target="_blank">e-prime@googlegroups.com</a>.<br></div>
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/e-prime/5281458c.2cdd320a.723a.ffff9c50SMTPIN_ADDED_MISSING%40gmr-mx.google.com" target="_blank">https://groups.google.com/d/<u></u>msgid/e-prime/5281458c.<u></u>2cdd320a.723a.ffff9c50SMTPIN_<u></u>ADDED_MISSING%40gmr-mx.google.<u></u>com</a>.<div class="HOEnZb">
<div class="h5"><br>
For more options, visit <a href="https://groups.google.com/groups/opt_out" target="_blank">https://groups.google.com/<u></u>groups/opt_out</a>.<br>
</div></div></blockquote></div><br></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups "E-Prime" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to e-prime+unsubscribe@googlegroups.com.<br />
To post to this group, send email to e-prime@googlegroups.com.<br />
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/e-prime/CAKAdR-vAex7qAz483B3Jjyng-rJBVL-dX1a8_-gkxp-r66yPuQ%40mail.gmail.com">https://groups.google.com/d/msgid/e-prime/CAKAdR-vAex7qAz483B3Jjyng-rJBVL-dX1a8_-gkxp-r66yPuQ%40mail.gmail.com</a>.<br />
For more options, visit <a href="https://groups.google.com/groups/opt_out">https://groups.google.com/groups/opt_out</a>.<br />