junifer 0.0.4.dev565__py3-none-any.whl → 0.0.4.dev587__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.
junifer/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.0.4.dev565'
16
- __version_tuple__ = version_tuple = (0, 0, 4, 'dev565')
15
+ __version__ = version = '0.0.4.dev587'
16
+ __version_tuple__ = version_tuple = (0, 0, 4, 'dev587')
@@ -44,6 +44,7 @@ def test_get_dependency_information_short() -> None:
44
44
  "ruamel.yaml",
45
45
  "httpx",
46
46
  "tqdm",
47
+ "templateflow",
47
48
  ]
48
49
  if int(pl.python_version_tuple()[1]) < 10:
49
50
  dependency_list.append("importlib_metadata")
@@ -68,6 +69,7 @@ def test_get_dependency_information_long() -> None:
68
69
  "ruamel.yaml",
69
70
  "httpx",
70
71
  "tqdm",
72
+ "templateflow",
71
73
  ]
72
74
  for key in dependency_list:
73
75
  assert key in dependency_information_keys
junifer/data/__init__.py CHANGED
@@ -25,6 +25,6 @@ from .masks import (
25
25
  get_mask,
26
26
  )
27
27
 
28
- from .template_spaces import get_xfm
28
+ from .template_spaces import get_template, get_xfm
29
29
 
30
30
  from . import utils
@@ -4,11 +4,15 @@
4
4
  # License: AGPL
5
5
 
6
6
  from pathlib import Path
7
- from typing import Union
7
+ from typing import Any, Dict, Optional, Union
8
8
 
9
9
  import httpx
10
+ import nibabel as nib
11
+ import numpy as np
12
+ from templateflow import api as tflow
10
13
 
11
14
  from ..utils import logger, raise_error
15
+ from .utils import closest_resolution
12
16
 
13
17
 
14
18
  def get_xfm(
@@ -89,3 +93,71 @@ def get_xfm(
89
93
  f.write(chunk)
90
94
 
91
95
  return xfm_file_path
96
+
97
+
98
+ def get_template(
99
+ space: str,
100
+ target_data: Dict[str, Any],
101
+ extra_input: Optional[Dict[str, Any]] = None,
102
+ ) -> nib.Nifti1Image:
103
+ """Get template for the space, tailored for the target image.
104
+
105
+ Parameters
106
+ ----------
107
+ space : str
108
+ The name of the template space.
109
+ target_data : dict
110
+ The corresponding item of the data object for which the template space
111
+ will be loaded.
112
+ extra_input : dict, optional
113
+ The other fields in the data object. Useful for accessing other data
114
+ types (default None).
115
+
116
+ Returns
117
+ -------
118
+ Nifti1Image
119
+ The template image.
120
+
121
+ Raises
122
+ ------
123
+ ValueError
124
+ If ``space`` is invalid.
125
+ RuntimeError
126
+ If template in the required resolution is not found.
127
+
128
+ """
129
+ # Check for invalid space; early check to raise proper error
130
+ if space not in tflow.templates():
131
+ raise_error(f"Unknown template space: {space}")
132
+
133
+ # Get the min of the voxels sizes and use it as the resolution
134
+ target_img = target_data["data"]
135
+ resolution = np.min(target_img.header.get_zooms()[:3]).astype(int)
136
+
137
+ # Fetch available resolutions for the template
138
+ available_resolutions = [
139
+ int(min(val["zooms"]))
140
+ for val in tflow.get_metadata(space)["res"].values()
141
+ ]
142
+ # Use the closest resolution if desired resolution is not found
143
+ resolution = closest_resolution(resolution, available_resolutions)
144
+
145
+ logger.info(f"Downloading template {space} in resolution {resolution}")
146
+ # Retrieve template
147
+ try:
148
+ template_path = tflow.get(
149
+ space,
150
+ raise_empty=True,
151
+ resolution=resolution,
152
+ suffix="T1w",
153
+ desc=None,
154
+ extension="nii.gz",
155
+ )
156
+ except Exception: # noqa: BLE001
157
+ raise_error(
158
+ f"Template {space} not found in the required resolution "
159
+ f"{resolution}",
160
+ klass=RuntimeError,
161
+ )
162
+ else:
163
+ return nib.load(template_path) # type: ignore
@@ -6,9 +6,12 @@
6
6
  import socket
7
7
  from pathlib import Path
8
8
 
9
+ import nibabel as nib
9
10
  import pytest
10
11
 
11
- from junifer.data import get_xfm
12
+ from junifer.data import get_template, get_xfm
13
+ from junifer.datareader import DefaultDataReader
14
+ from junifer.testing.datagrabbers import OasisVBMTestingDataGrabber
12
15
 
13
16
 
14
17
  @pytest.mark.skipif(
@@ -28,3 +31,39 @@ def test_get_xfm(tmp_path: Path) -> None:
28
31
  src="MNI152NLin6Asym", dst="MNI152NLin2009cAsym", xfms_dir=tmp_path
29
32
  )
30
33
  assert isinstance(xfm_path, Path)
34
+
35
+
36
+ def test_get_template() -> None:
37
+ """Test tailored template image fetch."""
38
+ with OasisVBMTestingDataGrabber() as dg:
39
+ element = dg["sub-01"]
40
+ element_data = DefaultDataReader().fit_transform(element)
41
+ vbm_gm = element_data["VBM_GM"]
42
+ # Get tailored parcellation
43
+ tailored_template = get_template(
44
+ space=vbm_gm["space"], target_data=vbm_gm
45
+ )
46
+ assert isinstance(tailored_template, nib.Nifti1Image)
47
+
48
+
49
+ def test_get_template_invalid_space() -> None:
50
+ """Test invalid space check for template fetch."""
51
+ with OasisVBMTestingDataGrabber() as dg:
52
+ element = dg["sub-01"]
53
+ element_data = DefaultDataReader().fit_transform(element)
54
+ vbm_gm = element_data["VBM_GM"]
55
+ # Get tailored parcellation
56
+ with pytest.raises(ValueError, match="Unknown template space:"):
57
+ _ = get_template(space="andromeda", target_data=vbm_gm)
58
+
59
+
60
+ def test_get_template_closest_resolution() -> None:
61
+ """Test closest resolution check for template fetch."""
62
+ with OasisVBMTestingDataGrabber() as dg:
63
+ element = dg["sub-01"]
64
+ element_data = DefaultDataReader().fit_transform(element)
65
+ vbm_gm = element_data["VBM_GM"]
66
+ # Change header resolution to fetch closest resolution
67
+ element_data["VBM_GM"]["data"].header.set_zooms((3, 3, 3))
68
+ template = get_template(space=vbm_gm["space"], target_data=vbm_gm)
69
+ assert isinstance(template, nib.Nifti1Image)
junifer/data/utils.py CHANGED
@@ -8,14 +8,14 @@ from ..utils.logging import logger
8
8
 
9
9
 
10
10
  def closest_resolution(
11
- resolution: Optional[float],
11
+ resolution: Optional[Union[float, int]],
12
12
  valid_resolution: Union[List[float], List[int], np.ndarray],
13
13
  ) -> Union[float, int]:
14
14
  """Find the closest resolution.
15
15
 
16
16
  Parameters
17
17
  ----------
18
- resolution : float, optional
18
+ resolution : float or int, optional
19
19
  The given resolution. If None, will return the highest resolution
20
20
  (default None).
21
21
  valid_resolution : list of float or int, or np.ndarray
@@ -13,8 +13,13 @@ from typing import (
13
13
  Union,
14
14
  )
15
15
 
16
+ import nibabel as nib
17
+ from templateflow import api as tflow
18
+
16
19
  from ..api.decorators import register_preprocessor
17
- from ..utils import logger, raise_error
20
+ from ..data import get_template, get_xfm
21
+ from ..pipeline import WorkDirManager
22
+ from ..utils import logger, raise_error, run_ext_cmd
18
23
  from .ants.ants_apply_transforms_warper import _AntsApplyTransformsWarper
19
24
  from .base import BasePreprocessor
20
25
  from .fsl.apply_warper import _ApplyWarper
@@ -27,7 +32,13 @@ class BOLDWarper(BasePreprocessor):
27
32
  Parameters
28
33
  ----------
29
34
  reference : str
30
- The data type to use as reference for warping.
35
+ The data type to use as reference for warping, can be either a data
36
+ type like "T1w" or a template space like "MNI152NLin2009cAsym".
37
+
38
+ Raises
39
+ ------
40
+ ValueError
41
+ If ``reference`` is invalid.
31
42
 
32
43
  """
33
44
 
@@ -49,9 +60,15 @@ class BOLDWarper(BasePreprocessor):
49
60
  def __init__(self, reference: str) -> None:
50
61
  """Initialize the class."""
51
62
  self.ref = reference
52
- super().__init__(
53
- on="BOLD", required_data_types=["BOLD", self.ref, "Warp"]
54
- )
63
+ # Initialize superclass based on reference
64
+ if self.ref == "T1w":
65
+ super().__init__(
66
+ on="BOLD", required_data_types=["BOLD", self.ref, "Warp"]
67
+ )
68
+ elif self.ref in tflow.templates():
69
+ super().__init__(on="BOLD", required_data_types=["BOLD"])
70
+ else:
71
+ raise_error(f"Unknown reference: {self.ref}")
55
72
 
56
73
  def get_valid_inputs(self) -> List[str]:
57
74
  """Get valid data types for input.
@@ -97,7 +114,8 @@ class BOLDWarper(BasePreprocessor):
97
114
  The BOLD input from the Junifer Data object.
98
115
  extra_input : dict, optional
99
116
  The other fields in the Junifer Data object. Must include the
100
- ``Warp`` and ``ref`` value's keys.
117
+ ``Warp`` and ``ref`` value's keys if native space transformation is
118
+ needed.
101
119
 
102
120
  Returns
103
121
  -------
@@ -110,46 +128,117 @@ class BOLDWarper(BasePreprocessor):
110
128
  Raises
111
129
  ------
112
130
  ValueError
113
- If ``extra_input`` is None.
131
+ If ``extra_input`` is None when transforming to native space
132
+ i.e., using "T1w" as reference.
114
133
  RuntimeError
115
- If warp / transformation file extension is not ".mat" or ".h5".
134
+ If warp / transformation file extension is not ".mat" or ".h5"
135
+ when transforming to native space or
136
+ if the BOLD data is in the correct space and does not require
137
+ warping.
116
138
 
117
139
  """
118
- logger.debug("Warping BOLD using BOLDWarper")
119
- # Check for extra inputs
120
- if extra_input is None:
121
- raise_error(
122
- f"No extra input provided, requires `Warp` and `{self.ref}` "
123
- "data types in particular."
124
- )
125
- # Check for warp file type to use correct tool
126
- warp_file_ext = extra_input["Warp"]["path"].suffix
127
- if warp_file_ext == ".mat":
128
- logger.debug("Using FSL with BOLDWarper")
129
- # Initialize ApplyWarper for computation
130
- apply_warper = _ApplyWarper(reference=self.ref, on="BOLD")
131
- # Replace original BOLD data with warped BOLD data
132
- _, input = apply_warper.preprocess(
133
- input=input,
134
- extra_input=extra_input,
135
- )
136
- elif warp_file_ext == ".h5":
137
- logger.debug("Using ANTs with BOLDWarper")
138
- # Initialize AntsApplyTransformsWarper for computation
139
- ants_apply_transforms_warper = _AntsApplyTransformsWarper(
140
- reference=self.ref, on="BOLD"
141
- )
142
- # Replace original BOLD data with warped BOLD data
143
- _, input = ants_apply_transforms_warper.preprocess(
144
- input=input,
145
- extra_input=extra_input,
146
- )
140
+ logger.info(f"Warping BOLD to {self.ref} space using BOLDWarper")
141
+ # Transform to native space
142
+ if self.ref == "T1w":
143
+ # Check for extra inputs
144
+ if extra_input is None:
145
+ raise_error(
146
+ "No extra input provided, requires `Warp` and "
147
+ f"`{self.ref}` data types in particular."
148
+ )
149
+ # Check for warp file type to use correct tool
150
+ warp_file_ext = extra_input["Warp"]["path"].suffix
151
+ if warp_file_ext == ".mat":
152
+ logger.debug("Using FSL with BOLDWarper")
153
+ # Initialize ApplyWarper for computation
154
+ apply_warper = _ApplyWarper(reference=self.ref, on="BOLD")
155
+ # Replace original BOLD data with warped BOLD data
156
+ _, input = apply_warper.preprocess(
157
+ input=input,
158
+ extra_input=extra_input,
159
+ )
160
+ elif warp_file_ext == ".h5":
161
+ logger.debug("Using ANTs with BOLDWarper")
162
+ # Initialize AntsApplyTransformsWarper for computation
163
+ ants_apply_transforms_warper = _AntsApplyTransformsWarper(
164
+ reference=self.ref, on="BOLD"
165
+ )
166
+ # Replace original BOLD data with warped BOLD data
167
+ _, input = ants_apply_transforms_warper.preprocess(
168
+ input=input,
169
+ extra_input=extra_input,
170
+ )
171
+ else:
172
+ raise_error(
173
+ msg=(
174
+ "Unknown warp / transformation file extension: "
175
+ f"{warp_file_ext}"
176
+ ),
177
+ klass=RuntimeError,
178
+ )
179
+ # Transform to template space
147
180
  else:
148
- raise_error(
149
- msg=(
150
- "Unknown warp / transformation file extension: "
151
- f"{warp_file_ext}"
152
- ),
153
- klass=RuntimeError,
154
- )
181
+ # Check pre-requirements for space manipulation
182
+ if self.ref == input["space"]:
183
+ raise_error(
184
+ (
185
+ f"Skipped warping as the BOLD data is in {self.ref} "
186
+ "space which would mean that you can remove the "
187
+ "BOLDWarper from the preprocess step."
188
+ ),
189
+ klass=RuntimeError,
190
+ )
191
+ else:
192
+ # Get xfm file
193
+ xfm_file_path = get_xfm(src=input["space"], dst=self.ref)
194
+ # Get template space image
195
+ template_space_img = get_template(
196
+ space=self.ref,
197
+ target_data=input,
198
+ extra_input=None,
199
+ )
200
+
201
+ # Create component-scoped tempdir
202
+ tempdir = WorkDirManager().get_tempdir(prefix="boldwarper")
203
+ # Create element-scoped tempdir so that warped BOLD is
204
+ # available later as nibabel stores file path reference for
205
+ # loading on computation
206
+ element_tempdir = WorkDirManager().get_element_tempdir(
207
+ prefix="boldwarper"
208
+ )
209
+
210
+ # Save template
211
+ template_space_img_path = tempdir / f"{self.ref}_T1w.nii.gz"
212
+ nib.save(template_space_img, template_space_img_path)
213
+
214
+ # Create a tempfile for warped output
215
+ warped_bold_path = (
216
+ element_tempdir
217
+ / f"bold_warped_from_{input['space']}_to_{self.ref}.nii.gz"
218
+ )
219
+
220
+ logger.debug(
221
+ f"Using ANTs to warp BOLD "
222
+ f"from {input['space']} to {self.ref}"
223
+ )
224
+ # Set antsApplyTransforms command
225
+ apply_transforms_cmd = [
226
+ "antsApplyTransforms",
227
+ "-d 3",
228
+ "-e 3",
229
+ "-n LanczosWindowedSinc",
230
+ f"-i {input['path'].resolve()}",
231
+ f"-r {template_space_img_path.resolve()}",
232
+ f"-t {xfm_file_path.resolve()}",
233
+ f"-o {warped_bold_path.resolve()}",
234
+ ]
235
+ # Call antsApplyTransforms
236
+ run_ext_cmd(
237
+ name="antsApplyTransforms", cmd=apply_transforms_cmd
238
+ )
239
+
240
+ # Modify target data
241
+ input["data"] = nib.load(warped_bold_path)
242
+ input["space"] = self.ref
243
+
155
244
  return "BOLD", input
@@ -7,6 +7,7 @@ import socket
7
7
  from typing import TYPE_CHECKING, List, Tuple
8
8
 
9
9
  import pytest
10
+ from numpy.testing import assert_array_equal, assert_raises
10
11
 
11
12
  from junifer.datagrabber import DataladHCP1200, DMCC13Benchmark
12
13
  from junifer.datareader import DefaultDataReader
@@ -83,7 +84,7 @@ def test_BOLDWarper_get_output_type(input_: List[str]) -> None:
83
84
  socket.gethostname() != "juseless",
84
85
  reason="only for juseless",
85
86
  )
86
- def test_BOLDWarper_preprocess(
87
+ def test_BOLDWarper_preprocess_to_native(
87
88
  datagrabber: "BaseDataGrabber", element: Tuple[str, ...]
88
89
  ) -> None:
89
90
  """Test BOLDWarper preprocess.
@@ -106,3 +107,70 @@ def test_BOLDWarper_preprocess(
106
107
  )
107
108
  assert data_type == "BOLD"
108
109
  assert isinstance(data, dict)
110
+
111
+
112
+ @pytest.mark.parametrize(
113
+ "datagrabber, element, space",
114
+ [
115
+ [
116
+ DMCC13Benchmark(
117
+ types=["BOLD"],
118
+ sessions=["wave1bas"],
119
+ tasks=["Rest"],
120
+ phase_encodings=["AP"],
121
+ runs=["1"],
122
+ native_t1w=False,
123
+ ),
124
+ ("f9057kp", "wave1bas", "Rest", "AP", "1"),
125
+ "MNI152NLin2009aAsym",
126
+ ],
127
+ [
128
+ DMCC13Benchmark(
129
+ types=["BOLD"],
130
+ sessions=["wave1bas"],
131
+ tasks=["Rest"],
132
+ phase_encodings=["AP"],
133
+ runs=["1"],
134
+ native_t1w=False,
135
+ ),
136
+ ("f9057kp", "wave1bas", "Rest", "AP", "1"),
137
+ "MNI152NLin6Asym",
138
+ ],
139
+ ],
140
+ )
141
+ @pytest.mark.skipif(
142
+ _check_ants() is False, reason="requires ANTs to be in PATH"
143
+ )
144
+ @pytest.mark.skipif(
145
+ socket.gethostname() != "juseless",
146
+ reason="only for juseless",
147
+ )
148
+ def test_BOLDWarper_preprocess_to_multi_mni(
149
+ datagrabber: "BaseDataGrabber", element: Tuple[str, ...], space: str
150
+ ) -> None:
151
+ """Test BOLDWarper preprocess.
152
+
153
+ Parameters
154
+ ----------
155
+ datagrabber : DataGrabber-like object
156
+ The parametrized DataGrabber objects.
157
+ element : tuple of str
158
+ The parametrized elements.
159
+ space : str
160
+ The parametrized template space to transform to.
161
+
162
+ """
163
+ with datagrabber as dg:
164
+ # Read data
165
+ element_data = DefaultDataReader().fit_transform(dg[element])
166
+ pre_xfm_data = element_data["BOLD"]["data"].get_fdata().copy()
167
+ # Preprocess data
168
+ data_type, data = BOLDWarper(reference=space).preprocess(
169
+ input=element_data["BOLD"],
170
+ extra_input=element_data,
171
+ )
172
+ assert data_type == "BOLD"
173
+ assert isinstance(data, dict)
174
+ assert data["space"] == space
175
+ with assert_raises(AssertionError):
176
+ assert_array_equal(pre_xfm_data, data["data"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.4.dev565
3
+ Version: 0.0.4.dev587
4
4
  Summary: JUelich NeuroImaging FEature extractoR
5
5
  Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
@@ -39,6 +39,7 @@ Requires-Dist: ruamel.yaml <0.18,>=0.17
39
39
  Requires-Dist: h5py <3.10,>=3.8.0
40
40
  Requires-Dist: httpx[http2] ==0.26.0
41
41
  Requires-Dist: tqdm ==4.66.1
42
+ Requires-Dist: templateflow >=23.0.0
42
43
  Requires-Dist: importlib-metadata ; python_version < "3.10"
43
44
  Provides-Extra: all
44
45
  Requires-Dist: bctpy ==0.6.0 ; extra == 'all'
@@ -1,5 +1,5 @@
1
1
  junifer/__init__.py,sha256=x1UR2jUcrUdm2HNl-3Qvyi4UUrU6ms5qm2qcmNY7zZk,391
2
- junifer/_version.py,sha256=ONu2E1FwZ-7bgzlkyRcG3seaZVfnneuHwnu-2ZXZQco,428
2
+ junifer/_version.py,sha256=jRCAqJ8XX2RVzioqqJ2HfV12Yo7uICU0v_bmiNBLdQs,428
3
3
  junifer/stats.py,sha256=sU5IZ2qFZWbzgSutQS_z42miIVItpSGmQYBn6KkD5fA,6162
4
4
  junifer/api/__init__.py,sha256=YILu9M7SC0Ri4CVd90fELH2OnK_gvCYAXCoqBNCFE8E,257
5
5
  junifer/api/cli.py,sha256=T6FTW3vDRlsdkSYerbQD7Q05uA9bV6f8oHvK1jxGUa8,12882
@@ -22,7 +22,7 @@ junifer/api/res/fsl/flirt,sha256=tSjiUco8ui8AbHD7mTzChEwbR0Rf_4iJTgzYTPF_WuQ,42
22
22
  junifer/api/res/fsl/img2imgcoord,sha256=Zmaw3oJYrEltcXiPyEubXry9ppAq3SND52tdDWGgeZk,49
23
23
  junifer/api/res/fsl/run_fsl_docker.sh,sha256=mRLtZo0OgDwleoee2MG6rYI37HVuGNk9zOADwcl97RA,1122
24
24
  junifer/api/res/fsl/std2imgcoord,sha256=-X5wRH6XMl0yqnTACJX6MFhO8DFOEWg42MHRxGvimXg,49
25
- junifer/api/tests/test_api_utils.py,sha256=Gt_rdWXiZnoQUpYiEjqFfiQJqa-DEId8usyZikih3vk,2591
25
+ junifer/api/tests/test_api_utils.py,sha256=OG7xZyncYAfAIzrnC_4gtpVgpyfIwpr3LjtPqSM1F54,2639
26
26
  junifer/api/tests/test_cli.py,sha256=qKWkAf-A1DeDwCtrOaCrQ5bmuUYcLWeRbGk2K95OMHQ,5717
27
27
  junifer/api/tests/test_functions.py,sha256=0XHxCC7-jfVqV7m-R-eGiEwZPjEoBzdS0zperVIyNow,24659
28
28
  junifer/api/tests/test_parser.py,sha256=eUz2JPVb0_cxvoeI1O_C5PMNs5v_lDzGsN6fV1VW5Eg,6109
@@ -41,12 +41,12 @@ junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py,sha256=o0dzptS97p
41
41
  junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py,sha256=8jxpNZelXwpJGvA5LOfpso2X8yt1chvERAYmv76hS_g,1252
42
42
  junifer/configs/juseless/datagrabbers/tests/test_ucla.py,sha256=e-jdvcZ9B0mka6_573JJU_cGwSaUV54U8X_n0UadtJY,3351
43
43
  junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py,sha256=b9hjc1mgO--PSRC3id2EzzfE2yWNsuZ2UI47a6sfGZU,1025
44
- junifer/data/__init__.py,sha256=zInNlHWTPT_ij1i8rQ4dj17pq1Gt1su-iQVHDl3e9L8,588
44
+ junifer/data/__init__.py,sha256=1E6JtzpnjjA0IutkJkarEik9NhCP9PPI6K0-37XDZVg,602
45
45
  junifer/data/coordinates.py,sha256=GcL95_wzW5t4iNNmRbgD6IwwH-ERMChJK3kWfZ3ORDc,12701
46
46
  junifer/data/masks.py,sha256=81v3GhAf9lc_CobV9f6n_vMK1jWZCbeANmopa02XZOQ,17744
47
47
  junifer/data/parcellations.py,sha256=FB-cx4ZKl9BhsOEl6PCsWRGAL0emjTJKC0KMKqARL18,58205
48
- junifer/data/template_spaces.py,sha256=AXyeCyVym92BxJwCgCzoH8LsKaKTeS1RE97h9JcwQmA,2697
49
- junifer/data/utils.py,sha256=wZfovfhiP3Iq5LWCvsIeYmvmlO6heQ-6AeUe3b8ohFY,1276
48
+ junifer/data/template_spaces.py,sha256=fHuihkPCq816rhvI72Us57cSnEPqDf7gWpVZIhOkoMY,4862
49
+ junifer/data/utils.py,sha256=Jmbc7SLzy4nLP_zkWv_aJzb1MZ27tutJ98ifsECCamM,1295
50
50
  junifer/data/VOIs/meta/CogAC_VOIs.txt,sha256=Sr5_E712OLdeQRyUcDNM0wLBvZIyO6gc9Q7KkyJHX1A,398
51
51
  junifer/data/VOIs/meta/CogAR_VOIs.txt,sha256=t3NLwEVUZTPP34p15SaB3UInLrQyK-7Qc4iLBuQlZu8,189
52
52
  junifer/data/VOIs/meta/DMNBuckner_VOIs.txt,sha256=2trjgKF00PnCxTtfCXYmr-J7P_Jl-iX_qUocmzOR1nk,86
@@ -72,7 +72,7 @@ junifer/data/tests/test_coordinates.py,sha256=BNkz9qFbnwAI0oVlIm_XrT-z4Vsia_rMtM
72
72
  junifer/data/tests/test_data_utils.py,sha256=_DaiC8K79gs9HFHxr-udNeE2YTM6JA0-1i-K2cqK9qA,1087
73
73
  junifer/data/tests/test_masks.py,sha256=wZ7nsY55on6LpJdRm7VXp1qqQQlENmSK6bNOgiMTE4M,14572
74
74
  junifer/data/tests/test_parcellations.py,sha256=3Tk0bU4xT9TJfdrDWcUMq6ns-IPJUpZzkiR-PEbmM6M,36212
75
- junifer/data/tests/test_template_spaces.py,sha256=AHY8SwFnJeQSNNU_tUo1exM7ko6qztOfxzeIbxApLtI,621
75
+ junifer/data/tests/test_template_spaces.py,sha256=EDsGYBAwjqjOANDNssXaaXPkNv9P658JRtCN2vUulf8,2258
76
76
  junifer/datagrabber/__init__.py,sha256=pZHJIY8nAlbVngsyRScE6a6GKbytiwjJB7SdJNqIbl4,680
77
77
  junifer/datagrabber/base.py,sha256=clErdDX5jz8LTjwPTQPCv3jfELCJ2vObg7ks8imAx8Y,6224
78
78
  junifer/datagrabber/datalad_base.py,sha256=dDaBiIePPP6-G4ycgBMxTcXxs4vkg-yDS3OBURK4VGs,10731
@@ -193,7 +193,7 @@ junifer/pipeline/tests/test_update_meta_mixin.py,sha256=UeWwpUi-Q5WVd36Fgfn_utXp
193
193
  junifer/pipeline/tests/test_workdir_manager.py,sha256=E1WY4C-GDsx2c49sePqr1WR_Y3nZ1kiRn4Veu506uTs,2801
194
194
  junifer/preprocess/__init__.py,sha256=-3exohZnw-gJ-MjVM63WcXzBW1mbSetEVozcDfs5etc,342
195
195
  junifer/preprocess/base.py,sha256=syiNqI8pUjoGyShZSjs_RTsd5VHhwoqzIfPfFstr4f4,6230
196
- junifer/preprocess/bold_warper.py,sha256=KOYCPCTJE92yI1juXK-3yl7VUxUhbzqqQxJrCYgk-0E,4572
196
+ junifer/preprocess/bold_warper.py,sha256=d99ZraDBXXd0UXxJJ3s-FTy76GY_AIhzBbNCzNN0QEY,8314
197
197
  junifer/preprocess/ants/__init__.py,sha256=Uobmbhh6_gOowkF2hQNSQOh3AYeaXzarBXEcLJzhERE,112
198
198
  junifer/preprocess/ants/ants_apply_transforms_warper.py,sha256=V3y9EIGdIeJhJpnEVi123fHTK3R0sv_-OmWY7R_DC1M,6627
199
199
  junifer/preprocess/ants/tests/test_ants_apply_transforms_warper.py,sha256=ibLLISss0o0wg3lqpLhL1oO7MfU_bZF5PBqY3OOd9sg,3737
@@ -203,7 +203,7 @@ junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py,sha256=OKAC
203
203
  junifer/preprocess/fsl/__init__.py,sha256=DerGFQ-dIuX5PT9a_BH6QkIXkJZVymjYy-woXF7tYGc,111
204
204
  junifer/preprocess/fsl/apply_warper.py,sha256=_HU1-63A32cSQw9eNdgpKN52BFivn6cZaDa0_at-4UY,6215
205
205
  junifer/preprocess/fsl/tests/test_apply_warper.py,sha256=b--MMPlaJw284gJWw-QV8rz6Rb2zmcBjYaY-cb6-uNU,3024
206
- junifer/preprocess/tests/test_bold_warper.py,sha256=X4rs-IBu_Oe9wF81Xlh6ih9BCu8SUyDm64lXKk-l9Q8,2831
206
+ junifer/preprocess/tests/test_bold_warper.py,sha256=oQooJt4yC09LzXJuFDL7ytlYMuhcf4SeCAWKGdVLJdQ,4890
207
207
  junifer/preprocess/tests/test_preprocess_base.py,sha256=UHuH_YOK7AU3AfApWqgB6YLG-J669BgztuxNSWCtmtI,2560
208
208
  junifer/storage/__init__.py,sha256=QlzBw9UrRhmg_f7zQVas9h313u3sfZIBicA3_0Skm4M,337
209
209
  junifer/storage/base.py,sha256=UxDvj81gSmqqHspbSs1X_i9HvW5wXysDippI7HWM7aM,9654
@@ -234,10 +234,10 @@ junifer/utils/logging.py,sha256=T0HgiCI6cS2tp9nbI4cM3nVzMMjiVzgoxuyo5Y1rCyY,9124
234
234
  junifer/utils/tests/test_fs.py,sha256=WQS7cKlKEZ742CIuiOYYpueeAhY9PqlastfDVpVVtvE,923
235
235
  junifer/utils/tests/test_helpers.py,sha256=k5qqfxK8dFyuewTJyR1Qn6-nFaYNuVr0ysc18bfPjyU,929
236
236
  junifer/utils/tests/test_logging.py,sha256=l8oo-AiBV7H6_IzlsNcj__cLeZBUvgIGoaMszD9VaJg,7754
237
- junifer-0.0.4.dev565.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
238
- junifer-0.0.4.dev565.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
239
- junifer-0.0.4.dev565.dist-info/METADATA,sha256=soYFwdolb0wGSziTYpzn-52aoWjoCk6Jq_rHiIxLQLo,8091
240
- junifer-0.0.4.dev565.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
241
- junifer-0.0.4.dev565.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
242
- junifer-0.0.4.dev565.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
243
- junifer-0.0.4.dev565.dist-info/RECORD,,
237
+ junifer-0.0.4.dev587.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
238
+ junifer-0.0.4.dev587.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
239
+ junifer-0.0.4.dev587.dist-info/METADATA,sha256=oexdrhEQvCUgBCtdR2W2l0k5IDmyNQzsxMw9P5IfolY,8128
240
+ junifer-0.0.4.dev587.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
241
+ junifer-0.0.4.dev587.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
242
+ junifer-0.0.4.dev587.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
243
+ junifer-0.0.4.dev587.dist-info/RECORD,,