Holcombe:VerifyTiming

From OpenWetWare

(Difference between revisions)
Jump to: navigation, search
m (Precautions to avoid timing problems: Clarified some of the code instuctions)
Line 5: Line 5:
* When using two screens, the presence of the mouse polling and other things for the second screen can also cause timing hiccups. Try to use one screen- on a laptop, close the main LCD screen and wake the machine from sleep with just the second screen by connecting an external keyboard or mouse and clicking.
* When using two screens, the presence of the mouse polling and other things for the second screen can also cause timing hiccups. Try to use one screen- on a laptop, close the main LCD screen and wake the machine from sleep with just the second screen by connecting an external keyboard or mouse and clicking.
* May want to quit finder. To do so manually, you can enable Quit in the Finder menu by entering this at the terminal:
* May want to quit finder. To do so manually, you can enable Quit in the Finder menu by entering this at the terminal:
-
defaults write com.apple.Finder QuitMenuItem 1
+
<code>defaults write com.apple.Finder QuitMenuItem 1</code>
Then, include these lines in a python script to quit the Finder automatically before you execute your program:
Then, include these lines in a python script to quit the Finder automatically before you execute your program:
Line 14: Line 14:
* Give your process a higher unix kernel priority
* Give your process a higher unix kernel priority
-
os.system("sudo renice -n %s %s" % (new_nice, os.getpid()))
+
Type this: <code>os.system("sudo renice -n %s %s" % (new_nice, os.getpid()))</code> into your ''psychopy'' code.
-
With new_nice set to -20 you'll get maximum priority (negatice niceness
+
With new_nice set to -20 you'll get maximum priority (negative niceness
-
means not very nice for other proceses). Unfortunately, you need be
+
means not very nice for other processes). Unfortunately, you need be
sudo for this so you need to type in the password each time. For most
sudo for this so you need to type in the password each time. For most
cases I doubt that's worth the hassle.
cases I doubt that's worth the hassle.
Read the tips on the psychopy wiki  [http://www.psychopy.org/home.php/Docs/TimingTips here] also [http://www.psychopy.org/home.php/Docs/CheckFrameDrops], also [http://www.psychopy.org/home.php/Docs/TimingIssues]
Read the tips on the psychopy wiki  [http://www.psychopy.org/home.php/Docs/TimingTips here] also [http://www.psychopy.org/home.php/Docs/CheckFrameDrops], also [http://www.psychopy.org/home.php/Docs/TimingIssues]
 +
==Visual==
==Visual==
To create custom resolutions and refresh rate modes for the screen if not available in System Preferences->Displays,
To create custom resolutions and refresh rate modes for the screen if not available in System Preferences->Displays,

Revision as of 21:16, 14 March 2011

Members

Alex Holcombe
Sarah McIntyre
Fahed Jbarah
• Shih-Yu Lo
• Patrick Goodbourn
Lizzy Nguyen
Alumni


Technical

Skills Checklist
Python Programming
Psychopy/VisionEgg Installation Notes
R analysis,plot,stats
Statistics
Buttonbox
Verifying timing
Programming Cheat Sheets


Precautions to avoid timing problems

  • Having a USB external hard drive connected as OSX's TimeMachine drive can take about 3 ms every 10-20 trials.
  • Best to disconnect one's Ethernet cable
  • When using two screens, the presence of the mouse polling and other things for the second screen can also cause timing hiccups. Try to use one screen- on a laptop, close the main LCD screen and wake the machine from sleep with just the second screen by connecting an external keyboard or mouse and clicking.
  • May want to quit finder. To do so manually, you can enable Quit in the Finder menu by entering this at the terminal:

defaults write com.apple.Finder QuitMenuItem 1

Then, include these lines in a python script to quit the Finder automatically before you execute your program:

 import os
 applescript="\'tell application \"Finder\" to quit\'"
 shellCmd = 'osascript -e '+applescript
 os.system(shellCmd)
  • Give your process a higher unix kernel priority

Type this: os.system("sudo renice -n %s %s" % (new_nice, os.getpid())) into your psychopy code. With new_nice set to -20 you'll get maximum priority (negative niceness means not very nice for other processes). Unfortunately, you need be sudo for this so you need to type in the password each time. For most cases I doubt that's worth the hassle.

Read the tips on the psychopy wiki here also [1], also [2]

Visual

To create custom resolutions and refresh rate modes for the screen if not available in System Preferences->Displays, use DisplayConfigX

Ideally, your program synchronizes drawing of the stimulus with the refresh of the CRT. To do this, you have to use particular techniques for drawing. Psychopy has some code included for checking interframe intervals with the system clock, see this page on the psychopy wiki

Once you think you've done it properly, best to further verify that stim drawing is synchronized with the CRT.

  • Use the tachometer
    • It lives in a box on the shelf of the lab
  • Use an oscilloscope
  • Visually verify that no screen refreshes are missed
    • e.g. my screenRefreshTest.py program exchanges the location of a black and white circle, one off screen and one on screen, every frame. Viewing the display, if any frames are missed, screen flicker should visibly stutter. Fortunately even at 160 Hz 800 by 600, frames are never missed until I try to draw about 10 circles every frame


Sound

Here Media:AudioAndUSBnotesWithPython.oo3 is the file with all my notes on different ways to play a sound in Python and the associated latencies and standard deviations of the latencies--Alex O. Holcombe 05:15, 25 June 2008 (UTC)

We used the oscilloscope to measure audiovisual synchrony using this stimulus:

The results are in this table:Image:CheckingSynchr.xls
Views
Personal tools