ingo-m / pyprf

A free & open python tool for population receptive field analysis.
GNU General Public License v3.0
15 stars 3 forks source link

PyPI version Build Status codecov DOI

PyPRF

A free & open source python package for population receptive field (pRF) analysis. With this package you can present visual stimuli for a retinotopic mapping fMRI experiment, and perform a pRF analysis on the fMRI data.

1. Stimulus presentation

Presents visual stimuli for retinotopic mapping experiments. The stimuli consist of bars at different locations and orientations, filled with flickering black and white checkerboards. It is important that the participant fixates throughout the experiment. Therefore, there is a central fixation task. The fixation dot occasionally changes its colour, and the task is to press a button (number 1) in response. At the end of the presentation, the participant's hit rate is provided as feedback.

2. Data analysis

Analysis tools for fMRI data from retinotopic mapping experiment. A pRF is estimated for each voxel (see [1]). The pRF model used here is a 2D Gaussian; the free parameters are the Gaussian's x- and y-position, and its width (SD). This rather simple pRF model is best suited for early visual cortex (higher cortical areas may require more complex models).

How to use - stimulus presentation

  1. Installation

The stimulus presentation is implemented in Psychopy, so if you would like to run the experiment, you first need to install Psychopy (if you already have fMRI data and would like to run the analysis, you can skip this step). On debian, Psychopy can easily be installed using apt-get:

sudo apt-get install psychopy

If you're running some other operating system, please refer to the Psychopy website.

For the stimulus presentation, you do not need to install pyprf. You only need a copy of the folder ~/pyprf/pyprf/stimulus_presentation. The easiest way to get the pyprf stimuli is to clone the github repository:

git clone https://github.com/ingo-m/pyprf.git

(Or click the download button.)

Then you can simply copy the folder stimulus_presentation and all its contents to the computer that you use for stimulus presentation. (Do not change the folder names. )

  1. Create design matrix

Before you can run the experiment, you need to create a design matrix in which you specify the experimental design (e.g. how many repetitions of the stimulus, inter trial interval for target events, fMRI volume TR, etc.). You can either open the script ~/pyprf/pyprf/stimulus_presentation/code/create_design_matrix.py in Psychopy and run it from there, or call it directly at command line.

You can specify all parameters in the GUI that will pop up. Note that there is one stimulus per fMRI volume, so you have to know the volume TR when creating the design matrix.

  1. Stimulus presentation

In order to present the stimuli, you can open the file ~/pyprf/pyprf/stimulus_presentation/code/stimulus.py in Psychopy and run it from there. Alternatively, you can call the presentation script directly from command line:

python `~/pyprf/pyprf/stimulus_presentation/code/stimulus.py`

A GUI will open where you can specify further experimental parameters. Importantly, the name of the design matrix (e.g. 'Run_01') needs to match that of the file you created in the previous step.

After starting the script, it will wait for a trigger signal from the fMRI scanner (default: keyboard button 5).

The stimuli look like this:

You can interrupt the presentation by pressing e and x at the same time.

How to use - analysis

  1. Install numpy. For instance:
pip install numpy

(Or, alternatively, if you're using conda, conda install -c conda-forge numpy.)

  1. The pyprf package can directly be installed from PyPI, in the following way:
pip install pyprf

(Alternatively, you could also installed it from the repository, like this: git clone https://github.com/ingo-m/pyprf.git followed by pip install /path/to/pyprf.)

  1. Data analysis:

In order to prepare the analysis, you need to run the stimulus presentation script in logging mode in order to create a log of the stimulus presentation. Run ~/pyprf/pyprf/stimulus_presentation/code/stimulus.py (as described above, either from Psychopy or at command line). In the GUI, set 'Logging mode' to True.

The stimulus presentation log is created in the folder ~/pyprf/pyprf/stimulus_presentation/log/Run_*_frames/.

The analysis parameters are set in a config file. An example file can be found here. See comments therein for more information.

Run the analysis:

pyprf -config /path/to/config.csv

Dependencies

pyprf is implemented in Python 3.6.

If you install pyprf using pip (as described above), all of the following dependencies except for Psychopy and numpy are installed automatically - you do not have to take care of this yourself. Simply follow the above installation instructions.

Stimulus presentation Tested version
Psychopy 1.83.04
NumPy 1.15.1
SciPy 1.1.0
Pillow 5.0.0
Data analysis Tested version
NumPy 1.15.1
SciPy 1.1.0
NiBabel 2.2.1
Cython¹ 0.27.1
Pillow 5.0.0
Tensorflow² 1.4.0
h5py 2.8.0

¹: For considerably faster performance

²: Can yield fast performance, depending on hardware. However, requires tensorflow to be configured for GPU usage (additional tensorflow specific dependencies, including GPU drivers).

The analysis can be carried out in three different ways: using numpy, cython, or tensorflow. You can set this option in the config.csv file. All three approaches yield the same results, but differ in their dependencies and computational time:

Contributions

For contributors, we suggest the following procedure:

References

This application is based on the following work:

[1] Dumoulin, S. O. & Wandell, B. A. (2008). Population receptive field estimates in human visual cortex. NeuroImage 39, 647–660.

Support

Please use the github issues for questions or bug reports. You can also contact us on the pyprf gitter channel.

License

The project is licensed under GNU General Public License Version 3.