Browse Source

Code to compress BOLD 4D into ROI time series CSV

Michael Hanke 7 years ago
parent
commit
0926d7e81e
2 changed files with 48 additions and 1 deletions
  1. 2 1
      code/get_data.sh
  2. 46 0
      code/vol2ts.py

+ 2 - 1
code/get_data.sh

@@ -1,4 +1,5 @@
 datalad install \
 	src/aligned/src/tnt/sub-*/bold3Tp2/brain{,_mask}.nii.gz \
 	src/aligned/src/tnt/sub-*/bold3Tp2/in_grpbold3Tp2/tmpl2subj_warp.nii.gz \
-	src/aligned/src/tnt/templates/grpbold3Tp2/xfm/mni2tmpl_12dof.mat
+	src/aligned/src/tnt/templates/grpbold3Tp2/xfm/mni2tmpl_12dof.mat \
+	src/aligned/sub-*/in_bold3Tp2/sub-*_task-avmovie_run-*

+ 46 - 0
code/vol2ts.py

@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+import sys
+import os
+
+args = dict(
+    sub=sys.argv[1],
+    run=sys.argv[2])
+
+atlas_filename = "sub-{sub}/atlases/bold3Tp2/shen_fconn_atlas_150.nii.gz".format(**args)
+fmri_filename = "src/aligned/sub-{sub}/in_bold3Tp2/sub-{sub}_task-avmovie_run-{run}_bold.nii.gz".format(**args)
+confounds = "src/aligned/sub-{sub}/in_bold3Tp2/sub-{sub}_task-avmovie_run-{run}_bold_mcparams.txt".format(**args)
+csv_filename = os.path.join("sub-{sub}".format(**args), os.path.basename(fmri_filename)[:-6] + "csv")
+
+##############################################################################
+# Extract signals on a parcellation defined by labels using the
+# NiftiLabelsMasker
+from nilearn.input_data import NiftiLabelsMasker
+masker = NiftiLabelsMasker(
+    labels_img=atlas_filename,
+    background_label=0,
+    smoothing_fwhm=4.0,
+    t_r=2.0,
+    standardize=True,
+    detrend=True,
+    memory='nilearn_cache',
+    verbose=5)
+
+# Here we go from nifti files to the signal time series in a numpy
+# array. Note how we give confounds to be regressed out during signal
+# extraction
+time_series = masker.fit_transform(
+    fmri_filename,
+    confounds=confounds)
+labels = [int(l) for l in masker.labels_]
+
+##############################################################################
+# Store as CSV
+import numpy as np
+np.savetxt(
+    csv_filename,
+    time_series,
+    delimiter=',',
+    header=','.join([str(l) for l in labels]),
+    comments='',
+    fmt="%.10f")