8.1. Generic BIDS datagrabber for datalad.#

This example uses a generic BIDS datagraber to get the data from a BIDS dataset store in a datalad remote sibling.

Authors: Federico Raimondo

License: BSD 3 clause

from junifer.datagrabber import PatternDataladDataGrabber
from junifer.utils import configure_logging

Set the logging level to info to see extra information

configure_logging(level="INFO")
2023-03-31 13:28:18,789 - JUNIFER - INFO - ===== Lib Versions =====
2023-03-31 13:28:18,789 - JUNIFER - INFO - numpy: 1.23.5
2023-03-31 13:28:18,790 - JUNIFER - INFO - scipy: 1.10.1
2023-03-31 13:28:18,790 - JUNIFER - INFO - pandas: 1.5.3
2023-03-31 13:28:18,790 - JUNIFER - INFO - nilearn: 0.10.0
2023-03-31 13:28:18,790 - JUNIFER - INFO - nibabel: 4.0.2
2023-03-31 13:28:18,790 - JUNIFER - INFO - junifer: 0.0.2
2023-03-31 13:28:18,790 - JUNIFER - INFO - ========================

The BIDS datagrabber requires three parameters: the types of data we want, the specific pattern that matches each type, and the variables that will be replaced int he patterns.

types = ["T1w", "BOLD"]
patterns = {
    "T1w": "{subject}/anat/{subject}_T1w.nii.gz",
    "BOLD": "{subject}/func/{subject}_task-rest_bold.nii.gz",
}
replacements = ["subject"]

Additionally, a datalad datagrabber requires the URI of the remote sibling and the location of the dataset within the remote sibling.

repo_uri = "https://gin.g-node.org/juaml/datalad-example-bids"
rootdir = "example_bids"

Now we can use the datagrabber within a with context One thing we can do with any datagrabber is iterate over the elements. In this case, each element of the datagrabber is one session.

2023-03-31 13:28:18,791 - JUNIFER - INFO - `datadir` is None, creating a temporary directory
2023-03-31 13:28:18,791 - JUNIFER - INFO - `datadir` set to /tmp/tmprqed3bk1/datadir
sub-09
sub-07
sub-08
sub-02
sub-01
sub-03
sub-06
sub-05
sub-04

Another feature of the datagrabber is the ability to get a specific element by its name. In this case, we index sub-01 and we get the file paths for the two types of data we want (T1w and bold).

2023-03-31 13:28:21,727 - JUNIFER - INFO - `datadir` is None, creating a temporary directory
2023-03-31 13:28:21,727 - JUNIFER - INFO - `datadir` set to /tmp/tmpp9euelpm/datadir
2023-03-31 13:28:24,158 - JUNIFER - INFO - Getting element sub-01
{'T1w': {'path': PosixPath('/tmp/tmpp9euelpm/datadir/example_bids/sub-01/anat/sub-01_T1w.nii.gz'), 'meta': {'datagrabber': {'class': 'PatternDataladDataGrabber', 'confounds_format': None, 'types': ['T1w', 'BOLD'], 'patterns': {'T1w': '{subject}/anat/{subject}_T1w.nii.gz', 'BOLD': '{subject}/func/{subject}_task-rest_bold.nii.gz'}, 'replacements': ['subject'], 'uri': 'https://gin.g-node.org/juaml/datalad-example-bids', 'datalad_dirty': False, 'datalad_commit_id': '522dfb203afcd2cd55799bf347f9b211919a7338', 'datalad_id': 'fec92475-d9c0-4409-92ba-f041b6a12c40'}, 'dependencies': set(), 'element': {'subject': 'sub-01'}}}, 'BOLD': {'path': PosixPath('/tmp/tmpp9euelpm/datadir/example_bids/sub-01/func/sub-01_task-rest_bold.nii.gz'), 'meta': {'datagrabber': {'class': 'PatternDataladDataGrabber', 'confounds_format': None, 'types': ['T1w', 'BOLD'], 'patterns': {'T1w': '{subject}/anat/{subject}_T1w.nii.gz', 'BOLD': '{subject}/func/{subject}_task-rest_bold.nii.gz'}, 'replacements': ['subject'], 'uri': 'https://gin.g-node.org/juaml/datalad-example-bids', 'datalad_dirty': False, 'datalad_commit_id': '522dfb203afcd2cd55799bf347f9b211919a7338', 'datalad_id': 'fec92475-d9c0-4409-92ba-f041b6a12c40'}, 'dependencies': set(), 'element': {'subject': 'sub-01'}}}}

Total running time of the script: ( 0 minutes 6.408 seconds)

Gallery generated by Sphinx-Gallery