Developers - API
The NiPreps community and contributing guidelines
fMRIPost-AROMA is a NiPreps application, and abides by the NiPreps Community guidelines. Please, make sure you have read and understood all the documentation provided in the NiPreps portal before you get started.
Setting up your development environment
We believe that fMRIPost-AROMA must be free to use, inspect, and critique. Correspondingly, you should be free to modify our software to improve it or adapt it to new use cases and we especially welcome contributions to improve it or its documentation.
We actively direct efforts into making the scrutiny and improvement processes as easy as possible. As part of such efforts, we maintain some tips and guidelines for developers to help minimize your burden if you want to modify the software.
Internal configuration system
A Python module to maintain unique, run-wide fMRIPost-AROMA settings.
This module implements the memory structures to keep a consistent, singleton config.
Settings are passed across processes via filesystem, and a copy of the settings for
each run and subject is left under
<fmriprep_dir>/sub-<participant_id>/log/<run_unique_id>/fmripost_aroma.toml.
Settings are stored using ToML.
The module has a to_filename() function to allow writing out
the settings to hard disk in ToML format, which looks like:
This config file is used to pass the settings across processes,
using the load() function.
Configuration sections
- class fmripost_aroma.config.environment[source]
Read-only options regarding the platform and environment.
Crawls runtime descriptive settings (e.g., default FreeSurfer license, execution environment, nipype and fMRIPost-AROMA versions, etc.). The
environmentsection is not loaded in from file, only written out when settings are exported. This config section is useful when reporting issues, and these variables are tracked whenever the user does not opt-out using the--notrackargument.- cpu_count = 2
Number of available CPUs.
- exec_docker_version = None
Version of Docker Engine.
- exec_env = 'posix'
A string representing the execution platform.
- free_mem = 6.2
Free memory at start.
- nipype_version = '1.10.0'
Nipype’s current version.
- overcommit_limit = '50%'
Linux’s kernel virtual memory overcommit limits.
- overcommit_policy = 'heuristic'
Linux’s kernel virtual memory overcommit policy.
- templateflow_version = '25.1.1'
The TemplateFlow client version installed.
- version = '0.0.13.dev11+g96a89a22b'
fMRIPost-AROMA’s version.
- class fmripost_aroma.config.execution[source]
Configure run-level settings.
- aggr_ses_reports = None
Maximum number of sessions aggregated in one subject’s visual report.
- bids_database_dir = None
Path to the directory containing SQLite database indices for the input BIDS dataset.
- bids_description_hash = None
Checksum (SHA256) of the
dataset_description.jsonof the BIDS dataset.
- bids_dir = None
An existing path to the dataset, which must be BIDS-compliant.
- bids_filters = None
A dictionary of BIDS selection filters.
- boilerplate_only = False
Only generate a boilerplate.
- country_code = 'CAN'
Country ISO code used by carbon trackers.
- debug = []
Debug mode(s).
- derivatives = {}
Path(s) to search for pre-computed derivatives
- fs_license_file = None
An existing file containing a FreeSurfer license.
- layout = None
A
BIDSLayoutobject, seeinit().
- log_dir = None
The path to a directory that contains execution logs.
- log_level = 25
Output verbosity.
- low_mem = None
Utilize uncompressed NIfTIs and other tricks to minimize memory allocation.
- md_only_boilerplate = False
Do not convert boilerplate from MarkDown to LaTex and HTML.
- notrack = False
Do not collect telemetry information for fMRIPost-AROMA.
- output_dir = None
Folder where derivatives will be stored.
- output_spaces = None
List of (non)standard spaces designated (with the
--output-spacesflag of the command line) as spatial references for outputs.
- participant_label = None
List of participant identifiers that are to be preprocessed.
- reports_only = False
Only build the reports, based on the reportlets found in a cached working directory.
- run_uuid = '20260201-114047_74f8e298-cf49-409c-8699-070abc31f294'
Unique identifier of this particular run.
- sloppy = False
Run in sloppy mode (meaning, suboptimal parameters that minimize run-time).
- task_id = None
Select a particular task from all available in the dataset.
- templateflow_home = PosixPath('/home/docs/.cache/templateflow')[source]
The root folder of the TemplateFlow client.
- track_carbon = False
Tracks power draws using CodeCarbon package.
- work_dir = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/fmripost-aroma/checkouts/latest/docs/work')[source]
Path to a working directory where intermediate results will be available.
- write_graph = False
Write out the computational graph corresponding to the planned preprocessing.
- class fmripost_aroma.config.workflow[source]
Configure the particular execution graph of this workflow.
- cifti_output = None
Generate HCP Grayordinates, accepts either
'91k'(default) or'170k'.
- denoise_method = None
Denoising strategy to be used.
- dummy_scans = None
Set a number of initial scans to be considered nonsteady states.
- err_on_warn = False
Cast AROMA warnings to errors.
- ignore = None
Ignore particular steps for fMRIPost-AROMA.
- melodic_dim = None
Number of ICA components to be estimated by MELODIC (positive = exact, negative = maximum).
- slice_time_ref = 0.5
The time of the reference slice to correct BOLD values to, as a fraction acquisition time. 0 indicates the start, 0.5 the midpoint, and 1 the end of acquisition. The alias start corresponds to 0, and middle to 0.5. The default value is 0.5.
- class fmripost_aroma.config.nipype[source]
Nipype settings.
- crashfile_format = 'txt'
The file format for crashfiles, either text (txt) or pickle (pklz).
- get_linked_libs = False
Run NiPype’s tool to enlist linked libraries for every interface.
- memory_gb = None
Estimation in GB of the RAM this workflow can allocate at any given time.
- nprocs = 2
Number of processes (compute tasks) that can be run in parallel (multiprocessing only).
- omp_nthreads = None
Number of CPUs a single process can access for multithreaded execution.
- plugin = 'MultiProc'
NiPype’s execution plugin.
- plugin_args = {'maxtasksperchild': 1, 'raise_insufficient': False}
Settings for NiPype’s execution plugin.
- remove_unnecessary_outputs = True
Clean up unused outputs after running
- resource_monitor = False
Enable resource monitor.
- stop_on_first_crash = True
Whether the workflow should stop or continue after the first error.
Usage
A config file is used to pass settings and collect information as the execution graph is built across processes.
from fmripost_aroma import config
config_file = config.execution.work_dir / '.fmripost_aroma.toml'
config.to_filename(config_file)
# Call build_workflow(config_file, retval) in a subprocess
with Manager() as mgr:
from .workflow import build_workflow
retval = mgr.dict()
p = Process(target=build_workflow, args=(str(config_file), retval))
p.start()
p.join()
config.load(config_file)
# Access configs from any code section as:
value = config.section.setting
Logging
Other responsibilities
The config is responsible for other conveniency actions.
Switching Python’s
multiprocessingto forkserver mode.Set up a filter for warnings as early as possible.
Automated I/O magic operations. Some conversions need to happen in the store/load processes (e.g., from/to
Path<->str,BIDSLayout, etc.)
- fmripost_aroma.config.from_dict(settings, init=True, ignore=None)[source]
Read settings from a flat dictionary.
- fmripost_aroma.config.load(filename, skip=None, init=True)[source]
Load settings from file.
- Parameters:
filename (
os.PathLike) – TOML file containing fMRIPost-AROMA configuration.skip (dict or None) – Sets of values to ignore during load, keyed by section name
init (bool or
Container) – Initialize all, none, or a subset of configurations.
Workflows
fMRIPost AROMA workflows
- fmripost_aroma.workflows.base.init_fmripost_aroma_wf()[source]
Build fMRIPost-AROMA’s pipeline.
This workflow organizes the execution of fMRIPost-AROMA, with a sub-workflow for each subject.
- Workflow Graph
- fmripost_aroma.workflows.base.init_single_subject_wf(subject_id: str)[source]
Organize the postprocessing pipeline for a single subject.
It collects and reports information about the subject, and prepares sub-workflows to postprocess each BOLD series.
- Workflow Graph
- Parameters:
subject_id (
str) – Subject label for this single-subject workflow.
Notes
Load fMRIPost-AROMA config file.
Collect fMRIPrep derivatives. - BOLD file in native space. - Two main possibilities:
bids_dir is a raw BIDS dataset and preprocessing derivatives are provided through
--derivatives. In this scenario, we only need minimal derivatives.bids_dir is a derivatives dataset and we need to collect compliant derivatives to get the data into the right space.
Loop over runs.
Collect each run’s associated files. - Transform(s) to MNI152NLin6Asym - Confounds file - ICA-AROMA uses its own standard-space edge, CSF, and brain masks,
so we don’t need to worry about those.
Use
resamplerto warp BOLD to MNI152NLin6Asym-2mm.Convert motion parameters from confounds file to FSL format.
Run ICA-AROMA.
Warp BOLD to requested output spaces and denoise with ICA-AROMA.
fMRIPost-AROMA workflows to run ICA-AROMA.