Note
Go to the end to download the full example code.
8.4. Computer Parcel Aggregation.¶
This example uses the ParcelAggregation
marker to compute the mean of each
parcel using the Schaefer parcellations (100 rois, 7 Yeo networks) for both 3D
and 4D NIfTI.
Authors: Federico Raimondo, Synchon Mandal
License: BSD 3 clause
from junifer.testing.datagrabbers import (
OasisVBMTestingDataGrabber,
SPMAuditoryTestingDataGrabber,
)
from junifer.datareader import DefaultDataReader
from junifer.markers import ParcelAggregation
from junifer.utils import configure_logging
Set the logging level to info to see extra information
configure_logging(level="INFO")
2024-08-14 13:31:04,150 - JUNIFER - INFO - ===== Lib Versions =====
2024-08-14 13:31:04,150 - JUNIFER - INFO - numpy: 1.26.4
2024-08-14 13:31:04,150 - JUNIFER - INFO - scipy: 1.14.0
2024-08-14 13:31:04,150 - JUNIFER - INFO - pandas: 2.1.4
2024-08-14 13:31:04,150 - JUNIFER - INFO - nilearn: 0.10.4
2024-08-14 13:31:04,150 - JUNIFER - INFO - nibabel: 5.2.1
2024-08-14 13:31:04,150 - JUNIFER - INFO - junifer: 0.0.6.dev23
2024-08-14 13:31:04,151 - JUNIFER - INFO - ========================
Perform parcel aggregation on VBM GM data (3D) from OASIS dataset
with OasisVBMTestingDataGrabber() as dg:
# Get the first element
element = dg.get_elements()[0]
# Read the element
element_data = DefaultDataReader().fit_transform(dg[element])
# Initialize marker
marker = ParcelAggregation(parcellation="Schaefer100x7", method="mean")
# Compute feature
feature = marker.fit_transform(element_data)
# Print the output
print(feature.keys())
print(feature["VBM_GM"]["aggregation"]["data"].shape) # Shape is (1 x parcels)
2024-08-14 13:31:04,155 - JUNIFER - INFO - Getting element sub-01
2024-08-14 13:31:04,156 - JUNIFER - INFO - Reading VBM_GM from /home/runner/nilearn_data/oasis1/OAS1_0001_MR1/mwrc1OAS1_0001_MR1_mpr_anon_fslswapdim_bet.nii.gz
2024-08-14 13:31:04,156 - JUNIFER - INFO - VBM_GM is of type NIFTI
2024-08-14 13:31:04,157 - JUNIFER - INFO - Computing VBM_GM
2024-08-14 13:31:04,157 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
2024-08-14 13:31:04,157 - JUNIFER - INFO - Parcellation parameters:
2024-08-14 13:31:04,157 - JUNIFER - INFO - resolution: 2.0
2024-08-14 13:31:04,157 - JUNIFER - INFO - n_rois: 100
2024-08-14 13:31:04,157 - JUNIFER - INFO - yeo_networks: 7
2024-08-14 13:31:04,158 - JUNIFER - INFO - At least one of the parcellation files are missing. Fetching using nilearn.
Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_100Parcels_7Networks_order.txt ...
...done. (0 seconds, 0 min)
Downloading data from https://raw.githubusercontent.com/ThomasYeoLab/CBIG/v0.14.3-Update_Yeo2011_Schaefer2018_labelname/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI/Schaefer2018_100Parcels_7Networks_order_FSLMNI152_2mm.nii.gz ...
...done. (0 seconds, 0 min)
2024-08-14 13:31:04,189 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
2024-08-14 13:31:04,219 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
2024-08-14 13:31:05,260 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
2024-08-14 13:31:05,357 - JUNIFER - INFO - antsApplyTransforms command to be executed:
antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmpp3v3ecmt/parcellationssctdwwqx/Schaefer100x7.nii.gz -r /tmp/tmpp3v3ecmt/parcellationssctdwwqx/MNI152Lin_T1w_2.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp4p07cfs7/parcellationso9rk53t7/Schaefer100x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
2024-08-14 13:31:06,747 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
2024-08-14 13:31:07,734 - JUNIFER - INFO - No storage specified, returning dictionary
dict_keys(['VBM_GM'])
(1, 100)
Perform parcel aggregation on BOLD data (4D) from SPM Auditory dataset
with SPMAuditoryTestingDataGrabber() as dg:
# Get the first element
element = dg.get_elements()[0]
# Read the element
element_data = DefaultDataReader().fit_transform(dg[element])
# Initialize marker
marker = ParcelAggregation(
parcellation="Schaefer100x7", method="mean", on="BOLD"
)
# Compute feature
feature = marker.fit_transform(element_data)
# Print the output
print(feature.keys())
print(feature["BOLD"]["aggregation"]["data"].shape) # Shape is (timepoints x parcels)
2024-08-14 13:31:07,735 - JUNIFER - INFO - Getting element sub001
Dataset created in /home/runner/nilearn_data/spm_auditory
Data absent, downloading...
Downloading data from https://www.fil.ion.ucl.ac.uk/spm/download/data/MoAEpilot/MoAEpilot.zip ...
Downloaded 3538944 of 34212021 bytes (10.3%, 9.2s remaining)
Downloaded 9240576 of 34212021 bytes (27.0%, 5.7s remaining)
Downloaded 15360000 of 34212021 bytes (44.9%, 3.9s remaining)
Downloaded 21708800 of 34212021 bytes (63.5%, 2.4s remaining)
Downloaded 27623424 of 34212021 bytes (80.7%, 1.2s remaining)
Downloaded 34127872 of 34212021 bytes (99.8%, 0.0s remaining) ...done. (7 seconds, 0 min)
Extracting data from /home/runner/nilearn_data/spm_auditory/sub001/MoAEpilot.zip..... done.
2024-08-14 13:31:18,271 - JUNIFER - INFO - Reading BOLD from /tmp/tmp9iebezdi/sub001_bold.nii.gz
2024-08-14 13:31:18,272 - JUNIFER - INFO - BOLD is of type NIFTI
2024-08-14 13:31:18,273 - JUNIFER - INFO - Reading T1w from /tmp/tmp9iebezdi/sub001_T1w.nii.gz
2024-08-14 13:31:18,273 - JUNIFER - INFO - T1w is of type NIFTI
2024-08-14 13:31:18,274 - JUNIFER - INFO - Computing BOLD
2024-08-14 13:31:18,274 - JUNIFER - INFO - Fetching one of Schaefer parcellations.
2024-08-14 13:31:18,274 - JUNIFER - INFO - Parcellation parameters:
2024-08-14 13:31:18,274 - JUNIFER - INFO - resolution: 3.0
2024-08-14 13:31:18,274 - JUNIFER - INFO - n_rois: 100
2024-08-14 13:31:18,275 - JUNIFER - INFO - yeo_networks: 7
2024-08-14 13:31:18,276 - JUNIFER - INFO - Loading parcellation /home/runner/junifer/data/parcellations/schaefer_2018/Schaefer2018_100Parcels_7Networks_order_FSLMNI152_2mm.nii.gz
2024-08-14 13:31:18,307 - JUNIFER - INFO - Found existing xfm file for MNI152NLin6Asym to MNI152Lin at /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5
2024-08-14 13:31:19,329 - JUNIFER - INFO - Downloading template MNI152Lin in resolution 2
2024-08-14 13:31:19,426 - JUNIFER - INFO - antsApplyTransforms command to be executed:
antsApplyTransforms -d 3 -e 3 -n 'GenericLabel[NearestNeighbor]' -i /tmp/tmpp3v3ecmt/parcellationsm5qmr0r2/Schaefer100x7.nii.gz -r /tmp/tmpp3v3ecmt/parcellationsm5qmr0r2/MNI152Lin_T1w_3.0.nii.gz -t /home/runner/junifer/data/xfms/MNI152NLin6Asym_to_MNI152Lin/MNI152NLin6Asym_to_MNI152Lin_Composite.h5 -o /tmp/tmp4p07cfs7/parcellationsijtsoz0_/Schaefer100x7_warped_from_MNI152NLin6Asym_to_MNI152Lin.nii.gz
2024-08-14 13:31:20,823 - JUNIFER - INFO - antsApplyTransforms command succeeded with the following output:
2024-08-14 13:31:23,570 - JUNIFER - INFO - No storage specified, returning dictionary
dict_keys(['BOLD'])
(96, 100)
Total running time of the script: (0 minutes 19.426 seconds)