pyAFQ 3.2__tar.gz → 3.4__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-3.2 → pyafq-3.4}/.codespellrc +1 -1
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/docbuild.yml +1 -1
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/docker_pyafq.yml +3 -0
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/nightly_anisotropic_test.yml +1 -1
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/nightly_basic_test.yml +1 -1
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/nightly_reco80_test.yml +1 -1
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/nightly_reco_test.yml +1 -1
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/nightly_test.yml +1 -1
- {pyafq-3.2 → pyafq-3.4}/.gitignore +1 -3
- {pyafq-3.2 → pyafq-3.4}/AFQ/_fixes.py +104 -44
- {pyafq-3.2 → pyafq-3.4}/AFQ/api/bundle_dict.py +2 -6
- {pyafq-3.2 → pyafq-3.4}/AFQ/api/group.py +33 -12
- {pyafq-3.2 → pyafq-3.4}/AFQ/api/participant.py +29 -8
- {pyafq-3.2 → pyafq-3.4}/AFQ/api/utils.py +4 -9
- {pyafq-3.2 → pyafq-3.4}/AFQ/data/fetch.py +20 -1
- {pyafq-3.2 → pyafq-3.4}/AFQ/definitions/image.py +23 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/definitions/utils.py +3 -3
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/asym_filtering.py +1 -1
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/msmt.py +1 -1
- pyafq-3.4/AFQ/nn/babyseg.py +197 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/nn/brainchop.py +1 -1
- {pyafq-3.2 → pyafq-3.4}/AFQ/nn/multiaxial.py +1 -1
- pyafq-3.4/AFQ/nn/tests/test_nn.py +21 -0
- pyafq-3.4/AFQ/nn/utils.py +96 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/cleaning.py +54 -10
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/criteria.py +27 -20
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/recognize.py +15 -8
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/tests/test_recognition.py +39 -7
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/tests/test_utils.py +45 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/utils.py +8 -9
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/data.py +52 -3
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/segmentation.py +20 -21
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/structural.py +29 -1
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/tissue.py +42 -5
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/tractography.py +1 -1
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/viz.py +19 -32
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_api.py +19 -33
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_definitions.py +1 -1
- {pyafq-3.2 → pyafq-3.4}/AFQ/tractography/tractography.py +11 -7
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/bin.py +269 -222
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/conversion.py +1 -1
- pyafq-3.4/AFQ/utils/docs.py +24 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/docstring_parser.py +10 -6
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/streamlines.py +75 -17
- pyafq-3.4/AFQ/utils/tests/test_bin.py +100 -0
- pyafq-3.4/AFQ/utils/tests/test_streamlines.py +185 -0
- pyafq-3.4/AFQ/utils/tests/test_volume.py +105 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/volume.py +78 -15
- {pyafq-3.2 → pyafq-3.4}/AFQ/version.py +3 -3
- {pyafq-3.2 → pyafq-3.4}/AFQ/viz/altair.py +4 -4
- {pyafq-3.2 → pyafq-3.4}/AFQ/viz/fury_backend.py +23 -12
- pyafq-3.4/AFQ/viz/plot.py +138 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/viz/plotly_backend.py +51 -37
- {pyafq-3.2 → pyafq-3.4}/AFQ/viz/utils.py +105 -83
- {pyafq-3.2 → pyafq-3.4}/CHANGES.rst +29 -0
- {pyafq-3.2 → pyafq-3.4}/PKG-INFO +18 -20
- pyafq-3.4/bin/pyAFQ +179 -0
- pyafq-3.4/bin/pyAFQ-bids +225 -0
- {pyafq-3.2 → pyafq-3.4}/docs/Makefile +12 -24
- {pyafq-3.2 → pyafq-3.4}/docs/source/conf.py +19 -29
- {pyafq-3.2 → pyafq-3.4}/docs/source/developing/definitions.rst +2 -3
- pyafq-3.4/docs/source/examples/howto_examples/acoustic_radiations.md +148 -0
- pyafq-3.4/docs/source/examples/howto_examples/afq_callosal.md +111 -0
- pyafq-3.4/docs/source/examples/howto_examples/afq_fwdti.md +178 -0
- pyafq-3.4/docs/source/examples/howto_examples/baby_afq.md +184 -0
- pyafq-3.2/examples/howto_examples/cerebellar_peduncles.py → pyafq-3.4/docs/source/examples/howto_examples/cerebellar_peduncles.md +45 -30
- pyafq-3.4/docs/source/examples/howto_examples/cloudknot_example.md +202 -0
- pyafq-3.2/examples/howto_examples/cloudknot_hcp_example.py → pyafq-3.4/docs/source/examples/howto_examples/cloudknot_hcp_example.md +109 -63
- pyafq-3.2/examples/howto_examples/README.rst → pyafq-3.4/docs/source/examples/howto_examples/index.rst +4 -1
- pyafq-3.4/docs/source/examples/howto_examples/optic_radiations.md +179 -0
- pyafq-3.4/docs/source/examples/howto_examples/optic_tract.md +194 -0
- pyafq-3.2/examples/howto_examples/plot_stages_of_tractometry.py → pyafq-3.4/docs/source/examples/howto_examples/plot_stages_of_tractometry.md +234 -152
- pyafq-3.4/docs/source/examples/howto_examples/plot_trx.md +91 -0
- pyafq-3.4/docs/source/examples/howto_examples/pyAFQ_with_GPU.md +78 -0
- pyafq-3.2/examples/howto_examples/pyafq_2.py → pyafq-3.4/docs/source/examples/howto_examples/pyafq_2.md +74 -55
- pyafq-3.4/docs/source/examples/howto_examples/recobundles.md +75 -0
- pyafq-3.4/docs/source/examples/howto_examples/use_subject_space_rois_from_freesurfer.md +167 -0
- pyafq-3.2/examples/howto_examples/vof_example.py → pyafq-3.4/docs/source/examples/howto_examples/vof_example.md +28 -7
- pyafq-3.2/examples/tutorial_examples/README.rst → pyafq-3.4/docs/source/examples/tutorial_examples/index.rst +4 -1
- pyafq-3.4/docs/source/examples/tutorial_examples/plot_001_group_afq_api.md +355 -0
- pyafq-3.4/docs/source/examples/tutorial_examples/plot_002_participant_afq_api.md +311 -0
- pyafq-3.4/docs/source/examples/tutorial_examples/plot_003_rerun.md +188 -0
- pyafq-3.4/docs/source/examples/tutorial_examples/plot_004_export.md +226 -0
- pyafq-3.4/docs/source/examples/tutorial_examples/plot_005_viz.md +486 -0
- pyafq-3.4/docs/source/examples/tutorial_examples/plot_006_bids_layout.md +330 -0
- pyafq-3.2/examples/tutorial_examples/plot_007_rois.py → pyafq-3.4/docs/source/examples/tutorial_examples/plot_007_rois.md +41 -12
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/index.rst +1 -1
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/cleaning_params.rst +2 -3
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/converter.rst +2 -2
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/data.rst +2 -2
- pyafq-3.4/docs/source/howto/docker.rst +19 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/image.rst +5 -7
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/index.rst +1 -2
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/installation_guide.rst +2 -2
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/scalars.rst +1 -2
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/segmentation_params.rst +2 -2
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/singularity.rst +3 -3
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/tractography_params.rst +2 -2
- {pyafq-3.2 → pyafq-3.4}/docs/source/index.rst +5 -5
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/bundledict.rst +1 -1
- pyafq-3.4/docs/source/reference/cli.rst +142 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/fibertracts.rst +6 -6
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/index.rst +1 -1
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/kwargs.rst +1 -1
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/mapping.rst +1 -1
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/methods.rst +1 -1
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/viz_backend.rst +8 -8
- {pyafq-3.2 → pyafq-3.4}/docs/source/references.bib +98 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/tutorials/index.rst +8 -11
- {pyafq-3.2 → pyafq-3.4}/pyAFQ.egg-info/PKG-INFO +18 -20
- {pyafq-3.2 → pyafq-3.4}/pyAFQ.egg-info/SOURCES.txt +32 -27
- {pyafq-3.2 → pyafq-3.4}/pyAFQ.egg-info/requires.txt +18 -20
- pyafq-3.4/pyAFQ.egg-info/scm_file_list.json +451 -0
- pyafq-3.4/pyAFQ.egg-info/scm_version.json +8 -0
- {pyafq-3.2 → pyafq-3.4}/setup.cfg +13 -14
- pyafq-3.2/AFQ/nn/utils.py +0 -51
- pyafq-3.2/AFQ/utils/docs.py +0 -55
- pyafq-3.2/AFQ/utils/tests/test_streamlines.py +0 -74
- pyafq-3.2/AFQ/utils/tests/test_volume.py +0 -28
- pyafq-3.2/AFQ/viz/plot.py +0 -1649
- pyafq-3.2/bin/pyAFQ +0 -159
- pyafq-3.2/docs/source/_progressbars.py +0 -33
- pyafq-3.2/docs/source/howto/docker.rst +0 -15
- pyafq-3.2/docs/source/sphinxext/updatedocs.py +0 -38
- pyafq-3.2/examples/howto_examples/acoustic_radiations.py +0 -119
- pyafq-3.2/examples/howto_examples/add_custom_bundle.py +0 -235
- pyafq-3.2/examples/howto_examples/afq_callosal.py +0 -104
- pyafq-3.2/examples/howto_examples/afq_fwdti.py +0 -162
- pyafq-3.2/examples/howto_examples/baby_afq.py +0 -152
- pyafq-3.2/examples/howto_examples/cloudknot_example.py +0 -163
- pyafq-3.2/examples/howto_examples/optic_radiations.py +0 -155
- pyafq-3.2/examples/howto_examples/optic_tract.py +0 -176
- pyafq-3.2/examples/howto_examples/pyAFQ_with_GPU.py +0 -58
- pyafq-3.2/examples/howto_examples/recobundles.py +0 -59
- pyafq-3.2/examples/howto_examples/use_subject_space_rois_from_freesurfer.py +0 -147
- pyafq-3.2/examples/tutorial_examples/plot_001_group_afq_api.py +0 -308
- pyafq-3.2/examples/tutorial_examples/plot_002_participant_afq_api.py +0 -268
- pyafq-3.2/examples/tutorial_examples/plot_003_rerun.py +0 -160
- pyafq-3.2/examples/tutorial_examples/plot_004_export.py +0 -192
- pyafq-3.2/examples/tutorial_examples/plot_005_viz.py +0 -436
- pyafq-3.2/examples/tutorial_examples/plot_006_bids_layout.py +0 -297
- {pyafq-3.2 → pyafq-3.4}/.github/CITATION.cff +0 -0
- {pyafq-3.2 → pyafq-3.4}/.github/CONTRIBUTING.md +0 -0
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/docker_pyafq_cuda12.yml +0 -0
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/nightly_custom_test.yml +0 -0
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/publish-to-test-pypi.yml +0 -0
- {pyafq-3.2 → pyafq-3.4}/.github/workflows/test.yml +0 -0
- {pyafq-3.2 → pyafq-3.4}/.mailmap +0 -0
- {pyafq-3.2 → pyafq-3.4}/.maintenance/update_changes.sh +0 -0
- {pyafq-3.2 → pyafq-3.4}/.maintenance/update_zenodo.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/.pep8speaks.yml +0 -0
- {pyafq-3.2 → pyafq-3.4}/.pre-commit-config.yaml +0 -0
- {pyafq-3.2 → pyafq-3.4}/.zenodo.json +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/api/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/data/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/data/utils.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/definitions/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/definitions/mapping.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/QBallTP.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/csd.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/dki.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/dti.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/fwdti.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/models/wmgm_interface.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/nn/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/nn/synthseg.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/clustering.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/curvature.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/other_bundles.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/preprocess.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/roi.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/sparse_decisions.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/tests/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/tests/conftest.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/tests/test_other_bundles.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/recognition/tests/test_rois.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/registration.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/decorators.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/mapping.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tasks/utils.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/MoriGroups_Test.mat +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/WholeBrainFG_test.mat +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/.gitattributes +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/config +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/.gitattributes +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/CHANGES +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/README +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/T1w.json +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/annex-uuid +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/dataset_description.json +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/aMRIQC.csv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_group.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-01.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-02.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-03.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-04.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-05.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-06.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-07.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-08.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-09.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-10.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-11.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-12.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-13.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-14.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-15.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-16.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-17.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-18.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-19.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-20.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-21.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-22.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-23.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-24.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-25.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-26.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/fMRIQC.csv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_group.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-01.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-02.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-03.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-04.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-05.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-06.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-07.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-08.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-09.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-10.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-11.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-12.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-13.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-14.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-15.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-16.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-17.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-18.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-19.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-20.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-21.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-22.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-23.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-24.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-25.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-26.pdf +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/participants.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/anat/sub-01_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/anat/sub-02_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/anat/sub-03_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/anat/sub-04_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/anat/sub-05_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/anat/sub-06_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/anat/sub-07_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/anat/sub-08_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/anat/sub-09_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/anat/sub-10_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/anat/sub-11_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/anat/sub-12_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/anat/sub-13_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/anat/sub-14_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/anat/sub-15_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/anat/sub-16_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/anat/sub-17_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/anat/sub-18_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/anat/sub-19_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/anat/sub-20_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/anat/sub-21_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/anat/sub-22_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/anat/sub-23_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/anat/sub-24_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/anat/sub-25_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/anat/sub-26_T1w.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_bold.nii.gz +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/task-flanker_bold.json +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_bundle_dict.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_csd.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_data.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_dki.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_dti.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_fixes.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_msmt.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_nn.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_registration.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_tractography.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tests/test_viz.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tractography/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/tractography/utils.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/models.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/path.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/stats.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/testing.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/tests/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/tests/test_conversions.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/tests/test_path.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/utils/tests/test_stats.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/AFQ/viz/__init__.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/CITATION +0 -0
- {pyafq-3.2 → pyafq-3.4}/LICENSE +0 -0
- {pyafq-3.2 → pyafq-3.4}/MANIFEST.in +0 -0
- {pyafq-3.2 → pyafq-3.4}/Makefile +0 -0
- {pyafq-3.2 → pyafq-3.4}/NOTICE.md +0 -0
- {pyafq-3.2 → pyafq-3.4}/README.md +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/BDE_Banner_revised20160211-01.jpg +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/CSVfile.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/FAbrain.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/ProfileViz.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/TP_viz.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/arcuaterois.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/beaware.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/custom.css +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/diffusion-anisotropic.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/diffusion-isotropic.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/down_left_arrow.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/down_right_arrow.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/dti_in_brain.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/dtiexplanation.jpg +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/eScience_Logo_HR.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/ecosystem.jpg +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/escience-logo.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/greencheck.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/inherintambiguity.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/logo.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/modelling.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/modeltotrack.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_001.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_002.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_003.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_004.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_005.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_006.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_010.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_011.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_012.gif +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/tract_modeling2.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/tract_profiling.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/tract_recognition.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/tract_tractography.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/tractometry_pipeline.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_static/tropic.png +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_templates/footer.html +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/_templates/layout.html +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/bib.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/developing/contributing.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/developing/index.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/developing/releasing.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/developing/tasks.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/bundle_orientation.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/modeling.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/profiling.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/recognition.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/tractography.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/explanations/whats_new_3.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/guides_index.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/cite.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/getting_help.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/howto/rerun.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/reference/tissue_properties.rst +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/sphinxext/kwargsdocs.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/source/sphinxext/methodsdocs.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/docs/upload-gh-pages.sh +0 -0
- {pyafq-3.2 → pyafq-3.4}/gpu_docker/Dockerfile +0 -0
- {pyafq-3.2 → pyafq-3.4}/gpu_docker/docker-build.sh +0 -0
- {pyafq-3.2 → pyafq-3.4}/gpu_docker/docker-push.sh +0 -0
- {pyafq-3.2 → pyafq-3.4}/gpu_docker/pyafq_with_gpu_template.def +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyAFQ.egg-info/dependency_links.txt +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyAFQ.egg-info/not-zip-safe +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyAFQ.egg-info/top_level.txt +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyafq_docker/Dockerfile +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyafq_docker/docker-build.sh +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyafq_docker/docker-push.sh +0 -0
- {pyafq-3.2 → pyafq-3.4}/pyproject.toml +0 -0
- {pyafq-3.2 → pyafq-3.4}/setup.py +0 -0
- {pyafq-3.2 → pyafq-3.4}/tox.ini +0 -0
|
@@ -54,3 +54,6 @@ jobs:
|
|
|
54
54
|
- name: Push pyAFQ GPU docker image
|
|
55
55
|
if: github.ref == 'refs/heads/master' || startsWith(github.event.ref, 'refs/tags')
|
|
56
56
|
run: sh ./gpu_docker/docker-push.sh "nrdg" "11"
|
|
57
|
+
|
|
58
|
+
- name: Report pyAFQ image size
|
|
59
|
+
run: docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | tee -a $GITHUB_STEP_SUMMARY
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
- name: Install
|
|
28
28
|
run: |
|
|
29
29
|
python -m pip install --upgrade pip
|
|
30
|
-
pip install .[dev,fury,afqbrowser,
|
|
30
|
+
pip install .[dev,fury,afqbrowser,nn]
|
|
31
31
|
- name: Lint
|
|
32
32
|
run: |
|
|
33
33
|
flake8 --ignore N802,N806,W503 --select W504 `find . -name \*.py | grep -v setup.py | grep -v version.py | grep -v __init__.py | grep -v /docs/`
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
- name: Install
|
|
28
28
|
run: |
|
|
29
29
|
python -m pip install --upgrade pip
|
|
30
|
-
pip install .[dev,fury,afqbrowser,
|
|
30
|
+
pip install .[dev,fury,afqbrowser,nn]
|
|
31
31
|
- name: Lint
|
|
32
32
|
run: |
|
|
33
33
|
flake8 --ignore N802,N806,W503 --select W504 `find . -name \*.py | grep -v setup.py | grep -v version.py | grep -v __init__.py | grep -v /docs/`
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
- name: Install
|
|
28
28
|
run: |
|
|
29
29
|
python -m pip install --upgrade pip
|
|
30
|
-
pip install .[dev,fury,afqbrowser,
|
|
30
|
+
pip install .[dev,fury,afqbrowser,nn]
|
|
31
31
|
- name: Lint
|
|
32
32
|
run: |
|
|
33
33
|
flake8 --ignore N802,N806,W503 --select W504 `find . -name \*.py | grep -v setup.py | grep -v version.py | grep -v __init__.py | grep -v /docs/`
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
- name: Install
|
|
28
28
|
run: |
|
|
29
29
|
python -m pip install --upgrade pip
|
|
30
|
-
pip install .[dev,fury,afqbrowser,
|
|
30
|
+
pip install .[dev,fury,afqbrowser,nn]
|
|
31
31
|
- name: Lint
|
|
32
32
|
run: |
|
|
33
33
|
flake8 --ignore N802,N806,W503 --select W504 `find . -name \*.py | grep -v setup.py | grep -v version.py | grep -v __init__.py | grep -v /docs/`
|
|
@@ -27,7 +27,7 @@ jobs:
|
|
|
27
27
|
- name: Install
|
|
28
28
|
run: |
|
|
29
29
|
python -m pip install --upgrade pip
|
|
30
|
-
pip install .[dev,fury,afqbrowser,
|
|
30
|
+
pip install .[dev,fury,afqbrowser,nn]
|
|
31
31
|
- name: Lint
|
|
32
32
|
run: |
|
|
33
33
|
flake8 --ignore N802,N806,W503 --select W504 `find . -name \*.py | grep -v setup.py | grep -v version.py | grep -v __init__.py | grep -v /docs/`
|
|
@@ -5,9 +5,6 @@ AFQ/version.py
|
|
|
5
5
|
docs/_build
|
|
6
6
|
docs/build
|
|
7
7
|
docs/source/auto_examples/
|
|
8
|
-
docs/source/tutorials/tutorial_examples/
|
|
9
|
-
docs/source/howto/howto_examples/
|
|
10
|
-
docs/source/reference/config.rst
|
|
11
8
|
examples/**/*.nii.gz
|
|
12
9
|
examples/**/*.trk
|
|
13
10
|
examples/**/*.npy
|
|
@@ -17,5 +14,6 @@ dist
|
|
|
17
14
|
.DS_Store
|
|
18
15
|
**.sw?
|
|
19
16
|
**Untitled.ipynb
|
|
17
|
+
docs/source/examples/**/*.ipynb
|
|
20
18
|
pip-wheel-metadata
|
|
21
19
|
pyAFQ.egg-info
|
|
@@ -3,6 +3,7 @@ import math
|
|
|
3
3
|
import tempfile
|
|
4
4
|
from math import radians
|
|
5
5
|
|
|
6
|
+
import imageio
|
|
6
7
|
import numpy as np
|
|
7
8
|
from dipy.align import vector_fields as vfu
|
|
8
9
|
from dipy.align.imwarp import DiffeomorphicMap, mult_aff
|
|
@@ -11,7 +12,7 @@ from dipy.tracking.streamline import set_number_of_points
|
|
|
11
12
|
from PIL import Image
|
|
12
13
|
from scipy.linalg import blas, pinvh
|
|
13
14
|
from scipy.special import gammaln, lpmv
|
|
14
|
-
from tqdm import tqdm
|
|
15
|
+
from tqdm.auto import tqdm
|
|
15
16
|
|
|
16
17
|
logger = logging.getLogger("AFQ")
|
|
17
18
|
|
|
@@ -271,17 +272,17 @@ def gaussian_weights(
|
|
|
271
272
|
n_sls, n_nodes, _ = sls.shape
|
|
272
273
|
|
|
273
274
|
def _weighting_failed():
|
|
274
|
-
weights = np.ones((n_sls, n_nodes))
|
|
275
275
|
logger.warning(
|
|
276
276
|
(
|
|
277
|
-
"Not enough streamlines
|
|
277
|
+
f"Not enough or too many streamlines (n_sls: {n_sls}) "
|
|
278
|
+
"for weight calculation, "
|
|
278
279
|
"weighting everything evenly"
|
|
279
280
|
)
|
|
280
281
|
)
|
|
281
282
|
if return_mahalanobis:
|
|
282
283
|
return np.full((n_sls, n_nodes), np.nan)
|
|
283
284
|
else:
|
|
284
|
-
return
|
|
285
|
+
return np.full((n_sls, n_nodes), 1.0 / n_sls)
|
|
285
286
|
|
|
286
287
|
if n_sls < 15: # Cov^-1 unstable under this amount
|
|
287
288
|
return _weighting_failed()
|
|
@@ -318,15 +319,20 @@ def gaussian_weights(
|
|
|
318
319
|
|
|
319
320
|
flat_coords = sls.reshape(-1, 3)
|
|
320
321
|
flat_groups = working_groups.reshape(-1)
|
|
321
|
-
|
|
322
|
+
flat_weights = weights.reshape(-1)
|
|
322
323
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
324
|
+
order = np.argsort(flat_groups, kind="stable")
|
|
325
|
+
sorted_groups = flat_groups[order]
|
|
326
|
+
sorted_coords = flat_coords[order]
|
|
327
|
+
_, starts = np.unique(sorted_groups, return_index=True)
|
|
328
|
+
ends = np.append(starts[1:], len(sorted_groups))
|
|
326
329
|
|
|
327
|
-
|
|
330
|
+
for start, end in zip(starts, ends):
|
|
331
|
+
# small groups will have unstable covariance matrices
|
|
332
|
+
if end - start < 15:
|
|
328
333
|
continue
|
|
329
334
|
|
|
335
|
+
group_data = sorted_coords[start:end]
|
|
330
336
|
mu = stat(group_data, axis=0)
|
|
331
337
|
diff = group_data - mu
|
|
332
338
|
|
|
@@ -339,31 +345,49 @@ def gaussian_weights(
|
|
|
339
345
|
cov = eigenvectors @ np.diag(eigenvalues) @ eigenvectors.T
|
|
340
346
|
|
|
341
347
|
if np.any(cov > 0):
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
)
|
|
348
|
+
m = np.einsum("ij,jk,ik->i", diff, pinvh(cov), diff)
|
|
349
|
+
np.clip(m, 0, None, out=m)
|
|
350
|
+
flat_weights[order[start:end]] = np.sqrt(m)
|
|
345
351
|
|
|
346
352
|
if return_mahalanobis:
|
|
347
353
|
return weights
|
|
348
354
|
|
|
349
|
-
with np.errstate(divide="ignore"):
|
|
355
|
+
with np.errstate(divide="ignore", invalid="ignore"):
|
|
350
356
|
w_inv = 1.0 / weights
|
|
351
|
-
w_inv[np.
|
|
357
|
+
w_inv[~np.isfinite(w_inv)] = 0
|
|
358
|
+
|
|
359
|
+
denom = np.sum(w_inv, axis=0, dtype=np.float64)
|
|
360
|
+
w = np.divide(
|
|
361
|
+
w_inv,
|
|
362
|
+
denom,
|
|
363
|
+
out=np.zeros_like(w_inv, dtype=np.float64),
|
|
364
|
+
where=denom != 0,
|
|
365
|
+
dtype=np.float64,
|
|
366
|
+
)
|
|
352
367
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
col_sums = w.sum(axis=0)
|
|
356
|
-
if np.max(np.abs(col_sums - 1)) > 1e-3:
|
|
368
|
+
col_sums = w.sum(axis=0, dtype=np.float64)
|
|
369
|
+
if not np.all(np.abs(col_sums - 1) <= 1e-3):
|
|
357
370
|
return _weighting_failed()
|
|
358
371
|
else:
|
|
359
|
-
final_sums = w.sum(axis=0, keepdims=True)
|
|
360
|
-
np.divide(w, final_sums, out=w, where=final_sums != 0)
|
|
361
|
-
|
|
372
|
+
final_sums = w.sum(axis=0, keepdims=True, dtype=np.float64)
|
|
373
|
+
np.divide(w, final_sums, out=w, where=final_sums != 0, dtype=np.float64)
|
|
374
|
+
|
|
375
|
+
weight_sum = np.sum(w, axis=0, dtype=np.float64)
|
|
376
|
+
if not np.allclose(weight_sum, np.ones(n_nodes)):
|
|
377
|
+
bad = ~np.isclose(weight_sum, 1.0, rtol=1e-5, atol=1e-8)
|
|
378
|
+
logger.warning(f"weights not normalized: {w.shape}, {w.dtype}")
|
|
379
|
+
logger.warning(f"n_sls: {n_sls}")
|
|
380
|
+
logger.warning(f"offending nodes: {np.where(bad)[0]}")
|
|
381
|
+
logger.warning(f"their sums: {weight_sum[bad]}")
|
|
382
|
+
logger.warning(f"any nan: {np.isnan(w).any()}")
|
|
383
|
+
del w, w_inv
|
|
384
|
+
return _weighting_failed()
|
|
385
|
+
return w
|
|
362
386
|
|
|
363
387
|
|
|
364
|
-
def
|
|
388
|
+
def make_mp4(show_m, out_path, n_frames=720, az_ang=-0.5, fps=30, crf=35, verbose=True):
|
|
365
389
|
"""
|
|
366
|
-
Make
|
|
390
|
+
Make an MP4 video from a Fury Show Manager with auto-cropping.
|
|
367
391
|
|
|
368
392
|
Parameters
|
|
369
393
|
----------
|
|
@@ -371,33 +395,48 @@ def make_gif(show_m, out_path, n_frames=36, az_ang=-10, duration=150):
|
|
|
371
395
|
The Fury Show Manager to use for rendering.
|
|
372
396
|
|
|
373
397
|
out_path : str
|
|
374
|
-
The name of the output file
|
|
398
|
+
The name of the output file
|
|
375
399
|
|
|
376
400
|
n_frames : int
|
|
377
401
|
The number of frames to render.
|
|
378
|
-
Default:
|
|
402
|
+
Default: 720
|
|
379
403
|
|
|
380
404
|
az_ang : float
|
|
381
405
|
The angle to rotate the camera around the
|
|
382
406
|
z-axis for each frame, in degrees.
|
|
383
|
-
Default: -
|
|
407
|
+
Default: -0.5
|
|
408
|
+
|
|
409
|
+
fps : float
|
|
410
|
+
The frames per second for the output video.
|
|
411
|
+
Default: 30
|
|
384
412
|
|
|
385
|
-
|
|
386
|
-
The
|
|
387
|
-
|
|
413
|
+
crf : int
|
|
414
|
+
The Constant Rate Factor for the output video, which controls the
|
|
415
|
+
quality and file size. Lower values result in
|
|
416
|
+
higher quality and larger file sizes.
|
|
417
|
+
Default: 35 (very low quality, small file size)
|
|
418
|
+
|
|
419
|
+
verbose : bool
|
|
420
|
+
Whether to show a progress bar while generating the video.
|
|
421
|
+
Default: True
|
|
388
422
|
"""
|
|
423
|
+
if not out_path.lower().endswith(".mp4"):
|
|
424
|
+
out_path += ".mp4"
|
|
425
|
+
|
|
389
426
|
video = []
|
|
390
427
|
|
|
391
428
|
show_m.render()
|
|
392
429
|
show_m.window.draw()
|
|
393
430
|
|
|
394
431
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
395
|
-
for ii in tqdm(
|
|
432
|
+
for ii in tqdm(
|
|
433
|
+
range(n_frames), desc="Generating MP4", leave=False, disable=not verbose
|
|
434
|
+
):
|
|
396
435
|
frame_fname = f"{tmp_dir}/{ii}.png"
|
|
397
436
|
show_m.screens[0].controller.rotate((radians(az_ang), 0), None)
|
|
398
437
|
show_m.render()
|
|
399
438
|
show_m.window.draw()
|
|
400
|
-
show_m.snapshot(frame_fname)
|
|
439
|
+
show_m.snapshot(fname=frame_fname)
|
|
401
440
|
video.append(Image.open(frame_fname).convert("RGB"))
|
|
402
441
|
|
|
403
442
|
all_left, all_upper = float("inf"), float("inf")
|
|
@@ -406,7 +445,6 @@ def make_gif(show_m, out_path, n_frames=36, az_ang=-10, duration=150):
|
|
|
406
445
|
for img in video:
|
|
407
446
|
arr = np.array(img)
|
|
408
447
|
bg_color = arr[0, 0]
|
|
409
|
-
|
|
410
448
|
mask = np.any(arr != bg_color, axis=-1)
|
|
411
449
|
|
|
412
450
|
if np.any(mask):
|
|
@@ -421,20 +459,42 @@ def make_gif(show_m, out_path, n_frames=36, az_ang=-10, duration=150):
|
|
|
421
459
|
all_lower = max(all_lower, ymax)
|
|
422
460
|
|
|
423
461
|
if all_left < all_right:
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
462
|
+
|
|
463
|
+
def align_down(x, multiple=16):
|
|
464
|
+
return (x // multiple) * multiple
|
|
465
|
+
|
|
466
|
+
def align_up(x, multiple=16):
|
|
467
|
+
return ((x + multiple - 1) // multiple) * multiple
|
|
468
|
+
|
|
469
|
+
left = align_up(max(0, all_left), 16)
|
|
470
|
+
upper = align_up(max(0, all_upper), 16)
|
|
471
|
+
right = align_down(min(video[0].width, all_right), 16)
|
|
472
|
+
lower = align_down(min(video[0].height, all_lower), 16)
|
|
473
|
+
|
|
474
|
+
crop_box = (left, upper, right, lower)
|
|
430
475
|
cropped_video = [img.crop(crop_box) for img in video]
|
|
431
476
|
else:
|
|
432
477
|
cropped_video = video
|
|
433
478
|
|
|
434
|
-
cropped_video[0].
|
|
479
|
+
width, height = cropped_video[0].size
|
|
480
|
+
with imageio.get_writer(
|
|
435
481
|
out_path,
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
482
|
+
fps=fps,
|
|
483
|
+
format="ffmpeg",
|
|
484
|
+
codec="libx264",
|
|
485
|
+
pixelformat="yuv420p",
|
|
486
|
+
output_params=[
|
|
487
|
+
"-crf",
|
|
488
|
+
f"{str(int(crf))}",
|
|
489
|
+
"-preset",
|
|
490
|
+
"veryslow",
|
|
491
|
+
"-movflags",
|
|
492
|
+
"+faststart",
|
|
493
|
+
],
|
|
494
|
+
) as writer:
|
|
495
|
+
for img in cropped_video:
|
|
496
|
+
if img.size != (width, height):
|
|
497
|
+
img = img.crop((0, 0, width, height))
|
|
498
|
+
|
|
499
|
+
frame_arr = np.array(img)
|
|
500
|
+
writer.append_data(frame_arr)
|
|
@@ -387,7 +387,7 @@ def default_bd():
|
|
|
387
387
|
"primary_axis": "I/S",
|
|
388
388
|
"ORG_spectral_subbundles": SpectralSubbundleDict(
|
|
389
389
|
{
|
|
390
|
-
"Left
|
|
390
|
+
"Left Early Visual": {
|
|
391
391
|
"cluster_IDs": [78],
|
|
392
392
|
"Left Optic Radiation": {
|
|
393
393
|
"core": "Anterior",
|
|
@@ -449,7 +449,7 @@ def default_bd():
|
|
|
449
449
|
"primary_axis": "I/S",
|
|
450
450
|
"ORG_spectral_subbundles": SpectralSubbundleDict(
|
|
451
451
|
{
|
|
452
|
-
"Right
|
|
452
|
+
"Right Early Visual": {
|
|
453
453
|
"cluster_IDs": [78],
|
|
454
454
|
"Right Optic Radiation": {
|
|
455
455
|
"core": "Anterior",
|
|
@@ -916,7 +916,6 @@ def baby_bd():
|
|
|
916
916
|
"start": templates["pARC_L_start"],
|
|
917
917
|
"end": templates["VOF_box_small_L"],
|
|
918
918
|
"primary_axis": "I/S",
|
|
919
|
-
"primary_axis_percentage": 40,
|
|
920
919
|
"cross_midline": False,
|
|
921
920
|
"mahal": {"distance_threshold": 4},
|
|
922
921
|
},
|
|
@@ -926,7 +925,6 @@ def baby_bd():
|
|
|
926
925
|
"start": templates["pARC_R_start"],
|
|
927
926
|
"end": templates["VOF_box_small_R"],
|
|
928
927
|
"primary_axis": "I/S",
|
|
929
|
-
"primary_axis_percentage": 40,
|
|
930
928
|
"cross_midline": False,
|
|
931
929
|
"mahal": {"distance_threshold": 4},
|
|
932
930
|
},
|
|
@@ -934,7 +932,6 @@ def baby_bd():
|
|
|
934
932
|
"start": templates["VOF_L_start"],
|
|
935
933
|
"end": templates["VOF_box_small_L"],
|
|
936
934
|
"primary_axis": "I/S",
|
|
937
|
-
"primary_axis_percentage": 40,
|
|
938
935
|
"cross_midline": False,
|
|
939
936
|
"mahal": {"distance_threshold": 4},
|
|
940
937
|
},
|
|
@@ -942,7 +939,6 @@ def baby_bd():
|
|
|
942
939
|
"start": templates["VOF_R_start"],
|
|
943
940
|
"end": templates["VOF_box_small_R"],
|
|
944
941
|
"primary_axis": "I/S",
|
|
945
|
-
"primary_axis_percentage": 40,
|
|
946
942
|
"cross_midline": False,
|
|
947
943
|
"mahal": {"distance_threshold": 4},
|
|
948
944
|
},
|
|
@@ -18,7 +18,7 @@ from dipy.io.stateful_tractogram import Space, StatefulTractogram
|
|
|
18
18
|
from dipy.io.streamline import save_tractogram
|
|
19
19
|
from dipy.utils.parallel import paramap
|
|
20
20
|
from PIL import Image
|
|
21
|
-
from tqdm import tqdm
|
|
21
|
+
from tqdm.auto import tqdm
|
|
22
22
|
|
|
23
23
|
import AFQ.api.bundle_dict as abd
|
|
24
24
|
import AFQ.definitions.image as afm
|
|
@@ -555,7 +555,7 @@ class GroupAFQ(object):
|
|
|
555
555
|
ses
|
|
556
556
|
]
|
|
557
557
|
seg_sft = aus.SegmentedSFT.fromfile(this_bundles_file, this_img)
|
|
558
|
-
seg_sft.
|
|
558
|
+
seg_sft.to_rasmm()
|
|
559
559
|
subses_info.append((seg_sft, this_mapping, this_img, this_reg_template))
|
|
560
560
|
|
|
561
561
|
bundle_dict = self.export("bundle_dict", collapse=False)[
|
|
@@ -567,7 +567,7 @@ class GroupAFQ(object):
|
|
|
567
567
|
for b in bundle_dict.bundle_names:
|
|
568
568
|
for i in range(len(self.valid_sub_list)):
|
|
569
569
|
seg_sft, mapping, img, reg_template = subses_info[i]
|
|
570
|
-
idx = seg_sft.
|
|
570
|
+
idx = seg_sft.get_bundle_idxs(b)
|
|
571
571
|
# use the first subses that works
|
|
572
572
|
# otherwise try each successive subses
|
|
573
573
|
if len(idx) == 0:
|
|
@@ -690,7 +690,14 @@ class GroupAFQ(object):
|
|
|
690
690
|
for inputs in calcdata.calcs[idx].inputs:
|
|
691
691
|
self.export(inputs)
|
|
692
692
|
|
|
693
|
-
def export_all(
|
|
693
|
+
def export_all(
|
|
694
|
+
self,
|
|
695
|
+
viz=True,
|
|
696
|
+
afqbrowser=True,
|
|
697
|
+
xforms=True,
|
|
698
|
+
indiv=True,
|
|
699
|
+
delete_full_tractogram=False,
|
|
700
|
+
):
|
|
694
701
|
"""Exports all the possible outputs
|
|
695
702
|
|
|
696
703
|
Parameters
|
|
@@ -714,6 +721,14 @@ class GroupAFQ(object):
|
|
|
714
721
|
the AFQ segmentation algorithm, individual ROIs are also
|
|
715
722
|
output.
|
|
716
723
|
Default: True
|
|
724
|
+
delete_full_tractogram : bool
|
|
725
|
+
Whether to delete the full, unsegmented tractogram (and its
|
|
726
|
+
associated json) after all other outputs have been generated.
|
|
727
|
+
This can be useful for saving disk space, as the full
|
|
728
|
+
tractogram is typically over 90 percent of the total output size.
|
|
729
|
+
Only the full tractogram and its json are deleted; all other
|
|
730
|
+
outputs are left in place.
|
|
731
|
+
Default: False
|
|
717
732
|
"""
|
|
718
733
|
start_time = time()
|
|
719
734
|
|
|
@@ -722,8 +737,19 @@ class GroupAFQ(object):
|
|
|
722
737
|
self.combine_profiles()
|
|
723
738
|
if afqbrowser:
|
|
724
739
|
self.assemble_AFQ_browser()
|
|
740
|
+
if delete_full_tractogram:
|
|
741
|
+
self.delete_full_tractogram()
|
|
725
742
|
self.logger.info(f"Time taken for export all: {str(time() - start_time)}")
|
|
726
743
|
|
|
744
|
+
def delete_full_tractogram(self):
|
|
745
|
+
"""
|
|
746
|
+
Delete the full, unsegmented tractogram (and its associated json)
|
|
747
|
+
for every subject and session. Only the full tractogram and its
|
|
748
|
+
json are deleted; all other outputs are left in place.
|
|
749
|
+
"""
|
|
750
|
+
for pAFQ in self.pAFQ_list:
|
|
751
|
+
pAFQ.delete_full_tractogram()
|
|
752
|
+
|
|
727
753
|
def cmd_outputs(
|
|
728
754
|
self, cmd="rm", dependent_on=None, up_to=None, exceptions=None, suffix=""
|
|
729
755
|
):
|
|
@@ -903,11 +929,6 @@ class GroupAFQ(object):
|
|
|
903
929
|
)
|
|
904
930
|
)
|
|
905
931
|
figure.write_image(this_fname)
|
|
906
|
-
|
|
907
|
-
# temporary fix for memory leak
|
|
908
|
-
import plotly.io as pio
|
|
909
|
-
|
|
910
|
-
pio.kaleido.scope._shutdown_kaleido()
|
|
911
932
|
else:
|
|
912
933
|
from fury import window
|
|
913
934
|
|
|
@@ -917,7 +938,7 @@ class GroupAFQ(object):
|
|
|
917
938
|
scene=figure, window_type="offscreen", size=(600, 600)
|
|
918
939
|
)
|
|
919
940
|
scene_rotate_forward(show_m, figure)
|
|
920
|
-
show_m.snapshot(this_fname)
|
|
941
|
+
show_m.snapshot(fname=this_fname)
|
|
921
942
|
|
|
922
943
|
def _save_file(curr_img, curr_file_num):
|
|
923
944
|
save_path = op.abspath(
|
|
@@ -1427,9 +1448,9 @@ def combine_list_of_profiles(profile_fnames):
|
|
|
1427
1448
|
dfs = []
|
|
1428
1449
|
for fname in profile_fnames:
|
|
1429
1450
|
profiles = pd.read_csv(fname)
|
|
1430
|
-
profiles["subjectID"] = fname.split("sub-")[1].split("/")[0]
|
|
1451
|
+
profiles["subjectID"] = fname.split("sub-")[1].split("/")[0].split("_")[0]
|
|
1431
1452
|
if "ses-" in fname:
|
|
1432
|
-
session_name = fname.split("ses-")[1].split("/")[0]
|
|
1453
|
+
session_name = fname.split("ses-")[1].split("/")[0].split("_")[0]
|
|
1433
1454
|
else:
|
|
1434
1455
|
session_name = "unknown"
|
|
1435
1456
|
profiles["sessionID"] = session_name
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import math
|
|
3
|
+
import os
|
|
3
4
|
import os.path as op
|
|
4
5
|
import tempfile
|
|
5
6
|
from math import radians
|
|
@@ -8,7 +9,7 @@ from time import time
|
|
|
8
9
|
import nibabel as nib
|
|
9
10
|
from dipy.align import resample
|
|
10
11
|
from PIL import Image, ImageDraw, ImageFont
|
|
11
|
-
from tqdm import tqdm
|
|
12
|
+
from tqdm.auto import tqdm
|
|
12
13
|
|
|
13
14
|
import AFQ.utils.streamlines as aus
|
|
14
15
|
from AFQ.api.utils import (
|
|
@@ -30,7 +31,7 @@ from AFQ.tasks.tractography import get_tractography_plan
|
|
|
30
31
|
from AFQ.tasks.utils import get_base_fname
|
|
31
32
|
from AFQ.tasks.viz import get_viz_plan
|
|
32
33
|
from AFQ.utils.bin import pyafq_str_to_val
|
|
33
|
-
from AFQ.utils.path import apply_cmd_to_afq_derivs
|
|
34
|
+
from AFQ.utils.path import apply_cmd_to_afq_derivs, drop_extension
|
|
34
35
|
from AFQ.viz.utils import BEST_BUNDLE_ORIENTATIONS, get_eye, trim
|
|
35
36
|
|
|
36
37
|
__all__ = ["ParticipantAFQ"]
|
|
@@ -240,7 +241,9 @@ class ParticipantAFQ(object):
|
|
|
240
241
|
for inputs in calcdata.calcs[idx].inputs:
|
|
241
242
|
self.export(inputs)
|
|
242
243
|
|
|
243
|
-
def export_all(
|
|
244
|
+
def export_all(
|
|
245
|
+
self, viz=True, xforms=True, indiv=True, delete_full_tractogram=False
|
|
246
|
+
):
|
|
244
247
|
f""" Exports all the possible outputs
|
|
245
248
|
{valid_exports_string}
|
|
246
249
|
|
|
@@ -262,11 +265,33 @@ class ParticipantAFQ(object):
|
|
|
262
265
|
the AFQ segmentation algorithm, individual ROIs are also
|
|
263
266
|
output.
|
|
264
267
|
Default: True
|
|
268
|
+
delete_full_tractogram : bool
|
|
269
|
+
Whether to delete the full, unsegmented tractogram (and its
|
|
270
|
+
associated json) after all other outputs have been generated.
|
|
271
|
+
This can be useful for saving disk space, as the full
|
|
272
|
+
tractogram is typically over 90 percent of the total output size.
|
|
273
|
+
Only the full tractogram and its json are deleted;
|
|
274
|
+
all other outputs are left in place.
|
|
275
|
+
Default: False
|
|
265
276
|
"""
|
|
266
277
|
start_time = time()
|
|
267
278
|
export_all_helper(self, xforms, indiv, viz)
|
|
279
|
+
if delete_full_tractogram:
|
|
280
|
+
self.delete_full_tractogram()
|
|
268
281
|
self.logger.info(f"Time taken for export all: {time() - start_time}")
|
|
269
282
|
|
|
283
|
+
def delete_full_tractogram(self):
|
|
284
|
+
"""
|
|
285
|
+
Delete the full, unsegmented tractogram (and its associated json).
|
|
286
|
+
Only the full tractogram and its json are deleted; all other
|
|
287
|
+
outputs are left in place.
|
|
288
|
+
"""
|
|
289
|
+
tractogram_file = self.export("streamlines")
|
|
290
|
+
for fname in (tractogram_file, drop_extension(tractogram_file) + ".json"):
|
|
291
|
+
if op.exists(fname):
|
|
292
|
+
os.remove(fname)
|
|
293
|
+
self.logger.info(f"Deleted {fname}")
|
|
294
|
+
|
|
270
295
|
def participant_montage(self, images_per_row=3, anatomy=True, bundle_names=None):
|
|
271
296
|
"""
|
|
272
297
|
Generate montage of all bundles for a given subject.
|
|
@@ -344,10 +369,6 @@ class ParticipantAFQ(object):
|
|
|
344
369
|
showlegend=False,
|
|
345
370
|
)
|
|
346
371
|
figure.write_image(this_fname, scale=4)
|
|
347
|
-
# temporary fix for memory leak
|
|
348
|
-
import plotly.io as pio
|
|
349
|
-
|
|
350
|
-
pio.kaleido.scope._shutdown_kaleido()
|
|
351
372
|
else:
|
|
352
373
|
from fury import window
|
|
353
374
|
|
|
@@ -363,7 +384,7 @@ class ParticipantAFQ(object):
|
|
|
363
384
|
pass
|
|
364
385
|
show_m.render()
|
|
365
386
|
show_m.window.draw()
|
|
366
|
-
show_m.snapshot(this_fname)
|
|
387
|
+
show_m.snapshot(fname=this_fname)
|
|
367
388
|
|
|
368
389
|
def _save_file(curr_img):
|
|
369
390
|
save_path = op.abspath(
|
|
@@ -7,7 +7,6 @@ from dipy.io.stateful_tractogram import set_sft_logger_level
|
|
|
7
7
|
from pcollections._lazy import LazyError
|
|
8
8
|
|
|
9
9
|
from AFQ.utils.docstring_parser import parse_numpy_docstring
|
|
10
|
-
from AFQ.viz.utils import viz_import_msg_error
|
|
11
10
|
|
|
12
11
|
__all__ = ["methods_descriptors", "kwargs_descriptors", "AFQclass_doc"]
|
|
13
12
|
|
|
@@ -135,6 +134,9 @@ def check_attribute(attr_name):
|
|
|
135
134
|
if attr_name[:-5] in task_modules:
|
|
136
135
|
return None
|
|
137
136
|
|
|
137
|
+
if attr_name in ["tracking_params", "segmentation_params"]:
|
|
138
|
+
return "segmentation_imap"
|
|
139
|
+
|
|
138
140
|
if attr_name in methods_sections:
|
|
139
141
|
return f"{methods_sections[attr_name]}_imap"
|
|
140
142
|
|
|
@@ -176,14 +178,7 @@ def export_all_helper(api_afq_object, xforms, indiv, viz):
|
|
|
176
178
|
api_afq_object.export("profiles")
|
|
177
179
|
|
|
178
180
|
if viz:
|
|
179
|
-
|
|
180
|
-
import IPython # noqa F401
|
|
181
|
-
import pingouin # noqa F401
|
|
182
|
-
import seaborn # noqa F401
|
|
183
|
-
except (ImportError, ModuleNotFoundError):
|
|
184
|
-
api_afq_object.logger.warning(viz_import_msg_error("plot"))
|
|
185
|
-
else:
|
|
186
|
-
api_afq_object.export("tract_profile_plots")
|
|
181
|
+
api_afq_object.export("tract_profile_plots")
|
|
187
182
|
api_afq_object.export("all_bundles_figure")
|
|
188
183
|
api_afq_object.export("indiv_bundles_figures")
|
|
189
184
|
|
|
@@ -22,7 +22,7 @@ from dipy.io.streamline import (
|
|
|
22
22
|
from dipy.segment.clustering import QuickBundles
|
|
23
23
|
from dipy.segment.featurespeed import ResampleFeature
|
|
24
24
|
from dipy.segment.metric import AveragePointwiseEuclideanMetric
|
|
25
|
-
from tqdm import tqdm
|
|
25
|
+
from tqdm.auto import tqdm
|
|
26
26
|
|
|
27
27
|
from AFQ._fixes import get_simplified_transform
|
|
28
28
|
from AFQ.data.utils import aws_import_msg_error
|
|
@@ -55,6 +55,7 @@ __all__ = [
|
|
|
55
55
|
"fetch_brainchop_models",
|
|
56
56
|
"fetch_multiaxial_models",
|
|
57
57
|
"fetch_synthseg_models",
|
|
58
|
+
"fetch_babyseg_models",
|
|
58
59
|
"fetch_templates",
|
|
59
60
|
"read_templates",
|
|
60
61
|
"fetch_stanford_hardi_tractography",
|
|
@@ -263,6 +264,24 @@ fetch_synthseg_models = _make_reusable_fetcher(
|
|
|
263
264
|
doc="Download ONNX SynthSeg models",
|
|
264
265
|
)
|
|
265
266
|
|
|
267
|
+
babyseg_remote_fnames = ["67035599"]
|
|
268
|
+
|
|
269
|
+
babyseg_fnames = ["babyseg.onnx"]
|
|
270
|
+
|
|
271
|
+
babyseg_md5_hashes = [
|
|
272
|
+
"5f64b439dcfff36045448e0cc562f6e7",
|
|
273
|
+
]
|
|
274
|
+
|
|
275
|
+
fetch_babyseg_models = _make_reusable_fetcher(
|
|
276
|
+
"fetch_babyseg_models",
|
|
277
|
+
op.join(afq_home, "babyseg_onnx"),
|
|
278
|
+
baseurl,
|
|
279
|
+
babyseg_remote_fnames,
|
|
280
|
+
babyseg_fnames,
|
|
281
|
+
md5_list=babyseg_md5_hashes,
|
|
282
|
+
doc="Download ONNX BabySeg models",
|
|
283
|
+
)
|
|
284
|
+
|
|
266
285
|
multiaxial_fnames = [
|
|
267
286
|
"sagittal_model.onnx",
|
|
268
287
|
"axial_model.onnx",
|