WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Logging an RT with a window of time (https://forum.worldviz.com/showthread.php?t=5091)

hfarmer 07-02-2014 10:22 AM

Logging an RT with a window of time
 
Hi,

I'm currently trying to get a study set up using vizard 4 and am having a bit of a problem. I want to set up some code to measure reaction times after the presentation of a stimuli. However I want the program to move on to the next trial after 3 seconds regardless of whether a key is pressed or not. However this doesn't seem to be possible using the standard way of measuring reaction times given in the Vizard tutorial e.g:
Code:

                d = yield viztask.waitDraw() #Set Display time
                displayTime = d.time #Log display time
                d = yield viztask.waitKeyDown(None) #Log keypress time
                pressTime = d.time
                reactionTime = pressTime- displayTime #Calculate reaction time

Basically I want to know if there's a way to set up two parallel processes, one which is waiting for a key press to log reaction times and the other which just runs a timer and moves on the program after 3 seconds. Any help would be much appreciated.

Jeff 07-02-2014 04:48 PM

You can use the viztask.waitAny command to wait for one condition, out of a list of conditions, to occur.

hfarmer 07-07-2014 02:53 AM

Hi Jeff,

Thanks for your help.

I found that command but the problem is that I want the program to always wait 3 seconds before moving on regardless of whether a key is pressed or not. But it seems like to log the reaction time I need to make if a yield command and that means the program will wait until a key is pressed before moving on. Is there a way to log reaction time without using the yield command?

Best,

Harry

Jeff 07-07-2014 03:23 PM

You could log the reaction time and then yield for an additional amount of time equal to 3 seconds minus the reaction time:

Code:

import viz
import viztask
viz.go()

def MyTask():
       
        waitKey = viztask.waitKeyDown(' ')
        waitTime = viztask.waitTime(3)
       
        while True:
               
                print 'start'

                #Wait for next frame to be drawn to screen
                d = yield viztask.waitDraw()

                #Save start time
                startTime = d.time

                d = yield viztask.waitAny( [ waitKey, waitTime ] )
               
                if d.condition is waitKey:
                        keyData = d.data
                        elapsed = keyData.time - startTime
                        print 'The spacebar was pressed after {:.2f} seconds'.format(elapsed)
                        yield viztask.waitTime(3-elapsed)
                       
                elif d.condition is waitTime:
                        print '3 seconds passed, the spacebar was not pressed'

viztask.schedule( MyTask() )


hfarmer 07-18-2014 05:38 AM

Hi Jeff,

Sorry for the delay in getting back to you, thanks for the example code, I didn't know about the condition command before but can see that it would be very useful. However I have one more question which is how to remove the "True" condition after each trial so that the program moves on to the next trial.

At the moment I am getting the information logged but the program seems to stick on the first condition rather than timing out after 3 seconds. Could you let me know what the "while True" part of the code refers to? I assume it just means while in that function but am a bit unclear on how to end the function with a command.

Best,

Harry

Jeff 07-18-2014 02:28 PM

The while True line always evaluates to True so the loop keeps repeating. To run that code a set number of times you could use a for loop or have an expression following while that evaluates to False after several loops. Try replacing:

Code:

while True
with:

Code:

for i in range(1,5):
       
        print 'start trial {}'.format(i)


hfarmer 07-21-2014 06:15 AM

Dear Jeff,

Just wanted to let you know that I tried what you suggested and the program works perfectly now.

Many Thanks,

Harry


All times are GMT -7. The time now is 12:53 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC