Welcome to Psiexperiment
Psiexperiment is a plugin-based framework for creating feature-rich auditory experiments with minimal effort. Psiexperiment can be run on any platform which supports Python and Qt or Pyside. The framework is robust enough to support a diverse range of closed and open-loop experiments. So far, the following experiments have been implemented:
Auditory brainstem responses.
Distortion product otoacoustic emissions (input-output functions, contralateral suppression, suppression using optogenetic stimuli).
Envelope following responses.
Operant behavior (go-nogo task) that can embed discrete sound tokens (i.e., targets and/or distractors) in a continuous background masker.
Noise exposures of several hours in duration.
Note
If you’re interested in the interleaved stimulus design for auditory brainstem responses (ABRs) described in Buran et al. (2019) [1], we have detailed information on how to use psiexperiment with the interleaved ABR program.
What you get
A powerful, flexible user interface
We use a interface that offers dockable panes that can be “torn off”, moved to other areas of the screen, minimized, maximized, or resized. This enables you to optimize the layout for your own workflow.
Simple hardware configuration
You describe the devies and data acquisition channels available for your experiment in a configuration file. Psiexperiment will automatically configure the hardware based on the requirements of the experiment you’re running.
Since all stimulus generation and data acquisition is built on top of a hardware abstraction layer, your experiment can easily be shared with other labs who may have a different acquisition system. Provided psiexperiment has the appropriate interface for that system and the system supports the appropriate capabilities needed by the experiment (i.e, sampling rate, number of input and output channels, etc.), psiexperiment will be able to run the experiment on that system.
Built-in caching and buffers to optimize stimulus generation and data acquisition.
Simple generation of auditory stimuli
Psiexperiment has a set of robust auditory calibration utilities using tones, chirps and Golay sequences that can be used to calibrate both closed-field and free-field systems.
An auditory stimulus generation system that incorporates calibration information and can generate complex stimuli that are either brief (i.e., clicks and tone pips for ABRs) or near-infinite (i.e., long noise exposures, continuous background masking during behavior, etc.) in duration.
A powerful stimulus queue that allows you to queue stimuli for playout. Any type of stimulus can be added to the queue, allowing you to build complex trial structures (e.g., trains of tone pips with varying frequency and level; tone clouds; temporal orthogonal ripple noise combinations followed by a tone).
Support for continuous generation of stimuli that are naturally infinite. For example, noise can be infinite in duration; however, the typical approach is to generate a short segment (e.g., 30 seconds) and repeat that segment. Instead, we support the generation of infinite stimuli without having to repeat a segment.
Support for merging multiple stimuli into a single stream that can be played through a speaker. For example, this allows generation of continuous maskers during a behavioral experiment. The target stimuli are then embedded in this masker at the appropriate times.
Plugin-based system
You can define actions based on what happens during an experiment. If the animal licks the spout, what should the program do?
A native GUI with dockable components that reacts to user input (built on Atom and Enaml).
Simple, intuitive experiment configuration that allows you to focus on experiment design (i.e., what you want the experiment to do) rather than implementation (how to write the code to make it work).
Easy configuration of experiment settings via the GUI.
New settings can be added via a few lines of code
One or more settings can be marked for control as part of a sequence of values to be tested. For example, in many tests of peripehral auditory function multiple frequencies and levels will be tested.
In the GUI, values for settings can be expressed as equations. For example, if you have settings specifying the levels of two tones,
f1_level
andf2_level
, you can fix the level of the second tone relative to the first by specifying its value asf2_level = f1_level + 10
. Alternatively, you could randomly draw the level from a set of values on each trial asf2_level = np.random.choice([30, 35, 40, 45])
.
Large number of plugins for controlling the sequence of experiments, generating various stimuli, plotting results and saving data. Plugins can modify any part of psiexperiment (e.g., each plugin can contribute one or more dockable components to the GUI, contribute one or more new stimuli types, etc.).
Easy to write new plugins using a declarative programming langauge with Python flavour.
Getting started
Installing
Instructions on installing psiexperiment and configuring your system.
Input-output manifest
Instructions on creating your input-output manifest which describes all equipment used for the experiment.
Software
Instructions for end-users.
Development
Development Workflow
Suggestions for setting up psiexperiment for development.
What makes an experiment?
How are experiments defined?
Context
Define parameters and sequences.
Waveforms
Create stimuli.
Designing a new experiment
Instructions on how to create your own experiment.
psi
Overview of API.
References
Contributors and Acknowledgements
Brad Buran (New York University, Oregon Health & Science University)
Decibel Therapeutics, Inc.
Work on psiexperiment was supported by grants R01-DC009237 and R21-DC016969 from the National Institute on Deafness and Other Communication Disorders and an Emerging Research Grant from the Hearing Health Foundation. Ann Hickox provided extensive testing and feedback on the TDT backend for psiexperiment.