Hi Micah, <br><br>I am sorry for joining this thread so late. I've been working on a similar situation and was wondering if you'd mind sharing what you've developed? Attached, are a couple of files I've been working with including, and inline VAS.vbs script, and some e-prime protocols that use it. The last includes IFIS calls. <br>
I am curious to know your thoughts on the attached files and what you've come up with.<br><br>Cheers,<br>Jason<br><br><br><br><div class="gmail_quote">On Thu, Jul 21, 2011 at 2:25 PM, Micah <span dir="ltr"><<a href="mailto:ucfmicah@gmail.com">ucfmicah@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Woohoo! It actually works to add a textdisplay that inherits duration<br>
from the scale stimulus. So now it works perfectly; it times out after<br>
6 seconds, which makes the "ISI" 0 duration, or it waits for 6-<br>
duration. So the scale can never take longer than 6 seconds, making a<br>
nice neat paradigm. I've also got it logging non-responses (in case<br>
the participant falls asleep) although have not yet come up with a<br>
solution for "confirmed" responses. Is there a wildcard variable in e-<br>
basic? If so I could do a check like, if stimulus.RESP = *3* then<br>
confirmed =1. Otherwise I may have to write a post-scan matlab script<br>
to search for any responses not containing "3", which is a blah<br>
solution.<br>
<br>
Tak,<br>
<font color="#888888">Micah<br>
</font><div><div></div><div class="h5"><br>
On Jul 21, 8:07 pm, Micah <<a href="mailto:ucfmi...@gmail.com">ucfmi...@gmail.com</a>> wrote:<br>
> Great advice- there are a few problems however;<br>
><br>
> 1. The second solution actually breaks the slider. It appears if you<br>
> set the duration in the properties page, this prevents the loop from<br>
> "animating" the slider properly. It just stays stuck at the default<br>
> position and then selects that as the rating when the duration runs<br>
> out. I can't figure this one out, so on to solution 1<br>
><br>
> 2. Inserting that line of code does not seem to do anything. To make<br>
> sure, I set the duration variable to 10000, and it was terminating<br>
> instantly after making a selection.<br>
><br>
> I'm thinking that the best option might be to put a textobject<br>
> immediately after the slideobject (i.e. "Stimulus") that presents the<br>
> scale, where the duration is set to 6000-stimulus.duration. I'll see<br>
> if I can do that now.<br>
><br>
> P.S. I can easily log non-responses, but it's trickier to log<br>
> responses where they move the slider but never confirm. The .resp show<br>
> sup as (for example) =11223, or =11113 for confirmed responses, but<br>
> =1112 etc for non-confirmed. Is there a function to search a stored<br>
> variable for a specific number? I tried setting the "allowed" in the<br>
> advanced collection options to [allowed], where allowed is a list<br>
> variable with 3 in each row. This would have been perfect, as if it<br>
> only logs "3"s then I have my solution. Seems weird they give us this<br>
> option if it doesn't work (it didn't seem to change the logs at all).<br>
><br>
> BW,<br>
> Micah<br>
><br>
> On Jul 21, 7:37 pm, David McFarlane <<a href="mailto:mcfar...@msu.edu">mcfar...@msu.edu</a>> wrote:<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> > Micah,<br>
><br>
> > 1. Indeed, you do need to "make some kind of check, so that if it<br>
> > times out, it sets the value to NaN/etc."  I think you can manage<br>
> > that without me.<br>
><br>
> > 2. Oops.  First, I have to correct something I implied about my<br>
> > second solution (PreRelease >= Duration), namely, the second solution<br>
> > should already solve what you want to do here.  The second solution<br>
> > would have been a problem if you *did* want a response to move on to<br>
> > the next stimulus.  Even after the offset of a stimulus, the next<br>
> > stimulus will not run until it reaches the NextTargetOnsetTime (see<br>
> > the GetNextTargetOnsetTime and SetNextTargetOnsetTime topics in the<br>
> > E-Basic Help facility).  (This, BTW, is how PreRelease<br>
> > works.)  Because the second solution automatically sets<br>
> > NextTargetOnsetTime to, say, 6000 ms from the OnsetTime (or<br>
> > TargetOnsetTime, depending on Timing mode) of the scale, even after<br>
> > the scale code loop ends the next stimulus will not run until it<br>
> > reaches that NextTargetOnsetTime.  Savvy?  Better yet, try this and<br>
> > see if I know what I am talking about :).<br>
><br>
> > But back to the first solution.  Your modification is what almost<br>
> > anyone would come up with and in many cases is Good Enough, although<br>
> > you may get some slop of a ms or so every once in a while.  If you<br>
> > still want something a little tidier, and absolutely precise, then<br>
> > instead of a Sleep, I would simply do one of the following (depending<br>
> > on desired Timing mode) at *any* time either before or after the loop:<br>
><br>
> > SetNextTargetOnsetTime Stimulus.OnsetTime + Stimulus.Duration  ' use<br>
> > this for Event timing mode<br>
><br>
> > - or -<br>
><br>
> > SetNextTargetOnsetTime Stimulus.TargetOnsetTime +<br>
> > Stimulus.Duration  ' use this for Cumulativetiming mode<br>
><br>
> > If you followed the earlier discussion, you will see that this just<br>
> > expictly does in code what E-Prime would have done for you<br>
> > automatically using the second solution.  As a result, I much prefer<br>
> > following the second approach myself, leveraging the features built<br>
> > into E-Prime, but that does require deeper understanding of the<br>
> > architecture of E-Prime.  Mere mortals must stick with the first<br>
> > approach and write more code.<br>
><br>
> > -- David McFarlane, Professional Faultfinder<br>
><br>
> > >Thank you Todd [sic -- should be David]! That's an excellent<br>
> > >solution. I knew I'd need to<br>
> > >somehow do a clock read and feed that into the loop, but I wasn't able<br>
> > >to quite get there. Not to tax you, but there are two unresolved<br>
> > >issues with this solution-<br>
><br>
> > >1. The scale now records wherever the 'slider' is when the time limit<br>
> > >ends. I think it's probably much safer to record these as no response,<br>
> > >and I'm not sure how to manipulate the loop do so. I need to make some<br>
> > >kind of check, so that if it times out, it sets the value to NaN/etc.<br>
><br>
> > >2. The scale still ends immediately if a response is made. I've worked<br>
> > >out a way to stop that- by adding:<br>
><br>
> > >dim responsetime as integer<br>
><br>
> > >....... (the loop)<br>
><br>
> > >...bottom of the inline:<br>
><br>
> > >responsetime=Stimulus.RT<br>
><br>
> > >Sleep 6000-response time<br>
><br>
> > >However, I don't think that is compatible with your solution.<br>
><br>
> > >BW,<br>
> > >Micah<br>
><br>
> > >On Jul 21, 5:59 pm, David McFarlane <<a href="mailto:mcfar...@msu.edu">mcfar...@msu.edu</a>> wrote:<br>
> > > > Stock reminder:  1) I do not work for PST.  2) PST's trained staff<br>
> > > > takes any and all questions<br>
> > > athttp://<a href="http://support.pstnet.com/e%2Dprime/support/login.asp" target="_blank">support.pstnet.com/e%2Dprime/support/login.asp</a>, and they<br>
> > > > strive to respond to all requests in 24-48 hours -- this is pretty<br>
> > > > much their substitute for proper documentation, so make full use of<br>
> > > > it.  3) If you do get an answer from PST Web Support, please extend<br>
> > > > the courtesy of posting their reply back here for the sake of others.<br>
><br>
> > > > That said, here is my take...<br>
><br>
> > > > Try replacing<br>
><br>
> > > > Do While Stimulus.InputMasks.IsPending()<br>
> > > >     ...<br>
><br>
> > > > with something like<br>
><br>
> > > > Const  StimulusDur as Long = 6000<br>
> > > > Dim  StimulusTargetOffsetTime as Long<br>
> > > > StimulusTargetOffsetTime = Clock.Read + StimulusDur<br>
> > > > Do While (Stimulus.InputMasks.IsPending() and _<br>
> > > >      (Clock.Read < StimulusTargetOffsetTime) )<br>
> > > >      ...<br>
><br>
> > > > Alternatively, if you prefer to set stimulus duration in its Property<br>
> > > > Pages instead of with an InLine constant, then set both Duration and<br>
> > > > PreRelease to 6000 (in this case), and E-Prime will automatically<br>
> > > > compute the TargetOffsetTime for you, so the code simplifies to<br>
> > > something like<br>
><br>
> > > > Do While (Stimulus.InputMasks.IsPending() and _<br>
> > > >      (Clock.Read < Stimulus.TargetOffsetTime) )<br>
> > > >      ...<br>
><br>
> > > > Of course, you will find confusion either way.  For the first way,<br>
> > > > any time you want to change stimulus duration you will have to<br>
> > > > remember to dive into the code.  For the second way, you can change<br>
> > > > stimulus Duration in the normal way, but then you have to remember to<br>
> > > > always change PreRelease to the same thing (or, be daring and set<br>
> > > > PreRelease to some one enormous value, but not so large that<br>
> > > > TargetOnsetTime + Duration - PreRelease ever becomes negative!).<br>
><br>
> > > > -- David McFarlane, Professional Faultfinder<br>
> > > > ... six of one and half dozen of the other, you pays your money and<br>
> > > > takes your choice.<br>
><br>
> > > > >I've got an fMRI paradigm that is almost finished. I've embedded a<br>
> > > > >customized version of the likert script, and could use a little help<br>
> > > > >with a simple tweak. I'm a moderately skilled e-basic coder, so if you<br>
> > > > >can suggest a general strategy, I can probably implement it. As it is<br>
> > > > >coded now, the likert scale waits for a response before closing. The<br>
> > > > >actual slideobject it draws to has 0 duration, and as far as I can<br>
> > > > >tell, the script simply stops the the slide once a response is given.<br>
> > > > >I'd like to ensure that there is a time limit for the response, so<br>
> > > > >that the total possible time to respond is 6 seconds. I.e.  if a<br>
> > > > >participant answers in 2 seconds, there would be 4 seconds of fixation<br>
> > > > >following the answer, before moving on. I much appreciate any tips you<br>
> > > > >can lend.<br>
><br>
> > > > >Here is the inline that controls the Likert scale:<br>
><br>
> > > > >'Declare a variable for accessing each SlideText object and changing<br>
> > > > >properties.<br>
> > > > >Dim theSlideText As SlideText<br>
><br>
> > > > >Dim strName As String<br>
> > > > >Dim nLastResponseCount As Integer<br>
> > > > >nLastResponseCount = 0<br>
><br>
> > > > >Dim nNextMoveTime As Long<br>
><br>
> > > > >Dim strLastResponse As String<br>
><br>
> > > > >Dim boolMove As Boolean<br>
> > > > >boolMove = False<br>
><br>
> > > > >Dim theKeyboardResponseData As KeyboardResponseData<br>
><br>
> > > > >Do While Stimulus.InputMasks.IsPending()<br>
><br>
> > > > >         'Was there a response?<br>
> > > > >         If Stimulus.InputMasks.Responses.Count > nLastResponseCount Then<br>
><br>
> > > > >                 nLastResponseCount = nLastResponseCount +1<br>
><br>
> > > > >                 Set theKeyboardResponseData =<br>
> > > > >CKeyboardResponseData(Stimulus.InputMasks.Responses(nLastResponseCount))<br>
><br>
> > > > >                 If theKeyboardResponseData.RESP = "2" Then<br>
><br>
> > > > >                         'Subject has already selected the highest rating.<br>
> > > > >                         If intCurrent < 7 Then<br>
><br>
> > > > >                                 'Increment the current selection.<br>
> > > > >                                 intPrevious = intCurrent<br>
> > > > >                                 intCurrent = intCurrent + 1<br>
><br>
> > > > >                                 'Change border color of previously<br>
> > > > > selected box back to white,<br>
> > > > >change border<br>
> > > > >                                 'color of currently selected box to red.<br>
> > > > >                                 strName = "Text" & intPrevious<br>
> > > > >                                 Set theSlideText =<br>
> > > > >CSlideText(Stimulus.States.Item("Default").Objects(strName))<br>
> > > > >                                 theSlideText.BorderColor =<br>
> > > CColor("white")<br>
><br>
> > > > >                                 strName = "Text" & intCurrent<br>
> > > > >                                 Set theSlideText =<br>
> > > > >CSlideText(Stimulus.States.Item("Default").Objects(strName))<br>
> > > > >                <br>
><br>
</div></div><div><div></div><div class="h5">> ...<br>
><br>
> read more »<br>
<br>
--<br>
You received this message because you are subscribed to the Google Groups "E-Prime" group.<br>
To post to this group, send email to <a href="mailto:e-prime@googlegroups.com">e-prime@googlegroups.com</a>.<br>
To unsubscribe from this group, send email to <a href="mailto:e-prime%2Bunsubscribe@googlegroups.com">e-prime+unsubscribe@googlegroups.com</a>.<br>
For more options, visit this group at <a href="http://groups.google.com/group/e-prime?hl=en" target="_blank">http://groups.google.com/group/e-prime?hl=en</a>.<br>
<br>
</div></div></blockquote></div><br>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups "E-Prime" group.<br />
To post to this group, send email to e-prime@googlegroups.com.<br />
To unsubscribe from this group, send email to e-prime+unsubscribe@googlegroups.com.<br />

For more options, visit this group at http://groups.google.com/group/e-prime?hl=en.<br />