Skip to content

Population Receptive Field Mapping (Matlab)

mario.senden edited this page Jun 1, 2020 · 14 revisions

In the population receptive field mapping approach to retinotopy, receptive fields are formalized as parametric models (e.g. isotropic Gaussian). The parameters for each voxel are fit such that a BOLD signal predicted from moving a stimulus (according to the stimulation protocol of the retinotopy experiment) across the receptive field (RF) model matches the BOLD observed for that voxel. In the pRF tool provided in the CNI toolbox, a grid search is used to find the best parameters for all voxels in an isotropic 2D Gaussian model. After linear encoding of the stimulus using this model, compressive spatial summation may be applied.

The grid

The three parameters fit by the tool are the location of the RF (in Cartesian coordinates) and its size. However, the grid does not explore a set of size values. Rather it exploits that RF sizes are linearly related to eccentricity and explores a range of slopes for the size-eccentricity relationship. This effectively allows for exploration of a greater range of receptive field sizes. In terms of RF location, the visual field is split into a circular grid points, whose density decays exponentially with eccentricity. Close to the fovea, the grid is thus denser than in the periphery, thus taking cortical magnification into account. It is, however, also possible with the pRF tool to generate a linear grid of RF locations.

Instantiation

The tool needs to be instantiated with a number of parameters:

  • f_sampling - sampling frequency of data acquisition (1 / TR)
  • r_stimulus - stimulus width and height (square image)
  • n_samples - number of samples (functional volumes)
  • n_rows - number of rows (1st volumetric dimension of 4D data tensor)
  • n_cols - number of columns (2nd volumetric dimension of 4D data tensor)
  • n_slices - number of rows (3rd volumetric dimension of 4D data tensor)
parameters.f_sampling = sampling_frequency;
parameters.r_stimulus = stimulus_resolution;
[parameters.n_samples,...
    parameters.n_rows,...
    parameters.n_cols,...
    parameters.n_slices] = size(data);
prf = pRF(parameters);

Usage

Before RF parameters can be estimated, it is necessary to generate predicted BOLD signals based on a specific grid. This can be done using the generate_timecourses function. By default, this function generates a grid of thirty locations in each the x and y dimension as well as 10 slopes. Locations range from -10 to +10 degrees of visual angle (maximum radius of stimulated visual field). Slopes range from 0.1 to 1.2. Compressive spatial summation is not applied by default.

Using default parameters, creating predicted BOLD signals boils down to prf.create_timecourses(); However, all these parameters can be changed.

prf.create_timecourses('num_xy', number_xy,...         % number of points in x and y dimension
                       'num_slope', number_slopes,...  % number of slopes 
                       'max_radius', max_radius,...    % maximum radius of stimulated visual field
                       'min_slope', min_slope,...      % lower bound of slope
                       'max_slope', max_slope,...      % upper bound of slope
                       'css_exponent', alpha,...       % exponent for compressive spatial summation
                       'sampling', 'log',...           % location sampling type ('log' or 'linear')

The prf instance can now be used to map pRF parameters for data from runs sharing the same basic parameters specified before. For each of such run, a signal delay (in seconds; caused by the sluggishness of the BOLD signal) and a direction of rotation needs to be specified. Note that contracting rings are considered to move clockwise while expanding rings are consider to move counter-clockwise.

pea.set_delay(delay_value);
pea.set_direction('ccw');
results = pea.fitting(data);

During fitting, voxels whose mean signal intensity falls below a threshold will be skipped during analysis. This threshold can be adjusted. Specifically, the fitting function takes two optional arguments:

  • threshold - a mean signal intensity threshold below which a voxel is skipped (default = 100)
  • mask - a binary mask specifying for which voxels the analysis shouldbe carried out

The function returns a structure (results) with four fields:

  • phase - phase of a voxel's signal at stimulation frequency
  • amplitude - amplitude of a voxel's signal at stimulation frequency
  • f_statistic - F statistic per voxel
  • p_value - P value per voxel

These fields retain the volumetric dimensions of the data.

Clone this wiki locally