Skip to main content

A PsychoPy extension for stereoscopic display and more.

Project description

Introduction

The psykit package extends the capacity of the PsychoPy package in generating stereoscopic stimuli, using offscreen windows, and more.

  • PsychoPy is a great tool for quickly creating psychophysical experiments. However, it has limited support for stereoscopic displays out-of-the-box. The psykit.stereomode module provides the StereoWindow class, a drop-in upgrade for psychopy.visual.Window, which supports a wide variety of stereo modes similar to Psychtoolbox in Matlab, including

    • ‘left/right’ (for prisms and mirrors)

    • ‘side-by-side-compressed’ (for some VR goggles)

    • ‘red/blue’ (for anaglyph glasses)

    • ‘sequential’ (for blue line sync shutters)

    • ‘top/bottom’ (for the double-height mode of ProPixx projector)

    • ‘top/bottom-anticross’ (same as above but with cross-talk compensation)

    Users can debug in one stereo mode and do experiment in another, without needing to modify their code. Most modes can even be switched back and forth at runtime.

  • Sometimes, we need to dynamically render a complex scene and reuse it for multiple times, e.g., drawing a dynamic and complex background for both left- and right-eye buffers. The psychopy.visual.BufferImageStim is not suitable in this case because it is fast to draw but slower to init. The psykit.offscreen module provides the OffscreenWindow class, essentially a framebuffer designed for drawing various stimuli efficiently. These can then be rendered collectively at high speed. Unlike BufferImageStim, OffscreenWindow is fast to draw and fast to init, and may significantly reduce rendering time and the risk of frame drops in the above use case.

  • PsychoPy users who come from Psychtoolbox sometimes miss the flexibility of the Screen('DrawTexture') style low-level API, e.g., for drawing only part of a texture. The psykit package implements some of these low-level functions like psykit.create_texture and psykit.draw_texture for special use cases. See this example for an interesting demo.

  • The psykit.gltools module provides an alternative and lightweight wrapper (compared to psychopy.tools.gltools) around modern OpenGL commands, e.g., shader, VAO, FBO, etc., which are used by other modules.

  • The psykit/demos folder contains many example scripts demonstrating our favorite use cases, e.g., how to use psykit.stereomode.StereoWindow with psychopy, as well as various 3D modes of the ProPixx projector.

Documentation

The basic usage is intuitive:

from psychopy import visual, event, core
from psykit.stereomode import StereoWindow

# Open a stereo window
win = StereoWindow(monitor='testMonitor', units='deg', fullscr=False,
    stereoMode='top/bottom-anticross', crossTalk=[0.07,0.07], color='gray')
gabor = visual.GratingStim(win, tex='sin', mask='gauss', size=[5,5], sf=1)
t = win.flip()
while True:
    # Draw left eye stimuli
    win.setBuffer('left')
    gabor.phase = 3*t
    gabor.draw()
    # Draw right eye stimuli
    win.setBuffer('right')
    gabor.phase = 2*t
    gabor.draw()
    # Flip
    t = win.flip()
    if 'escape' in event.getKeys():
        break
win.close()
core.quit()

For Builder users, it is easy to adapt an ordinary Window into a StereoWindow:

# Open an ordinary window (e.g., from the Builder)
win = visual.Window(monitor='testMonitor', units='deg', fullscr=False, color='gray')
# Adapt it into a stereo window
win = StereoWindow(win, stereoMode='top/bottom-anticross', crossTalk=[0.07,0.07])

You may also find the following demo stripts useful:

  • demos/minimum_example.py # A minimum quickstart script that uses StereoWindow

  • demos/stereo_modes.py # Switch between modes at runtime and adjust cross-talk compensation

  • demos/visual_stims.py # Draw various stimuli (e.g., Aperture) in StereoWindow

  • demos/adjust_fixation.py # Adjust vergence and coordinate origin for ‘left/right’ mode

  • demos/propixx_polarizer.py # Work with different 3D modes of ProPixx projector

  • demos/offscreen_window.py # Use OffscreenWindow to cache and reuse complex stimuli

  • demos/draw_texture.py # Use draw_texture to only draw a selected part of a texture

Installation

The most convenient way to install psykit is via the “Plugin/packages manager” of Psychopy GUI interface. After opening the “Plugins & Packages” dialog, go to the “Packages” tab, click “Open PIP terminal”, execute “pip install psykit”. If you want to upgrade an existing installation, execute “pip install -U psykit”.

If you installed PsychoPy via the standalone installer, it is also possible to download and unzip the psykit source code and copy the package folder into the applicaton folder:

  • For macOS: “/Applications/PsychoPy.app/Contents/Resources/lib/python3.8/psykit”

  • For Windows: “C:\Program Files\PsychoPy\Lib\site-packages\psykit”

Otherwise, simply use pip install:

pip install psykit

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

psykit-1.2.1.tar.gz (31.8 kB view details)

Uploaded Source

Built Distribution

psykit-1.2.1-py3-none-any.whl (38.8 kB view details)

Uploaded Python 3

File details

Details for the file psykit-1.2.1.tar.gz.

File metadata

  • Download URL: psykit-1.2.1.tar.gz
  • Upload date:
  • Size: 31.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.5

File hashes

Hashes for psykit-1.2.1.tar.gz
Algorithm Hash digest
SHA256 4bda9704b1ce1ecac861250bc2bb319824b3b53352633e256b31d341871ac378
MD5 32cd646d661e7584dc43d44059f2a622
BLAKE2b-256 f8dbcdd3754664afab8d507ab97eb4c0d2f89f56e2f28b7266aab9b6bb86325e

See more details on using hashes here.

File details

Details for the file psykit-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: psykit-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 38.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.5

File hashes

Hashes for psykit-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0ccd95dbe8d900d7cb4279297806e73dfac4d026d72bf0929d037e1ab79d3f1b
MD5 32c7a42b1f15e8ad3c52f6022fae3625
BLAKE2b-256 6b2b66e902812fe447f03f487e5fe8378eab66a1cd7b974551cb889edc673286

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page