junifer 0.0.4.dev517__tar.gz → 0.0.4.dev530__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.
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/PKG-INFO +1 -1
- junifer-0.0.4.dev530/docs/changes/newsfragments/295.feature +1 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/_version.py +2 -2
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/coordinates.py +7 -55
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/masks.py +6 -54
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/parcellations.py +6 -54
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/falff_estimator.py +33 -72
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/reho_estimator.py +7 -54
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/ants/ants_apply_transforms_warper.py +4 -60
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/fsl/apply_warper.py +4 -55
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/utils/__init__.py +1 -0
- junifer-0.0.4.dev530/junifer/utils/helpers.py +53 -0
- junifer-0.0.4.dev530/junifer/utils/tests/test_helpers.py +35 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer.egg-info/PKG-INFO +1 -1
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer.egg-info/SOURCES.txt +3 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/pull_request_template.md +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/workflows/ci-docs.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.github/workflows/pypi.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.gitignore +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.gitmodules +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/AUTHORS.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/LICENSE.md +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/README.md +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/codecov.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/conda-env.yml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/Makefile +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/_templates/versions.html +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/api.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/configs.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/data.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/index.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/markers.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/stats.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/storage.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/testing.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/api/utils.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/builtin.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/145.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/182.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/224.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/233.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/245.change +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/245.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/247.doc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/248.change +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/251.doc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/252.change +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/252.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/253.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/254.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/258.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/259.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/260.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/261.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/262.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/263.change +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/264.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/265.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/266.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/267.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/268.change +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/268.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/269.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/271.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/272.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/274.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/276.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/277.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/278.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/279.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/280.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/281.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/281.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/282.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/283.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/284.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/286.bugfix +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/287.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/288.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/291.doc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/293.enh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/293.feature +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/293.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/changes/newsfragments/294.misc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/conf.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/contribution.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/extension.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/index.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/marker.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/masks.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/faq.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/help.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/index.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/installation.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/links.inc +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/maintaining.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/redirect.html +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/sphinxext/gh_substitutions.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/starting.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/data.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/index.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/using/codeless.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/using/index.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/using/masks.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/using/queueing.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/using/running.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/docs/whats_new.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/README.rst +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/ignore_words.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/cli.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/decorators.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/functions.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/parser.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/res/run_conda.sh +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/tests/test_api_utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/tests/test_cli.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/tests/test_parser.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/api/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/CogAC_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/CogAR_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/DMNBuckner_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Dosenbach2010_MNI_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Empathy_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Motor_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/MultiTask_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/PhysioStress_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Power2011_MNI_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Power2013_MNI_VOIs.tsv +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Rew_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/Somatosensory_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/ToM_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/VigAtt_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/WM_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/eMDN_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/eSAD_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/VOIs/meta/extDMN_VOIs.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean_3mm.nii.gz +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/masks/vickery-patil/GMprob0.2_cortex_3mm_NA_rm.nii.gz +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/tests/test_coordinates.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/tests/test_masks.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/tests/test_parcellations.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/data/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_datagrabber_utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datagrabber/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datareader/default.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/h5io/h5io/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/h5io/h5io/_h5io.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/h5io/h5io/_version.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/h5io/h5io/chunked_array.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/h5io/h5io/chunked_list.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/collection.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/tests/test_falff_estimator.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/tests/test_reho_estimator.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/tests/test_collection.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/markers/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/registry.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/singleton.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/tests/test_registry.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/ants/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/ants/tests/test_ants_apply_transforms_warper.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/bold_warper.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/fsl/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/fsl/tests/test_apply_warper.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/tests/test_bold_warper.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/stats.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/hdf5.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/tests/test_hdf5.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/storage/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/registry.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/testing/utils.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/utils/fs.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/utils/logging.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/pyproject.toml +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/setup.cfg +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/setup.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.4.dev517 → junifer-0.0.4.dev530}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.4.
|
3
|
+
Version: 0.0.4.dev530
|
4
4
|
Summary: JUelich NeuroImaging FEature extractoR
|
5
5
|
Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
6
6
|
Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
@@ -0,0 +1 @@
|
|
1
|
+
Introduce :func:`.run_ext_cmd` to take care of the boilerplate code for running external commands from FSL, ANTs and others by `Synchon Mandal`_
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '0.0.4.
|
16
|
-
__version_tuple__ = version_tuple = (0, 0, 4, '
|
15
|
+
__version__ = version = '0.0.4.dev530'
|
16
|
+
__version_tuple__ = version_tuple = (0, 0, 4, 'dev530')
|
@@ -4,7 +4,6 @@
|
|
4
4
|
# Synchon Mandal <s.mandal@fz-juelich.de>
|
5
5
|
# License: AGPL
|
6
6
|
|
7
|
-
import subprocess
|
8
7
|
import typing
|
9
8
|
from pathlib import Path
|
10
9
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
@@ -14,7 +13,7 @@ import pandas as pd
|
|
14
13
|
from numpy.typing import ArrayLike
|
15
14
|
|
16
15
|
from ..pipeline import WorkDirManager
|
17
|
-
from ..utils
|
16
|
+
from ..utils import logger, raise_error, run_ext_cmd, warn_with_log
|
18
17
|
|
19
18
|
|
20
19
|
# Path to the VOIs
|
@@ -231,6 +230,8 @@ def get_coordinates(
|
|
231
230
|
|
232
231
|
Raises
|
233
232
|
------
|
233
|
+
RuntimeError
|
234
|
+
If warp / transformation file extension is not ".mat" or ".h5".
|
234
235
|
ValueError
|
235
236
|
If ``extra_input`` is None when ``target_data``'s space is native.
|
236
237
|
|
@@ -286,30 +287,7 @@ def get_coordinates(
|
|
286
287
|
f"sed -i 1d {transformed_coords_path.resolve()}",
|
287
288
|
]
|
288
289
|
# Call img2imgcoord
|
289
|
-
|
290
|
-
logger.info(
|
291
|
-
f"img2imgcoord command to be executed: {img2imgcoord_cmd_str}"
|
292
|
-
)
|
293
|
-
img2imgcoord_process = subprocess.run(
|
294
|
-
img2imgcoord_cmd_str, # string needed with shell=True
|
295
|
-
stdin=subprocess.DEVNULL,
|
296
|
-
stdout=subprocess.PIPE,
|
297
|
-
stderr=subprocess.STDOUT,
|
298
|
-
shell=True, # needed for respecting $PATH
|
299
|
-
check=False,
|
300
|
-
)
|
301
|
-
# Check for success or failure
|
302
|
-
if img2imgcoord_process.returncode == 0:
|
303
|
-
logger.info(
|
304
|
-
"img2imgcoord succeeded with the following output: "
|
305
|
-
f"{img2imgcoord_process.stdout}"
|
306
|
-
)
|
307
|
-
else:
|
308
|
-
raise_error(
|
309
|
-
msg="img2imgcoord failed with the following error: "
|
310
|
-
f"{img2imgcoord_process.stdout}",
|
311
|
-
klass=RuntimeError,
|
312
|
-
)
|
290
|
+
run_ext_cmd(name="img2imgcoord", cmd=img2imgcoord_cmd)
|
313
291
|
|
314
292
|
# Load coordinates
|
315
293
|
seeds = np.loadtxt(transformed_coords_path)
|
@@ -345,36 +323,10 @@ def get_coordinates(
|
|
345
323
|
f"-t {extra_input['Warp']['path'].resolve()};",
|
346
324
|
]
|
347
325
|
# Call antsApplyTransformsToPoints
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
logger.info(
|
352
|
-
"antsApplyTransformsToPoints command to be executed: "
|
353
|
-
f"{apply_transforms_to_points_cmd_str}"
|
354
|
-
)
|
355
|
-
apply_transforms_to_points_process = subprocess.run(
|
356
|
-
# string needed with shell=True
|
357
|
-
apply_transforms_to_points_cmd_str,
|
358
|
-
stdin=subprocess.DEVNULL,
|
359
|
-
stdout=subprocess.PIPE,
|
360
|
-
stderr=subprocess.STDOUT,
|
361
|
-
shell=True, # needed for respecting $PATH
|
362
|
-
check=False,
|
326
|
+
run_ext_cmd(
|
327
|
+
name="antsApplyTransformsToPoints",
|
328
|
+
cmd=apply_transforms_to_points_cmd,
|
363
329
|
)
|
364
|
-
if apply_transforms_to_points_process.returncode == 0:
|
365
|
-
logger.info(
|
366
|
-
"antsApplyTransformsToPoints succeeded with the following "
|
367
|
-
f"output: {apply_transforms_to_points_process.stdout}"
|
368
|
-
)
|
369
|
-
else:
|
370
|
-
raise_error(
|
371
|
-
msg=(
|
372
|
-
"antsApplyTransformsToPoints failed with the "
|
373
|
-
"following error: "
|
374
|
-
f"{apply_transforms_to_points_process.stdout}"
|
375
|
-
),
|
376
|
-
klass=RuntimeError,
|
377
|
-
)
|
378
330
|
|
379
331
|
# Load coordinates
|
380
332
|
seeds = np.loadtxt(
|
@@ -4,7 +4,6 @@
|
|
4
4
|
# Synchon Mandal <s.mandal@fz-juelich.de>
|
5
5
|
# License: AGPL
|
6
6
|
|
7
|
-
import subprocess
|
8
7
|
import typing
|
9
8
|
from pathlib import Path
|
10
9
|
from typing import (
|
@@ -30,7 +29,7 @@ from nilearn.masking import (
|
|
30
29
|
)
|
31
30
|
|
32
31
|
from ..pipeline import WorkDirManager
|
33
|
-
from ..utils
|
32
|
+
from ..utils import logger, raise_error, run_ext_cmd
|
34
33
|
from .utils import closest_resolution
|
35
34
|
|
36
35
|
|
@@ -201,8 +200,7 @@ def get_mask( # noqa: C901
|
|
201
200
|
RuntimeError
|
202
201
|
If masks are in different spaces and they need to be intersected /
|
203
202
|
unionized or
|
204
|
-
if warp / transformation file extension is not ".mat" or ".h5"
|
205
|
-
if external tool execution failed.
|
203
|
+
if warp / transformation file extension is not ".mat" or ".h5".
|
206
204
|
ValueError
|
207
205
|
If extra key is provided in addition to mask name in ``masks`` or
|
208
206
|
if no mask is provided or
|
@@ -384,30 +382,8 @@ def get_mask( # noqa: C901
|
|
384
382
|
f"-o {warped_mask_path.resolve()}",
|
385
383
|
]
|
386
384
|
# Call applywarp
|
387
|
-
|
388
|
-
|
389
|
-
f"applywarp command to be executed: {applywarp_cmd_str}"
|
390
|
-
)
|
391
|
-
applywarp_process = subprocess.run(
|
392
|
-
applywarp_cmd_str, # string needed with shell=True
|
393
|
-
stdin=subprocess.DEVNULL,
|
394
|
-
stdout=subprocess.PIPE,
|
395
|
-
stderr=subprocess.STDOUT,
|
396
|
-
shell=True, # needed for respecting $PATH
|
397
|
-
check=False,
|
398
|
-
)
|
399
|
-
# Check for success or failure
|
400
|
-
if applywarp_process.returncode == 0:
|
401
|
-
logger.info(
|
402
|
-
"applywarp succeeded with the following output: "
|
403
|
-
f"{applywarp_process.stdout}"
|
404
|
-
)
|
405
|
-
else:
|
406
|
-
raise_error(
|
407
|
-
msg="applywarp failed with the following error: "
|
408
|
-
f"{applywarp_process.stdout}",
|
409
|
-
klass=RuntimeError,
|
410
|
-
)
|
385
|
+
run_ext_cmd(name="applywarp", cmd=applywarp_cmd)
|
386
|
+
|
411
387
|
elif warp_file_ext == ".h5":
|
412
388
|
logger.debug("Using ANTs for mask warping")
|
413
389
|
# Set antsApplyTransforms command
|
@@ -423,32 +399,8 @@ def get_mask( # noqa: C901
|
|
423
399
|
f"-o {warped_mask_path.resolve()}",
|
424
400
|
]
|
425
401
|
# Call antsApplyTransforms
|
426
|
-
|
427
|
-
|
428
|
-
"antsApplyTransforms command to be executed: "
|
429
|
-
f"{apply_transforms_cmd_str}"
|
430
|
-
)
|
431
|
-
apply_transforms_process = subprocess.run(
|
432
|
-
apply_transforms_cmd_str, # string needed with shell=True
|
433
|
-
stdin=subprocess.DEVNULL,
|
434
|
-
stdout=subprocess.PIPE,
|
435
|
-
stderr=subprocess.STDOUT,
|
436
|
-
shell=True, # needed for respecting $PATH
|
437
|
-
check=False,
|
438
|
-
)
|
439
|
-
if apply_transforms_process.returncode == 0:
|
440
|
-
logger.info(
|
441
|
-
"antsApplyTransforms succeeded with the following output: "
|
442
|
-
f"{apply_transforms_process.stdout}"
|
443
|
-
)
|
444
|
-
else:
|
445
|
-
raise_error(
|
446
|
-
msg=(
|
447
|
-
"antsApplyTransforms failed with the following error: "
|
448
|
-
f"{apply_transforms_process.stdout}"
|
449
|
-
),
|
450
|
-
klass=RuntimeError,
|
451
|
-
)
|
402
|
+
run_ext_cmd(name="antsApplyTransforms", cmd=apply_transforms_cmd)
|
403
|
+
|
452
404
|
else:
|
453
405
|
raise_error(
|
454
406
|
msg=(
|
@@ -7,7 +7,6 @@
|
|
7
7
|
|
8
8
|
import io
|
9
9
|
import shutil
|
10
|
-
import subprocess
|
11
10
|
import tarfile
|
12
11
|
import tempfile
|
13
12
|
import typing
|
@@ -23,7 +22,7 @@ from nilearn import datasets, image
|
|
23
22
|
from requests.exceptions import ConnectionError, HTTPError, ReadTimeout
|
24
23
|
|
25
24
|
from ..pipeline import WorkDirManager
|
26
|
-
from ..utils
|
25
|
+
from ..utils import logger, raise_error, run_ext_cmd, warn_with_log
|
27
26
|
from .utils import closest_resolution
|
28
27
|
|
29
28
|
|
@@ -232,8 +231,7 @@ def get_parcellation(
|
|
232
231
|
------
|
233
232
|
RuntimeError
|
234
233
|
If parcellations are in different spaces and they need to be merged or
|
235
|
-
if warp / transformation file extension is not ".mat" or ".h5"
|
236
|
-
if external tool execution failed.
|
234
|
+
if warp / transformation file extension is not ".mat" or ".h5".
|
237
235
|
ValueError
|
238
236
|
If ``extra_input`` is None when ``target_data``'s space is native.
|
239
237
|
|
@@ -324,30 +322,8 @@ def get_parcellation(
|
|
324
322
|
f"-o {warped_parcellation_path.resolve()}",
|
325
323
|
]
|
326
324
|
# Call applywarp
|
327
|
-
|
328
|
-
|
329
|
-
f"applywarp command to be executed: {applywarp_cmd_str}"
|
330
|
-
)
|
331
|
-
applywarp_process = subprocess.run(
|
332
|
-
applywarp_cmd_str, # string needed with shell=True
|
333
|
-
stdin=subprocess.DEVNULL,
|
334
|
-
stdout=subprocess.PIPE,
|
335
|
-
stderr=subprocess.STDOUT,
|
336
|
-
shell=True, # needed for respecting $PATH
|
337
|
-
check=False,
|
338
|
-
)
|
339
|
-
# Check for success or failure
|
340
|
-
if applywarp_process.returncode == 0:
|
341
|
-
logger.info(
|
342
|
-
"applywarp succeeded with the following output: "
|
343
|
-
f"{applywarp_process.stdout}"
|
344
|
-
)
|
345
|
-
else:
|
346
|
-
raise_error(
|
347
|
-
msg="applywarp failed with the following error: "
|
348
|
-
f"{applywarp_process.stdout}",
|
349
|
-
klass=RuntimeError,
|
350
|
-
)
|
325
|
+
run_ext_cmd(name="applywarp", cmd=applywarp_cmd)
|
326
|
+
|
351
327
|
elif warp_file_ext == ".h5":
|
352
328
|
logger.debug("Using ANTs for parcellation warping")
|
353
329
|
# Set antsApplyTransforms command
|
@@ -363,32 +339,8 @@ def get_parcellation(
|
|
363
339
|
f"-o {warped_parcellation_path.resolve()}",
|
364
340
|
]
|
365
341
|
# Call antsApplyTransforms
|
366
|
-
|
367
|
-
|
368
|
-
"antsApplyTransforms command to be executed: "
|
369
|
-
f"{apply_transforms_cmd_str}"
|
370
|
-
)
|
371
|
-
apply_transforms_process = subprocess.run(
|
372
|
-
apply_transforms_cmd_str, # string needed with shell=True
|
373
|
-
stdin=subprocess.DEVNULL,
|
374
|
-
stdout=subprocess.PIPE,
|
375
|
-
stderr=subprocess.STDOUT,
|
376
|
-
shell=True, # needed for respecting $PATH
|
377
|
-
check=False,
|
378
|
-
)
|
379
|
-
if apply_transforms_process.returncode == 0:
|
380
|
-
logger.info(
|
381
|
-
"antsApplyTransforms succeeded with the following output: "
|
382
|
-
f"{apply_transforms_process.stdout}"
|
383
|
-
)
|
384
|
-
else:
|
385
|
-
raise_error(
|
386
|
-
msg=(
|
387
|
-
"antsApplyTransforms failed with the following error: "
|
388
|
-
f"{apply_transforms_process.stdout}"
|
389
|
-
),
|
390
|
-
klass=RuntimeError,
|
391
|
-
)
|
342
|
+
run_ext_cmd(name="antsApplyTransforms", cmd=apply_transforms_cmd)
|
343
|
+
|
392
344
|
else:
|
393
345
|
raise_error(
|
394
346
|
msg=(
|
@@ -4,11 +4,10 @@
|
|
4
4
|
# Federico Raimondo <f.raimondo@fz-juelich.de>
|
5
5
|
# License: AGPL
|
6
6
|
|
7
|
-
import subprocess
|
8
7
|
import typing
|
9
8
|
from functools import lru_cache
|
10
9
|
from pathlib import Path
|
11
|
-
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple, Union
|
10
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple, Union
|
12
11
|
|
13
12
|
import nibabel as nib
|
14
13
|
import numpy as np
|
@@ -17,7 +16,7 @@ from scipy.fft import fft, fftfreq
|
|
17
16
|
|
18
17
|
from ...pipeline import WorkDirManager
|
19
18
|
from ...pipeline.singleton import singleton
|
20
|
-
from ...utils import logger,
|
19
|
+
from ...utils import logger, run_ext_cmd
|
21
20
|
|
22
21
|
|
23
22
|
if TYPE_CHECKING:
|
@@ -54,42 +53,6 @@ class ALFFEstimator:
|
|
54
53
|
if self.temp_dir_path is not None:
|
55
54
|
WorkDirManager().delete_tempdir(self.temp_dir_path)
|
56
55
|
|
57
|
-
@staticmethod
|
58
|
-
def _run_afni_cmd(cmd: str) -> None:
|
59
|
-
"""Run AFNI command.
|
60
|
-
|
61
|
-
Parameters
|
62
|
-
----------
|
63
|
-
cmd : str
|
64
|
-
AFNI command to be executed.
|
65
|
-
|
66
|
-
Raises
|
67
|
-
------
|
68
|
-
RuntimeError
|
69
|
-
If AFNI command fails.
|
70
|
-
|
71
|
-
"""
|
72
|
-
logger.info(f"AFNI command to be executed: {cmd}")
|
73
|
-
process = subprocess.run(
|
74
|
-
cmd,
|
75
|
-
stdin=subprocess.DEVNULL,
|
76
|
-
stdout=subprocess.PIPE,
|
77
|
-
stderr=subprocess.STDOUT,
|
78
|
-
shell=True,
|
79
|
-
check=False,
|
80
|
-
)
|
81
|
-
if process.returncode == 0:
|
82
|
-
logger.info(
|
83
|
-
"AFNI command succeeded with the following output: "
|
84
|
-
f"{process.stdout}"
|
85
|
-
)
|
86
|
-
else:
|
87
|
-
raise_error(
|
88
|
-
msg="AFNI command failed with the following error: "
|
89
|
-
f"{process.stdout}",
|
90
|
-
klass=RuntimeError,
|
91
|
-
)
|
92
|
-
|
93
56
|
def _compute_alff_afni(
|
94
57
|
self,
|
95
58
|
data: Union["Nifti1Image", "Nifti2Image"],
|
@@ -121,11 +84,6 @@ class ALFFEstimator:
|
|
121
84
|
pathlib.Path
|
122
85
|
The path to the fALFF map as NIfTI.
|
123
86
|
|
124
|
-
Raises
|
125
|
-
------
|
126
|
-
RuntimeError
|
127
|
-
If the AFNI commands fails due to some issues.
|
128
|
-
|
129
87
|
"""
|
130
88
|
# Note: self.temp_dir_path is sure to exist before proceeding, so
|
131
89
|
# types checks are ignored further on.
|
@@ -150,31 +108,36 @@ class ALFFEstimator:
|
|
150
108
|
self.temp_dir_path / "temp_falff" # type: ignore
|
151
109
|
)
|
152
110
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
f"-
|
157
|
-
f"-
|
158
|
-
"-
|
159
|
-
|
111
|
+
# Set 3dRSFC command
|
112
|
+
bp_cmd = [
|
113
|
+
"3dRSFC",
|
114
|
+
f"-prefix {falff_afni_out_path_prefix.resolve()}",
|
115
|
+
f"-input {nifti_in_file_path.resolve()}",
|
116
|
+
f"-band {highpass} {lowpass}",
|
117
|
+
"-no_rsfa -nosat -nodetrend",
|
118
|
+
]
|
160
119
|
if tr is not None:
|
161
|
-
bp_cmd
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
f"{
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
120
|
+
bp_cmd.append(f"-dt {tr}")
|
121
|
+
# Call 3dRSFC
|
122
|
+
run_ext_cmd(name="3dRSFC", cmd=bp_cmd)
|
123
|
+
|
124
|
+
# Convert alff output to nifti
|
125
|
+
convert_alff_cmd = [
|
126
|
+
"3dAFNItoNIFTI",
|
127
|
+
f"-prefix {alff_fname.resolve()}",
|
128
|
+
f"{falff_afni_out_path_prefix}_ALFF+tlrc.BRIK",
|
129
|
+
]
|
130
|
+
# Call 3dAFNItoNIFTI
|
131
|
+
run_ext_cmd(name="3dAFNItoNIFTI", cmd=convert_alff_cmd)
|
132
|
+
|
133
|
+
# Convert falff output to nifti
|
134
|
+
convert_falff_cmd = [
|
135
|
+
"3dAFNItoNIFTI",
|
136
|
+
f"-prefix {falff_fname.resolve()}",
|
137
|
+
f"{falff_afni_out_path_prefix}_fALFF+tlrc.BRIK",
|
138
|
+
]
|
139
|
+
# Call 3dAFNItoNIFTI
|
140
|
+
run_ext_cmd(name="3dAFNItoNIFTI", cmd=convert_falff_cmd)
|
178
141
|
|
179
142
|
# Cleanup intermediate files
|
180
143
|
for fname in self.temp_dir_path.glob("temp_*"): # type: ignore
|
@@ -183,10 +146,8 @@ class ALFFEstimator:
|
|
183
146
|
# Load niftis
|
184
147
|
alff_img = nib.load(alff_fname)
|
185
148
|
falff_img = nib.load(falff_fname)
|
186
|
-
|
187
|
-
alff_img
|
188
|
-
falff_img = cast("Nifti1Image", falff_img)
|
189
|
-
return alff_img, falff_img, alff_fname, falff_fname
|
149
|
+
|
150
|
+
return alff_img, falff_img, alff_fname, falff_fname # type: ignore
|
190
151
|
|
191
152
|
def _compute_alff_python(
|
192
153
|
self,
|
@@ -6,11 +6,10 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
import hashlib
|
9
|
-
import subprocess
|
10
9
|
from functools import lru_cache
|
11
10
|
from itertools import product
|
12
11
|
from pathlib import Path
|
13
|
-
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
12
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
|
14
13
|
|
15
14
|
import nibabel as nib
|
16
15
|
import numpy as np
|
@@ -20,7 +19,7 @@ from scipy.stats import rankdata
|
|
20
19
|
|
21
20
|
from ...pipeline import WorkDirManager
|
22
21
|
from ...pipeline.singleton import singleton
|
23
|
-
from ...utils import logger, raise_error
|
22
|
+
from ...utils import logger, raise_error, run_ext_cmd
|
24
23
|
|
25
24
|
|
26
25
|
if TYPE_CHECKING:
|
@@ -112,11 +111,6 @@ class ReHoEstimator:
|
|
112
111
|
pathlib.Path
|
113
112
|
The path to the ReHo map as NIfTI.
|
114
113
|
|
115
|
-
Raises
|
116
|
-
------
|
117
|
-
RuntimeError
|
118
|
-
If the 3dReHo command fails due to some issue.
|
119
|
-
|
120
114
|
Notes
|
121
115
|
-----
|
122
116
|
For more information on the publication, please check [1]_ , and for
|
@@ -174,30 +168,10 @@ class ReHoEstimator:
|
|
174
168
|
else:
|
175
169
|
reho_cmd.append(f"-nneigh {nneigh}")
|
176
170
|
# Call 3dReHo
|
177
|
-
|
178
|
-
logger.info(f"3dReHo command to be executed: {reho_cmd_str}")
|
179
|
-
reho_process = subprocess.run(
|
180
|
-
reho_cmd_str, # string needed with shell=True
|
181
|
-
stdin=subprocess.DEVNULL,
|
182
|
-
stdout=subprocess.PIPE,
|
183
|
-
stderr=subprocess.STDOUT,
|
184
|
-
shell=True, # needed for respecting $PATH
|
185
|
-
check=False,
|
186
|
-
)
|
187
|
-
if reho_process.returncode == 0:
|
188
|
-
logger.info(
|
189
|
-
"3dReHo succeeded with the following output: "
|
190
|
-
f"{reho_process.stdout}"
|
191
|
-
)
|
192
|
-
else:
|
193
|
-
raise_error(
|
194
|
-
msg="3dReHo failed with the following error: "
|
195
|
-
f"{reho_process.stdout}",
|
196
|
-
klass=RuntimeError,
|
197
|
-
)
|
171
|
+
run_ext_cmd(name="3dReHo", cmd=reho_cmd)
|
198
172
|
|
199
173
|
# SHA256 for bypassing memmap
|
200
|
-
sha256_params = hashlib.sha256(bytes(
|
174
|
+
sha256_params = hashlib.sha256(bytes(" ".join(reho_cmd), "utf-8"))
|
201
175
|
# Create element-scoped tempdir so that the ReHo map is
|
202
176
|
# available later as get_coordinates and the like need it
|
203
177
|
# in ReHoSpheres and the like to transform to other template
|
@@ -216,27 +190,7 @@ class ReHoEstimator:
|
|
216
190
|
f"{reho_afni_out_path_prefix}+tlrc.BRIK",
|
217
191
|
]
|
218
192
|
# Call 3dAFNItoNIFTI
|
219
|
-
|
220
|
-
logger.info(f"3dAFNItoNIFTI command to be executed: {convert_cmd_str}")
|
221
|
-
convert_process = subprocess.run(
|
222
|
-
convert_cmd_str, # string needed with shell=True
|
223
|
-
stdin=subprocess.DEVNULL,
|
224
|
-
stdout=subprocess.PIPE,
|
225
|
-
stderr=subprocess.STDOUT,
|
226
|
-
shell=True, # needed for respecting $PATH
|
227
|
-
check=False,
|
228
|
-
)
|
229
|
-
if convert_process.returncode == 0:
|
230
|
-
logger.info(
|
231
|
-
"3dAFNItoNIFTI succeeded with the following output: "
|
232
|
-
f"{convert_process.stdout}"
|
233
|
-
)
|
234
|
-
else:
|
235
|
-
raise_error(
|
236
|
-
msg="3dAFNItoNIFTI failed with the following error: "
|
237
|
-
f"{convert_process.stdout}",
|
238
|
-
klass=RuntimeError,
|
239
|
-
)
|
193
|
+
run_ext_cmd(name="3dAFNItoNIFTI", cmd=convert_cmd)
|
240
194
|
|
241
195
|
# Cleanup intermediate files
|
242
196
|
for fname in self.temp_dir_path.glob("reho*"): # type: ignore
|
@@ -244,9 +198,8 @@ class ReHoEstimator:
|
|
244
198
|
|
245
199
|
# Load nifti
|
246
200
|
output_data = nib.load(reho_afni_to_nifti_out_path)
|
247
|
-
|
248
|
-
output_data
|
249
|
-
return output_data, reho_afni_to_nifti_out_path
|
201
|
+
|
202
|
+
return output_data, reho_afni_to_nifti_out_path # type: ignore
|
250
203
|
|
251
204
|
def _compute_reho_python(
|
252
205
|
self,
|
@@ -3,7 +3,6 @@
|
|
3
3
|
# Authors: Synchon Mandal <s.mandal@fz-juelich.de>
|
4
4
|
# License: AGPL
|
5
5
|
|
6
|
-
import subprocess
|
7
6
|
from pathlib import Path
|
8
7
|
from typing import (
|
9
8
|
TYPE_CHECKING,
|
@@ -14,14 +13,13 @@ from typing import (
|
|
14
13
|
Optional,
|
15
14
|
Tuple,
|
16
15
|
Union,
|
17
|
-
cast,
|
18
16
|
)
|
19
17
|
|
20
18
|
import nibabel as nib
|
21
19
|
import numpy as np
|
22
20
|
|
23
21
|
from ...pipeline import WorkDirManager
|
24
|
-
from ...utils import logger, raise_error
|
22
|
+
from ...utils import logger, raise_error, run_ext_cmd
|
25
23
|
from ..base import BasePreprocessor
|
26
24
|
|
27
25
|
|
@@ -125,11 +123,6 @@ class _AntsApplyTransformsWarper(BasePreprocessor):
|
|
125
123
|
pathlib.Path
|
126
124
|
The path to the resampled reference image.
|
127
125
|
|
128
|
-
Raises
|
129
|
-
------
|
130
|
-
RuntimeError
|
131
|
-
If ANTs command fails.
|
132
|
-
|
133
126
|
"""
|
134
127
|
# Get the min of the voxel sizes from input and use it as the
|
135
128
|
# resolution
|
@@ -153,29 +146,7 @@ class _AntsApplyTransformsWarper(BasePreprocessor):
|
|
153
146
|
"3 3", # Lanczos windowed sinc
|
154
147
|
]
|
155
148
|
# Call ResampleImage
|
156
|
-
|
157
|
-
logger.info(
|
158
|
-
f"ResampleImage command to be executed: {resample_image_cmd_str}"
|
159
|
-
)
|
160
|
-
resample_image_process = subprocess.run(
|
161
|
-
resample_image_cmd_str,
|
162
|
-
stdin=subprocess.DEVNULL,
|
163
|
-
stdout=subprocess.PIPE,
|
164
|
-
stderr=subprocess.STDOUT,
|
165
|
-
shell=True, # needed for respecting $PATH
|
166
|
-
check=False,
|
167
|
-
)
|
168
|
-
if resample_image_process.returncode == 0:
|
169
|
-
logger.info(
|
170
|
-
"ResampleImage succeeded with the following output: "
|
171
|
-
f"{resample_image_process.stdout}"
|
172
|
-
)
|
173
|
-
else:
|
174
|
-
raise_error(
|
175
|
-
msg="ResampleImage failed with the following error: "
|
176
|
-
f"{resample_image_process.stdout}",
|
177
|
-
klass=RuntimeError,
|
178
|
-
)
|
149
|
+
run_ext_cmd(name="ResampleImage", cmd=resample_image_cmd)
|
179
150
|
|
180
151
|
# Create a tempfile for warped output
|
181
152
|
apply_transforms_out_path = tempdir / "input_warped.nii.gz"
|
@@ -192,39 +163,12 @@ class _AntsApplyTransformsWarper(BasePreprocessor):
|
|
192
163
|
f"-o {apply_transforms_out_path.resolve()}",
|
193
164
|
]
|
194
165
|
# Call antsApplyTransforms
|
195
|
-
|
196
|
-
logger.info(
|
197
|
-
"antsApplyTransforms command to be executed: "
|
198
|
-
f"{apply_transforms_cmd_str}"
|
199
|
-
)
|
200
|
-
apply_transforms_process = subprocess.run(
|
201
|
-
apply_transforms_cmd_str, # string needed with shell=True
|
202
|
-
stdin=subprocess.DEVNULL,
|
203
|
-
stdout=subprocess.PIPE,
|
204
|
-
stderr=subprocess.STDOUT,
|
205
|
-
shell=True, # needed for respecting $PATH
|
206
|
-
check=False,
|
207
|
-
)
|
208
|
-
if apply_transforms_process.returncode == 0:
|
209
|
-
logger.info(
|
210
|
-
"antsApplyTransforms succeeded with the following output: "
|
211
|
-
f"{apply_transforms_process.stdout}"
|
212
|
-
)
|
213
|
-
else:
|
214
|
-
raise_error(
|
215
|
-
msg=(
|
216
|
-
"antsApplyTransforms failed with the following error: "
|
217
|
-
f"{apply_transforms_process.stdout}"
|
218
|
-
),
|
219
|
-
klass=RuntimeError,
|
220
|
-
)
|
166
|
+
run_ext_cmd(name="antsApplyTransforms", cmd=apply_transforms_cmd)
|
221
167
|
|
222
168
|
# Load nifti
|
223
169
|
output_img = nib.load(apply_transforms_out_path)
|
224
170
|
|
225
|
-
#
|
226
|
-
output_img = cast("Nifti1Image", output_img)
|
227
|
-
return output_img, resample_image_out_path
|
171
|
+
return output_img, resample_image_out_path # type: ignore
|
228
172
|
|
229
173
|
def preprocess(
|
230
174
|
self,
|