I'm not sure exactly how to fix the whole script, but for sure you
need to declare the counter as an integer, not a string.  you can't
increment a string that way.  also, eprime likes variable references
to have a type signifier, so you want to say count% = count% + 1  bc %
means integer.  in addition, although it is rather inelegant, you
could just have a single TrialProc with 16 alternating stim arrays and
blanks, where each one had a max duration but the stim arrays also
accepted input and had an end action which jumped to your label.
JK
'after the StimuliArray... I suppose this is a textDisplay or something?:
if (StimuliArray.Resp = "") AND (count < 17) then   'if no response is given and the number of that happened (count) is smaller than 17
   count = count + 1   'then continue counting
   goto ShowStimAgain   'and go back AFTER counting (otherwise it never counts because it went to the label before that)
   end if  'and to end a while statement, I think e-prime expects you to use WEnd; 
 
Cheers,
 
Michiel Spapé
 
 
________________________________
Hi everyone,
Thanks
Julia Gómez
**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.
**********************************************************************
Dim count as integer ' this should be in the user script, else the count is reset
 
count=0 ' this should be at the start of the trial, else it starts at 0 every time
'after the StimuliArray... I suppose this is a textDisplay or something?:
if (StimuliArray.Resp = "") AND (count < 17) then 'if no response is given and the number of that happened (count) is smaller than 17
count = count + 1 'then continue counting
goto ShowStimAgain 'and go back AFTER counting (otherwise it never counts because it went to the label before that)
end if 'and to end a while statement, I think e-prime expects you to use WEnd;
 
________________________________
Van: e-p...@googlegroups.com namens James Keidel
Verzonden: do 24-4-2008 3:10
Aan: e-p...@googlegroups.com
Onderwerp: Re: Script for redoing a trial up to 16 times or untill response
hey
I'm not sure exactly how to fix the whole script, but for sure you
need to declare the counter as an integer, not a string.  you can't
increment a string that way.  also, eprime likes variable references
to have a type signifier, so you want to say count% = count% + 1  bc %
means integer.  
And here's another way to do it, without using a 
counter, and making use of functionality built in to E-Prime objects.
First, I assume that your search task, with 
stimulus array and blank screen, is in a 
Proc.  Let's call that PresentationProc.
Now, put PresentationProc in a list object, let's 
call that PresentationList.  So PresentationList 
has just one row with your PresentationProc in 
it, and your structure looks something like this:
PresentationList
     PresentationProc
         StimArray
         BlankScreen
         TrialFinishScript
Now comes the fun.  To make PresentationProc 
repeat, say, 16 times, you can do one of two 
things in the PresentationList:  (1) Give your 
PresentationProc row a weight of 16 (most users 
will find this the more natural way), or  (2) in 
the properties page of the PresentationList, go 
to the Reset/Exit tab and set it to exit after 16 cycles (my preferred method).
OK, now your trial will last for 16 
presentations.  How to get it to stop after a 
response?  You just need one line of script in TrialFinishScript, e.g.,
If Not(StimArray.InputMasks.IsPending()) Then PresentationList.Terminate
That's it. The .Terminate will make the list exit early.
Now, a bit more to the lesson.  There are several 
ways for script to detect a response.  Here are 
four tests that return True if a response has occured to Stim:
- If Not(Stim.InputMasks.IsPending()) Then ...
- If Stim.RT <> 0 Then ...
- If Stim.RTTime <> 0 Then ...
- If Stim.RESP <> "" Then ...
Note that .IsPending() returns False if either it 
has received a response or the response time 
limit has passed, so it only works while waiting 
for a response (i.e., it will not work afterwards 
to tell whether or not a response was received 
earlier).  Other than that, which test you use is largely a matter of taste.
For more information on these, please see the 
List Object and InputMask Object topics in the E-Basic online help.
-- David McFarlane, Professional Faultfinder
>(1) Measuring RT from the first display.
>
>As I as previously explained, I present a visual array of stimuli 
>followed by a blank screen upto 16 times or until response 
>(stimArray+Blank, stimArray+Blank, and so on). The RT measure I get 
>is just from the last stimArray+Blank ( the one you respond to, 
>instead of being from the first one). I would like to have a measure 
>of the RT from the first display until response (whether is one or 
>16 displays). Is there a way to do this?
There are several ways to do this.  Here is one, for example.  You 
will have to add some script to the start and end of your 
PresentationList, so the structure might now look like this:
RTStartScript
PresentationList
     PresentationProc
         StimArray
         BlankScreen
         TrialFinishScript
RTFinishScript
RTStartScript contains script like this:
Dim TrialT0 as Long
TrialT0 = Clock.Read
RTFinishScript contains script like this:
StimArray.RT = StimArray.RTTime - TrialT0
This assumes that you want to allow a response only during the 
presentation of each StimArray.  If you want to allow a response any 
time during the PresentationList loop, there are other techniques, 
which I could explain if asked.
Once again, for more information you can look at the Clock Object and 
InputMask Object topics in the online E-Basic help.
I do not have an answer for your second request, I will leave that to 
others more talented than me.
Your message found me just as I got hit with the 
double-whammy of the holidays and a major 
project, and by now you have either found your 
own solution or moved on to something else, but I 
will attempt a reply now anyway.
You bring up three issues:
(1) how to have every response logged when 
responses are allowed at any time during the PresentationList loop
(2) allowing a response at any time during the PresentationList loop
(3) what TrialT0 refers to
As to (1), the original problem as posed by Julia 
Gómez (see 
http://groups.google.com/group/e-prime/browse_thread/thread/5e712b8b726ea0de 
) took only one response during the 
PresentationList loop, and then exited the 
loop.  So you are asking for something rather 
different here, and I would need more details before I could answer.
As to (3), TrialT0 is just a variable that holds 
the start time of the trial (i.e., the 
PresentationList loop).  I suppose most folks 
would name it something more like TrialStartTime, 
but I have a background in physics and math so 
something like t0 (that's "t-zero") seems a more 
natural symbol for an intiial time.
Finally, issue (2) seems to strike more at what I 
promised to explain if asked, so I will belabor 
this a bit and propose two approaches.
First, one could simply use Extended Input (see 
Appendix C of the User's Guide that came with 
E-Prime) with StimArray in the example.  I.e., 
set the Time Limit of StimArray to (infinite), 
and then the subject can enter a response at any 
time during the loop.  Everything else would work without change.
Second, one could instead use Extended Input with 
a Wait object before PresentationList.  Now the structure would look like
TrialRespWait
PresentationList
     PresentationProc
         StimArray
         BlankScreen
         TrialFinishScript
TrialRespWait is a Wait object with Duration = 0 
and an Input Mask with Time Limit = 
(infinite).  One would then remove the Input Mask 
from StimArray.  Finally, TrialFinishScript would 
be modified to refer to TrialRespWait, thus,
If TrialRespWait.RT Then PresentationList.Terminate
or one of the other forms for detecting a 
response in script (also see 
http://groups.google.com/group/e-prime/browse_thread/thread/f565dc7d0d507a3 
for how to terminate any running List without 
knowing the List name, which coincidentally I also answered for you :) ).
Now the subject can respond at any time during 
the PresentationList loop, the response will go 
to the TrialRespWait object, and if TrialRespWait 
has End Action set to Terminate then the response 
will terminate either StimArray or 
BlankScreen.  Note that we no longer need 
RTStartScript and RTFinishScript, since 
TrialRespWait.RT automatically has the desired 
RT.  (In general, Wait objects are not so much 
useful for "waiting" as they are for introducing silent/invisible Input Masks.)
Note that for both of these approaches, if a 
response comes in during StimArray then the loop 
will still complete the BlankScreen.  If one 
wanted to skip the BlankScreen then one might use 
an End Action of Jump in the first approach, or 
would have to add a bit more script for the second approach.
Regards,
-- David McFarlane, Professional Faultfinder
At 11/20/2009 11:19 AM Friday, Ariana Rubin and Mbecs wrote:
>Hi David,
>
>I would love to know how to have every response logged when responses
>are allowed at any time during the PresentationList loop.  I have been
>working on a project similar to this one, and this is my last holdup.
>I am very new to EPrime and scripting, and was also wondering in this
>example what TrialT0 refers to.
>
>Thank you so much in advance!
>-AR
>-Mbecs