pyAFQ 3.3__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.3 → pyafq-3.4}/.github/workflows/docbuild.yml +1 -1
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/docker_pyafq.yml +3 -0
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/nightly_anisotropic_test.yml +1 -1
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/nightly_basic_test.yml +1 -1
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/nightly_reco80_test.yml +1 -1
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/nightly_reco_test.yml +1 -1
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/nightly_test.yml +1 -1
- {pyafq-3.3 → pyafq-3.4}/.gitignore +1 -1
- {pyafq-3.3 → pyafq-3.4}/AFQ/_fixes.py +44 -21
- {pyafq-3.3 → pyafq-3.4}/AFQ/api/bundle_dict.py +0 -4
- {pyafq-3.3 → pyafq-3.4}/AFQ/api/group.py +30 -9
- {pyafq-3.3 → pyafq-3.4}/AFQ/api/participant.py +28 -7
- {pyafq-3.3 → pyafq-3.4}/AFQ/api/utils.py +4 -9
- {pyafq-3.3 → pyafq-3.4}/AFQ/data/fetch.py +19 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/definitions/image.py +23 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/definitions/utils.py +3 -3
- pyafq-3.4/AFQ/nn/babyseg.py +197 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/nn/brainchop.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.3 → pyafq-3.4}/AFQ/recognition/cleaning.py +54 -10
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/criteria.py +26 -19
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/recognize.py +15 -8
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/tests/test_recognition.py +39 -7
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/tests/test_utils.py +45 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/utils.py +1 -8
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/data.py +52 -3
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/segmentation.py +10 -2
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/structural.py +29 -1
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/tissue.py +42 -5
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/viz.py +8 -21
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_api.py +19 -33
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_definitions.py +1 -1
- {pyafq-3.3 → pyafq-3.4}/AFQ/tractography/tractography.py +7 -6
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/bin.py +269 -222
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/docstring_parser.py +10 -6
- pyafq-3.4/AFQ/utils/tests/test_bin.py +100 -0
- pyafq-3.4/AFQ/utils/tests/test_volume.py +105 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/volume.py +78 -15
- {pyafq-3.3 → pyafq-3.4}/AFQ/version.py +3 -3
- {pyafq-3.3 → pyafq-3.4}/AFQ/viz/altair.py +4 -4
- pyafq-3.4/AFQ/viz/plot.py +138 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/viz/plotly_backend.py +10 -20
- {pyafq-3.3 → pyafq-3.4}/AFQ/viz/utils.py +82 -39
- {pyafq-3.3 → pyafq-3.4}/CHANGES.rst +23 -0
- {pyafq-3.3 → pyafq-3.4}/PKG-INFO +11 -13
- pyafq-3.4/bin/pyAFQ +179 -0
- pyafq-3.4/bin/pyAFQ-bids +225 -0
- {pyafq-3.3 → pyafq-3.4}/docs/Makefile +7 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/conf.py +0 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/developing/definitions.rst +2 -3
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/acoustic_radiations.md +22 -7
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/afq_callosal.md +12 -20
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/afq_fwdti.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/baby_afq.md +32 -16
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/cerebellar_peduncles.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/cloudknot_example.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/cloudknot_hcp_example.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/optic_radiations.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/optic_tract.md +7 -3
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/plot_stages_of_tractometry.md +4 -0
- pyafq-3.4/docs/source/examples/howto_examples/plot_trx.md +91 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/pyAFQ_with_GPU.md +6 -2
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/pyafq_2.md +6 -2
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/recobundles.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/use_subject_space_rois_from_freesurfer.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/vof_example.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_001_group_afq_api.md +7 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_002_participant_afq_api.md +4 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_003_rerun.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_004_export.md +4 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_005_viz.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_006_bids_layout.md +5 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/plot_007_rois.md +4 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/cleaning_params.rst +2 -3
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/converter.rst +1 -1
- pyafq-3.4/docs/source/howto/docker.rst +19 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/image.rst +5 -7
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/index.rst +0 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/installation_guide.rst +2 -2
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/scalars.rst +1 -2
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/segmentation_params.rst +2 -2
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/singularity.rst +3 -3
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/tractography_params.rst +2 -2
- pyafq-3.4/docs/source/reference/cli.rst +142 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/index.rst +1 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/mapping.rst +1 -1
- {pyafq-3.3 → pyafq-3.4}/docs/source/references.bib +98 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/tutorials/index.rst +6 -7
- {pyafq-3.3 → pyafq-3.4}/pyAFQ.egg-info/PKG-INFO +11 -13
- {pyafq-3.3 → pyafq-3.4}/pyAFQ.egg-info/SOURCES.txt +8 -2
- {pyafq-3.3 → pyafq-3.4}/pyAFQ.egg-info/requires.txt +11 -12
- 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.3 → pyafq-3.4}/setup.cfg +8 -9
- pyafq-3.3/AFQ/nn/utils.py +0 -51
- pyafq-3.3/AFQ/utils/tests/test_volume.py +0 -28
- pyafq-3.3/AFQ/viz/plot.py +0 -1649
- pyafq-3.3/bin/pyAFQ +0 -159
- pyafq-3.3/docs/source/examples/howto_examples/add_custom_bundle.md +0 -252
- pyafq-3.3/docs/source/howto/docker.rst +0 -15
- pyafq-3.3/docs/source/sphinxext/updatedocs.py +0 -38
- {pyafq-3.3 → pyafq-3.4}/.codespellrc +0 -0
- {pyafq-3.3 → pyafq-3.4}/.github/CITATION.cff +0 -0
- {pyafq-3.3 → pyafq-3.4}/.github/CONTRIBUTING.md +0 -0
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/docker_pyafq_cuda12.yml +0 -0
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/nightly_custom_test.yml +0 -0
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/publish-to-test-pypi.yml +0 -0
- {pyafq-3.3 → pyafq-3.4}/.github/workflows/test.yml +0 -0
- {pyafq-3.3 → pyafq-3.4}/.mailmap +0 -0
- {pyafq-3.3 → pyafq-3.4}/.maintenance/update_changes.sh +0 -0
- {pyafq-3.3 → pyafq-3.4}/.maintenance/update_zenodo.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/.pep8speaks.yml +0 -0
- {pyafq-3.3 → pyafq-3.4}/.pre-commit-config.yaml +0 -0
- {pyafq-3.3 → pyafq-3.4}/.zenodo.json +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/api/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/data/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/data/utils.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/definitions/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/definitions/mapping.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/QBallTP.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/asym_filtering.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/csd.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/dki.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/dti.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/fwdti.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/msmt.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/models/wmgm_interface.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/nn/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/nn/multiaxial.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/nn/synthseg.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/clustering.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/curvature.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/other_bundles.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/preprocess.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/roi.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/sparse_decisions.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/tests/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/tests/conftest.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/tests/test_other_bundles.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/recognition/tests/test_rois.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/registration.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/decorators.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/mapping.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/tractography.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tasks/utils.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/MoriGroups_Test.mat +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/WholeBrainFG_test.mat +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/.gitattributes +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/.datalad/config +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/.gitattributes +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/CHANGES +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/README +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/T1w.json +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/annex-uuid +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/dataset_description.json +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/aMRIQC.csv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_group.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-01.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-02.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-03.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-04.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-05.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-06.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-07.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-08.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-09.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-10.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-11.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-12.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-13.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-14.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-15.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-16.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-17.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-18.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-19.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-20.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-21.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-22.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-23.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-24.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-25.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/anatomical_sub-26.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/fMRIQC.csv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_group.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-01.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-02.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-03.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-04.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-05.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-06.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-07.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-08.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-09.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-10.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-11.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-12.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-13.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-14.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-15.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-16.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-17.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-18.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-19.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-20.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-21.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-22.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-23.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-24.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-25.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/derivatives/mriqc/functional_sub-26.pdf +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/participants.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/anat/sub-01_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-01/func/sub-01_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/anat/sub-02_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-02/func/sub-02_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/anat/sub-03_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-03/func/sub-03_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/anat/sub-04_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-04/func/sub-04_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/anat/sub-05_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-05/func/sub-05_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/anat/sub-06_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-06/func/sub-06_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/anat/sub-07_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-07/func/sub-07_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/anat/sub-08_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-08/func/sub-08_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/anat/sub-09_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-09/func/sub-09_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/anat/sub-10_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-10/func/sub-10_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/anat/sub-11_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-11/func/sub-11_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/anat/sub-12_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-12/func/sub-12_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/anat/sub-13_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-13/func/sub-13_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/anat/sub-14_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-14/func/sub-14_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/anat/sub-15_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-15/func/sub-15_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/anat/sub-16_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-16/func/sub-16_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/anat/sub-17_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-17/func/sub-17_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/anat/sub-18_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-18/func/sub-18_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/anat/sub-19_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-19/func/sub-19_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/anat/sub-20_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-20/func/sub-20_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/anat/sub-21_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-21/func/sub-21_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/anat/sub-22_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-22/func/sub-22_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/anat/sub-23_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-23/func/sub-23_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/anat/sub-24_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-24/func/sub-24_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/anat/sub-25_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-25/func/sub-25_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/anat/sub-26_T1w.nii.gz +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-1_events.tsv +0 -0
- {pyafq-3.3 → 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.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/sub-26/func/sub-26_task-flanker_run-2_events.tsv +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/data/mocks3/ds000102-mimic/task-flanker_bold.json +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_bundle_dict.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_csd.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_data.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_dki.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_dti.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_fixes.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_msmt.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_nn.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_registration.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_tractography.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tests/test_viz.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tractography/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/tractography/utils.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/conversion.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/docs.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/models.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/path.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/stats.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/streamlines.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/testing.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/tests/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/tests/test_conversions.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/tests/test_path.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/tests/test_stats.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/utils/tests/test_streamlines.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/viz/__init__.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/AFQ/viz/fury_backend.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/CITATION +0 -0
- {pyafq-3.3 → pyafq-3.4}/LICENSE +0 -0
- {pyafq-3.3 → pyafq-3.4}/MANIFEST.in +0 -0
- {pyafq-3.3 → pyafq-3.4}/Makefile +0 -0
- {pyafq-3.3 → pyafq-3.4}/NOTICE.md +0 -0
- {pyafq-3.3 → pyafq-3.4}/README.md +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/BDE_Banner_revised20160211-01.jpg +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/CSVfile.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/FAbrain.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/ProfileViz.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/TP_viz.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/arcuaterois.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/beaware.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/custom.css +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/diffusion-anisotropic.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/diffusion-isotropic.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/down_left_arrow.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/down_right_arrow.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/dti_in_brain.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/dtiexplanation.jpg +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/eScience_Logo_HR.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/ecosystem.jpg +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/escience-logo.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/greencheck.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/inherintambiguity.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/logo.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/modelling.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/modeltotrack.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_001.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_002.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_003.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_004.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_005.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_006.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_010.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_011.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/sphx_glr_plot_stages_of_tractometry_012.gif +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/tract_modeling2.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/tract_profiling.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/tract_recognition.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/tract_tractography.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/tractometry_pipeline.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_static/tropic.png +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_templates/footer.html +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/_templates/layout.html +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/bib.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/developing/contributing.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/developing/index.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/developing/releasing.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/developing/tasks.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/howto_examples/index.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/examples/tutorial_examples/index.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/bundle_orientation.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/index.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/modeling.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/profiling.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/recognition.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/tractography.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/explanations/whats_new_3.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/guides_index.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/cite.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/data.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/getting_help.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/howto/rerun.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/index.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/bundledict.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/fibertracts.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/kwargs.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/methods.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/tissue_properties.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/reference/viz_backend.rst +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/sphinxext/kwargsdocs.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/source/sphinxext/methodsdocs.py +0 -0
- {pyafq-3.3 → pyafq-3.4}/docs/upload-gh-pages.sh +0 -0
- {pyafq-3.3 → pyafq-3.4}/gpu_docker/Dockerfile +0 -0
- {pyafq-3.3 → pyafq-3.4}/gpu_docker/docker-build.sh +0 -0
- {pyafq-3.3 → pyafq-3.4}/gpu_docker/docker-push.sh +0 -0
- {pyafq-3.3 → pyafq-3.4}/gpu_docker/pyafq_with_gpu_template.def +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyAFQ.egg-info/dependency_links.txt +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyAFQ.egg-info/not-zip-safe +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyAFQ.egg-info/top_level.txt +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyafq_docker/Dockerfile +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyafq_docker/docker-build.sh +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyafq_docker/docker-push.sh +0 -0
- {pyafq-3.3 → pyafq-3.4}/pyproject.toml +0 -0
- {pyafq-3.3 → pyafq-3.4}/setup.py +0 -0
- {pyafq-3.3 → 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,7 +5,6 @@ AFQ/version.py
|
|
|
5
5
|
docs/_build
|
|
6
6
|
docs/build
|
|
7
7
|
docs/source/auto_examples/
|
|
8
|
-
docs/source/reference/config.rst
|
|
9
8
|
examples/**/*.nii.gz
|
|
10
9
|
examples/**/*.trk
|
|
11
10
|
examples/**/*.npy
|
|
@@ -15,5 +14,6 @@ dist
|
|
|
15
14
|
.DS_Store
|
|
16
15
|
**.sw?
|
|
17
16
|
**Untitled.ipynb
|
|
17
|
+
docs/source/examples/**/*.ipynb
|
|
18
18
|
pip-wheel-metadata
|
|
19
19
|
pyAFQ.egg-info
|
|
@@ -272,17 +272,17 @@ def gaussian_weights(
|
|
|
272
272
|
n_sls, n_nodes, _ = sls.shape
|
|
273
273
|
|
|
274
274
|
def _weighting_failed():
|
|
275
|
-
weights = np.ones((n_sls, n_nodes))
|
|
276
275
|
logger.warning(
|
|
277
276
|
(
|
|
278
|
-
"Not enough streamlines
|
|
277
|
+
f"Not enough or too many streamlines (n_sls: {n_sls}) "
|
|
278
|
+
"for weight calculation, "
|
|
279
279
|
"weighting everything evenly"
|
|
280
280
|
)
|
|
281
281
|
)
|
|
282
282
|
if return_mahalanobis:
|
|
283
283
|
return np.full((n_sls, n_nodes), np.nan)
|
|
284
284
|
else:
|
|
285
|
-
return
|
|
285
|
+
return np.full((n_sls, n_nodes), 1.0 / n_sls)
|
|
286
286
|
|
|
287
287
|
if n_sls < 15: # Cov^-1 unstable under this amount
|
|
288
288
|
return _weighting_failed()
|
|
@@ -319,15 +319,20 @@ def gaussian_weights(
|
|
|
319
319
|
|
|
320
320
|
flat_coords = sls.reshape(-1, 3)
|
|
321
321
|
flat_groups = working_groups.reshape(-1)
|
|
322
|
-
|
|
322
|
+
flat_weights = weights.reshape(-1)
|
|
323
323
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
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))
|
|
327
329
|
|
|
328
|
-
|
|
330
|
+
for start, end in zip(starts, ends):
|
|
331
|
+
# small groups will have unstable covariance matrices
|
|
332
|
+
if end - start < 15:
|
|
329
333
|
continue
|
|
330
334
|
|
|
335
|
+
group_data = sorted_coords[start:end]
|
|
331
336
|
mu = stat(group_data, axis=0)
|
|
332
337
|
diff = group_data - mu
|
|
333
338
|
|
|
@@ -340,26 +345,44 @@ def gaussian_weights(
|
|
|
340
345
|
cov = eigenvectors @ np.diag(eigenvalues) @ eigenvectors.T
|
|
341
346
|
|
|
342
347
|
if np.any(cov > 0):
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
)
|
|
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)
|
|
346
351
|
|
|
347
352
|
if return_mahalanobis:
|
|
348
353
|
return weights
|
|
349
354
|
|
|
350
|
-
with np.errstate(divide="ignore"):
|
|
355
|
+
with np.errstate(divide="ignore", invalid="ignore"):
|
|
351
356
|
w_inv = 1.0 / weights
|
|
352
|
-
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
|
+
)
|
|
353
367
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
col_sums = w.sum(axis=0)
|
|
357
|
-
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):
|
|
358
370
|
return _weighting_failed()
|
|
359
371
|
else:
|
|
360
|
-
final_sums = w.sum(axis=0, keepdims=True)
|
|
361
|
-
np.divide(w, final_sums, out=w, where=final_sums != 0)
|
|
362
|
-
|
|
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
|
|
363
386
|
|
|
364
387
|
|
|
365
388
|
def make_mp4(show_m, out_path, n_frames=720, az_ang=-0.5, fps=30, crf=35, verbose=True):
|
|
@@ -413,7 +436,7 @@ def make_mp4(show_m, out_path, n_frames=720, az_ang=-0.5, fps=30, crf=35, verbos
|
|
|
413
436
|
show_m.screens[0].controller.rotate((radians(az_ang), 0), None)
|
|
414
437
|
show_m.render()
|
|
415
438
|
show_m.window.draw()
|
|
416
|
-
show_m.snapshot(frame_fname)
|
|
439
|
+
show_m.snapshot(fname=frame_fname)
|
|
417
440
|
video.append(Image.open(frame_fname).convert("RGB"))
|
|
418
441
|
|
|
419
442
|
all_left, all_upper = float("inf"), float("inf")
|
|
@@ -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
|
},
|
|
@@ -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
|
|
@@ -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
|
|
|
@@ -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",
|
|
@@ -12,6 +12,7 @@ from AFQ.tasks.utils import get_tp
|
|
|
12
12
|
__all__ = [
|
|
13
13
|
"ImageFile",
|
|
14
14
|
"FullImage",
|
|
15
|
+
"BabyBrainMask",
|
|
15
16
|
"RoiImage",
|
|
16
17
|
"LabelledImageFile",
|
|
17
18
|
"ThresholdedImageFile",
|
|
@@ -312,6 +313,28 @@ class FullImage(ImageDefinition):
|
|
|
312
313
|
return image_getter
|
|
313
314
|
|
|
314
315
|
|
|
316
|
+
class BabyBrainMask(ImageDefinition):
|
|
317
|
+
def __init__(self):
|
|
318
|
+
pass
|
|
319
|
+
|
|
320
|
+
def get_name(self):
|
|
321
|
+
return "babyseg_brain_mask"
|
|
322
|
+
|
|
323
|
+
def get_image_getter(self, task_name):
|
|
324
|
+
def _image_getter_helper(babyseg_model):
|
|
325
|
+
predictions = nib.load(babyseg_model)
|
|
326
|
+
brain_mask = (predictions.get_fdata() > 0).astype(np.uint8)
|
|
327
|
+
brain_mask_img = nib.Nifti1Image(brain_mask, predictions.affine)
|
|
328
|
+
return brain_mask_img, dict(BabySegPredictions=babyseg_model)
|
|
329
|
+
|
|
330
|
+
if task_name == "structural":
|
|
331
|
+
return _image_getter_helper
|
|
332
|
+
else:
|
|
333
|
+
raise ValueError(
|
|
334
|
+
"BabyBrainMask can only be used in the structural context."
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
|
|
315
338
|
class RoiImage(ImageDefinition):
|
|
316
339
|
"""
|
|
317
340
|
Define an image which is all include ROIs or'd together.
|
|
@@ -27,9 +27,9 @@ class Definition(object):
|
|
|
27
27
|
def find_path(self, bids_layout, from_path, subject, session, required=True):
|
|
28
28
|
pass
|
|
29
29
|
|
|
30
|
-
def
|
|
30
|
+
def str_formal(self):
|
|
31
31
|
"""
|
|
32
|
-
Uses __init__ in
|
|
32
|
+
Uses __init__ in str_formal to make string that will instantiate
|
|
33
33
|
itself. Assumes object will have attributes of same name as
|
|
34
34
|
__init__ args. This is important for reading/writing definitions
|
|
35
35
|
as arguments to config files.
|
|
@@ -56,7 +56,7 @@ def _arglist_to_string(args, get_attr=None):
|
|
|
56
56
|
if get_attr is not None:
|
|
57
57
|
arg = getattr(get_attr, arg)
|
|
58
58
|
if isinstance(arg, Definition):
|
|
59
|
-
arg = arg.
|
|
59
|
+
arg = arg.str_formal()
|
|
60
60
|
elif isinstance(arg, str):
|
|
61
61
|
arg = f'"{arg}"'
|
|
62
62
|
elif isinstance(arg, list):
|