pyAFQ 1.3__tar.gz → 1.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/api/bundle_dict.py +15 -26
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/api/group.py +226 -6
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/api/participant.py +17 -19
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/data/fetch.py +5 -5
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/definitions/image.py +9 -12
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/definitions/mapping.py +5 -6
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/models/csd.py +6 -4
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/segmentation.py +14 -2
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/data.py +180 -27
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/decorators.py +10 -4
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/mapping.py +13 -45
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/segmentation.py +10 -5
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/tractography.py +132 -54
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/viz.py +4 -4
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_api.py +20 -13
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_definitions.py +1 -1
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_segmentation.py +12 -11
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tractography/tractography.py +5 -3
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/conversion.py +34 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/streamlines.py +7 -2
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/version.py +2 -2
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/viz/utils.py +7 -2
- {pyAFQ-1.3 → pyafq-1.3.2}/CHANGES.rst +28 -0
- {pyAFQ-1.3/pyAFQ.egg-info → pyafq-1.3.2}/PKG-INFO +5 -3
- pyafq-1.3.2/docs/source/explanations/bundle_orientation.rst +52 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/index.rst +2 -1
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/reference/bundledict.rst +33 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/reference/kwargs.rst +16 -1
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/reference/methods.rst +10 -2
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/baby_afq.py +4 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/tutorial_examples/plot_001_afq_api.py +7 -4
- {pyAFQ-1.3 → pyafq-1.3.2/pyAFQ.egg-info}/PKG-INFO +5 -3
- {pyAFQ-1.3 → pyafq-1.3.2}/pyAFQ.egg-info/SOURCES.txt +1 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyAFQ.egg-info/requires.txt +4 -2
- {pyAFQ-1.3 → pyafq-1.3.2}/setup.cfg +3 -1
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/CITATION.cff +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/CONTRIBUTING.md +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/docbuild.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/docker_pyafq.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/docker_pyafq_cuda12.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_anisotropic_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_basic_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_custom_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_pft_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_reco80_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_reco_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/nightly_test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/publish-to-test-pypi.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.github/workflows/test.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.gitignore +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.mailmap +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.maintenance/update_changes.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.maintenance/update_zenodo.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.pep8speaks.yml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/.zenodo.json +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/_fixes.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/afq_bids_entities.json +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/api/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/api/utils.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/data/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/data/utils.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/definitions/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/definitions/utils.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/models/QBallTP.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/models/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/models/dki.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/models/dti.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/models/fwdti.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/registration.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tasks/utils.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/MoriGroups_Test.mat +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/WholeBrainFG_test.mat +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/.gitattributes +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/config +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/.gitattributes +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/CHANGES +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/README +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/T1w.json +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/annex-uuid +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/dataset_description.json +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/aMRIQC.csv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_group.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-01.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-02.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-03.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-04.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-05.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-06.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-07.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-08.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-09.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-10.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-11.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-12.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-13.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-14.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-15.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-16.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-17.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-18.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-19.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-20.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-21.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-22.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-23.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-24.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-25.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-26.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/fMRIQC.csv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_group.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-01.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-02.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-03.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-04.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-05.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-06.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-07.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-08.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-09.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-10.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-11.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-12.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-13.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-14.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-15.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-16.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-17.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-18.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-19.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-20.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-21.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-22.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-23.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-24.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-25.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-26.pdf +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/participants.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/anat/sub-01_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/anat/sub-02_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/anat/sub-03_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/anat/sub-04_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/anat/sub-05_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/anat/sub-06_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/anat/sub-07_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/anat/sub-08_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/anat/sub-09_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/anat/sub-10_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/anat/sub-11_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/anat/sub-12_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/anat/sub-13_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/anat/sub-14_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/anat/sub-15_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/anat/sub-16_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/anat/sub-17_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/anat/sub-18_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/anat/sub-19_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/anat/sub-20_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/anat/sub-21_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/anat/sub-22_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/anat/sub-23_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/anat/sub-24_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/anat/sub-25_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/anat/sub-26_T1w.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_bold.nii.gz +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_events.tsv +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/data/mocks3/ds000102-mimic/task-flanker_bold.json +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_bundle_dict.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_csd.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_data.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_dki.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_dti.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_fixes.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_registration.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_tractography.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tests/test_viz.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tractography/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tractography/gputractography.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/tractography/utils.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/bin.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/docs.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/models.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/path.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/stats.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/testing.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/tests/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/tests/test_conversions.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/tests/test_path.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/tests/test_stats.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/tests/test_streamlines.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/tests/test_volume.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/utils/volume.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/viz/__init__.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/viz/altair.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/viz/fury_backend.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/viz/plot.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/AFQ/viz/plotly_backend.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/CITATION +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/LICENSE +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/MANIFEST.in +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/Makefile +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/README.md +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/bin/pyAFQ +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/Makefile +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_progressbars.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_static/BDE_Banner_revised20160211-01.jpg +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_static/custom.css +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_static/eScience_Logo_HR.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_static/escience-logo.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_static/logo.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/_templates/layout.html +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/conf.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/down_left_arrow.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/down_right_arrow.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/greencheck.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/tract_modeling2.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/tract_profiling.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/tract_recognition.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/_static/tract_tractography.png +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/modeling.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/profiling.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/recognition.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/tractography.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/explanations/tractometry_pipeline.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/cite.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/contributing.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/developing/definitions.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/developing/index.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/developing/releasing.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/developing/tasks.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/getting_help.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/index.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/installation_guide.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/converter.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/data.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/docker.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/image.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/index.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/kwargs.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/methods.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/howto/usage/scalars.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/index.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/reference/index.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/reference/mapping.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/reference/viz_backend.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/sphinxext/kwargsdocs.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/sphinxext/methodsdocs.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/sphinxext/updatedocs.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/source/tutorials/index.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/docs/upload-gh-pages.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/README.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/add_custom_bundle.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/cerebellar_peduncles.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/cloudknot_example.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/cloudknot_hcp_example.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/plot_acoustic_radiations.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/plot_afq_callosal.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/plot_afq_fwdti.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/plot_optic_radiations.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/plot_recobundles.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/plot_stages_of_tractometry.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/use_subject_space_rois_from_freesurfer.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/howto_examples/vof_example.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/tutorial_examples/README.rst +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/tutorial_examples/plot_002_bids_layout.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/examples/tutorial_examples/plot_003_viz.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/gpu_docker/Dockerfile +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/gpu_docker/cuda_build.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/gpu_docker/cuda_track_template.def +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/gpu_docker/docker-build.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/gpu_docker/docker-push.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyAFQ.egg-info/dependency_links.txt +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyAFQ.egg-info/not-zip-safe +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyAFQ.egg-info/top_level.txt +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyafq_docker/Dockerfile +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyafq_docker/docker-build.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyafq_docker/docker-push.sh +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/pyproject.toml +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/setup.py +0 -0
- {pyAFQ-1.3 → pyafq-1.3.2}/tox.ini +0 -0
|
@@ -775,7 +775,6 @@ class BundleDict(MutableMapping):
|
|
|
775
775
|
self.resample_to = resample_to
|
|
776
776
|
self.resample_subject_to = resample_subject_to
|
|
777
777
|
self.keep_in_memory = keep_in_memory
|
|
778
|
-
self.has_bids_info = False
|
|
779
778
|
self.max_includes = 3
|
|
780
779
|
|
|
781
780
|
self._dict = {}
|
|
@@ -787,7 +786,7 @@ class BundleDict(MutableMapping):
|
|
|
787
786
|
if self.seg_algo == "afq":
|
|
788
787
|
if "Forceps Major" in self.bundle_names\
|
|
789
788
|
and "Callosum Occipital" in self.bundle_names:
|
|
790
|
-
self.logger.
|
|
789
|
+
self.logger.info((
|
|
791
790
|
"Forceps Major and Callosum Occipital bundles"
|
|
792
791
|
" are co-located, and AFQ"
|
|
793
792
|
" assigns each streamline to only one bundle."
|
|
@@ -795,7 +794,7 @@ class BundleDict(MutableMapping):
|
|
|
795
794
|
self.bundle_names.remove("Forceps Major")
|
|
796
795
|
if "Forceps Minor" in self.bundle_names\
|
|
797
796
|
and "Callosum Orbital" in self.bundle_names:
|
|
798
|
-
self.logger.
|
|
797
|
+
self.logger.info((
|
|
799
798
|
"Forceps Minor and Callosum Orbital bundles"
|
|
800
799
|
" are co-located, and AFQ"
|
|
801
800
|
" assigns each streamline to only one bundle."
|
|
@@ -803,7 +802,7 @@ class BundleDict(MutableMapping):
|
|
|
803
802
|
self.bundle_names.remove("Forceps Minor")
|
|
804
803
|
if "Forceps Minor" in self.bundle_names\
|
|
805
804
|
and "Callosum Anterior Frontal" in self.bundle_names:
|
|
806
|
-
self.logger.
|
|
805
|
+
self.logger.info((
|
|
807
806
|
"Forceps Minor and Callosum Anterior Frontal bundles"
|
|
808
807
|
" are co-located, and AFQ"
|
|
809
808
|
" assigns each streamline to only one bundle."
|
|
@@ -814,33 +813,23 @@ class BundleDict(MutableMapping):
|
|
|
814
813
|
if new_max > self.max_includes:
|
|
815
814
|
self.max_includes = new_max
|
|
816
815
|
|
|
817
|
-
def
|
|
818
|
-
|
|
819
|
-
Provide the bids_layout, a nearest path,
|
|
820
|
-
and the subject and session information
|
|
821
|
-
to load ROIS from BIDS
|
|
822
|
-
"""
|
|
823
|
-
self.has_bids_info = True
|
|
824
|
-
self._bids_info = bids_layout
|
|
825
|
-
self._bids_path = bids_path
|
|
826
|
-
self._subject = subject
|
|
827
|
-
self._session = session
|
|
828
|
-
|
|
829
|
-
def _cond_load(self, roi_or_sl, resample_to):
|
|
830
|
-
"""
|
|
831
|
-
Load ROI or streamline if not already loaded
|
|
832
|
-
"""
|
|
816
|
+
def _use_bids_info(self, roi_or_sl, bids_layout, bids_path,
|
|
817
|
+
subject, session):
|
|
833
818
|
if isinstance(roi_or_sl, dict):
|
|
834
|
-
if not self.has_bids_info:
|
|
835
|
-
raise ValueError((
|
|
836
|
-
"Attempted to load an ROI using BIDS description without "
|
|
837
|
-
"First providing BIDS information."))
|
|
838
819
|
suffix = roi_or_sl.get("suffix", "dwi")
|
|
839
820
|
roi_or_sl = find_file(
|
|
840
|
-
|
|
821
|
+
bids_layout, bids_path,
|
|
841
822
|
roi_or_sl,
|
|
842
823
|
suffix,
|
|
843
|
-
|
|
824
|
+
session, subject)
|
|
825
|
+
return roi_or_sl
|
|
826
|
+
else:
|
|
827
|
+
return roi_or_sl
|
|
828
|
+
|
|
829
|
+
def _cond_load(self, roi_or_sl, resample_to):
|
|
830
|
+
"""
|
|
831
|
+
Load ROI or streamline if not already loaded
|
|
832
|
+
"""
|
|
844
833
|
if isinstance(roi_or_sl, str):
|
|
845
834
|
if self.seg_algo == "afq":
|
|
846
835
|
return afd.read_resample_roi(
|
|
@@ -3,6 +3,8 @@ import warnings
|
|
|
3
3
|
import tempfile
|
|
4
4
|
|
|
5
5
|
from AFQ.definitions.mapping import SynMap
|
|
6
|
+
from AFQ.definitions.utils import Definition
|
|
7
|
+
import AFQ.api.bundle_dict as abd
|
|
6
8
|
warnings.simplefilter(action='ignore', category=FutureWarning) # noqa
|
|
7
9
|
|
|
8
10
|
import logging
|
|
@@ -22,6 +24,7 @@ from dipy.io.streamline import save_tractogram
|
|
|
22
24
|
from AFQ.version import version as pyafq_version
|
|
23
25
|
from AFQ.viz.utils import trim
|
|
24
26
|
import pandas as pd
|
|
27
|
+
import pydra
|
|
25
28
|
import numpy as np
|
|
26
29
|
import os
|
|
27
30
|
import os.path as op
|
|
@@ -32,6 +35,7 @@ from time import time
|
|
|
32
35
|
import nibabel as nib
|
|
33
36
|
from PIL import Image
|
|
34
37
|
from s3bids.utils import S3BIDSStudy
|
|
38
|
+
import glob
|
|
35
39
|
|
|
36
40
|
from bids.layout import BIDSLayout, BIDSLayoutIndexer
|
|
37
41
|
try:
|
|
@@ -60,6 +64,17 @@ def get_afq_bids_entities_fname():
|
|
|
60
64
|
aus.__file__))) + "/afq_bids_entities.json"
|
|
61
65
|
|
|
62
66
|
|
|
67
|
+
class _ParticipantAFQInputs:
|
|
68
|
+
def __init__(
|
|
69
|
+
self, dwi_data_file, bval_file, bvec_file, results_dir,
|
|
70
|
+
kwargs):
|
|
71
|
+
self.dwi_data_file = dwi_data_file
|
|
72
|
+
self.bval_file = bval_file
|
|
73
|
+
self.bvec_file = bvec_file
|
|
74
|
+
self.results_dir = results_dir
|
|
75
|
+
self.kwargs = kwargs
|
|
76
|
+
|
|
77
|
+
|
|
63
78
|
class GroupAFQ(object):
|
|
64
79
|
f"""{AFQclass_doc}"""
|
|
65
80
|
|
|
@@ -146,6 +161,7 @@ class GroupAFQ(object):
|
|
|
146
161
|
if not isinstance(bids_layout_kwargs, dict):
|
|
147
162
|
raise TypeError("bids_layout_kwargs must be a dict")
|
|
148
163
|
|
|
164
|
+
|
|
149
165
|
self.logger = logger
|
|
150
166
|
|
|
151
167
|
self.parallel_params = parallel_params
|
|
@@ -252,6 +268,7 @@ class GroupAFQ(object):
|
|
|
252
268
|
self.valid_sub_list = []
|
|
253
269
|
self.valid_ses_list = []
|
|
254
270
|
self.pAFQ_list = []
|
|
271
|
+
self.pAFQ_inputs_list = []
|
|
255
272
|
for subject in self.subjects:
|
|
256
273
|
self.wf_dict[subject] = {}
|
|
257
274
|
for session in self.sessions:
|
|
@@ -296,20 +313,90 @@ class GroupAFQ(object):
|
|
|
296
313
|
if suffix is not None:
|
|
297
314
|
bids_filters["suffix"] = suffix
|
|
298
315
|
|
|
316
|
+
# Call find path for all definitions
|
|
317
|
+
for key, value in this_kwargs.items():
|
|
318
|
+
if key == "scalars":
|
|
319
|
+
for scalar in this_kwargs["scalars"]:
|
|
320
|
+
if isinstance(scalar, Definition):
|
|
321
|
+
scalar_found = scalar.find_path(
|
|
322
|
+
bids_layout,
|
|
323
|
+
dwi_data_file,
|
|
324
|
+
subject,
|
|
325
|
+
session,
|
|
326
|
+
required=False)
|
|
327
|
+
if scalar_found is False:
|
|
328
|
+
this_kwargs["scalars"].remove(scalar)
|
|
329
|
+
elif key == "import_tract":
|
|
330
|
+
if isinstance(this_kwargs["import_tract"], dict):
|
|
331
|
+
it_res = \
|
|
332
|
+
bids_layout.get(
|
|
333
|
+
subject=subject,
|
|
334
|
+
session=session,
|
|
335
|
+
extension=[
|
|
336
|
+
'.trk',
|
|
337
|
+
'.tck',
|
|
338
|
+
'.vtk',
|
|
339
|
+
'.fib',
|
|
340
|
+
'.dpy'],
|
|
341
|
+
return_type='filename',
|
|
342
|
+
**this_kwargs["import_tract"])
|
|
343
|
+
if len(it_res) < 1:
|
|
344
|
+
raise ValueError((
|
|
345
|
+
"No custom tractography found for"
|
|
346
|
+
f" subject {subject}"
|
|
347
|
+
" and session "
|
|
348
|
+
f"{session}."))
|
|
349
|
+
elif len(it_res) > 1:
|
|
350
|
+
this_kwargs["import_tract"] = it_res[0]
|
|
351
|
+
logger.warning((
|
|
352
|
+
f"Multiple viable custom tractographies found for"
|
|
353
|
+
f" subject "
|
|
354
|
+
f"{subject} and session "
|
|
355
|
+
f"{session}. Will use: {it_res[0]}"))
|
|
356
|
+
else:
|
|
357
|
+
this_kwargs["import_tract"] = it_res[0]
|
|
358
|
+
elif isinstance(value, dict):
|
|
359
|
+
for _, subvalue in value.items():
|
|
360
|
+
if isinstance(subvalue, Definition):
|
|
361
|
+
subvalue.find_path(
|
|
362
|
+
bids_layout,
|
|
363
|
+
dwi_data_file,
|
|
364
|
+
subject,
|
|
365
|
+
session)
|
|
366
|
+
elif isinstance(value, Definition):
|
|
367
|
+
value.find_path(
|
|
368
|
+
bids_layout,
|
|
369
|
+
dwi_data_file,
|
|
370
|
+
subject,
|
|
371
|
+
session)
|
|
372
|
+
|
|
373
|
+
# call find path for all ROIs
|
|
374
|
+
if "bundle_info" in this_kwargs and isinstance(
|
|
375
|
+
this_kwargs["bundle_info"], abd.BundleDict):
|
|
376
|
+
for b_name in this_kwargs["bundle_info"].bundle_names:
|
|
377
|
+
this_kwargs["bundle_info"].apply_to_rois(
|
|
378
|
+
b_name,
|
|
379
|
+
this_kwargs["bundle_info"]._use_bids_info,
|
|
380
|
+
bids_layout, bids_path, subject, session,
|
|
381
|
+
dry_run=False)
|
|
382
|
+
|
|
299
383
|
self.valid_sub_list.append(subject)
|
|
300
384
|
self.valid_ses_list.append(str(session))
|
|
301
385
|
|
|
302
|
-
|
|
386
|
+
this_pAFQ_inputs = _ParticipantAFQInputs(
|
|
303
387
|
dwi_data_file,
|
|
304
388
|
bval_file, bvec_file,
|
|
305
389
|
results_dir,
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
390
|
+
this_kwargs)
|
|
391
|
+
this_pAFQ = ParticipantAFQ(
|
|
392
|
+
this_pAFQ_inputs.dwi_data_file,
|
|
393
|
+
this_pAFQ_inputs.bval_file,
|
|
394
|
+
this_pAFQ_inputs.bvec_file,
|
|
395
|
+
this_pAFQ_inputs.results_dir,
|
|
396
|
+
**this_pAFQ_inputs.kwargs)
|
|
311
397
|
self.wf_dict[subject][str(session)] = this_pAFQ.wf_dict
|
|
312
398
|
self.pAFQ_list.append(this_pAFQ)
|
|
399
|
+
self.pAFQ_inputs_list.append(this_pAFQ_inputs)
|
|
313
400
|
|
|
314
401
|
def combine_profiles(self):
|
|
315
402
|
tract_profiles_dict = self.export("profiles")
|
|
@@ -916,6 +1003,139 @@ class GroupAFQ(object):
|
|
|
916
1003
|
sublink=page_subtitle_link)
|
|
917
1004
|
|
|
918
1005
|
|
|
1006
|
+
class ParallelGroupAFQ():
|
|
1007
|
+
def __init__(self, *args, **kwargs):
|
|
1008
|
+
orig = GroupAFQ(*args, **kwargs)
|
|
1009
|
+
|
|
1010
|
+
orig.parallel_params["submitter_params"] = \
|
|
1011
|
+
orig.parallel_params.get("submitter_params", {"plugin": "cf"})
|
|
1012
|
+
|
|
1013
|
+
orig.parallel_params["cache_dir"] = \
|
|
1014
|
+
orig.parallel_params.get("cache_dir", None)
|
|
1015
|
+
|
|
1016
|
+
self.parallel_params = orig.parallel_params
|
|
1017
|
+
self.pAFQ_kwargs = orig.pAFQ_inputs_list
|
|
1018
|
+
|
|
1019
|
+
self.finishing_params = dict()
|
|
1020
|
+
self.finishing_params["args"] = args
|
|
1021
|
+
self.finishing_params["kwargs"] = kwargs
|
|
1022
|
+
self.finishing_params["output_dirs"] = [pAFQ.kwargs["output_dir"]
|
|
1023
|
+
for pAFQ in orig.pAFQ_list]
|
|
1024
|
+
|
|
1025
|
+
def _submit_pydra(self, runnable):
|
|
1026
|
+
try:
|
|
1027
|
+
with pydra.Submitter(
|
|
1028
|
+
**self.parallel_params["submitter_params"],
|
|
1029
|
+
) as sub:
|
|
1030
|
+
sub(runnable=runnable)
|
|
1031
|
+
# Addresses https://github.com/nipype/pydra/issues/630
|
|
1032
|
+
except AttributeError as e:
|
|
1033
|
+
if "'NoneType' object has no attribute 'replace'" not in str(e):
|
|
1034
|
+
raise
|
|
1035
|
+
|
|
1036
|
+
def export(self, attr_name="help", collapse=True):
|
|
1037
|
+
f"""
|
|
1038
|
+
Export a specific output. To print a list of available outputs,
|
|
1039
|
+
call export without arguments.
|
|
1040
|
+
{valid_exports_string}
|
|
1041
|
+
|
|
1042
|
+
Parameters
|
|
1043
|
+
----------
|
|
1044
|
+
attr_name : str
|
|
1045
|
+
Name of the output to export. Default: "help"
|
|
1046
|
+
collapse : bool
|
|
1047
|
+
Whether to collapse session dimension if there is only 1 session.
|
|
1048
|
+
Default: True
|
|
1049
|
+
|
|
1050
|
+
Returns
|
|
1051
|
+
-------
|
|
1052
|
+
output : dict
|
|
1053
|
+
The specific output as a dictionary. Keys are subjects.
|
|
1054
|
+
Values are dictionaries with keys of sessions
|
|
1055
|
+
if multiple sessions are used. Otherwise, values are
|
|
1056
|
+
the output.
|
|
1057
|
+
None if called without arguments.
|
|
1058
|
+
"""
|
|
1059
|
+
|
|
1060
|
+
@pydra.mark.task
|
|
1061
|
+
def export_sub(pAFQ_kwargs, attr_name):
|
|
1062
|
+
pAFQ = ParticipantAFQ(
|
|
1063
|
+
pAFQ_kwargs.dwi_data_file,
|
|
1064
|
+
pAFQ_kwargs.bval_file,
|
|
1065
|
+
pAFQ_kwargs.bvec_file,
|
|
1066
|
+
pAFQ_kwargs.results_dir,
|
|
1067
|
+
**pAFQ_kwargs.kwargs)
|
|
1068
|
+
pAFQ.export(attr_name)
|
|
1069
|
+
|
|
1070
|
+
# Submit to pydra
|
|
1071
|
+
export_sub_task = export_sub(
|
|
1072
|
+
attr_name=attr_name,
|
|
1073
|
+
cache_dir=self.parallel_params["cache_dir"]
|
|
1074
|
+
).split("pAFQ_kwargs", pAFQ_kwargs=self.pAFQ_kwargs)
|
|
1075
|
+
self._submit_pydra(export_sub_task)
|
|
1076
|
+
|
|
1077
|
+
def export_all(self, viz=True, afqbrowser=True, xforms=True, indiv=True):
|
|
1078
|
+
""" Exports all the possible outputs
|
|
1079
|
+
|
|
1080
|
+
Parameters
|
|
1081
|
+
----------
|
|
1082
|
+
viz : bool
|
|
1083
|
+
Whether to output visualizations. This includes tract profile
|
|
1084
|
+
plots, a figure containing all bundles, and, if using the AFQ
|
|
1085
|
+
segmentation algorithm, individual bundle figures.
|
|
1086
|
+
Default: True
|
|
1087
|
+
afqbrowser : bool
|
|
1088
|
+
Whether to output an AFQ-Browser from this AFQ instance.
|
|
1089
|
+
Default: True
|
|
1090
|
+
xforms : bool
|
|
1091
|
+
Whether to output the reg_template image in subject space and,
|
|
1092
|
+
depending on if it is possible based on the mapping used, to
|
|
1093
|
+
output the b0 in template space.
|
|
1094
|
+
Default: True
|
|
1095
|
+
indiv : bool
|
|
1096
|
+
Whether to output individual bundles in their own files, in
|
|
1097
|
+
addition to the one file containing all bundles. If using
|
|
1098
|
+
the AFQ segmentation algorithm, individual ROIs are also
|
|
1099
|
+
output.
|
|
1100
|
+
Default: True
|
|
1101
|
+
"""
|
|
1102
|
+
@pydra.mark.task
|
|
1103
|
+
def export_sub(
|
|
1104
|
+
pAFQ_kwargs,
|
|
1105
|
+
finishing_params,
|
|
1106
|
+
viz,
|
|
1107
|
+
afqbrowser,
|
|
1108
|
+
xforms,
|
|
1109
|
+
indiv
|
|
1110
|
+
):
|
|
1111
|
+
pAFQ = ParticipantAFQ(
|
|
1112
|
+
pAFQ_kwargs.dwi_data_file,
|
|
1113
|
+
pAFQ_kwargs.bval_file,
|
|
1114
|
+
pAFQ_kwargs.bvec_file,
|
|
1115
|
+
pAFQ_kwargs.results_dir,
|
|
1116
|
+
**pAFQ_kwargs.kwargs)
|
|
1117
|
+
pAFQ.export_all(viz, xforms, indiv)
|
|
1118
|
+
|
|
1119
|
+
for dir in finishing_params["output_dirs"]:
|
|
1120
|
+
if not glob.glob(op.join(dir, "*_desc-profiles_dwi.csv")):
|
|
1121
|
+
return
|
|
1122
|
+
|
|
1123
|
+
gAFQ = GroupAFQ(*finishing_params["args"],
|
|
1124
|
+
**finishing_params["kwargs"])
|
|
1125
|
+
gAFQ.export_all(viz, afqbrowser, xforms, indiv)
|
|
1126
|
+
|
|
1127
|
+
# Submit to pydra
|
|
1128
|
+
export_sub_task = export_sub(
|
|
1129
|
+
finishing_params=self.finishing_params,
|
|
1130
|
+
viz=viz,
|
|
1131
|
+
afqbrowser=afqbrowser,
|
|
1132
|
+
xforms=xforms,
|
|
1133
|
+
indiv=indiv,
|
|
1134
|
+
cache_dir=self.parallel_params["cache_dir"]
|
|
1135
|
+
).split("pAFQ_kwargs", pAFQ_kwargs=self.pAFQ_kwargs)
|
|
1136
|
+
self._submit_pydra(export_sub_task)
|
|
1137
|
+
|
|
1138
|
+
|
|
919
1139
|
def download_and_combine_afq_profiles(bucket,
|
|
920
1140
|
study_s3_prefix="", deriv_name=None,
|
|
921
1141
|
out_file=None,
|
|
@@ -34,10 +34,9 @@ class ParticipantAFQ(object):
|
|
|
34
34
|
dwi_data_file,
|
|
35
35
|
bval_file, bvec_file,
|
|
36
36
|
output_dir,
|
|
37
|
-
bids_info=None,
|
|
38
37
|
**kwargs):
|
|
39
38
|
"""
|
|
40
|
-
Initialize a ParticipantAFQ object
|
|
39
|
+
Initialize a ParticipantAFQ object.
|
|
41
40
|
|
|
42
41
|
Parameters
|
|
43
42
|
----------
|
|
@@ -49,9 +48,6 @@ class ParticipantAFQ(object):
|
|
|
49
48
|
Path to bvec file.
|
|
50
49
|
output_dir : str
|
|
51
50
|
Path to output directory.
|
|
52
|
-
bids_info : dict or None, optional
|
|
53
|
-
This is used by GroupAFQ to provide information about
|
|
54
|
-
the BIDS layout to each participant.
|
|
55
51
|
kwargs : additional optional parameters
|
|
56
52
|
You can set additional parameters for any step
|
|
57
53
|
of the process. See :ref:`usage/kwargs` for more details.
|
|
@@ -70,9 +66,6 @@ class ParticipantAFQ(object):
|
|
|
70
66
|
In tracking_params, parameters with the suffix mask which are also
|
|
71
67
|
an image from AFQ.definitions.image will be handled automatically by
|
|
72
68
|
the api.
|
|
73
|
-
|
|
74
|
-
It is recommended that you leave the bids_info parameter as None,
|
|
75
|
-
and instead pass in the paths to the files you want to use directly.
|
|
76
69
|
"""
|
|
77
70
|
if not isinstance(output_dir, str):
|
|
78
71
|
raise TypeError(
|
|
@@ -95,14 +88,12 @@ class ParticipantAFQ(object):
|
|
|
95
88
|
"did you mean tracking_params ?"))
|
|
96
89
|
|
|
97
90
|
self.logger = logging.getLogger('AFQ')
|
|
98
|
-
self.output_dir = output_dir
|
|
99
91
|
|
|
100
92
|
self.kwargs = dict(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
bids_info=bids_info,
|
|
93
|
+
dwi_data_file=dwi_data_file,
|
|
94
|
+
bval_file=bval_file,
|
|
95
|
+
bvec_file=bvec_file,
|
|
96
|
+
output_dir=output_dir,
|
|
106
97
|
base_fname=get_base_fname(output_dir, dwi_data_file),
|
|
107
98
|
**kwargs)
|
|
108
99
|
self.make_workflow()
|
|
@@ -113,15 +104,22 @@ class ParticipantAFQ(object):
|
|
|
113
104
|
self.kwargs["mapping_definition"], SlrMap):
|
|
114
105
|
plans = { # if using SLR map, do tractography first
|
|
115
106
|
"data": get_data_plan(self.kwargs),
|
|
116
|
-
"tractography": get_tractography_plan(
|
|
117
|
-
|
|
107
|
+
"tractography": get_tractography_plan(
|
|
108
|
+
self.kwargs
|
|
109
|
+
),
|
|
110
|
+
"mapping": get_mapping_plan(
|
|
111
|
+
self.kwargs,
|
|
112
|
+
use_sls=True
|
|
113
|
+
),
|
|
118
114
|
"segmentation": get_segmentation_plan(self.kwargs),
|
|
119
115
|
"viz": get_viz_plan(self.kwargs)}
|
|
120
116
|
else:
|
|
121
117
|
plans = { # Otherwise, do mapping first
|
|
122
118
|
"data": get_data_plan(self.kwargs),
|
|
123
119
|
"mapping": get_mapping_plan(self.kwargs),
|
|
124
|
-
"tractography": get_tractography_plan(
|
|
120
|
+
"tractography": get_tractography_plan(
|
|
121
|
+
self.kwargs
|
|
122
|
+
),
|
|
125
123
|
"segmentation": get_segmentation_plan(self.kwargs),
|
|
126
124
|
"viz": get_viz_plan(self.kwargs)}
|
|
127
125
|
|
|
@@ -279,7 +277,7 @@ class ParticipantAFQ(object):
|
|
|
279
277
|
|
|
280
278
|
def _save_file(curr_img):
|
|
281
279
|
save_path = op.abspath(op.join(
|
|
282
|
-
self.output_dir,
|
|
280
|
+
self.kwargs["output_dir"],
|
|
283
281
|
"bundle_montage.png"))
|
|
284
282
|
curr_img.save(save_path)
|
|
285
283
|
all_fnames.append(save_path)
|
|
@@ -373,7 +371,7 @@ class ParticipantAFQ(object):
|
|
|
373
371
|
" to a filename and will be ignored."))
|
|
374
372
|
|
|
375
373
|
apply_cmd_to_afq_derivs(
|
|
376
|
-
self.output_dir,
|
|
374
|
+
self.kwargs["output_dir"],
|
|
377
375
|
self.export("base_fname"),
|
|
378
376
|
cmd=cmd,
|
|
379
377
|
exception_file_names=exception_file_names,
|
|
@@ -263,7 +263,7 @@ pediatric_md5_hashes = [
|
|
|
263
263
|
"1c4c0823c23b676d6d35004d93b9c695", "d4830d558cc8f707ebec912b32d197a5",
|
|
264
264
|
"c405e0dbd9a4091c77b3d1ad200229b4", "ec0aeccc6661d2ee5ed79259383cdcee",
|
|
265
265
|
"2802cd227b550f6e85df0fec1d515c29", "385addb999dc6d76957d2a35c4ee74bb",
|
|
266
|
-
"
|
|
266
|
+
"0dd14c02b272263adbe2246880979c9d", "99dac5a00c10d81d222f020162fd6194",
|
|
267
267
|
"e49ba370edca96734d9376f551d413db", "f59e9e69e06325198f70047cd63c3bdc",
|
|
268
268
|
"ae3bd2931f95adae0280a8f75cd3ca9b", "c409a0036b8c2dd4d03d11fbc6bfbdcd",
|
|
269
269
|
"c2597a474ea5ec9e3126c35fd238f6b2", "67af59c934147c9f9ff6e0b76c4cc6eb",
|
|
@@ -303,7 +303,7 @@ pediatric_md5_hashes = [
|
|
|
303
303
|
pediatric_remote_fnames = [
|
|
304
304
|
"24880625", "24880628", "24880631", "24880634", "24880637", "24880640",
|
|
305
305
|
"24880643", "24880646", "24880649", "24880652", "24880655", "24880661",
|
|
306
|
-
"24880664", "24880667", "
|
|
306
|
+
"24880664", "24880667", "46407571", "46407568", "24880676", "24880679",
|
|
307
307
|
"24880685", "24880688", "24880691", "24880694", "24880697", "24880700",
|
|
308
308
|
"24880703", "24880706", "24880712", "24880715", "24880718", "24880721",
|
|
309
309
|
"24880724", "24880727", "24880730", "24880733", "24880736", "24880748",
|
|
@@ -538,7 +538,7 @@ template_remote_fnames = ["5273680", "5273683", "5273686", "5273689",
|
|
|
538
538
|
"11458274", "11458277",
|
|
539
539
|
"5273695", "5273692", "5273698", "5273701",
|
|
540
540
|
"11458268", "11458271",
|
|
541
|
-
"5273704", "5273707", "
|
|
541
|
+
"5273704", "5273707", "46407574", "46407577",
|
|
542
542
|
"11458262", "11458265",
|
|
543
543
|
"5273716", "5273719",
|
|
544
544
|
"11458220",
|
|
@@ -612,8 +612,8 @@ template_md5_hashes = ["6b7aaed1a2982fd0ea436a223133908b",
|
|
|
612
612
|
"7e73ab02db30a3ad6bd9e82148c2486e",
|
|
613
613
|
"f9db3154955a20b67c2dda758800d14c",
|
|
614
614
|
"73941510c798c1ed1b03e2bd481cd5c7",
|
|
615
|
-
"
|
|
616
|
-
"
|
|
615
|
+
"b20e0caa54cf35002cd06cf6033b964f",
|
|
616
|
+
"e751306df304af32c3ce7617913bbd30",
|
|
617
617
|
"fd012bc89f6bed7bd54530195496bac4",
|
|
618
618
|
"3406906a86e633cc102127cf210a1063",
|
|
619
619
|
"9040a7953dcbbf131d135c866182d8ef",
|
|
@@ -138,16 +138,13 @@ class ImageFile(ImageDefinition):
|
|
|
138
138
|
if nearest_image is None:
|
|
139
139
|
return False
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
self.fnames[session] = {}
|
|
143
|
-
self.fnames[session][subject] = nearest_image
|
|
141
|
+
self.fnames[from_path] = nearest_image
|
|
144
142
|
|
|
145
|
-
def get_path_data_affine(self,
|
|
143
|
+
def get_path_data_affine(self, dwi_path):
|
|
146
144
|
if self._from_path:
|
|
147
145
|
image_file = self.fname
|
|
148
146
|
else:
|
|
149
|
-
image_file = self.fnames[
|
|
150
|
-
bids_info['session']][bids_info['subject']]
|
|
147
|
+
image_file = self.fnames[dwi_path]
|
|
151
148
|
image_img = nib.load(image_file)
|
|
152
149
|
return image_file, image_img.get_fdata(), image_img.affine
|
|
153
150
|
|
|
@@ -159,10 +156,10 @@ class ImageFile(ImageDefinition):
|
|
|
159
156
|
return name_from_path(self.fname) if self._from_path else self.suffix
|
|
160
157
|
|
|
161
158
|
def get_image_getter(self, task_name):
|
|
162
|
-
def _image_getter_helper(dwi,
|
|
159
|
+
def _image_getter_helper(dwi, dwi_data_file):
|
|
163
160
|
# Load data
|
|
164
161
|
image_file, image_data_orig, image_affine = \
|
|
165
|
-
self.get_path_data_affine(
|
|
162
|
+
self.get_path_data_affine(dwi_data_file)
|
|
166
163
|
|
|
167
164
|
# Apply any conditions on the data
|
|
168
165
|
image_data, meta = self.apply_conditions(
|
|
@@ -178,11 +175,11 @@ class ImageFile(ImageDefinition):
|
|
|
178
175
|
image_data.astype(np.float32),
|
|
179
176
|
dwi.affine), meta
|
|
180
177
|
if task_name == "data":
|
|
181
|
-
def image_getter(dwi,
|
|
182
|
-
return _image_getter_helper(dwi,
|
|
178
|
+
def image_getter(dwi, dwi_data_file):
|
|
179
|
+
return _image_getter_helper(dwi, dwi_data_file)
|
|
183
180
|
else:
|
|
184
|
-
def image_getter(data_imap,
|
|
185
|
-
return _image_getter_helper(data_imap["dwi"],
|
|
181
|
+
def image_getter(data_imap, dwi_data_file):
|
|
182
|
+
return _image_getter_helper(data_imap["dwi"], dwi_data_file)
|
|
186
183
|
return image_getter
|
|
187
184
|
|
|
188
185
|
|
|
@@ -120,15 +120,14 @@ class FnirtMap(Definition):
|
|
|
120
120
|
bids_layout, from_path, self.space_filters, self.space_suffix,
|
|
121
121
|
session, subject, required=required)
|
|
122
122
|
|
|
123
|
-
self.fnames[
|
|
123
|
+
self.fnames[from_path] = (nearest_warp, nearest_space)
|
|
124
124
|
|
|
125
|
-
def get_for_subses(self, base_fname, dwi,
|
|
125
|
+
def get_for_subses(self, base_fname, dwi, dwi_data_file, reg_subject,
|
|
126
126
|
reg_template):
|
|
127
127
|
if self._from_path:
|
|
128
128
|
nearest_warp, nearest_space = self.fnames
|
|
129
129
|
else:
|
|
130
|
-
nearest_warp, nearest_space = self.fnames[
|
|
131
|
-
bids_info['session']][bids_info['subject']]
|
|
130
|
+
nearest_warp, nearest_space = self.fnames[dwi_data_file]
|
|
132
131
|
|
|
133
132
|
our_templ = reg_template
|
|
134
133
|
subj = Image(dwi)
|
|
@@ -182,7 +181,7 @@ class IdentityMap(Definition):
|
|
|
182
181
|
def __init__(self):
|
|
183
182
|
pass
|
|
184
183
|
|
|
185
|
-
def get_for_subses(self, base_fname, dwi,
|
|
184
|
+
def get_for_subses(self, base_fname, dwi, dwi_data_file, reg_subject,
|
|
186
185
|
reg_template):
|
|
187
186
|
return ConformedAffineMapping(
|
|
188
187
|
np.identity(4),
|
|
@@ -231,7 +230,7 @@ class GeneratedMapMixin(object):
|
|
|
231
230
|
write_json(meta_fname, meta)
|
|
232
231
|
return prealign_file if save else np.load(prealign_file)
|
|
233
232
|
|
|
234
|
-
def get_for_subses(self, base_fname, dwi,
|
|
233
|
+
def get_for_subses(self, base_fname, dwi, dwi_data_file, reg_subject,
|
|
235
234
|
reg_template, subject_sls=None, template_sls=None):
|
|
236
235
|
mapping_file, meta_fname = self.get_fnames(
|
|
237
236
|
self.extension, base_fname)
|
|
@@ -23,7 +23,7 @@ class CsdNanResponseError(Exception):
|
|
|
23
23
|
pass
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def _model(gtab, data, response=None, sh_order=None):
|
|
26
|
+
def _model(gtab, data, response=None, sh_order=None, csd_fa_thr=0.7):
|
|
27
27
|
"""
|
|
28
28
|
Helper function that defines a CSD model.
|
|
29
29
|
"""
|
|
@@ -50,7 +50,7 @@ def _model(gtab, data, response=None, sh_order=None):
|
|
|
50
50
|
response, _ = csd.auto_response_ssst(response_gtab,
|
|
51
51
|
data,
|
|
52
52
|
roi_radii=10,
|
|
53
|
-
fa_thr=
|
|
53
|
+
fa_thr=csd_fa_thr)
|
|
54
54
|
# Catch conditions where an auto-response could not be calculated:
|
|
55
55
|
if np.all(np.isnan(response[0])):
|
|
56
56
|
raise CsdNanResponseError
|
|
@@ -59,11 +59,13 @@ def _model(gtab, data, response=None, sh_order=None):
|
|
|
59
59
|
return csdmodel
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
def _fit(gtab, data, mask, response=None, sh_order=None,
|
|
62
|
+
def _fit(gtab, data, mask, response=None, sh_order=None,
|
|
63
|
+
lambda_=1, tau=0.1, csd_fa_thr=0.7):
|
|
63
64
|
"""
|
|
64
65
|
Helper function that does the core of fitting a model to data.
|
|
65
66
|
"""
|
|
66
|
-
return _model(gtab, data, response, sh_order).fit(
|
|
67
|
+
return _model(gtab, data, response, sh_order, csd_fa_thr).fit(
|
|
68
|
+
data, mask=mask)
|
|
67
69
|
|
|
68
70
|
|
|
69
71
|
def fit_csd(data_files, bval_files, bvec_files, mask=None, response=None,
|
|
@@ -482,6 +482,15 @@ class Segmentation:
|
|
|
482
482
|
else:
|
|
483
483
|
self.fiber_groups[b_name] = sl
|
|
484
484
|
|
|
485
|
+
def _add_bundle_to_meta(self, bundle_name, bundle_info):
|
|
486
|
+
bundle_info = bundle_info.copy()
|
|
487
|
+
# remove keys that can never be serialized
|
|
488
|
+
for key in [
|
|
489
|
+
'include', 'exclude', 'prob_map',
|
|
490
|
+
'start', 'end', 'curvature']:
|
|
491
|
+
bundle_info.pop(key, None)
|
|
492
|
+
self.meta[bundle_name] = bundle_info
|
|
493
|
+
|
|
485
494
|
def segment_afq(self, tg=None):
|
|
486
495
|
"""
|
|
487
496
|
Assign streamlines to bundles using the waypoint ROI approach
|
|
@@ -509,6 +518,7 @@ class Segmentation:
|
|
|
509
518
|
dtype=np.uint32)
|
|
510
519
|
|
|
511
520
|
self.fiber_groups = {}
|
|
521
|
+
self.meta = {}
|
|
512
522
|
|
|
513
523
|
# We need to calculate the size of a voxel, so we can transform
|
|
514
524
|
# from mm to voxel units:
|
|
@@ -862,10 +872,12 @@ class Segmentation:
|
|
|
862
872
|
sb_include_cuts, in_place=False)
|
|
863
873
|
self._add_bundle_to_fiber_group(
|
|
864
874
|
sb_name, bundlesection_select_sl, select_idx, to_flip)
|
|
875
|
+
self._add_bundle_to_meta(sb_name, bundle_def)
|
|
865
876
|
else:
|
|
866
877
|
self._add_bundle_to_fiber_group(
|
|
867
878
|
bundle, select_sl, select_idx, to_flip)
|
|
868
|
-
|
|
879
|
+
self._add_bundle_to_meta(bundle, bundle_def)
|
|
880
|
+
return self.fiber_groups, self.meta
|
|
869
881
|
|
|
870
882
|
def move_streamlines(self, tg, to="template"):
|
|
871
883
|
"""Streamline-based registration of a whole-brain tractogram to
|
|
@@ -1052,7 +1064,7 @@ class Segmentation:
|
|
|
1052
1064
|
self.img,
|
|
1053
1065
|
Space.RASMM)
|
|
1054
1066
|
self.fiber_groups = fiber_groups
|
|
1055
|
-
return fiber_groups
|
|
1067
|
+
return fiber_groups, {}
|
|
1056
1068
|
|
|
1057
1069
|
|
|
1058
1070
|
def sl_curve(sl, n_points):
|