junifer 0.0.5.dev98__py3-none-any.whl → 0.0.5.dev110__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 +2 -2
- junifer/datagrabber/aomic/id1000.py +35 -2
- junifer/datagrabber/aomic/piop1.py +35 -2
- junifer/datagrabber/aomic/piop2.py +35 -2
- junifer/datagrabber/aomic/tests/test_id1000.py +43 -97
- junifer/datagrabber/aomic/tests/test_piop1.py +64 -106
- junifer/datagrabber/aomic/tests/test_piop2.py +44 -100
- junifer/datagrabber/utils.py +11 -0
- junifer/datareader/default.py +2 -2
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/METADATA +1 -1
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/RECORD +16 -16
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/AUTHORS.rst +0 -0
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/LICENSE.md +0 -0
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/WHEEL +0 -0
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/entry_points.txt +0 -0
- {junifer-0.0.5.dev98.dist-info → junifer-0.0.5.dev110.dist-info}/top_level.txt +0 -0
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.5.
|
16
|
-
__version_tuple__ = version_tuple = (0, 0, 5, '
|
15
|
+
__version__ = version = '0.0.5.dev110'
|
16
|
+
__version_tuple__ = version_tuple = (0, 0, 5, 'dev110')
|
@@ -24,8 +24,8 @@ class DataladAOMICID1000(PatternDataladDataGrabber):
|
|
24
24
|
The directory where the datalad dataset will be cloned. If None,
|
25
25
|
the datalad dataset will be cloned into a temporary directory
|
26
26
|
(default None).
|
27
|
-
types: {"BOLD", "T1w", "VBM_CSF", "VBM_GM", "VBM_WM", "DWI"
|
28
|
-
list of the options, optional
|
27
|
+
types: {"BOLD", "T1w", "VBM_CSF", "VBM_GM", "VBM_WM", "DWI", \
|
28
|
+
"FreeSurfer"} or list of the options, optional
|
29
29
|
AOMIC data types. If None, all available data types are selected.
|
30
30
|
(default None).
|
31
31
|
native_t1w : bool, optional
|
@@ -112,6 +112,39 @@ class DataladAOMICID1000(PatternDataladDataGrabber):
|
|
112
112
|
"{subject}_desc-preproc_dwi.nii.gz"
|
113
113
|
),
|
114
114
|
},
|
115
|
+
"FreeSurfer": {
|
116
|
+
"pattern": "derivatives/freesurfer/[!f]{subject}/mri/T1.mg[z]",
|
117
|
+
"aseg": {
|
118
|
+
"pattern": (
|
119
|
+
"derivatives/freesurfer/[!f]{subject}/mri/aseg.mg[z]"
|
120
|
+
)
|
121
|
+
},
|
122
|
+
"norm": {
|
123
|
+
"pattern": (
|
124
|
+
"derivatives/freesurfer/[!f]{subject}/mri/norm.mg[z]"
|
125
|
+
)
|
126
|
+
},
|
127
|
+
"lh_white": {
|
128
|
+
"pattern": (
|
129
|
+
"derivatives/freesurfer/[!f]{subject}/surf/lh.whit[e]"
|
130
|
+
)
|
131
|
+
},
|
132
|
+
"rh_white": {
|
133
|
+
"pattern": (
|
134
|
+
"derivatives/freesurfer/[!f]{subject}/surf/rh.whit[e]"
|
135
|
+
)
|
136
|
+
},
|
137
|
+
"lh_pial": {
|
138
|
+
"pattern": (
|
139
|
+
"derivatives/freesurfer/[!f]{subject}/surf/lh.pia[l]"
|
140
|
+
)
|
141
|
+
},
|
142
|
+
"rh_pial": {
|
143
|
+
"pattern": (
|
144
|
+
"derivatives/freesurfer/[!f]{subject}/surf/rh.pia[l]"
|
145
|
+
)
|
146
|
+
},
|
147
|
+
},
|
115
148
|
}
|
116
149
|
# Use native T1w assets
|
117
150
|
self.native_t1w = False
|
@@ -26,8 +26,8 @@ class DataladAOMICPIOP1(PatternDataladDataGrabber):
|
|
26
26
|
The directory where the datalad dataset will be cloned. If None,
|
27
27
|
the datalad dataset will be cloned into a temporary directory
|
28
28
|
(default None).
|
29
|
-
types: {"BOLD", "T1w", "VBM_CSF", "VBM_GM", "VBM_WM", "DWI"
|
30
|
-
list of the options, optional
|
29
|
+
types: {"BOLD", "T1w", "VBM_CSF", "VBM_GM", "VBM_WM", "DWI", \
|
30
|
+
"FreeSurfer"} or list of the options, optional
|
31
31
|
AOMIC data types. If None, all available data types are selected.
|
32
32
|
(default None).
|
33
33
|
tasks : {"restingstate", "anticipation", "emomatching", "faces", \
|
@@ -147,6 +147,39 @@ class DataladAOMICPIOP1(PatternDataladDataGrabber):
|
|
147
147
|
"{subject}_desc-preproc_dwi.nii.gz"
|
148
148
|
),
|
149
149
|
},
|
150
|
+
"FreeSurfer": {
|
151
|
+
"pattern": "derivatives/freesurfer/[!f]{subject}/mri/T1.mg[z]",
|
152
|
+
"aseg": {
|
153
|
+
"pattern": (
|
154
|
+
"derivatives/freesurfer/[!f]{subject}/mri/aseg.mg[z]"
|
155
|
+
)
|
156
|
+
},
|
157
|
+
"norm": {
|
158
|
+
"pattern": (
|
159
|
+
"derivatives/freesurfer/[!f]{subject}/mri/norm.mg[z]"
|
160
|
+
)
|
161
|
+
},
|
162
|
+
"lh_white": {
|
163
|
+
"pattern": (
|
164
|
+
"derivatives/freesurfer/[!f]{subject}/surf/lh.whit[e]"
|
165
|
+
)
|
166
|
+
},
|
167
|
+
"rh_white": {
|
168
|
+
"pattern": (
|
169
|
+
"derivatives/freesurfer/[!f]{subject}/surf/rh.whit[e]"
|
170
|
+
)
|
171
|
+
},
|
172
|
+
"lh_pial": {
|
173
|
+
"pattern": (
|
174
|
+
"derivatives/freesurfer/[!f]{subject}/surf/lh.pia[l]"
|
175
|
+
)
|
176
|
+
},
|
177
|
+
"rh_pial": {
|
178
|
+
"pattern": (
|
179
|
+
"derivatives/freesurfer/[!f]{subject}/surf/rh.pia[l]"
|
180
|
+
)
|
181
|
+
},
|
182
|
+
},
|
150
183
|
}
|
151
184
|
# Use native T1w assets
|
152
185
|
self.native_t1w = False
|
@@ -26,8 +26,8 @@ class DataladAOMICPIOP2(PatternDataladDataGrabber):
|
|
26
26
|
The directory where the datalad dataset will be cloned. If None,
|
27
27
|
the datalad dataset will be cloned into a temporary directory
|
28
28
|
(default None).
|
29
|
-
types: {"BOLD", "T1w", "VBM_CSF", "VBM_GM", "VBM_WM", "DWI"
|
30
|
-
list of the options, optional
|
29
|
+
types: {"BOLD", "T1w", "VBM_CSF", "VBM_GM", "VBM_WM", "DWI", \
|
30
|
+
"FreeSurfer"} or list of the options, optional
|
31
31
|
AOMIC data types. If None, all available data types are selected.
|
32
32
|
(default None).
|
33
33
|
tasks : {"restingstate", "stopsignal", "workingmemory"} or \
|
@@ -144,6 +144,39 @@ class DataladAOMICPIOP2(PatternDataladDataGrabber):
|
|
144
144
|
"{subject}_desc-preproc_dwi.nii.gz"
|
145
145
|
),
|
146
146
|
},
|
147
|
+
"FreeSurfer": {
|
148
|
+
"pattern": "derivatives/freesurfer/[!f]{subject}/mri/T1.mg[z]",
|
149
|
+
"aseg": {
|
150
|
+
"pattern": (
|
151
|
+
"derivatives/freesurfer/[!f]{subject}/mri/aseg.mg[z]"
|
152
|
+
)
|
153
|
+
},
|
154
|
+
"norm": {
|
155
|
+
"pattern": (
|
156
|
+
"derivatives/freesurfer/[!f]{subject}/mri/norm.mg[z]"
|
157
|
+
)
|
158
|
+
},
|
159
|
+
"lh_white": {
|
160
|
+
"pattern": (
|
161
|
+
"derivatives/freesurfer/[!f]{subject}/surf/lh.whit[e]"
|
162
|
+
)
|
163
|
+
},
|
164
|
+
"rh_white": {
|
165
|
+
"pattern": (
|
166
|
+
"derivatives/freesurfer/[!f]{subject}/surf/rh.whit[e]"
|
167
|
+
)
|
168
|
+
},
|
169
|
+
"lh_pial": {
|
170
|
+
"pattern": (
|
171
|
+
"derivatives/freesurfer/[!f]{subject}/surf/lh.pia[l]"
|
172
|
+
)
|
173
|
+
},
|
174
|
+
"rh_pial": {
|
175
|
+
"pattern": (
|
176
|
+
"derivatives/freesurfer/[!f]{subject}/surf/rh.pia[l]"
|
177
|
+
)
|
178
|
+
},
|
179
|
+
},
|
147
180
|
}
|
148
181
|
# Use native T1w assets
|
149
182
|
self.native_t1w = False
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# Synchon Mandal <s.mandal@fz-juelich.de>
|
8
8
|
# License: AGPL
|
9
9
|
|
10
|
-
from typing import List, Union
|
10
|
+
from typing import List, Optional, Union
|
11
11
|
|
12
12
|
import pytest
|
13
13
|
|
@@ -17,112 +17,58 @@ from junifer.datagrabber.aomic.id1000 import DataladAOMICID1000
|
|
17
17
|
URI = "https://gin.g-node.org/juaml/datalad-example-aomic1000"
|
18
18
|
|
19
19
|
|
20
|
-
|
21
|
-
"
|
22
|
-
|
20
|
+
@pytest.mark.parametrize(
|
21
|
+
"type_, nested_types",
|
22
|
+
[
|
23
|
+
("BOLD", ["confounds", "mask"]),
|
24
|
+
("T1w", ["mask"]),
|
25
|
+
("VBM_CSF", None),
|
26
|
+
("VBM_GM", None),
|
27
|
+
("VBM_WM", None),
|
28
|
+
("DWI", None),
|
29
|
+
("FreeSurfer", None),
|
30
|
+
],
|
31
|
+
)
|
32
|
+
def test_DataladAOMICID1000(
|
33
|
+
type_: str,
|
34
|
+
nested_types: Optional[List[str]],
|
35
|
+
) -> None:
|
36
|
+
"""Test DataladAOMICID1000 DataGrabber.
|
37
|
+
|
38
|
+
Parameters
|
39
|
+
----------
|
40
|
+
type_ : str
|
41
|
+
The parametrized type.
|
42
|
+
nested_types : list of str or None
|
43
|
+
The parametrized nested types.
|
44
|
+
|
45
|
+
"""
|
46
|
+
dg = DataladAOMICID1000(types=type_)
|
23
47
|
# Set URI to Gin
|
24
48
|
dg.uri = URI
|
25
49
|
|
26
50
|
with dg:
|
51
|
+
# Get all elements
|
27
52
|
all_elements = dg.get_elements()
|
53
|
+
# Get test element
|
28
54
|
test_element = all_elements[0]
|
29
|
-
|
55
|
+
# Get test element data
|
30
56
|
out = dg[test_element]
|
31
|
-
|
32
|
-
|
33
|
-
assert "
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
)
|
39
|
-
|
40
|
-
assert out["BOLD"]["path"].exists()
|
41
|
-
assert out["BOLD"]["path"].is_file()
|
42
|
-
|
43
|
-
# asserts type BOLD.confounds
|
44
|
-
assert "confounds" in out["BOLD"]
|
45
|
-
|
46
|
-
assert (
|
47
|
-
out["BOLD"]["confounds"]["path"].name
|
48
|
-
== f"{test_element}_task-moviewatching_"
|
49
|
-
"desc-confounds_regressors.tsv"
|
50
|
-
)
|
51
|
-
|
52
|
-
assert out["BOLD"]["confounds"]["path"].exists()
|
53
|
-
assert out["BOLD"]["confounds"]["path"].is_file()
|
54
|
-
|
55
|
-
# assert BOLD.mask
|
56
|
-
assert out["BOLD"]["mask"]["path"].exists()
|
57
|
-
|
58
|
-
# asserts type "T1w"
|
59
|
-
assert "T1w" in out
|
60
|
-
|
61
|
-
assert (
|
62
|
-
out["T1w"]["path"].name
|
63
|
-
== f"{test_element}_space-MNI152NLin2009cAsym_"
|
64
|
-
"desc-preproc_T1w.nii.gz"
|
65
|
-
)
|
66
|
-
|
67
|
-
assert out["T1w"]["path"].exists()
|
68
|
-
assert out["T1w"]["path"].is_file()
|
69
|
-
|
70
|
-
# asserts T1w.mask
|
71
|
-
assert out["T1w"]["mask"]["path"].exists()
|
72
|
-
|
73
|
-
# asserts type "VBM_CSF"
|
74
|
-
assert "VBM_CSF" in out
|
75
|
-
|
76
|
-
assert (
|
77
|
-
out["VBM_CSF"]["path"].name
|
78
|
-
== f"{test_element}_space-MNI152NLin2009cAsym_label-"
|
79
|
-
"CSF_probseg.nii.gz"
|
80
|
-
)
|
81
|
-
|
82
|
-
assert out["VBM_CSF"]["path"].exists()
|
83
|
-
assert out["VBM_CSF"]["path"].is_file()
|
84
|
-
|
85
|
-
# asserts type "VBM_GM"
|
86
|
-
assert "VBM_GM" in out
|
87
|
-
|
88
|
-
assert (
|
89
|
-
out["VBM_GM"]["path"].name
|
90
|
-
== f"{test_element}_space-MNI152NLin2009cAsym_label-"
|
91
|
-
"GM_probseg.nii.gz"
|
92
|
-
)
|
93
|
-
|
94
|
-
assert out["VBM_GM"]["path"].exists()
|
95
|
-
assert out["VBM_GM"]["path"].is_file()
|
96
|
-
|
97
|
-
# asserts type "VBM_WM"
|
98
|
-
assert "VBM_WM" in out
|
99
|
-
|
100
|
-
assert (
|
101
|
-
out["VBM_WM"]["path"].name
|
102
|
-
== f"{test_element}_space-MNI152NLin2009cAsym_label-"
|
103
|
-
"WM_probseg.nii.gz"
|
104
|
-
)
|
105
|
-
|
106
|
-
assert out["VBM_WM"]["path"].exists()
|
107
|
-
assert out["VBM_WM"]["path"].is_file()
|
108
|
-
|
109
|
-
# asserts type "DWI"
|
110
|
-
assert "DWI" in out
|
111
|
-
|
112
|
-
assert (
|
113
|
-
out["DWI"]["path"].name
|
114
|
-
== f"{test_element}_desc-preproc_dwi.nii.gz"
|
115
|
-
)
|
116
|
-
|
117
|
-
assert out["DWI"]["path"].exists()
|
118
|
-
assert out["DWI"]["path"].is_file()
|
119
|
-
|
120
|
-
# asserts meta
|
121
|
-
assert "meta" in out["BOLD"]
|
122
|
-
meta = out["BOLD"]["meta"]
|
57
|
+
# Assert data type
|
58
|
+
assert type_ in out
|
59
|
+
assert out[type_]["path"].exists()
|
60
|
+
assert out[type_]["path"].is_file()
|
61
|
+
# Asserts data type metadata
|
62
|
+
assert "meta" in out[type_]
|
63
|
+
meta = out[type_]["meta"]
|
123
64
|
assert "element" in meta
|
124
65
|
assert "subject" in meta["element"]
|
125
66
|
assert test_element == meta["element"]["subject"]
|
67
|
+
# Assert nested data type if not None
|
68
|
+
if nested_types is not None:
|
69
|
+
for nested_type in nested_types:
|
70
|
+
assert out[type_][nested_type]["path"].exists()
|
71
|
+
assert out[type_][nested_type]["path"].is_file()
|
126
72
|
|
127
73
|
|
128
74
|
@pytest.mark.parametrize(
|
@@ -18,129 +18,87 @@ URI = "https://gin.g-node.org/juaml/datalad-example-aomicpiop1"
|
|
18
18
|
|
19
19
|
|
20
20
|
@pytest.mark.parametrize(
|
21
|
-
"tasks",
|
22
|
-
[
|
21
|
+
"type_, nested_types, tasks",
|
22
|
+
[
|
23
|
+
("BOLD", ["confounds", "mask"], None),
|
24
|
+
("BOLD", ["confounds", "mask"], ["anticipation"]),
|
25
|
+
("BOLD", ["confounds", "mask"], ["emomatching", "faces"]),
|
26
|
+
("BOLD", ["confounds", "mask"], ["restingstate"]),
|
27
|
+
("BOLD", ["confounds", "mask"], ["workingmemory", "gstroop"]),
|
28
|
+
(
|
29
|
+
"BOLD",
|
30
|
+
["confounds", "mask"],
|
31
|
+
["anticipation", "faces", "restingstate"],
|
32
|
+
),
|
33
|
+
("T1w", ["mask"], None),
|
34
|
+
("VBM_CSF", None, None),
|
35
|
+
("VBM_GM", None, None),
|
36
|
+
("VBM_WM", None, None),
|
37
|
+
("DWI", None, None),
|
38
|
+
("FreeSurfer", None, None),
|
39
|
+
],
|
23
40
|
)
|
24
|
-
def test_DataladAOMICPIOP1(
|
41
|
+
def test_DataladAOMICPIOP1(
|
42
|
+
type_: str,
|
43
|
+
nested_types: Optional[List[str]],
|
44
|
+
tasks: Optional[List[str]],
|
45
|
+
) -> None:
|
25
46
|
"""Test DataladAOMICPIOP1 DataGrabber.
|
26
47
|
|
27
48
|
Parameters
|
28
49
|
----------
|
29
|
-
|
50
|
+
type_ : str
|
51
|
+
The parametrized type.
|
52
|
+
nested_types : list of str or None
|
53
|
+
The parametrized nested types.
|
54
|
+
tasks : list of str or None
|
30
55
|
The parametrized task values.
|
31
56
|
|
32
57
|
"""
|
33
|
-
dg = DataladAOMICPIOP1(tasks=tasks)
|
58
|
+
dg = DataladAOMICPIOP1(types=type_, tasks=tasks)
|
34
59
|
# Set URI to Gin
|
35
60
|
dg.uri = URI
|
36
61
|
|
37
62
|
with dg:
|
63
|
+
# Get all elements
|
38
64
|
all_elements = dg.get_elements()
|
65
|
+
# Get test element
|
39
66
|
test_element = all_elements[0]
|
40
|
-
|
41
|
-
|
67
|
+
# Get test element data
|
42
68
|
out = dg[test_element]
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
#
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
assert out[
|
64
|
-
assert out[
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
assert (
|
70
|
-
out["BOLD"]["confounds"]["path"].name == f"{sub}_task-{new_task}_"
|
71
|
-
"desc-confounds_regressors.tsv"
|
72
|
-
)
|
73
|
-
|
74
|
-
assert out["BOLD"]["confounds"]["path"].exists()
|
75
|
-
assert out["BOLD"]["confounds"]["path"].is_file()
|
76
|
-
|
77
|
-
# assert BOLD.mask
|
78
|
-
assert out["BOLD"]["mask"]["path"].exists()
|
79
|
-
|
80
|
-
# asserts type "T1w"
|
81
|
-
assert "T1w" in out
|
82
|
-
|
83
|
-
assert (
|
84
|
-
out["T1w"]["path"].name == f"{sub}_space-MNI152NLin2009cAsym_"
|
85
|
-
"desc-preproc_T1w.nii.gz"
|
86
|
-
)
|
87
|
-
|
88
|
-
assert out["T1w"]["path"].exists()
|
89
|
-
assert out["T1w"]["path"].is_file()
|
90
|
-
|
91
|
-
# asserts T1w.mask
|
92
|
-
assert out["T1w"]["mask"]["path"].exists()
|
93
|
-
|
94
|
-
# asserts type "VBM_CSF"
|
95
|
-
assert "VBM_CSF" in out
|
96
|
-
|
97
|
-
assert (
|
98
|
-
out["VBM_CSF"]["path"].name
|
99
|
-
== f"{sub}_space-MNI152NLin2009cAsym_label-"
|
100
|
-
"CSF_probseg.nii.gz"
|
101
|
-
)
|
102
|
-
|
103
|
-
assert out["VBM_CSF"]["path"].exists()
|
104
|
-
assert out["VBM_CSF"]["path"].is_file()
|
105
|
-
|
106
|
-
# asserts type "VBM_GM"
|
107
|
-
assert "VBM_GM" in out
|
108
|
-
|
109
|
-
assert (
|
110
|
-
out["VBM_GM"]["path"].name
|
111
|
-
== f"{sub}_space-MNI152NLin2009cAsym_label-"
|
112
|
-
"GM_probseg.nii.gz"
|
113
|
-
)
|
114
|
-
|
115
|
-
assert out["VBM_GM"]["path"].exists()
|
116
|
-
assert out["VBM_GM"]["path"].is_file()
|
117
|
-
|
118
|
-
# asserts type "VBM_WM"
|
119
|
-
assert "VBM_WM" in out
|
120
|
-
|
121
|
-
assert (
|
122
|
-
out["VBM_WM"]["path"].name
|
123
|
-
== f"{sub}_space-MNI152NLin2009cAsym_label-"
|
124
|
-
"WM_probseg.nii.gz"
|
125
|
-
)
|
126
|
-
|
127
|
-
assert out["VBM_WM"]["path"].exists()
|
128
|
-
assert out["VBM_WM"]["path"].is_file()
|
129
|
-
|
130
|
-
# asserts type "DWI"
|
131
|
-
assert "DWI" in out
|
132
|
-
|
133
|
-
assert out["DWI"]["path"].name == f"{sub}_desc-preproc_dwi.nii.gz"
|
134
|
-
|
135
|
-
assert out["DWI"]["path"].exists()
|
136
|
-
assert out["DWI"]["path"].is_file()
|
137
|
-
|
138
|
-
# asserts meta
|
139
|
-
assert "meta" in out["BOLD"]
|
140
|
-
meta = out["BOLD"]["meta"]
|
69
|
+
# Get all elements
|
70
|
+
all_elements = dg.get_elements()
|
71
|
+
# Get test element
|
72
|
+
test_element = all_elements[0]
|
73
|
+
# Get test element data
|
74
|
+
out = dg[test_element]
|
75
|
+
# Assert data type
|
76
|
+
assert type_ in out
|
77
|
+
# Check task name if BOLD
|
78
|
+
if type_ == "BOLD" and tasks is not None:
|
79
|
+
# Depending on task 'acquisition is different'
|
80
|
+
task_acqs = {
|
81
|
+
"anticipation": "seq",
|
82
|
+
"emomatching": "seq",
|
83
|
+
"faces": "mb3",
|
84
|
+
"gstroop": "seq",
|
85
|
+
"restingstate": "mb3",
|
86
|
+
"workingmemory": "seq",
|
87
|
+
}
|
88
|
+
assert task_acqs[test_element[1]] in out[type_]["path"].name
|
89
|
+
assert out[type_]["path"].exists()
|
90
|
+
assert out[type_]["path"].is_file()
|
91
|
+
# Asserts data type metadata
|
92
|
+
assert "meta" in out[type_]
|
93
|
+
meta = out[type_]["meta"]
|
141
94
|
assert "element" in meta
|
142
95
|
assert "subject" in meta["element"]
|
143
|
-
assert
|
96
|
+
assert test_element[0] == meta["element"]["subject"]
|
97
|
+
# Assert nested data type if not None
|
98
|
+
if nested_types is not None:
|
99
|
+
for nested_type in nested_types:
|
100
|
+
assert out[type_][nested_type]["path"].exists()
|
101
|
+
assert out[type_][nested_type]["path"].is_file()
|
144
102
|
|
145
103
|
|
146
104
|
@pytest.mark.parametrize(
|
@@ -18,123 +18,67 @@ URI = "https://gin.g-node.org/juaml/datalad-example-aomicpiop2"
|
|
18
18
|
|
19
19
|
|
20
20
|
@pytest.mark.parametrize(
|
21
|
-
"tasks",
|
22
|
-
[
|
21
|
+
"type_, nested_types, tasks",
|
22
|
+
[
|
23
|
+
("BOLD", ["confounds", "mask"], None),
|
24
|
+
("BOLD", ["confounds", "mask"], ["restingstate"]),
|
25
|
+
("BOLD", ["confounds", "mask"], ["restingstate", "stopsignal"]),
|
26
|
+
("BOLD", ["confounds", "mask"], ["workingmemory", "stopsignal"]),
|
27
|
+
("BOLD", ["confounds", "mask"], ["workingmemory"]),
|
28
|
+
("T1w", ["mask"], None),
|
29
|
+
("VBM_CSF", None, None),
|
30
|
+
("VBM_GM", None, None),
|
31
|
+
("VBM_WM", None, None),
|
32
|
+
("DWI", None, None),
|
33
|
+
("FreeSurfer", None, None),
|
34
|
+
],
|
23
35
|
)
|
24
|
-
def test_DataladAOMICPIOP2(
|
36
|
+
def test_DataladAOMICPIOP2(
|
37
|
+
type_: str,
|
38
|
+
nested_types: Optional[List[str]],
|
39
|
+
tasks: Optional[List[str]],
|
40
|
+
) -> None:
|
25
41
|
"""Test DataladAOMICPIOP2 DataGrabber.
|
26
42
|
|
27
43
|
Parameters
|
28
44
|
----------
|
29
|
-
|
45
|
+
type_ : str
|
46
|
+
The parametrized type.
|
47
|
+
nested_types : list of str or None
|
48
|
+
The parametrized nested types.
|
49
|
+
tasks : list of str or None
|
30
50
|
The parametrized task values.
|
31
51
|
|
32
52
|
"""
|
33
|
-
dg = DataladAOMICPIOP2(tasks=tasks)
|
53
|
+
dg = DataladAOMICPIOP2(types=type_, tasks=tasks)
|
34
54
|
# Set URI to Gin
|
35
55
|
dg.uri = URI
|
36
56
|
|
37
57
|
with dg:
|
58
|
+
# Get all elements
|
38
59
|
all_elements = dg.get_elements()
|
39
|
-
|
40
|
-
if tasks == "restingstate":
|
41
|
-
for el in all_elements:
|
42
|
-
assert el[1] == "restingstate"
|
43
|
-
|
60
|
+
# Get test element
|
44
61
|
test_element = all_elements[0]
|
45
|
-
|
62
|
+
# Get test element data
|
46
63
|
out = dg[test_element]
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
assert (
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
assert out["BOLD"]["path"].exists()
|
58
|
-
assert out["BOLD"]["path"].is_file()
|
59
|
-
|
60
|
-
# asserts type BOLD.confounds
|
61
|
-
assert "confounds" in out["BOLD"]
|
62
|
-
|
63
|
-
assert (
|
64
|
-
out["BOLD"]["confounds"]["path"].name == f"{sub}_task-{new_task}_"
|
65
|
-
"desc-confounds_regressors.tsv"
|
66
|
-
)
|
67
|
-
|
68
|
-
assert out["BOLD"]["confounds"]["path"].exists()
|
69
|
-
assert out["BOLD"]["confounds"]["path"].is_file()
|
70
|
-
|
71
|
-
# assert BOLD.mask
|
72
|
-
assert out["BOLD"]["mask"]["path"].exists()
|
73
|
-
|
74
|
-
# asserts type "T1w"
|
75
|
-
assert "T1w" in out
|
76
|
-
|
77
|
-
assert (
|
78
|
-
out["T1w"]["path"].name == f"{sub}_space-MNI152NLin2009cAsym_"
|
79
|
-
"desc-preproc_T1w.nii.gz"
|
80
|
-
)
|
81
|
-
|
82
|
-
assert out["T1w"]["path"].exists()
|
83
|
-
assert out["T1w"]["path"].is_file()
|
84
|
-
|
85
|
-
# asserts T1w.mask
|
86
|
-
assert out["T1w"]["mask"]["path"].exists()
|
87
|
-
|
88
|
-
# asserts type "VBM_CSF"
|
89
|
-
assert "VBM_CSF" in out
|
90
|
-
|
91
|
-
assert (
|
92
|
-
out["VBM_CSF"]["path"].name
|
93
|
-
== f"{sub}_space-MNI152NLin2009cAsym_label-"
|
94
|
-
"CSF_probseg.nii.gz"
|
95
|
-
)
|
96
|
-
|
97
|
-
assert out["VBM_CSF"]["path"].exists()
|
98
|
-
assert out["VBM_CSF"]["path"].is_file()
|
99
|
-
|
100
|
-
# asserts type "VBM_GM"
|
101
|
-
assert "VBM_GM" in out
|
102
|
-
|
103
|
-
assert (
|
104
|
-
out["VBM_GM"]["path"].name
|
105
|
-
== f"{sub}_space-MNI152NLin2009cAsym_label-"
|
106
|
-
"GM_probseg.nii.gz"
|
107
|
-
)
|
108
|
-
|
109
|
-
assert out["VBM_GM"]["path"].exists()
|
110
|
-
assert out["VBM_GM"]["path"].is_file()
|
111
|
-
|
112
|
-
# asserts type "VBM_WM"
|
113
|
-
assert "VBM_WM" in out
|
114
|
-
|
115
|
-
assert (
|
116
|
-
out["VBM_WM"]["path"].name
|
117
|
-
== f"{sub}_space-MNI152NLin2009cAsym_label-"
|
118
|
-
"WM_probseg.nii.gz"
|
119
|
-
)
|
120
|
-
|
121
|
-
assert out["VBM_WM"]["path"].exists()
|
122
|
-
assert out["VBM_WM"]["path"].is_file()
|
123
|
-
|
124
|
-
# asserts type "DWI"
|
125
|
-
assert "DWI" in out
|
126
|
-
|
127
|
-
assert out["DWI"]["path"].name == f"{sub}_desc-preproc_dwi.nii.gz"
|
128
|
-
|
129
|
-
assert out["DWI"]["path"].exists()
|
130
|
-
assert out["DWI"]["path"].is_file()
|
131
|
-
|
132
|
-
# asserts meta
|
133
|
-
assert "meta" in out["BOLD"]
|
134
|
-
meta = out["BOLD"]["meta"]
|
64
|
+
# Assert data type
|
65
|
+
assert type_ in out
|
66
|
+
# Check task name if BOLD
|
67
|
+
if type_ == "BOLD" and tasks is not None:
|
68
|
+
assert test_element[1] in out[type_]["path"].name
|
69
|
+
assert out[type_]["path"].exists()
|
70
|
+
assert out[type_]["path"].is_file()
|
71
|
+
# Asserts data type metadata
|
72
|
+
assert "meta" in out[type_]
|
73
|
+
meta = out[type_]["meta"]
|
135
74
|
assert "element" in meta
|
136
75
|
assert "subject" in meta["element"]
|
137
|
-
assert
|
76
|
+
assert test_element[0] == meta["element"]["subject"]
|
77
|
+
# Assert nested data type if not None
|
78
|
+
if nested_types is not None:
|
79
|
+
for nested_type in nested_types:
|
80
|
+
assert out[type_][nested_type]["path"].exists()
|
81
|
+
assert out[type_][nested_type]["path"].is_file()
|
138
82
|
|
139
83
|
|
140
84
|
@pytest.mark.parametrize(
|
junifer/datagrabber/utils.py
CHANGED
@@ -53,6 +53,17 @@ PATTERNS_SCHEMA = {
|
|
53
53
|
"mandatory": ["pattern"],
|
54
54
|
"optional": {},
|
55
55
|
},
|
56
|
+
"FreeSurfer": {
|
57
|
+
"mandatory": ["pattern"],
|
58
|
+
"optional": {
|
59
|
+
"aseg": {"mandatory": ["pattern"], "optional": []},
|
60
|
+
"norm": {"mandatory": ["pattern"], "optional": []},
|
61
|
+
"lh_white": {"mandatory": ["pattern"], "optional": []},
|
62
|
+
"rh_white": {"mandatory": ["pattern"], "optional": []},
|
63
|
+
"lh_pial": {"mandatory": ["pattern"], "optional": []},
|
64
|
+
"rh_pial": {"mandatory": ["pattern"], "optional": []},
|
65
|
+
},
|
66
|
+
},
|
56
67
|
}
|
57
68
|
|
58
69
|
|
junifer/datareader/default.py
CHANGED
@@ -103,8 +103,8 @@ class DefaultDataReader(PipelineStepMixin, UpdateMetaMixin):
|
|
103
103
|
params = {}
|
104
104
|
# For each type of data, try to read it
|
105
105
|
for type_key, type_val in input.items():
|
106
|
-
# Skip Warp data type
|
107
|
-
if type_key
|
106
|
+
# Skip Warp and FreeSurfer data type
|
107
|
+
if type_key in ["Warp", "FreeSurfer"]:
|
108
108
|
continue
|
109
109
|
|
110
110
|
# Check for malformed datagrabber specification
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.5.
|
3
|
+
Version: 0.0.5.dev110
|
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>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
junifer/__init__.py,sha256=x1UR2jUcrUdm2HNl-3Qvyi4UUrU6ms5qm2qcmNY7zZk,391
|
2
|
-
junifer/_version.py,sha256=
|
2
|
+
junifer/_version.py,sha256=0CYyZtK7X8YB7AsyaklZtJl2q0LTvCx3UPEiwmdAmQU,428
|
3
3
|
junifer/stats.py,sha256=jN22_qFvWYBU9ZIMnCSzN4iOscWnWrcrUPIdLeDkV64,6163
|
4
4
|
junifer/api/__init__.py,sha256=pSj8V8tmwOAQ3sshWJfRfB-n3z5bcJj3pHOBX4-8ONc,251
|
5
5
|
junifer/api/cli.py,sha256=53pews3mXkJ7DUDSkV51PbitYnuVAdQRkWG-gjO08Uw,16142
|
@@ -96,14 +96,14 @@ junifer/datagrabber/dmcc13_benchmark.py,sha256=se9F6QVw9WX22MNld33OQv_BtdW-yPvXX
|
|
96
96
|
junifer/datagrabber/multiple.py,sha256=eXQIsvSNvD8GuEITjMaMoi1GwoeyWXXbQMRi-f2qgc4,4923
|
97
97
|
junifer/datagrabber/pattern.py,sha256=4OcGSCwBpeQOj6_YZohJjRFC_L69y7MAKsoE4-XO2So,15949
|
98
98
|
junifer/datagrabber/pattern_datalad.py,sha256=R3LMeknT7tAXs2AN0XVPRf6tGkCMPgDfkNT2bfi7UNc,4526
|
99
|
-
junifer/datagrabber/utils.py,sha256=
|
99
|
+
junifer/datagrabber/utils.py,sha256=2ujwltVc__qPJ2RwnEhSSoC_RkDchGEBNw7bC0a3bvk,9898
|
100
100
|
junifer/datagrabber/aomic/__init__.py,sha256=R7yrRVBWsBW25CH0fw-KHpFwb_EC-MlPKDzssGfj5A0,281
|
101
|
-
junifer/datagrabber/aomic/id1000.py,sha256=
|
102
|
-
junifer/datagrabber/aomic/piop1.py,sha256=
|
103
|
-
junifer/datagrabber/aomic/piop2.py,sha256=
|
104
|
-
junifer/datagrabber/aomic/tests/test_id1000.py,sha256=
|
105
|
-
junifer/datagrabber/aomic/tests/test_piop1.py,sha256=
|
106
|
-
junifer/datagrabber/aomic/tests/test_piop2.py,sha256=
|
101
|
+
junifer/datagrabber/aomic/id1000.py,sha256=2Lhu3Wf-U3RRLgoWbrSQCGxfri3--OQTsk9nrowK5G4,7184
|
102
|
+
junifer/datagrabber/aomic/piop1.py,sha256=r_OsORrVAU6mbOxuergIxo0ZR0Msx_I8MyrfiT_gD3E,9603
|
103
|
+
junifer/datagrabber/aomic/piop2.py,sha256=Twu2yN4-h-aR3-ZCg0ERxI54HGxr6C64cmBo6Nq3TAI,9222
|
104
|
+
junifer/datagrabber/aomic/tests/test_id1000.py,sha256=AWacDroSxvRjzozFjyRlDpiJpPflYRfhDm_RANrYAKM,3283
|
105
|
+
junifer/datagrabber/aomic/tests/test_piop1.py,sha256=J9ei2HLzdJPciysWjRo33cbZsqPF1OEDySmQWWNvYuM,4820
|
106
|
+
junifer/datagrabber/aomic/tests/test_piop2.py,sha256=Bk23KvRse4clMTuC88YntSfJnJyTunafC79Y1OJwJI0,4166
|
107
107
|
junifer/datagrabber/hcp1200/__init__.py,sha256=zy4Qq1_m3vECEhioG-UDteco2b5cni_8xuElICaRtt4,189
|
108
108
|
junifer/datagrabber/hcp1200/datalad_hcp1200.py,sha256=p5Bbg09qoM46km9eFSlspwLwOe6LMJFSIZ9NC9E2lmc,2432
|
109
109
|
junifer/datagrabber/hcp1200/hcp1200.py,sha256=ohXHmrQHWjqRZSEXI6E5zla1d_t6LZTbv-cAj79w3PU,6091
|
@@ -116,7 +116,7 @@ junifer/datagrabber/tests/test_multiple.py,sha256=Mx3xfDrQiWG2W5MW24P5L2XiSeALpJ
|
|
116
116
|
junifer/datagrabber/tests/test_pattern.py,sha256=H55jYRPfT3rMsoIQOAnWJgw3nGrkU7m2xFa3-ed6NQE,9527
|
117
117
|
junifer/datagrabber/tests/test_pattern_datalad.py,sha256=hxw_aXBwHjUo-aUrHescBA2dn1bSJxh-0oV8495iIEA,6483
|
118
118
|
junifer/datareader/__init__.py,sha256=_vtrLX_vxlHFD90gPa3gWnhTuvfWM7Uzyj6y8ZPaWm8,259
|
119
|
-
junifer/datareader/default.py,sha256=
|
119
|
+
junifer/datareader/default.py,sha256=Md2q0hjoh454F-fmFFlyzwZMcu9vmFFT-akR42SSwUs,6711
|
120
120
|
junifer/datareader/tests/test_default_reader.py,sha256=9dPZSkba1YQjFsA0XwdUbx5sq8DVIEZoy_WfMAcvRus,5220
|
121
121
|
junifer/external/__init__.py,sha256=CBB7eQul2hf-WWwT_PYFV1MS9KkXlZBO7oQWWVLgB_I,110
|
122
122
|
junifer/external/h5io/h5io/__init__.py,sha256=LG7ru_Rt3EOE2H4PGYfBhC12Iax3yeTquZkd8TICiKk,469
|
@@ -253,10 +253,10 @@ junifer/utils/logging.py,sha256=furcU3XIUpUvnpe4PEwzWWIWgmH4j2ZA4MQdvSGWjj0,9216
|
|
253
253
|
junifer/utils/tests/test_fs.py,sha256=WQS7cKlKEZ742CIuiOYYpueeAhY9PqlastfDVpVVtvE,923
|
254
254
|
junifer/utils/tests/test_helpers.py,sha256=k5qqfxK8dFyuewTJyR1Qn6-nFaYNuVr0ysc18bfPjyU,929
|
255
255
|
junifer/utils/tests/test_logging.py,sha256=l8oo-AiBV7H6_IzlsNcj__cLeZBUvgIGoaMszD9VaJg,7754
|
256
|
-
junifer-0.0.5.
|
257
|
-
junifer-0.0.5.
|
258
|
-
junifer-0.0.5.
|
259
|
-
junifer-0.0.5.
|
260
|
-
junifer-0.0.5.
|
261
|
-
junifer-0.0.5.
|
262
|
-
junifer-0.0.5.
|
256
|
+
junifer-0.0.5.dev110.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
|
257
|
+
junifer-0.0.5.dev110.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
|
258
|
+
junifer-0.0.5.dev110.dist-info/METADATA,sha256=SgyLdexnard9sSn0O75ZjN0DxjMCQ8tElN68xB8KNtw,8235
|
259
|
+
junifer-0.0.5.dev110.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
260
|
+
junifer-0.0.5.dev110.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
|
261
|
+
junifer-0.0.5.dev110.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
|
262
|
+
junifer-0.0.5.dev110.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|