junifer 0.0.7.dev332__py3-none-any.whl → 0.0.8__py3-none-any.whl

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 (293) hide show
  1. junifer/_version.py +9 -19
  2. junifer/api/__init__.pyi +17 -2
  3. junifer/api/functions.py +222 -39
  4. junifer/api/queue_context/__init__.pyi +11 -3
  5. junifer/api/queue_context/gnu_parallel_local_adapter.py +81 -120
  6. junifer/api/queue_context/htcondor_adapter.py +118 -181
  7. junifer/api/queue_context/queue_context_adapter.py +51 -7
  8. junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +10 -35
  9. junifer/api/queue_context/tests/test_htcondor_adapter.py +13 -50
  10. junifer/api/res/fsl/run_fsl_docker.sh +4 -0
  11. junifer/api/tests/test_functions.py +863 -36
  12. junifer/cli/__init__.py +1 -7
  13. junifer/cli/cli.py +41 -22
  14. junifer/cli/parser.py +23 -147
  15. junifer/cli/tests/data/gmd_mean.yaml +6 -6
  16. junifer/cli/tests/data/gmd_mean_htcondor.yaml +6 -5
  17. junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +1 -0
  18. junifer/cli/tests/test_cli.py +120 -4
  19. junifer/cli/tests/test_cli_utils.py +23 -6
  20. junifer/cli/utils.py +14 -9
  21. junifer/configs/__init__.py +5 -0
  22. junifer/configs/__init__.pyi +0 -0
  23. junifer/configs/juseless/datagrabbers/__init__.pyi +4 -2
  24. junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +18 -24
  25. junifer/configs/juseless/datagrabbers/camcan_vbm.py +20 -27
  26. junifer/configs/juseless/datagrabbers/ixi_vbm.py +44 -52
  27. junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -7
  28. junifer/configs/juseless/datagrabbers/tests/test_ucla.py +2 -19
  29. junifer/configs/juseless/datagrabbers/ucla.py +111 -104
  30. junifer/configs/juseless/datagrabbers/ukb_vbm.py +19 -25
  31. junifer/configs/py.typed +0 -0
  32. junifer/conftest.py +63 -24
  33. junifer/data/_dispatch.py +9 -19
  34. junifer/data/coordinates/_ants_coordinates_warper.py +4 -1
  35. junifer/data/coordinates/_coordinates.py +51 -6
  36. junifer/data/coordinates/_fsl_coordinates_warper.py +4 -1
  37. junifer/data/coordinates/tests/test_coordinates.py +15 -3
  38. junifer/data/coordinates/tests/test_coordinates_names.py +37 -0
  39. junifer/data/maps/_ants_maps_warper.py +18 -12
  40. junifer/data/maps/_fsl_maps_warper.py +7 -3
  41. junifer/data/maps/_maps.py +12 -8
  42. junifer/data/maps/tests/test_maps.py +13 -21
  43. junifer/data/masks/_ants_mask_warper.py +18 -12
  44. junifer/data/masks/_fsl_mask_warper.py +7 -3
  45. junifer/data/masks/_masks.py +15 -12
  46. junifer/data/masks/tests/test_masks.py +20 -17
  47. junifer/data/parcellations/_ants_parcellation_warper.py +18 -12
  48. junifer/data/parcellations/_fsl_parcellation_warper.py +7 -5
  49. junifer/data/parcellations/_parcellations.py +125 -91
  50. junifer/data/parcellations/tests/test_parcellations.py +122 -1
  51. junifer/data/template_spaces.py +117 -50
  52. junifer/data/tests/test_template_spaces.py +10 -7
  53. junifer/data/utils.py +10 -8
  54. junifer/datagrabber/__init__.pyi +38 -5
  55. junifer/datagrabber/aomic/__init__.pyi +8 -1
  56. junifer/datagrabber/aomic/_types.py +22 -0
  57. junifer/datagrabber/aomic/id1000.py +193 -183
  58. junifer/datagrabber/aomic/piop1.py +215 -259
  59. junifer/datagrabber/aomic/piop2.py +211 -244
  60. junifer/datagrabber/aomic/tests/test_id1000.py +70 -53
  61. junifer/datagrabber/aomic/tests/test_piop1.py +98 -102
  62. junifer/datagrabber/aomic/tests/test_piop2.py +88 -85
  63. junifer/datagrabber/base.py +253 -79
  64. junifer/datagrabber/datalad_base.py +127 -76
  65. junifer/datagrabber/dmcc13_benchmark.py +204 -289
  66. junifer/datagrabber/hcp1200/__init__.pyi +7 -2
  67. junifer/datagrabber/hcp1200/datalad_hcp1200.py +61 -40
  68. junifer/datagrabber/hcp1200/hcp1200.py +151 -164
  69. junifer/datagrabber/hcp1200/tests/test_hcp1200.py +116 -128
  70. junifer/datagrabber/multiple.py +183 -63
  71. junifer/datagrabber/pattern.py +358 -227
  72. junifer/datagrabber/pattern_datalad.py +84 -124
  73. junifer/datagrabber/pattern_validation_mixin.py +22 -50
  74. junifer/datagrabber/tests/test_base.py +17 -4
  75. junifer/datagrabber/tests/test_datalad_base.py +20 -27
  76. junifer/datagrabber/tests/test_dmcc13_benchmark.py +110 -122
  77. junifer/datagrabber/tests/test_multiple.py +293 -31
  78. junifer/datagrabber/tests/test_pattern.py +577 -18
  79. junifer/datagrabber/tests/test_pattern_datalad.py +177 -107
  80. junifer/datagrabber/tests/test_pattern_validation_mixin.py +9 -51
  81. junifer/datareader/default.py +8 -5
  82. junifer/datareader/tests/test_default_reader.py +1 -1
  83. junifer/external/BrainPrint/.codecov.yml +2 -0
  84. junifer/external/BrainPrint/.codespellignore +2 -0
  85. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +45 -0
  86. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +12 -0
  87. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +24 -0
  88. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +28 -0
  89. junifer/external/BrainPrint/.github/dependabot.yml +6 -0
  90. junifer/external/BrainPrint/.github/workflows/build.yml +53 -0
  91. junifer/external/BrainPrint/.github/workflows/code-style.yml +44 -0
  92. junifer/external/BrainPrint/.github/workflows/doc.yml +65 -0
  93. junifer/external/BrainPrint/.github/workflows/publish.yml +31 -0
  94. junifer/external/BrainPrint/.github/workflows/pytest.yml +54 -0
  95. junifer/external/BrainPrint/.gitignore +123 -0
  96. junifer/external/BrainPrint/LICENSE +21 -0
  97. junifer/external/BrainPrint/README.md +108 -0
  98. junifer/external/BrainPrint/brainprint/cli/__init__.py +11 -0
  99. junifer/external/BrainPrint/brainprint/cli/help_text.py +169 -0
  100. junifer/external/BrainPrint/brainprint/cli/parser.py +150 -0
  101. junifer/external/BrainPrint/brainprint/cli/utils.py +14 -0
  102. junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  103. junifer/external/BrainPrint/brainprint/commands/sys_info.py +18 -0
  104. junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  105. junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +33 -0
  106. junifer/external/BrainPrint/doc/Makefile +20 -0
  107. junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  108. junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +10 -0
  109. junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +8 -0
  110. junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +6 -0
  111. junifer/external/BrainPrint/doc/api/index.rst +11 -0
  112. junifer/external/BrainPrint/doc/conf.py +272 -0
  113. junifer/external/BrainPrint/doc/index.rst +140 -0
  114. junifer/external/BrainPrint/doc/links.inc +36 -0
  115. junifer/external/BrainPrint/doc/make.bat +35 -0
  116. junifer/external/BrainPrint/doc/references.bib +23 -0
  117. junifer/external/BrainPrint/pyproject.toml +170 -0
  118. junifer/external/BrainPrint/setup.py +3 -0
  119. junifer/external/__init__.py +5 -0
  120. junifer/external/__init__.pyi +0 -0
  121. junifer/external/nilearn/junifer_connectivity_measure.py +95 -39
  122. junifer/external/nilearn/junifer_nifti_spheres_masker.py +226 -67
  123. junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +39 -27
  124. junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +231 -21
  125. junifer/external/py.typed +0 -0
  126. junifer/markers/__init__.pyi +6 -3
  127. junifer/markers/base.py +126 -76
  128. junifer/markers/brainprint.py +30 -39
  129. junifer/markers/complexity/__init__.py +20 -3
  130. junifer/markers/complexity/complexity_base.py +40 -41
  131. junifer/markers/complexity/hurst_exponent.py +22 -35
  132. junifer/markers/complexity/multiscale_entropy_auc.py +53 -41
  133. junifer/markers/complexity/perm_entropy.py +22 -36
  134. junifer/markers/complexity/range_entropy.py +22 -35
  135. junifer/markers/complexity/range_entropy_auc.py +27 -36
  136. junifer/markers/complexity/sample_entropy.py +22 -36
  137. junifer/markers/complexity/tests/test_complexity_registry.py +48 -0
  138. junifer/markers/complexity/tests/test_hurst_exponent.py +47 -36
  139. junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +50 -36
  140. junifer/markers/complexity/tests/test_perm_entropy.py +48 -36
  141. junifer/markers/complexity/tests/test_range_entropy.py +47 -36
  142. junifer/markers/complexity/tests/test_range_entropy_auc.py +47 -36
  143. junifer/markers/complexity/tests/test_sample_entropy.py +48 -36
  144. junifer/markers/complexity/tests/test_weighted_perm_entropy.py +50 -36
  145. junifer/markers/complexity/weighted_perm_entropy.py +22 -36
  146. junifer/markers/ets_rss.py +35 -31
  147. junifer/markers/falff/__init__.pyi +7 -1
  148. junifer/markers/falff/_afni_falff.py +22 -9
  149. junifer/markers/falff/_junifer_falff.py +47 -31
  150. junifer/markers/falff/falff_base.py +80 -60
  151. junifer/markers/falff/falff_maps.py +17 -41
  152. junifer/markers/falff/falff_parcels.py +26 -51
  153. junifer/markers/falff/falff_spheres.py +34 -61
  154. junifer/markers/falff/tests/test_falff_maps.py +20 -23
  155. junifer/markers/falff/tests/test_falff_mask.py +99 -0
  156. junifer/markers/falff/tests/test_falff_parcels.py +14 -10
  157. junifer/markers/falff/tests/test_falff_spheres.py +14 -10
  158. junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +32 -34
  159. junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +12 -25
  160. junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +19 -34
  161. junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +24 -44
  162. junifer/markers/functional_connectivity/functional_connectivity_base.py +50 -40
  163. junifer/markers/functional_connectivity/functional_connectivity_maps.py +12 -25
  164. junifer/markers/functional_connectivity/functional_connectivity_parcels.py +19 -34
  165. junifer/markers/functional_connectivity/functional_connectivity_spheres.py +24 -45
  166. junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +21 -22
  167. junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +8 -7
  168. junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +8 -4
  169. junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +8 -4
  170. junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +8 -7
  171. junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +9 -5
  172. junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +8 -12
  173. junifer/markers/maps_aggregation.py +77 -55
  174. junifer/markers/parcel_aggregation.py +91 -70
  175. junifer/markers/reho/__init__.pyi +7 -1
  176. junifer/markers/reho/_afni_reho.py +23 -14
  177. junifer/markers/reho/_junifer_reho.py +112 -123
  178. junifer/markers/reho/reho_base.py +115 -37
  179. junifer/markers/reho/reho_maps.py +18 -32
  180. junifer/markers/reho/reho_parcels.py +26 -41
  181. junifer/markers/reho/reho_spheres.py +33 -54
  182. junifer/markers/reho/tests/test_junifer_reho.py +178 -0
  183. junifer/markers/reho/tests/test_reho_maps.py +27 -25
  184. junifer/markers/reho/tests/test_reho_parcels.py +28 -22
  185. junifer/markers/reho/tests/test_reho_spheres.py +16 -12
  186. junifer/markers/sphere_aggregation.py +88 -72
  187. junifer/markers/temporal_snr/temporal_snr_base.py +32 -30
  188. junifer/markers/temporal_snr/temporal_snr_maps.py +9 -18
  189. junifer/markers/temporal_snr/temporal_snr_parcels.py +19 -27
  190. junifer/markers/temporal_snr/temporal_snr_spheres.py +27 -41
  191. junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +2 -2
  192. junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +17 -22
  193. junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +11 -3
  194. junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +9 -9
  195. junifer/markers/tests/test_brainprint.py +10 -9
  196. junifer/markers/tests/test_ets_rss.py +7 -3
  197. junifer/markers/tests/test_lost_regions.py +279 -0
  198. junifer/markers/tests/test_maps_aggregation.py +67 -114
  199. junifer/markers/tests/test_marker_utils.py +40 -1
  200. junifer/markers/tests/test_markers_base.py +275 -6
  201. junifer/markers/tests/test_parcel_aggregation.py +91 -53
  202. junifer/markers/tests/test_sphere_aggregation.py +53 -47
  203. junifer/markers/utils.py +267 -5
  204. junifer/onthefly/__init__.py +2 -3
  205. junifer/onthefly/__init__.pyi +4 -0
  206. junifer/onthefly/_brainprint.py +3 -5
  207. junifer/onthefly/py.typed +0 -0
  208. junifer/onthefly/read_transform.py +11 -9
  209. junifer/onthefly/tests/test_read_transform.py +7 -7
  210. junifer/pipeline/__init__.pyi +4 -2
  211. junifer/pipeline/marker_collection.py +14 -10
  212. junifer/pipeline/pipeline_component_registry.py +25 -6
  213. junifer/pipeline/pipeline_step_mixin.py +5 -12
  214. junifer/pipeline/tests/test_data_object_dumper.py +10 -10
  215. junifer/pipeline/tests/test_marker_collection.py +145 -168
  216. junifer/pipeline/tests/test_pipeline_component_registry.py +52 -8
  217. junifer/pipeline/tests/test_pipeline_step_mixin.py +12 -26
  218. junifer/pipeline/tests/test_update_meta_mixin.py +4 -5
  219. junifer/pipeline/tests/test_workdir_manager.py +39 -0
  220. junifer/pipeline/update_meta_mixin.py +13 -10
  221. junifer/pipeline/utils.py +22 -17
  222. junifer/pipeline/workdir_manager.py +41 -32
  223. junifer/preprocess/__init__.pyi +9 -4
  224. junifer/preprocess/_temporal_filter.py +34 -33
  225. junifer/preprocess/_temporal_slicer.py +17 -30
  226. junifer/preprocess/base.py +99 -55
  227. junifer/preprocess/confounds/__init__.pyi +10 -2
  228. junifer/preprocess/confounds/fmriprep_confound_remover.py +87 -109
  229. junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +64 -45
  230. junifer/preprocess/smoothing/__init__.pyi +2 -2
  231. junifer/preprocess/smoothing/_afni_smoothing.py +8 -7
  232. junifer/preprocess/smoothing/_fsl_smoothing.py +6 -4
  233. junifer/preprocess/smoothing/_nilearn_smoothing.py +7 -5
  234. junifer/preprocess/smoothing/smoothing.py +59 -40
  235. junifer/preprocess/smoothing/tests/test_smoothing.py +28 -8
  236. junifer/preprocess/tests/test_preprocess_base.py +17 -9
  237. junifer/preprocess/tests/test_temporal_filter.py +37 -16
  238. junifer/preprocess/tests/test_temporal_slicer.py +12 -12
  239. junifer/preprocess/warping/__init__.pyi +2 -2
  240. junifer/preprocess/warping/_ants_warper.py +56 -40
  241. junifer/preprocess/warping/_fsl_warper.py +49 -36
  242. junifer/preprocess/warping/_utils.py +106 -0
  243. junifer/preprocess/warping/space_warper.py +99 -98
  244. junifer/preprocess/warping/tests/test_space_warper.py +46 -41
  245. junifer/preprocess/warping/tests/test_warping_utils.py +163 -0
  246. junifer/stats.py +46 -34
  247. junifer/storage/__init__.pyi +8 -4
  248. junifer/storage/base.py +129 -64
  249. junifer/storage/hdf5.py +307 -199
  250. junifer/storage/pandas_base.py +46 -24
  251. junifer/storage/sqlite.py +99 -62
  252. junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  253. junifer/storage/tests/test_hdf5.py +147 -12
  254. junifer/storage/tests/test_repeated_storage.py +293 -0
  255. junifer/storage/tests/test_sqlite.py +9 -20
  256. junifer/storage/tests/test_storage_base.py +18 -21
  257. junifer/storage/tests/test_utils.py +83 -22
  258. junifer/storage/utils.py +58 -38
  259. junifer/testing/__init__.pyi +2 -2
  260. junifer/testing/datagrabbers.py +480 -44
  261. junifer/testing/registry.py +12 -0
  262. junifer/testing/tests/test_adhdtesting_datagrabber.py +24 -0
  263. junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +5 -0
  264. junifer/testing/tests/test_partlycloudytesting_datagrabber.py +52 -0
  265. junifer/testing/tests/test_spmauditory_datagrabber.py +16 -0
  266. junifer/testing/tests/test_testing_registry.py +31 -0
  267. junifer/testing/tests/test_testing_utils.py +35 -0
  268. junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +81 -0
  269. junifer/testing/utils.py +33 -1
  270. junifer/tests/test_stats.py +1 -5
  271. junifer/typing/__init__.pyi +2 -0
  272. junifer/typing/_typing.py +34 -19
  273. junifer/typing/py.typed +0 -0
  274. junifer/utils/__init__.pyi +10 -1
  275. junifer/utils/_config.py +1 -2
  276. junifer/utils/helpers.py +68 -2
  277. junifer/utils/logging.py +31 -7
  278. junifer/utils/tests/test_helpers.py +36 -1
  279. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/METADATA +43 -35
  280. junifer-0.0.8.dist-info/RECORD +402 -0
  281. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/WHEEL +1 -1
  282. junifer/cli/tests/test_parser.py +0 -280
  283. junifer/external/h5io/h5io/__init__.py +0 -15
  284. junifer/external/h5io/h5io/_h5io.py +0 -767
  285. junifer/external/h5io/h5io/_version.py +0 -1
  286. junifer/external/h5io/h5io/chunked_array.py +0 -94
  287. junifer/external/h5io/h5io/chunked_list.py +0 -65
  288. junifer/markers/complexity/__init__.pyi +0 -17
  289. junifer-0.0.7.dev332.dist-info/RECORD +0 -353
  290. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/entry_points.txt +0 -0
  291. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/licenses/AUTHORS.rst +0 -0
  292. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/licenses/LICENSE.md +0 -0
  293. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/top_level.txt +0 -0
@@ -4,14 +4,17 @@
4
4
  # Kaustubh R. Patil <k.patil@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from typing import Any, ClassVar, Optional, Union
7
+ from typing import Annotated, Any, ClassVar
8
8
 
9
9
  import pandas as pd
10
+ from pydantic import BeforeValidator
10
11
 
11
12
  from ...api.decorators import register_marker
13
+ from ...datagrabber import DataType
14
+ from ...storage import StorageType
12
15
  from ...typing import Dependencies, MarkerInOutMappings
13
- from ...utils import logger, raise_error
14
- from ..base import BaseMarker
16
+ from ...utils import ensure_list_or_none, raise_error
17
+ from ..base import BaseMarker, logger
15
18
  from ..parcel_aggregation import ParcelAggregation
16
19
  from ..utils import _correlate_dataframes
17
20
 
@@ -30,60 +33,55 @@ class CrossParcellationFC(BaseMarker):
30
33
  parcellation_two : str
31
34
  The name of the second parcellation.
32
35
  agg_method : str, optional
33
- The method to perform aggregation using.
36
+ The aggregation function to use.
34
37
  See :func:`.get_aggfunc_by_name` for options
35
38
  (default "mean").
36
39
  agg_method_params : dict, optional
37
- Parameters to pass to the aggregation function.
40
+ The parameters to pass to the aggregation function.
38
41
  See :func:`.get_aggfunc_by_name` for options
39
42
  (default None).
40
43
  corr_method : str, optional
41
44
  Any method that can be passed to
42
45
  :meth:`pandas.DataFrame.corr` (default "pearson").
43
- masks : str, dict or list of dict or str, optional
46
+ masks : str, dict, list of them or None, optional
44
47
  The specification of the masks to apply to regions before extracting
45
48
  signals. Check :ref:`Using Masks <using_masks>` for more details.
46
49
  If None, will not apply any mask (default None).
47
- name : str, optional
48
- The name of the marker. If None, will use
49
- ``BOLD_CrossParcellationFC`` (default None).
50
+ name : str or None, optional
51
+ The name of the marker.
52
+ If None, will use the class name (default None).
50
53
 
51
54
  """
52
55
 
53
56
  _DEPENDENCIES: ClassVar[Dependencies] = {"nilearn"}
54
57
 
55
58
  _MARKER_INOUT_MAPPINGS: ClassVar[MarkerInOutMappings] = {
56
- "BOLD": {
57
- "functional_connectivity": "matrix",
59
+ DataType.BOLD: {
60
+ "functional_connectivity": StorageType.Matrix,
58
61
  },
59
62
  }
60
63
 
61
- def __init__(
62
- self,
63
- parcellation_one: str,
64
- parcellation_two: str,
65
- agg_method: str = "mean",
66
- agg_method_params: Optional[dict] = None,
67
- corr_method: str = "pearson",
68
- masks: Union[str, dict, list[Union[dict, str]], None] = None,
69
- name: Optional[str] = None,
70
- ) -> None:
71
- if parcellation_one == parcellation_two:
64
+ parcellation_one: str
65
+ parcellation_two: str
66
+ agg_method: str = "mean"
67
+ agg_method_params: dict | None = None
68
+ corr_method: str = "pearson"
69
+ masks: Annotated[
70
+ dict | str | list[dict | str] | None,
71
+ BeforeValidator(ensure_list_or_none),
72
+ ] = None
73
+
74
+ def validate_marker_params(self) -> None:
75
+ """Run extra logical validation for marker."""
76
+ if self.parcellation_one == self.parcellation_two:
72
77
  raise_error(
73
78
  "The two parcellations must be different.",
74
79
  )
75
- self.parcellation_one = parcellation_one
76
- self.parcellation_two = parcellation_two
77
- self.agg_method = agg_method
78
- self.agg_method_params = agg_method_params
79
- self.corr_method = corr_method
80
- self.masks = masks
81
- super().__init__(on=["BOLD"], name=name)
82
80
 
83
81
  def compute(
84
82
  self,
85
83
  input: dict[str, Any],
86
- extra_input: Optional[dict] = None,
84
+ extra_input: dict | None = None,
87
85
  ) -> dict:
88
86
  """Compute.
89
87
 
@@ -123,18 +121,18 @@ class CrossParcellationFC(BaseMarker):
123
121
  )
124
122
  # Perform aggregation using two parcellations
125
123
  aggregation_parcellation_one = ParcelAggregation(
126
- parcellation=self.parcellation_one,
124
+ parcellation=[self.parcellation_one],
127
125
  method=self.agg_method,
128
126
  method_params=self.agg_method_params,
129
127
  masks=self.masks,
130
- on="BOLD",
128
+ on=DataType.BOLD,
131
129
  ).compute(input, extra_input=extra_input)
132
130
  aggregation_parcellation_two = ParcelAggregation(
133
- parcellation=self.parcellation_two,
131
+ parcellation=[self.parcellation_two],
134
132
  method=self.agg_method,
135
133
  method_params=self.agg_method_params,
136
134
  masks=self.masks,
137
- on="BOLD",
135
+ on=DataType.BOLD,
138
136
  ).compute(input, extra_input=extra_input)
139
137
 
140
138
  return {
@@ -3,9 +3,10 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from typing import Any, Optional, Union
6
+ from typing import Any
7
7
 
8
8
  from ...api.decorators import register_marker
9
+ from ...datagrabber import DataType
9
10
  from ..maps_aggregation import MapsAggregation
10
11
  from ..utils import _ets
11
12
  from .functional_connectivity_base import FunctionalConnectivityBase
@@ -24,23 +25,23 @@ class EdgeCentricFCMaps(FunctionalConnectivityBase):
24
25
  The name of the map(s) to use.
25
26
  See :func:`.list_data` for options.
26
27
  conn_method : str, optional
27
- The method to perform connectivity measure using.
28
+ The connectivity measure to use.
28
29
  See :class:`.JuniferConnectivityMeasure` for options
29
30
  (default "correlation").
30
- conn_method_params : dict, optional
31
- Parameters to pass to :class:`.JuniferConnectivityMeasure`.
31
+ conn_method_params : dict or None, optional
32
+ The parameters to pass to :class:`.JuniferConnectivityMeasure`.
32
33
  If None, ``{"empirical": True}`` will be used, which would mean
33
34
  :class:`sklearn.covariance.EmpiricalCovariance` is used to compute
34
35
  covariance. If usage of :class:`sklearn.covariance.LedoitWolf` is
35
36
  desired, ``{"empirical": False}`` should be passed
36
37
  (default None).
37
- masks : str, dict or list of dict or str, optional
38
+ masks : str, dict, list of them or None, optional
38
39
  The specification of the masks to apply to regions before extracting
39
40
  signals. Check :ref:`Using Masks <using_masks>` for more details.
40
41
  If None, will not apply any mask (default None).
41
- name : str, optional
42
- The name of the marker. If None, will use
43
- ``BOLD_EdgeCentricFCParcels`` (default None).
42
+ name : str or None, optional
43
+ The name of the marker.
44
+ If None, will use the class name (default None).
44
45
 
45
46
  References
46
47
  ----------
@@ -50,24 +51,10 @@ class EdgeCentricFCMaps(FunctionalConnectivityBase):
50
51
 
51
52
  """
52
53
 
53
- def __init__(
54
- self,
55
- maps: str,
56
- conn_method: str = "correlation",
57
- conn_method_params: Optional[dict] = None,
58
- masks: Union[str, dict, list[Union[dict, str]], None] = None,
59
- name: Optional[str] = None,
60
- ) -> None:
61
- self.maps = maps
62
- super().__init__(
63
- conn_method=conn_method,
64
- conn_method_params=conn_method_params,
65
- masks=masks,
66
- name=name,
67
- )
54
+ maps: str
68
55
 
69
56
  def aggregate(
70
- self, input: dict[str, Any], extra_input: Optional[dict] = None
57
+ self, input: dict[str, Any], extra_input: dict | None = None
71
58
  ) -> dict:
72
59
  """Perform maps aggregation and ETS computation.
73
60
 
@@ -99,7 +86,7 @@ class EdgeCentricFCMaps(FunctionalConnectivityBase):
99
86
  aggregation = MapsAggregation(
100
87
  maps=self.maps,
101
88
  masks=self.masks,
102
- on="BOLD",
89
+ on=DataType.BOLD,
103
90
  ).compute(input, extra_input=extra_input)
104
91
  # Compute edgewise timeseries
105
92
  ets, edge_names = _ets(
@@ -4,9 +4,13 @@
4
4
  # Synchon Mandal <s.mandal@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from typing import Any, Optional, Union
7
+ from typing import Annotated, Any
8
+
9
+ from pydantic import BeforeValidator
8
10
 
9
11
  from ...api.decorators import register_marker
12
+ from ...datagrabber import DataType
13
+ from ...utils import ensure_list
10
14
  from ..parcel_aggregation import ParcelAggregation
11
15
  from ..utils import _ets
12
16
  from .functional_connectivity_base import FunctionalConnectivityBase
@@ -25,31 +29,30 @@ class EdgeCentricFCParcels(FunctionalConnectivityBase):
25
29
  The name(s) of the parcellation(s) to use.
26
30
  See :func:`.list_data` for options.
27
31
  agg_method : str, optional
28
- The method to perform aggregation using.
32
+ The aggregation function to use.
29
33
  See :func:`.get_aggfunc_by_name` for options
30
34
  (default "mean").
31
- agg_method_params : dict, optional
32
- Parameters to pass to the aggregation function.
33
- See :func:`.get_aggfunc_by_name` for options
34
- (default None).
35
+ agg_method_params : dict or None, optional
36
+ The parameters to pass to the aggregation function.
37
+ See :func:`.get_aggfunc_by_name` for options (default None).
35
38
  conn_method : str, optional
36
- The method to perform connectivity measure using.
39
+ The connectivity measure to use.
37
40
  See :class:`.JuniferConnectivityMeasure` for options
38
41
  (default "correlation").
39
- conn_method_params : dict, optional
40
- Parameters to pass to :class:`.JuniferConnectivityMeasure`.
42
+ conn_method_params : dict or None, optional
43
+ The parameters to pass to :class:`.JuniferConnectivityMeasure`.
41
44
  If None, ``{"empirical": True}`` will be used, which would mean
42
45
  :class:`sklearn.covariance.EmpiricalCovariance` is used to compute
43
46
  covariance. If usage of :class:`sklearn.covariance.LedoitWolf` is
44
47
  desired, ``{"empirical": False}`` should be passed
45
48
  (default None).
46
- masks : str, dict or list of dict or str, optional
49
+ masks : str, dict, list of them or None, optional
47
50
  The specification of the masks to apply to regions before extracting
48
51
  signals. Check :ref:`Using Masks <using_masks>` for more details.
49
52
  If None, will not apply any mask (default None).
50
- name : str, optional
51
- The name of the marker. If None, will use
52
- ``BOLD_EdgeCentricFCParcels`` (default None).
53
+ name : str or None, optional
54
+ The name of the marker.
55
+ If None, will use the class name (default None).
53
56
 
54
57
  References
55
58
  ----------
@@ -59,28 +62,10 @@ class EdgeCentricFCParcels(FunctionalConnectivityBase):
59
62
 
60
63
  """
61
64
 
62
- def __init__(
63
- self,
64
- parcellation: Union[str, list[str]],
65
- agg_method: str = "mean",
66
- agg_method_params: Optional[dict] = None,
67
- conn_method: str = "correlation",
68
- conn_method_params: Optional[dict] = None,
69
- masks: Union[str, dict, list[Union[dict, str]], None] = None,
70
- name: Optional[str] = None,
71
- ) -> None:
72
- self.parcellation = parcellation
73
- super().__init__(
74
- agg_method=agg_method,
75
- agg_method_params=agg_method_params,
76
- conn_method=conn_method,
77
- conn_method_params=conn_method_params,
78
- masks=masks,
79
- name=name,
80
- )
65
+ parcellation: Annotated[str | list[str], BeforeValidator(ensure_list)]
81
66
 
82
67
  def aggregate(
83
- self, input: dict[str, Any], extra_input: Optional[dict] = None
68
+ self, input: dict[str, Any], extra_input: dict | None = None
84
69
  ) -> dict:
85
70
  """Perform parcel aggregation and ETS computation.
86
71
 
@@ -114,7 +99,7 @@ class EdgeCentricFCParcels(FunctionalConnectivityBase):
114
99
  method=self.agg_method,
115
100
  method_params=self.agg_method_params,
116
101
  masks=self.masks,
117
- on="BOLD",
102
+ on=DataType.BOLD,
118
103
  ).compute(input, extra_input=extra_input)
119
104
  # Compute edgewise timeseries
120
105
  ets, edge_names = _ets(
@@ -4,11 +4,14 @@
4
4
  # Synchon Mandal <s.mandal@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from typing import Any, Optional, Union
7
+ from typing import Any, Literal
8
+
9
+ from pydantic import PositiveFloat
8
10
 
9
11
  from ...api.decorators import register_marker
12
+ from ...datagrabber import DataType
10
13
  from ..sphere_aggregation import SphereAggregation
11
- from ..utils import _ets, raise_error
14
+ from ..utils import _ets
12
15
  from .functional_connectivity_base import FunctionalConnectivityBase
13
16
 
14
17
 
@@ -24,40 +27,39 @@ class EdgeCentricFCSpheres(FunctionalConnectivityBase):
24
27
  coords : str
25
28
  The name of the coordinates list to use.
26
29
  See :func:`.list_data` for options.
27
- radius : positive float, optional
28
- The radius of the sphere around each coordinates in millimetres.
30
+ radius : ``zero`` or positive float or None, optional
31
+ The radius of the sphere in millimetres.
29
32
  If None, the signal will be extracted from a single voxel.
30
33
  See :class:`.JuniferNiftiSpheresMasker` for more information
31
34
  (default None).
32
35
  allow_overlap : bool, optional
33
- Whether to allow overlapping spheres. If False, an error is raised if
34
- the spheres overlap (default False).
36
+ Whether to allow overlapping spheres.
37
+ If False, an error is raised if the spheres overlap (default False).
35
38
  agg_method : str, optional
36
- The method to perform aggregation using.
39
+ The aggregation function to use.
37
40
  See :func:`.get_aggfunc_by_name` for options
38
41
  (default "mean").
39
42
  agg_method_params : dict, optional
40
- Parameters to pass to the aggregation function.
41
- See :func:`.get_aggfunc_by_name` for options
42
- (default None).
43
+ The parameters to pass to the aggregation function.
44
+ See :func:`.get_aggfunc_by_name` for options (default None).
43
45
  conn_method : str, optional
44
- The method to perform connectivity measure using.
46
+ The connectivity measure to use.
45
47
  See :class:`.JuniferConnectivityMeasure` for options
46
48
  (default "correlation").
47
- conn_method_params : dict, optional
48
- Parameters to pass to :class:`.JuniferConnectivityMeasure`.
49
+ conn_method_params : dict or None, optional
50
+ The parameters to pass to :class:`.JuniferConnectivityMeasure`.
49
51
  If None, ``{"empirical": True}`` will be used, which would mean
50
52
  :class:`sklearn.covariance.EmpiricalCovariance` is used to compute
51
53
  covariance. If usage of :class:`sklearn.covariance.LedoitWolf` is
52
54
  desired, ``{"empirical": False}`` should be passed
53
55
  (default None).
54
- masks : str, dict or list of dict or str, optional
56
+ masks : str, dict, list of them or None, optional
55
57
  The specification of the masks to apply to regions before extracting
56
58
  signals. Check :ref:`Using Masks <using_masks>` for more details.
57
59
  If None, will not apply any mask (default None).
58
- name : str, optional
59
- The name of the marker. If None, will use
60
- ``BOLD_EdgeCentricFCSpheres`` (default None).
60
+ name : str or None, optional
61
+ The name of the marker.
62
+ If None, will use the class name (default None).
61
63
 
62
64
  References
63
65
  ----------
@@ -67,34 +69,12 @@ class EdgeCentricFCSpheres(FunctionalConnectivityBase):
67
69
 
68
70
  """
69
71
 
70
- def __init__(
71
- self,
72
- coords: str,
73
- radius: Optional[float] = None,
74
- allow_overlap: bool = False,
75
- agg_method: str = "mean",
76
- agg_method_params: Optional[dict] = None,
77
- conn_method: str = "correlation",
78
- conn_method_params: Optional[dict] = None,
79
- masks: Union[str, dict, list[Union[dict, str]], None] = None,
80
- name: Optional[str] = None,
81
- ) -> None:
82
- self.coords = coords
83
- self.radius = radius
84
- self.allow_overlap = allow_overlap
85
- if radius is None or radius <= 0:
86
- raise_error(f"radius should be > 0: provided {radius}")
87
- super().__init__(
88
- agg_method=agg_method,
89
- agg_method_params=agg_method_params,
90
- conn_method=conn_method,
91
- conn_method_params=conn_method_params,
92
- masks=masks,
93
- name=name,
94
- )
72
+ coords: str
73
+ radius: Literal[0] | PositiveFloat | None = None
74
+ allow_overlap: bool = False
95
75
 
96
76
  def aggregate(
97
- self, input: dict[str, Any], extra_input: Optional[dict] = None
77
+ self, input: dict[str, Any], extra_input: dict | None = None
98
78
  ) -> dict:
99
79
  """Perform sphere aggregation and ETS computation.
100
80
 
@@ -130,7 +110,7 @@ class EdgeCentricFCSpheres(FunctionalConnectivityBase):
130
110
  method=self.agg_method,
131
111
  method_params=self.agg_method_params,
132
112
  masks=self.masks,
133
- on="BOLD",
113
+ on=DataType.BOLD,
134
114
  ).compute(input, extra_input=extra_input)
135
115
  # Compute edgewise timeseries
136
116
  ets, edge_names = _ets(
@@ -4,14 +4,19 @@
4
4
  # License: AGPL
5
5
 
6
6
  from abc import abstractmethod
7
- from typing import Any, ClassVar, Optional, Union
7
+ from typing import Annotated, Any, ClassVar
8
8
 
9
+ import numpy as np
10
+ from pydantic import BeforeValidator
9
11
  from sklearn.covariance import EmpiricalCovariance, LedoitWolf
10
12
 
13
+ from ...datagrabber import DataType
11
14
  from ...external.nilearn import JuniferConnectivityMeasure
15
+ from ...storage import MatrixKind, StorageType
12
16
  from ...typing import Dependencies, MarkerInOutMappings
13
- from ...utils import raise_error
17
+ from ...utils import ensure_list_or_none, raise_error
14
18
  from ..base import BaseMarker
19
+ from ..utils import _has_data
15
20
 
16
21
 
17
22
  __all__ = ["FunctionalConnectivityBase"]
@@ -23,67 +28,63 @@ class FunctionalConnectivityBase(BaseMarker):
23
28
  Parameters
24
29
  ----------
25
30
  agg_method : str, optional
26
- The method to perform aggregation using.
27
- Check valid options in :func:`.get_aggfunc_by_name`
31
+ The aggregation function to use.
32
+ See :func:`.get_aggfunc_by_name` for options
28
33
  (default "mean").
29
- agg_method_params : dict, optional
30
- Parameters to pass to the aggregation function.
31
- Check valid options in :func:`.get_aggfunc_by_name`
32
- (default None).
34
+ agg_method_params : dict or None, optional
35
+ The parameters to pass to the aggregation function.
36
+ See :func:`.get_aggfunc_by_name` for options (default None).
33
37
  conn_method : str, optional
34
- The method to perform connectivity measure using.
35
- Check valid options in :class:`.JuniferConnectivityMeasure`
38
+ The connectivity measure to use.
39
+ See :class:`.JuniferConnectivityMeasure` for more information
36
40
  (default "correlation").
37
- conn_method_params : dict, optional
38
- Parameters to pass to :class:`.JuniferConnectivityMeasure`.
41
+ conn_method_params : dict or None, optional
42
+ The parameters to pass to :class:`.JuniferConnectivityMeasure`.
39
43
  If None, ``{"empirical": True}`` will be used, which would mean
40
44
  :class:`sklearn.covariance.EmpiricalCovariance` is used to compute
41
45
  covariance. If usage of :class:`sklearn.covariance.LedoitWolf` is
42
46
  desired, ``{"empirical": False}`` should be passed
43
47
  (default None).
44
- masks : str, dict or list of dict or str, optional
48
+ masks : str, dict, list of them or None, optional
45
49
  The specification of the masks to apply to regions before extracting
46
50
  signals. Check :ref:`Using Masks <using_masks>` for more details.
47
51
  If None, will not apply any mask (default None).
48
- name : str, optional
49
- The name of the marker. If None, will use ``BOLD_<class_name>``
50
- (default None).
52
+ name : str or None, optional
53
+ The name of the marker.
54
+ If None, will use the class name (default None).
51
55
 
52
56
  """
53
57
 
54
58
  _DEPENDENCIES: ClassVar[Dependencies] = {"nilearn", "scikit-learn"}
55
59
 
56
60
  _MARKER_INOUT_MAPPINGS: ClassVar[MarkerInOutMappings] = {
57
- "BOLD": {
58
- "functional_connectivity": "matrix",
61
+ DataType.BOLD: {
62
+ "functional_connectivity": StorageType.Matrix,
59
63
  },
60
64
  }
61
65
 
62
- def __init__(
63
- self,
64
- agg_method: str = "mean",
65
- agg_method_params: Optional[dict] = None,
66
- conn_method: str = "correlation",
67
- conn_method_params: Optional[dict] = None,
68
- masks: Union[str, dict, list[Union[dict, str]], None] = None,
69
- name: Optional[str] = None,
70
- ) -> None:
71
- self.agg_method = agg_method
72
- self.agg_method_params = agg_method_params
73
- self.conn_method = conn_method
74
- self.conn_method_params = conn_method_params or {}
66
+ agg_method: str = "mean"
67
+ agg_method_params: dict | None = None
68
+ conn_method: str = "correlation"
69
+ conn_method_params: dict | None = None
70
+ masks: Annotated[
71
+ dict | str | list[dict | str] | None,
72
+ BeforeValidator(ensure_list_or_none),
73
+ ] = None
74
+
75
+ def validate_marker_params(self) -> None:
76
+ """Run extra logical validation for marker."""
77
+ self.conn_method_params = self.conn_method_params or {}
75
78
  # Reverse of nilearn behavior
76
79
  self.conn_method_params["empirical"] = self.conn_method_params.get(
77
80
  "empirical", True
78
81
  )
79
- self.masks = masks
80
- super().__init__(on="BOLD", name=name)
81
82
 
82
83
  @abstractmethod
83
84
  def aggregate(
84
85
  self,
85
86
  input: dict[str, Any],
86
- extra_input: Optional[dict[str, Any]] = None,
87
+ extra_input: dict[str, Any] | None = None,
87
88
  ) -> dict[str, Any]:
88
89
  """Perform aggregation."""
89
90
  raise_error(
@@ -94,7 +95,7 @@ class FunctionalConnectivityBase(BaseMarker):
94
95
  def compute(
95
96
  self,
96
97
  input: dict[str, Any],
97
- extra_input: Optional[dict] = None,
98
+ extra_input: dict | None = None,
98
99
  ) -> dict:
99
100
  """Compute.
100
101
 
@@ -121,7 +122,7 @@ class FunctionalConnectivityBase(BaseMarker):
121
122
  - ``data`` : functional connectivity matrix as ``numpy.ndarray``
122
123
  - ``row_names`` : ROI labels as list of str
123
124
  - ``col_names`` : ROI labels as list of str
124
- - ``matrix_kind`` : the kind of matrix (tril, triu or full)
125
+ - ``matrix_kind`` : :enum:`.MatrixKind`
125
126
 
126
127
  """
127
128
  # Perform necessary aggregation
@@ -141,18 +142,27 @@ class FunctionalConnectivityBase(BaseMarker):
141
142
  if k != "empirical"
142
143
  },
143
144
  )
145
+ # Compute on the columns with data (e.g. regions lost in
146
+ # resampling have none) and set the others to NaN
147
+ data = aggregation["aggregation"]["data"]
148
+ has_data = _has_data(data)
149
+ conn = np.full((data.shape[1], data.shape[1]), np.nan)
150
+ if has_data.any():
151
+ conn[np.ix_(has_data, has_data)] = connectivity.fit_transform(
152
+ [data[:, has_data]]
153
+ )[0]
144
154
  # Create dictionary for output
145
155
  labels = aggregation["aggregation"]["col_names"]
146
156
  return {
147
157
  "functional_connectivity": {
148
- "data": connectivity.fit_transform(
149
- [aggregation["aggregation"]["data"]]
150
- )[0],
158
+ "data": conn,
151
159
  "row_names": labels,
152
160
  "col_names": labels,
153
161
  # xi correlation coefficient is not symmetric
154
162
  "matrix_kind": (
155
- "full" if self.conn_method == "xi correlation" else "tril"
163
+ MatrixKind.Full
164
+ if self.conn_method == "xi correlation"
165
+ else MatrixKind.LowerTriangle
156
166
  ),
157
167
  },
158
168
  }
@@ -3,9 +3,10 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from typing import Any, Optional, Union
6
+ from typing import Any
7
7
 
8
8
  from ...api.decorators import register_marker
9
+ from ...datagrabber import DataType
9
10
  from ..maps_aggregation import MapsAggregation
10
11
  from .functional_connectivity_base import FunctionalConnectivityBase
11
12
 
@@ -23,44 +24,30 @@ class FunctionalConnectivityMaps(FunctionalConnectivityBase):
23
24
  The name of the map(s) to use.
24
25
  See :func:`.list_data` for options.
25
26
  conn_method : str, optional
26
- The method to perform connectivity measure using.
27
+ The connectivity measure to use.
27
28
  See :class:`.JuniferConnectivityMeasure` for options
28
29
  (default "correlation").
29
- conn_method_params : dict, optional
30
- Parameters to pass to :class:`.JuniferConnectivityMeasure`.
30
+ conn_method_params : dict or None, optional
31
+ The parameters to pass to :class:`.JuniferConnectivityMeasure`.
31
32
  If None, ``{"empirical": True}`` will be used, which would mean
32
33
  :class:`sklearn.covariance.EmpiricalCovariance` is used to compute
33
34
  covariance. If usage of :class:`sklearn.covariance.LedoitWolf` is
34
35
  desired, ``{"empirical": False}`` should be passed
35
36
  (default None).
36
- masks : str, dict or list of dict or str, optional
37
+ masks : str, dict, list of them or None, optional
37
38
  The specification of the masks to apply to regions before extracting
38
39
  signals. Check :ref:`Using Masks <using_masks>` for more details.
39
40
  If None, will not apply any mask (default None).
40
- name : str, optional
41
- The name of the marker. If None, will use
42
- ``BOLD_FunctionalConnectivityMaps`` (default None).
41
+ name : str or None, optional
42
+ The name of the marker.
43
+ If None, will use the class name (default None).
43
44
 
44
45
  """
45
46
 
46
- def __init__(
47
- self,
48
- maps: str,
49
- conn_method: str = "correlation",
50
- conn_method_params: Optional[dict] = None,
51
- masks: Union[str, dict, list[Union[dict, str]], None] = None,
52
- name: Optional[str] = None,
53
- ) -> None:
54
- self.maps = maps
55
- super().__init__(
56
- conn_method=conn_method,
57
- conn_method_params=conn_method_params,
58
- masks=masks,
59
- name=name,
60
- )
47
+ maps: str
61
48
 
62
49
  def aggregate(
63
- self, input: dict[str, Any], extra_input: Optional[dict] = None
50
+ self, input: dict[str, Any], extra_input: dict | None = None
64
51
  ) -> dict:
65
52
  """Perform maps aggregation.
66
53
 
@@ -91,5 +78,5 @@ class FunctionalConnectivityMaps(FunctionalConnectivityBase):
91
78
  return MapsAggregation(
92
79
  maps=self.maps,
93
80
  masks=self.masks,
94
- on="BOLD",
81
+ on=DataType.BOLD,
95
82
  ).compute(input=input, extra_input=extra_input)