#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
You can use the viztask.waitAny command to wait for one condition, out of a list of conditions, to occur.
|
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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() ) |
#5
|
|||
|
|||
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 |
#6
|
|||
|
|||
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 Code:
for i in range(1,5): print 'start trial {}'.format(i) |
#7
|
|||
|
|||
Dear Jeff,
Just wanted to let you know that I tried what you suggested and the program works perfectly now. Many Thanks, Harry |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
exact copy of mainview in second window | dcnieho | Vizard | 1 | 06-30-2014 04:02 PM |
Window always on top | madeinjava | Vizard | 4 | 08-27-2013 02:10 PM |
Unexpected Change of Window Size | javadi | Vizard | 7 | 07-23-2013 02:56 PM |
Inconsistent timestamp while logging | mape2k | Vizard | 4 | 07-15-2013 06:03 AM |
timer question | Elittdogg | Vizard | 5 | 10-10-2007 02:49 PM |