|  | 
| 
			 
			#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 |