pyAFQ 2.0.1__tar.gz → 2.1__tar.gz

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