This is the code to analyse the experiment described in "Sensitivity to the visual field origin of natural image patches in human low-level visual cortex".
The code for running the experiment can be found at https://bitbucket.org/djmannion/ul_sens_fmri.
Run the localiser GLMs. These look at regions responsive to the timecourse of stimulation in the upper or lower visual fields, regardless of the 'source' of the stimulation (ie. whether it came from above or below fixation):
ul_sens_analysis ${SUBJ_ID} ${ACQ_DATE} loc_glm
This produces the beta and GLM files for the upper and lower visual fields and the left and right hemispheres, saved in the subject's loc_analysis
directory. Open them in SUMA and verify the upper -> ventral, lower -> dorsal arrangement.
We convert the localiser GLM files into masks by thresholding the t-value, and restrict it to V1, V2, and V3. We then average across all the nodes in a given ROI mask and hemisphere that are responsive to the stimulus for each run's timecourse, average those timecourses across hemispheres, and then write it out as a dataset that can then be interrogated via GLM:
ul_sens_analysis ${SUBJ_ID} ${ACQ_DATE} glm_prep
This runs a GLM for the upper and lower visual fields, with events separated by whether they were drawn from above or below fixation. This GLM is based on the average nodes within each area. The resulting beta weights are converted to percent signal change:
ul_sens_analysis ${SUBJ_ID} ${ACQ_DATE} glm
We get the response amplitude (psc) for each image, presentation location (upper, lower), source location (above, below), and ROI (V1, V2, V3) for each subject:
ul_sens_group_analysis resp_amp
This saves both in complete numpy format (ul_sens_group_amp_data.npy
) and in a format suitable for SPSS (ul_sens_group_amp_data_spss.txt
), where images have been averaged over.
We average over ROIs and calculate the difference between upper and lower visual field presentation for each image x source location pair, and then sort based on this difference (saved as ul_sens_group_amps_diffs_sorted.npy
):
ul_sens_group_analysis resp_diffs
Most of the statistics are performed in SPSS (AFNI doesn't have a simple three-way ANOVA command), but we run the simple effects analysis ourselves. This calculates t-tests comparing source locations for each presentation location, and also prints out descriptive stats:
ul_sens_group_analysis stats
Interaction plot for visual field and source locations, separately for each ROI:
ul_sens_group_figures resp_amp_rois
As above, but averaged over ROIs. This is the data that the stats are based on:
ul_sens_group_figures resp_amp
Form a PDF file where each page is an image, source location, and presenatation location:
ul_sens_group_figures stim_library
Plot the image fragments that evoked the top 5 largest differences between upper and lower visual field presentation (both signs):
ul_sens_group_figures resp_diff
Saves the image fragments; image x source (above, below) x side (left, right) x rows x columns x (lum, r-g, b-y).
Data are saved in ul_sens_img_frags_dkl.npy
:
ul_sens_img_analysis dkl
Computes the histogram stats on the fragments; stat (mean, std) x image x source (above, below) x side (left, right) x channel (lum, r-g, b-y).
Saves the data to ul_sens_img_hist_output.npy
:
ul_sens_img_analysis hist
Computes the filter stats on the fragments; image x source x side x channel x SF x orientation.
Saves the data to ul_sens_img_filter_output.npy
:
ul_sens_img_analysis filter
Uses the filter stats to compare radial and tangential orientation content, and prints the output to the screen:
ul_sens_img_analysis radial_bias
Compares the histogram stats with the observed fMRI difference between the upper and lower visual fields:
ul_sens_img_analysis correlate_hist
Compares the filter-based stats with the observed fMRI difference between the upper and lower visual fields:
ul_sens_img_analysis correlate_filt