pyAFQ 2.0.1__tar.gz → 2.1__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-2.0.1 → pyafq-2.1}/AFQ/api/bundle_dict.py +9 -11
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/api/group.py +39 -11
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/api/participant.py +6 -1
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/api/utils.py +3 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/data/fetch.py +5 -4
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/models/QBallTP.py +2 -2
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/models/csd.py +13 -13
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/recognize.py +11 -9
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/data.py +14 -14
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/decorators.py +3 -1
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/mapping.py +13 -7
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/segmentation.py +24 -19
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/utils.py +0 -15
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/viz.py +49 -20
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_csd.py +4 -4
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_tractography.py +4 -3
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tractography/gputractography.py +9 -7
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tractography/tractography.py +7 -2
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/docs.py +27 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/streamlines.py +2 -1
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/volume.py +2 -1
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/version.py +2 -2
- {pyafq-2.0.1 → pyafq-2.1}/CHANGES.rst +15 -0
- {pyafq-2.0.1 → pyafq-2.1}/PKG-INFO +3 -1
- {pyafq-2.0.1 → pyafq-2.1}/bin/pyAFQ +1 -1
- {pyafq-2.0.1 → pyafq-2.1}/docs/Makefile +18 -3
- pyafq-2.1/docs/source/_static/custom.css +114 -0
- pyafq-2.1/docs/source/_static/logo.png +0 -0
- pyafq-2.1/docs/source/_templates/footer.html +11 -0
- pyafq-2.1/docs/source/bib.rst +6 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/conf.py +9 -4
- pyafq-2.1/docs/source/developing/contributing.rst +15 -0
- pyafq-2.1/docs/source/developing/definitions.rst +61 -0
- {pyafq-2.0.1/docs/source/howto → pyafq-2.1/docs/source}/developing/index.rst +2 -1
- pyafq-2.1/docs/source/explanations/bundle_orientation.rst +56 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/index.rst +6 -2
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/modeling.rst +1 -5
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/tractography.rst +1 -9
- pyafq-2.1/docs/source/explanations/tractometry_pipeline.rst +41 -0
- pyafq-2.1/docs/source/guides_index.rst +10 -0
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/converter.rst +2 -1
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/data.rst +2 -1
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/docker.rst +4 -1
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/howto/getting_help.rst +9 -8
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/image.rst +1 -1
- pyafq-2.1/docs/source/howto/index.rst +28 -0
- pyafq-2.1/docs/source/howto/installation_guide.rst +132 -0
- pyafq-2.1/docs/source/howto/rerun.rst +62 -0
- pyafq-2.1/docs/source/howto/singularity.rst +27 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/index.rst +54 -19
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/reference/bundledict.rst +34 -32
- pyafq-2.1/docs/source/reference/fibertracts.rst +341 -0
- pyafq-2.1/docs/source/reference/index.rst +15 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/reference/kwargs.rst +2 -2
- pyafq-2.1/docs/source/reference/mapping.rst +31 -0
- pyafq-2.1/docs/source/reference/tissue_properties.rst +190 -0
- pyafq-2.1/docs/source/references.bib +528 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/baby_afq.py +4 -4
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/plot_stages_of_tractometry.py +25 -7
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/plot_004_export.py +33 -37
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/plot_006_bids_layout.py +1 -1
- pyafq-2.1/examples/tutorial_examples/plot_007_rois.py +176 -0
- {pyafq-2.0.1 → pyafq-2.1}/gpu_docker/Dockerfile +2 -1
- {pyafq-2.0.1 → pyafq-2.1}/gpu_docker/cuda_track_template.def +1 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyAFQ.egg-info/PKG-INFO +3 -1
- {pyafq-2.0.1 → pyafq-2.1}/pyAFQ.egg-info/SOURCES.txt +22 -17
- {pyafq-2.0.1 → pyafq-2.1}/pyAFQ.egg-info/requires.txt +2 -0
- {pyafq-2.0.1 → pyafq-2.1}/setup.cfg +1 -0
- pyafq-2.0.1/docs/source/_static/custom.css +0 -70
- pyafq-2.0.1/docs/source/_static/logo.png +0 -0
- pyafq-2.0.1/docs/source/explanations/bundle_orientation.rst +0 -52
- pyafq-2.0.1/docs/source/explanations/tractometry_pipeline.rst +0 -31
- pyafq-2.0.1/docs/source/howto/contributing.rst +0 -12
- pyafq-2.0.1/docs/source/howto/developing/definitions.rst +0 -46
- pyafq-2.0.1/docs/source/howto/index.rst +0 -17
- pyafq-2.0.1/docs/source/howto/installation_guide.rst +0 -99
- pyafq-2.0.1/docs/source/howto/usage/index.rst +0 -18
- pyafq-2.0.1/docs/source/howto/usage/kwargs.rst +0 -238
- pyafq-2.0.1/docs/source/howto/usage/methods.rst +0 -350
- pyafq-2.0.1/docs/source/howto/usage/singularity.rst +0 -16
- pyafq-2.0.1/docs/source/reference/index.rst +0 -13
- pyafq-2.0.1/docs/source/reference/mapping.rst +0 -28
- {pyafq-2.0.1 → pyafq-2.1}/.github/CITATION.cff +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/CONTRIBUTING.md +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/docbuild.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/docker_pyafq.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/docker_pyafq_cuda12.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_anisotropic_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_basic_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_custom_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_pft_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_reco80_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_reco_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/nightly_test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/publish-to-test-pypi.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.github/workflows/test.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.gitignore +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.mailmap +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.maintenance/update_changes.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.maintenance/update_zenodo.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.pep8speaks.yml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/.zenodo.json +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/_fixes.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/api/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/data/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/data/utils.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/definitions/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/definitions/image.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/definitions/mapping.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/definitions/utils.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/models/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/models/dki.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/models/dti.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/models/fwdti.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/cleaning.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/criteria.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/curvature.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/other_bundles.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/preprocess.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/roi.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/tests/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/tests/test_other_bundles.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/tests/test_recognition.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/tests/test_rois.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/tests/test_utils.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/recognition/utils.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/registration.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tasks/tractography.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/MoriGroups_Test.mat +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/WholeBrainFG_test.mat +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/.gitattributes +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/config +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/.gitattributes +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/CHANGES +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/README +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/T1w.json +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/annex-uuid +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/dataset_description.json +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/aMRIQC.csv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_group.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-01.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-02.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-03.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-04.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-05.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-06.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-07.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-08.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-09.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-10.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-11.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-12.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-13.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-14.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-15.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-16.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-17.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-18.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-19.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-20.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-21.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-22.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-23.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-24.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-25.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-26.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/fMRIQC.csv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_group.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-01.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-02.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-03.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-04.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-05.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-06.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-07.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-08.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-09.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-10.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-11.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-12.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-13.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-14.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-15.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-16.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-17.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-18.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-19.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-20.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-21.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-22.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-23.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-24.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-25.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-26.pdf +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/participants.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/anat/sub-01_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/anat/sub-02_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/anat/sub-03_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/anat/sub-04_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/anat/sub-05_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/anat/sub-06_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/anat/sub-07_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/anat/sub-08_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/anat/sub-09_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/anat/sub-10_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/anat/sub-11_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/anat/sub-12_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/anat/sub-13_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/anat/sub-14_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/anat/sub-15_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/anat/sub-16_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/anat/sub-17_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/anat/sub-18_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/anat/sub-19_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/anat/sub-20_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/anat/sub-21_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/anat/sub-22_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/anat/sub-23_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/anat/sub-24_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/anat/sub-25_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/anat/sub-26_T1w.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_events.tsv +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/data/mocks3/ds000102-mimic/task-flanker_bold.json +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_api.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_bundle_dict.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_data.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_definitions.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_dki.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_dti.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_fixes.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_registration.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tests/test_viz.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tractography/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/tractography/utils.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/bin.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/conversion.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/docstring_parser.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/models.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/path.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/stats.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/testing.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/tests/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/tests/test_conversions.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/tests/test_path.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/tests/test_stats.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/tests/test_streamlines.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/utils/tests/test_volume.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/viz/__init__.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/viz/altair.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/viz/fury_backend.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/viz/plot.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/viz/plotly_backend.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/AFQ/viz/utils.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/CITATION +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/LICENSE +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/MANIFEST.in +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/Makefile +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/README.md +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/_progressbars.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/_static/BDE_Banner_revised20160211-01.jpg +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/_static/eScience_Logo_HR.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/_static/escience-logo.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/_templates/layout.html +0 -0
- {pyafq-2.0.1/docs/source/howto → pyafq-2.1/docs/source}/developing/releasing.rst +0 -0
- {pyafq-2.0.1/docs/source/howto → pyafq-2.1/docs/source}/developing/tasks.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/down_left_arrow.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/down_right_arrow.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/greencheck.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/tract_modeling2.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/tract_profiling.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/tract_recognition.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/_static/tract_tractography.png +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/profiling.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/explanations/recognition.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/howto/cite.rst +0 -0
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/cleaning_params.rst +0 -0
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/scalars.rst +0 -0
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/segmentation_params.rst +0 -0
- {pyafq-2.0.1/docs/source/howto/usage → pyafq-2.1/docs/source/howto}/tractography_params.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/reference/methods.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/reference/viz_backend.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/sphinxext/kwargsdocs.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/sphinxext/methodsdocs.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/sphinxext/updatedocs.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/source/tutorials/index.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/docs/upload-gh-pages.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/README.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/acoustic_radiations.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/add_custom_bundle.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/cerebellar_peduncles.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/cloudknot_example.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/cloudknot_hcp_example.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/optic_radiations.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/plot_afq_callosal.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/plot_recobundles.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/run_afq_fwdti.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/run_pyAFQ_with_GPU.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/use_subject_space_rois_from_freesurfer.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/howto_examples/vof_example.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/README.rst +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/plot_001_group_afq_api.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/plot_002_participant_afq_api.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/plot_003_rerun.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/examples/tutorial_examples/plot_005_viz.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/gpu_docker/cuda_build.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/gpu_docker/docker-build.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/gpu_docker/docker-push.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyAFQ.egg-info/dependency_links.txt +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyAFQ.egg-info/not-zip-safe +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyAFQ.egg-info/top_level.txt +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyafq_docker/Dockerfile +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyafq_docker/docker-build.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyafq_docker/docker-push.sh +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/pyproject.toml +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/setup.py +0 -0
- {pyafq-2.0.1 → pyafq-2.1}/tox.ini +0 -0
|
@@ -451,7 +451,7 @@ def baby_bd():
|
|
|
451
451
|
'mahal': {'distance_threshold': 4}},
|
|
452
452
|
'Forceps Minor': {'cross_midline': True,
|
|
453
453
|
'include': [templates['FA_R'],
|
|
454
|
-
templates['mid-
|
|
454
|
+
templates['mid-sagittal'],
|
|
455
455
|
templates['FA_L']],
|
|
456
456
|
'exclude': [],
|
|
457
457
|
'space': 'template',
|
|
@@ -459,7 +459,7 @@ def baby_bd():
|
|
|
459
459
|
'mahal': {'distance_threshold': 4}},
|
|
460
460
|
'Forceps Major': {'cross_midline': True,
|
|
461
461
|
'include': [templates['FP_R'],
|
|
462
|
-
templates['mid-
|
|
462
|
+
templates['mid-sagittal'],
|
|
463
463
|
templates['FP_L']],
|
|
464
464
|
'exclude': [],
|
|
465
465
|
'space': 'template',
|
|
@@ -1019,9 +1019,9 @@ class BundleDict(MutableMapping):
|
|
|
1019
1019
|
new_affine : array
|
|
1020
1020
|
Affine of space transformed into.
|
|
1021
1021
|
base_fname : str, optional
|
|
1022
|
-
Base file path to
|
|
1022
|
+
Base file path to construct file path from. Additional BIDS
|
|
1023
1023
|
descriptors will be added to this file path. If None,
|
|
1024
|
-
|
|
1024
|
+
no file paths returned.
|
|
1025
1025
|
to_space : str, optional
|
|
1026
1026
|
Name for space for exported ROIs. Only used if base_fname
|
|
1027
1027
|
is not None.
|
|
@@ -1035,8 +1035,8 @@ class BundleDict(MutableMapping):
|
|
|
1035
1035
|
-------
|
|
1036
1036
|
If base_fname is None, a dictionary where keys are
|
|
1037
1037
|
the roi type and values are the transformed ROIs.
|
|
1038
|
-
Otherwise, a list of file names
|
|
1039
|
-
|
|
1038
|
+
Otherwise, a list of file names and a list of transformed ROIs
|
|
1039
|
+
are returned.
|
|
1040
1040
|
"""
|
|
1041
1041
|
if self.is_bundle_in_template(bundle_name):
|
|
1042
1042
|
transformed_rois = self.apply_to_rois(
|
|
@@ -1057,6 +1057,7 @@ class BundleDict(MutableMapping):
|
|
|
1057
1057
|
|
|
1058
1058
|
if base_fname is not None:
|
|
1059
1059
|
fnames = []
|
|
1060
|
+
list_of_rois_to_save = []
|
|
1060
1061
|
for roi_type, rois in transformed_rois.items():
|
|
1061
1062
|
if roi_type == "prob_map":
|
|
1062
1063
|
suffix = "probseg"
|
|
@@ -1081,12 +1082,9 @@ class BundleDict(MutableMapping):
|
|
|
1081
1082
|
f"{desc}"
|
|
1082
1083
|
f"_{suffix}.nii.gz",
|
|
1083
1084
|
"ROIs")
|
|
1084
|
-
nib.save(
|
|
1085
|
-
nib.Nifti1Image(
|
|
1086
|
-
roi.get_fdata().astype(np.float32),
|
|
1087
|
-
roi.affine), fname)
|
|
1088
1085
|
fnames.append(fname)
|
|
1089
|
-
|
|
1086
|
+
list_of_rois_to_save.append(roi)
|
|
1087
|
+
return list_of_rois_to_save, fnames
|
|
1090
1088
|
else:
|
|
1091
1089
|
return transformed_rois
|
|
1092
1090
|
|
|
@@ -127,7 +127,7 @@ class GroupAFQ(object):
|
|
|
127
127
|
|
|
128
128
|
Examples
|
|
129
129
|
--------
|
|
130
|
-
api.GroupAFQ(my_path,
|
|
130
|
+
api.GroupAFQ(my_path, csd_sh_order_max=4)
|
|
131
131
|
api.GroupAFQ(
|
|
132
132
|
my_path,
|
|
133
133
|
reg_template_spec="mni_t2", reg_subject_spec="b0")
|
|
@@ -208,8 +208,9 @@ class GroupAFQ(object):
|
|
|
208
208
|
|
|
209
209
|
pl_desc_file = op.join(self.afq_path, 'dataset_description.json')
|
|
210
210
|
|
|
211
|
-
|
|
212
|
-
|
|
211
|
+
if not op.exists(pl_desc_file):
|
|
212
|
+
with open(pl_desc_file, 'w') as outfile:
|
|
213
|
+
json.dump(pipeline_description, outfile)
|
|
213
214
|
|
|
214
215
|
self.subjects = bids_layout.get(return_type='id', target='subject')
|
|
215
216
|
if not len(self.subjects):
|
|
@@ -410,7 +411,12 @@ class GroupAFQ(object):
|
|
|
410
411
|
self.afq_path, "tract_profiles.csv"))
|
|
411
412
|
os.makedirs(op.dirname(out_file), exist_ok=True)
|
|
412
413
|
_df = clean_pandas_df(_df)
|
|
413
|
-
|
|
414
|
+
try:
|
|
415
|
+
_df.to_csv(out_file, index=False)
|
|
416
|
+
except:
|
|
417
|
+
logger.warning((
|
|
418
|
+
"Unable to update combined tract profile. "
|
|
419
|
+
"This is likely due to file permissions."))
|
|
414
420
|
return _df
|
|
415
421
|
|
|
416
422
|
def get_streamlines_json(self):
|
|
@@ -502,6 +508,8 @@ class GroupAFQ(object):
|
|
|
502
508
|
None if called without arguments.
|
|
503
509
|
"""
|
|
504
510
|
section = check_attribute(attr_name)
|
|
511
|
+
if section == False:
|
|
512
|
+
return None
|
|
505
513
|
|
|
506
514
|
# iterate over subjects / sessions,
|
|
507
515
|
# decide if they need to be calculated or not
|
|
@@ -554,6 +562,9 @@ class GroupAFQ(object):
|
|
|
554
562
|
Name of the output to export up to. Default: "help"
|
|
555
563
|
"""
|
|
556
564
|
section = check_attribute(attr_name)
|
|
565
|
+
if section == False:
|
|
566
|
+
return None
|
|
567
|
+
|
|
557
568
|
wf_dict = self.wf_dict[
|
|
558
569
|
self.valid_sub_list[0]][self.valid_ses_list[0]]
|
|
559
570
|
if section is not None:
|
|
@@ -772,7 +783,13 @@ class GroupAFQ(object):
|
|
|
772
783
|
self.afq_path,
|
|
773
784
|
(f"bundle-{bundle_name}_view-{view}"
|
|
774
785
|
f"_idx-{curr_file_num}_montage.png")))
|
|
775
|
-
|
|
786
|
+
try:
|
|
787
|
+
curr_img.save(save_path)
|
|
788
|
+
except:
|
|
789
|
+
if op.exists(save_path):
|
|
790
|
+
logger.info("Montage file already exists, skipping.")
|
|
791
|
+
else:
|
|
792
|
+
logger.warning("Unable to save montage file, skipping.")
|
|
776
793
|
all_fnames.append(save_path)
|
|
777
794
|
|
|
778
795
|
this_img_trimmed = {}
|
|
@@ -865,12 +882,23 @@ class GroupAFQ(object):
|
|
|
865
882
|
sls_mni,
|
|
866
883
|
reg_template,
|
|
867
884
|
Space.VOX)
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
885
|
+
|
|
886
|
+
save_path = op.abspath(op.join(
|
|
887
|
+
self.afq_path,
|
|
888
|
+
f"bundle-{bundle_name}_subjects-all_MNI.trk"))
|
|
889
|
+
try:
|
|
890
|
+
save_tractogram(
|
|
891
|
+
moved_sft,
|
|
892
|
+
save_path,
|
|
893
|
+
bbox_valid_check=False)
|
|
894
|
+
except:
|
|
895
|
+
if op.exists(save_path):
|
|
896
|
+
logger.info(("Combined bundles file "
|
|
897
|
+
"already exists, skipping."))
|
|
898
|
+
else:
|
|
899
|
+
logger.warning((
|
|
900
|
+
"Unable to save combined "
|
|
901
|
+
"bundles file, skipping."))
|
|
874
902
|
|
|
875
903
|
def upload_to_s3(self, s3fs, remote_path):
|
|
876
904
|
""" Upload entire AFQ derivatives folder to S3"""
|
|
@@ -56,7 +56,7 @@ class ParticipantAFQ(object):
|
|
|
56
56
|
--------
|
|
57
57
|
api.ParticipantAFQ(
|
|
58
58
|
dwi_data_file, bval_file, bvec_file, output_dir,
|
|
59
|
-
|
|
59
|
+
csd_sh_order_max=4)
|
|
60
60
|
api.ParticipantAFQ(
|
|
61
61
|
dwi_data_file, bval_file, bvec_file, output_dir,
|
|
62
62
|
reg_template_spec="mni_t2", reg_subject_spec="b0")
|
|
@@ -149,6 +149,8 @@ class ParticipantAFQ(object):
|
|
|
149
149
|
The specific output, or None if called without arguments.
|
|
150
150
|
"""
|
|
151
151
|
section = check_attribute(attr_name)
|
|
152
|
+
if section == False:
|
|
153
|
+
return None
|
|
152
154
|
|
|
153
155
|
if section is None:
|
|
154
156
|
return self.wf_dict[attr_name]
|
|
@@ -167,6 +169,9 @@ class ParticipantAFQ(object):
|
|
|
167
169
|
Name of the output to export up to. Default: "help"
|
|
168
170
|
"""
|
|
169
171
|
section = check_attribute(attr_name)
|
|
172
|
+
if section == False:
|
|
173
|
+
return None
|
|
174
|
+
|
|
170
175
|
wf_dict = self.wf_dict
|
|
171
176
|
if section is not None:
|
|
172
177
|
wf_dict = wf_dict[section]
|
|
@@ -238,7 +238,7 @@ pediatric_fnames = [
|
|
|
238
238
|
"VOF_box_L.nii.gz", "VOF_box_R.nii.gz",
|
|
239
239
|
"UNCNeo-withCerebellum-for-babyAFQ.nii.gz",
|
|
240
240
|
"UNCNeo_JHU_tracts_prob-for-babyAFQ.nii.gz",
|
|
241
|
-
"mid-
|
|
241
|
+
"mid-sagittal.nii.gz",
|
|
242
242
|
"OR_rightV1.nii.gz",
|
|
243
243
|
"OR_rightThal.nii.gz",
|
|
244
244
|
"OR_right_roi3.nii.gz",
|
|
@@ -308,7 +308,7 @@ pediatric_remote_fnames = [
|
|
|
308
308
|
"24880739", "24880742", "24880754", "24880757", "24880760", "24880763",
|
|
309
309
|
"24880769", "24880772", "24880775", "24880778", "24880781", "24880787",
|
|
310
310
|
"24880790", "24880793", "24880796", "24880802", "24880805", "24880808",
|
|
311
|
-
"24880616", "24880613", "
|
|
311
|
+
"24880616", "24880613", "54869903",
|
|
312
312
|
"42120480",
|
|
313
313
|
"42120483",
|
|
314
314
|
"42120486",
|
|
@@ -1055,8 +1055,9 @@ def to_bids_description(path, fname='dataset_description.json',
|
|
|
1055
1055
|
"""Dumps a dict into a bids description at the given location"""
|
|
1056
1056
|
kwargs.update({"BIDSVersion": BIDSVersion})
|
|
1057
1057
|
desc_file = op.join(path, fname)
|
|
1058
|
-
|
|
1059
|
-
|
|
1058
|
+
if not op.exists(desc_file):
|
|
1059
|
+
with open(desc_file, 'w') as outfile:
|
|
1060
|
+
json.dump(kwargs, outfile)
|
|
1060
1061
|
|
|
1061
1062
|
|
|
1062
1063
|
def organize_cfin_data(path=None):
|
|
@@ -7,7 +7,7 @@ from dipy.reconst.shm import anisotropic_power, sh_to_sf_matrix
|
|
|
7
7
|
__all__ = ["extract_odf", "anisotropic_index", "anisotropic_power"]
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def extract_odf(odf, sphere=default_sphere,
|
|
10
|
+
def extract_odf(odf, sphere=default_sphere, sh_order_max=8):
|
|
11
11
|
"""
|
|
12
12
|
Calculates spherical harmonics coefficients and
|
|
13
13
|
isotropic and anisotropic diffusion components
|
|
@@ -18,7 +18,7 @@ def extract_odf(odf, sphere=default_sphere, sh_order=8):
|
|
|
18
18
|
ISO = odf_norm.min(axis=-1)
|
|
19
19
|
|
|
20
20
|
_, invB = sh_to_sf_matrix(
|
|
21
|
-
sphere,
|
|
21
|
+
sphere, sh_order_max=sh_order_max, basis_type=None, return_inv=True)
|
|
22
22
|
shm = blas.dgemm(
|
|
23
23
|
alpha=1.,
|
|
24
24
|
a=odf.reshape(-1, invB.shape[0]), b=invB).reshape(
|
|
@@ -23,19 +23,19 @@ class CsdNanResponseError(Exception):
|
|
|
23
23
|
pass
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def _model(gtab, data, response=None,
|
|
26
|
+
def _model(gtab, data, response=None, sh_order_max=None, csd_fa_thr=0.7):
|
|
27
27
|
"""
|
|
28
28
|
Helper function that defines a CSD model.
|
|
29
29
|
"""
|
|
30
|
-
if
|
|
30
|
+
if sh_order_max is None:
|
|
31
31
|
ndata = np.sum(~gtab.b0s_mask)
|
|
32
32
|
# See dipy.reconst.shm.calculate_max_order
|
|
33
33
|
L1 = (-3 + np.sqrt(1 + 8 * ndata)) / 2.0
|
|
34
|
-
|
|
35
|
-
if np.mod(
|
|
36
|
-
|
|
37
|
-
if
|
|
38
|
-
|
|
34
|
+
sh_order_max = int(L1)
|
|
35
|
+
if np.mod(sh_order_max, 2) != 0:
|
|
36
|
+
sh_order_max = sh_order_max - 1
|
|
37
|
+
if sh_order_max > 8:
|
|
38
|
+
sh_order_max = 8
|
|
39
39
|
|
|
40
40
|
my_model = csd.ConstrainedSphericalDeconvModel
|
|
41
41
|
if response is None:
|
|
@@ -55,21 +55,21 @@ def _model(gtab, data, response=None, sh_order=None, csd_fa_thr=0.7):
|
|
|
55
55
|
if np.all(np.isnan(response[0])):
|
|
56
56
|
raise CsdNanResponseError
|
|
57
57
|
|
|
58
|
-
csdmodel = my_model(gtab, response,
|
|
58
|
+
csdmodel = my_model(gtab, response, sh_order_max=sh_order_max)
|
|
59
59
|
return csdmodel
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
def _fit(gtab, data, mask, response=None,
|
|
62
|
+
def _fit(gtab, data, mask, response=None, sh_order_max=None,
|
|
63
63
|
lambda_=1, tau=0.1, csd_fa_thr=0.7):
|
|
64
64
|
"""
|
|
65
65
|
Helper function that does the core of fitting a model to data.
|
|
66
66
|
"""
|
|
67
|
-
return _model(gtab, data, response,
|
|
67
|
+
return _model(gtab, data, response, sh_order_max, csd_fa_thr).fit(
|
|
68
68
|
data, mask=mask)
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
def fit_csd(data_files, bval_files, bvec_files, mask=None, response=None,
|
|
72
|
-
b0_threshold=50,
|
|
72
|
+
b0_threshold=50, sh_order_max=None, lambda_=1, tau=0.1, out_dir=None):
|
|
73
73
|
"""
|
|
74
74
|
Fit the CSD model and save file with SH coefficients.
|
|
75
75
|
|
|
@@ -94,7 +94,7 @@ def fit_csd(data_files, bval_files, bvec_files, mask=None, response=None,
|
|
|
94
94
|
b0_threshold : float,optional.
|
|
95
95
|
The value of diffusion-weighting under which we consider it to be
|
|
96
96
|
equivalent to 0. Default:50
|
|
97
|
-
|
|
97
|
+
sh_order_max : int, optional.
|
|
98
98
|
default: infer the number of parameters from the number of data
|
|
99
99
|
volumes, but no larger than 8.
|
|
100
100
|
lambda_ : float, optional.
|
|
@@ -126,7 +126,7 @@ def fit_csd(data_files, bval_files, bvec_files, mask=None, response=None,
|
|
|
126
126
|
b0_threshold=b0_threshold,
|
|
127
127
|
mask=mask)
|
|
128
128
|
|
|
129
|
-
csdfit = _fit(gtab, data, mask, response=response,
|
|
129
|
+
csdfit = _fit(gtab, data, mask, response=response, sh_order_max=sh_order_max,
|
|
130
130
|
lambda_=lambda_, tau=tau)
|
|
131
131
|
|
|
132
132
|
if out_dir is None:
|
|
@@ -122,16 +122,18 @@ def recognize(
|
|
|
122
122
|
References
|
|
123
123
|
----------
|
|
124
124
|
.. [Hua2008] Hua K, Zhang J, Wakana S, Jiang H, Li X, et al. (2008)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
Tract probability maps in stereotaxic spaces: analyses of white
|
|
126
|
+
matter anatomy and tract-specific quantification. Neuroimage 39:
|
|
127
|
+
336-347
|
|
128
|
+
|
|
128
129
|
.. [Yeatman2012] Yeatman, Jason D., Robert F. Dougherty, Nathaniel J.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
Myall, Brian A. Wandell, and Heidi M. Feldman. 2012. "Tract Profiles
|
|
131
|
+
of White Matter Properties: Automating Fiber-Tract Quantification"
|
|
132
|
+
PloS One 7 (11): e49790.
|
|
133
|
+
|
|
134
|
+
.. [Garyfallidis2018] Garyfallidis et al. Recognition of white matter
|
|
135
|
+
bundles using local and global streamline-based registration and
|
|
136
|
+
clustering, Neuroimage, 2017.
|
|
135
137
|
"""
|
|
136
138
|
if rng is None:
|
|
137
139
|
rng = np.random.RandomState()
|
|
@@ -86,8 +86,8 @@ def get_data_gtab(dwi_data_file, bval_file, bvec_file, min_bval=None,
|
|
|
86
86
|
bvals = bvals[valid_b]
|
|
87
87
|
bvecs = bvecs[valid_b]
|
|
88
88
|
gtab = dpg.gradient_table(
|
|
89
|
-
bvals
|
|
90
|
-
b0_threshold
|
|
89
|
+
bvals=bvals, bvecs=bvecs,
|
|
90
|
+
b0_threshold=b0_threshold)
|
|
91
91
|
img = nib.Nifti1Image(data, img.affine)
|
|
92
92
|
return data, gtab, img, img.affine
|
|
93
93
|
|
|
@@ -293,7 +293,7 @@ def msdki_msk(msdki_tf):
|
|
|
293
293
|
subfolder="models")
|
|
294
294
|
@as_img
|
|
295
295
|
def csd_params(dwi, brain_mask, gtab, data,
|
|
296
|
-
csd_response=None,
|
|
296
|
+
csd_response=None, csd_sh_order_max=None,
|
|
297
297
|
csd_lambda_=1, csd_tau=0.1,
|
|
298
298
|
csd_fa_thr=0.7):
|
|
299
299
|
"""
|
|
@@ -309,7 +309,7 @@ def csd_params(dwi, brain_mask, gtab, data,
|
|
|
309
309
|
(i.e. S0). If not provided, auto_response will be used to calculate
|
|
310
310
|
these values.
|
|
311
311
|
Default: None
|
|
312
|
-
|
|
312
|
+
csd_sh_order_max : int or None, optional.
|
|
313
313
|
default: infer the number of parameters from the number of data
|
|
314
314
|
volumes, but no larger than 8.
|
|
315
315
|
Default: None
|
|
@@ -340,7 +340,7 @@ def csd_params(dwi, brain_mask, gtab, data,
|
|
|
340
340
|
csdf = csd_fit_model(
|
|
341
341
|
gtab, data,
|
|
342
342
|
mask=mask,
|
|
343
|
-
response=csd_response,
|
|
343
|
+
response=csd_response, sh_order_max=csd_sh_order_max,
|
|
344
344
|
lambda_=csd_lambda_, tau=csd_tau,
|
|
345
345
|
csd_fa_thr=csd_fa_thr)
|
|
346
346
|
except CsdNanResponseError as e:
|
|
@@ -349,7 +349,7 @@ def csd_params(dwi, brain_mask, gtab, data,
|
|
|
349
349
|
f'{dwi}.') from e
|
|
350
350
|
|
|
351
351
|
meta = dict(
|
|
352
|
-
SphericalHarmonicDegree=
|
|
352
|
+
SphericalHarmonicDegree=csd_sh_order_max,
|
|
353
353
|
ResponseFunctionTensor=csd_response,
|
|
354
354
|
lambda_=csd_lambda_,
|
|
355
355
|
tau=csd_tau,
|
|
@@ -579,7 +579,7 @@ def rumba_f_wm(rumba_fit):
|
|
|
579
579
|
@pimms.calc("opdt_params", "opdt_gfa")
|
|
580
580
|
def opdt_params(base_fname, data, gtab,
|
|
581
581
|
dwi_affine, brain_mask,
|
|
582
|
-
|
|
582
|
+
opdt_sh_order_max=8):
|
|
583
583
|
"""
|
|
584
584
|
full path to a nifti file containing
|
|
585
585
|
parameters for the Orientation Probability Density Transform
|
|
@@ -592,7 +592,7 @@ def opdt_params(base_fname, data, gtab,
|
|
|
592
592
|
Spherical harmonics order for OPDT model. Must be even.
|
|
593
593
|
Default: 8
|
|
594
594
|
"""
|
|
595
|
-
opdt_model = shm.OpdtModel(gtab,
|
|
595
|
+
opdt_model = shm.OpdtModel(gtab, opdt_sh_order_max)
|
|
596
596
|
opdt_fit = opdt_model.fit(data, mask=brain_mask)
|
|
597
597
|
|
|
598
598
|
params_suffix = "_model-OPDT_param-fod_dwimap.nii.gz"
|
|
@@ -602,7 +602,7 @@ def opdt_params(base_fname, data, gtab,
|
|
|
602
602
|
get_fname(base_fname,
|
|
603
603
|
f"{drop_extension(params_suffix)}.json",
|
|
604
604
|
"models"),
|
|
605
|
-
dict(
|
|
605
|
+
dict(sh_order_max=opdt_sh_order_max)
|
|
606
606
|
)
|
|
607
607
|
|
|
608
608
|
GFA_suffix = "_model-OPDT_param-GFA_dwimap.nii.gz"
|
|
@@ -610,7 +610,7 @@ def opdt_params(base_fname, data, gtab,
|
|
|
610
610
|
nib.save(nib.Nifti1Image(opdt_fit.gfa, dwi_affine), GFA_fname)
|
|
611
611
|
write_json(
|
|
612
612
|
get_fname(base_fname, f"{drop_extension(GFA_suffix)}.json", "models"),
|
|
613
|
-
dict(
|
|
613
|
+
dict(sh_order_max=opdt_sh_order_max)
|
|
614
614
|
)
|
|
615
615
|
|
|
616
616
|
return params_fname, GFA_fname
|
|
@@ -647,7 +647,7 @@ def opdt_ai(opdt_params):
|
|
|
647
647
|
@pimms.calc("csa_params", "csa_gfa")
|
|
648
648
|
def csa_params(base_fname, data, gtab,
|
|
649
649
|
dwi_affine, brain_mask,
|
|
650
|
-
|
|
650
|
+
csa_sh_order_max=8):
|
|
651
651
|
"""
|
|
652
652
|
full path to a nifti file containing
|
|
653
653
|
parameters for the Constant Solid Angle
|
|
@@ -660,7 +660,7 @@ def csa_params(base_fname, data, gtab,
|
|
|
660
660
|
Spherical harmonics order for CSA model. Must be even.
|
|
661
661
|
Default: 8
|
|
662
662
|
"""
|
|
663
|
-
csa_model = shm.CsaOdfModel(gtab,
|
|
663
|
+
csa_model = shm.CsaOdfModel(gtab, csa_sh_order_max)
|
|
664
664
|
csa_fit = csa_model.fit(data, mask=brain_mask)
|
|
665
665
|
|
|
666
666
|
params_suffix = "_model-csa_param-fod_dwimap.nii.gz"
|
|
@@ -670,7 +670,7 @@ def csa_params(base_fname, data, gtab,
|
|
|
670
670
|
get_fname(base_fname,
|
|
671
671
|
f"{drop_extension(params_suffix)}.json",
|
|
672
672
|
"models"),
|
|
673
|
-
dict(
|
|
673
|
+
dict(sh_order_max=csa_sh_order_max)
|
|
674
674
|
)
|
|
675
675
|
|
|
676
676
|
GFA_suffix = "_model-csa_param-gfa_dwimap.nii.gz"
|
|
@@ -681,7 +681,7 @@ def csa_params(base_fname, data, gtab,
|
|
|
681
681
|
base_fname,
|
|
682
682
|
f"{drop_extension(GFA_suffix)}.json",
|
|
683
683
|
"models"),
|
|
684
|
-
dict(
|
|
684
|
+
dict(sh_order_max=csa_sh_order_max)
|
|
685
685
|
)
|
|
686
686
|
|
|
687
687
|
return params_fname, GFA_fname
|
|
@@ -143,9 +143,11 @@ def as_file(suffix, include_track=False, include_seg=False, subfolder=None):
|
|
|
143
143
|
this_file = this_file + ".trk"
|
|
144
144
|
|
|
145
145
|
if not op.exists(this_file):
|
|
146
|
+
logger.info(f"Calculating {suffix}")
|
|
147
|
+
|
|
146
148
|
gen, meta = func(*args[:og_arg_count], **kwargs)
|
|
147
149
|
|
|
148
|
-
logger.info(f"Saving {this_file}")
|
|
150
|
+
logger.info(f"{suffix} completed. Saving to {this_file}")
|
|
149
151
|
if isinstance(gen, nib.Nifti1Image):
|
|
150
152
|
nib.save(gen, this_file)
|
|
151
153
|
elif isinstance(gen, StatefulTractogram):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import nibabel as nib
|
|
2
|
+
import numpy as np
|
|
2
3
|
import os.path as op
|
|
3
4
|
import logging
|
|
4
5
|
|
|
@@ -84,16 +85,21 @@ def export_rois(base_fname, output_dir, dwi_data_file, data_imap, mapping):
|
|
|
84
85
|
to_space = space_from_fname(dwi_data_file)
|
|
85
86
|
for bundle_name in bundle_dict:
|
|
86
87
|
roi_files[bundle_name] = []
|
|
87
|
-
for roi_fname in bundle_dict.transform_rois(
|
|
88
|
+
for roi, roi_fname in zip(*bundle_dict.transform_rois(
|
|
88
89
|
bundle_name, mapping, data_imap["dwi_affine"],
|
|
89
90
|
base_fname=base_roi_fname,
|
|
90
|
-
to_space=to_space):
|
|
91
|
-
logger.info(f"Saving {roi_fname}")
|
|
91
|
+
to_space=to_space)):
|
|
92
92
|
roi_files[bundle_name].append(roi_fname)
|
|
93
|
-
|
|
94
|
-
"
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
if not op.exists(roi_fname):
|
|
94
|
+
logger.info(f"Saving {roi_fname}")
|
|
95
|
+
nib.save(
|
|
96
|
+
nib.Nifti1Image(
|
|
97
|
+
roi.get_fdata().astype(np.float32),
|
|
98
|
+
roi.affine), roi_fname)
|
|
99
|
+
meta = {
|
|
100
|
+
"Bundle Definition": bundle_dict.get_b_info(bundle_name)}
|
|
101
|
+
meta_fname = f'{drop_extension(roi_fname)}.json'
|
|
102
|
+
write_json(meta_fname, meta)
|
|
97
103
|
return {'rois': roi_files}
|
|
98
104
|
|
|
99
105
|
|
|
@@ -155,26 +155,31 @@ def export_bundles(base_fname, output_dir,
|
|
|
155
155
|
f'_desc-{str_to_desc(bundle)}'
|
|
156
156
|
f'_tractography{extension}',
|
|
157
157
|
subfolder="bundles")
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
seg_sft.sft.dtype_dict = {
|
|
163
|
-
'positions': np.float16,
|
|
164
|
-
'offsets': np.uint32}
|
|
165
|
-
trxfile = TrxFile.from_sft(bundle_sft)
|
|
166
|
-
save_trx(trxfile, fname)
|
|
167
|
-
else:
|
|
168
|
-
save_tractogram(
|
|
169
|
-
bundle_sft, fname,
|
|
170
|
-
bbox_valid_check=False)
|
|
158
|
+
if op.exists(fname):
|
|
159
|
+
logger.info(
|
|
160
|
+
f"Bundle {bundle} already exists at {fname}. "
|
|
161
|
+
"Skipping export.")
|
|
171
162
|
else:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
163
|
+
bundle_sft = seg_sft.get_bundle(bundle)
|
|
164
|
+
if len(bundle_sft) > 0:
|
|
165
|
+
logger.info(f"Saving {fname}")
|
|
166
|
+
if is_trx:
|
|
167
|
+
seg_sft.sft.dtype_dict = {
|
|
168
|
+
'positions': np.float16,
|
|
169
|
+
'offsets': np.uint32}
|
|
170
|
+
trxfile = TrxFile.from_sft(bundle_sft)
|
|
171
|
+
save_trx(trxfile, fname)
|
|
172
|
+
else:
|
|
173
|
+
save_tractogram(
|
|
174
|
+
bundle_sft, fname,
|
|
175
|
+
bbox_valid_check=False)
|
|
176
|
+
else:
|
|
177
|
+
logger.info(f"No bundle to save for {bundle}")
|
|
178
|
+
meta = dict(
|
|
179
|
+
source=bundles,
|
|
180
|
+
params=seg_sft.get_bundle_param_info(bundle))
|
|
181
|
+
meta_fname = drop_extension(fname) + '.json'
|
|
182
|
+
write_json(meta_fname, meta)
|
|
178
183
|
return op.dirname(fname)
|
|
179
184
|
|
|
180
185
|
|
|
@@ -23,21 +23,6 @@ def get_base_fname(output_dir, dwi_data_file):
|
|
|
23
23
|
return fname
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def get_fname(base_fname, suffix,
|
|
27
|
-
tracking_params=None, segmentation_params=None):
|
|
28
|
-
fname = base_fname
|
|
29
|
-
if tracking_params is not None and 'odf_model' in tracking_params:
|
|
30
|
-
odf_model = tracking_params['odf_model']
|
|
31
|
-
if not isinstance(odf_model, str):
|
|
32
|
-
odf_model = odf_model.get_name()
|
|
33
|
-
directions = tracking_params['directions']
|
|
34
|
-
fname = fname + (
|
|
35
|
-
f'_coordsys-RASMM_trkmethod-{directions+odf_model}'
|
|
36
|
-
)
|
|
37
|
-
if segmentation_params is not None:
|
|
38
|
-
fname = fname + f"_recogmethod-AFQ"
|
|
39
|
-
|
|
40
|
-
|
|
41
26
|
def _split_path(path):
|
|
42
27
|
parts = []
|
|
43
28
|
while True:
|