|
17 | 17 | """Utlities for NIfTI images.""" |
18 | 18 |
|
19 | 19 | import os |
20 | | -from typing import Literal |
| 20 | +from typing import Literal, overload |
21 | 21 |
|
22 | 22 | import numpy as np |
23 | 23 | import nibabel as nib |
@@ -99,17 +99,33 @@ def inverse_nifti_values(image): |
99 | 99 | return nib.nifti1.Nifti1Image(out_data, img.affine) |
100 | 100 |
|
101 | 101 |
|
| 102 | +@overload |
102 | 103 | def orientation_node( |
103 | 104 | name: str, |
104 | 105 | orientation: Literal["RPI", "LPI", "RAI", "LAI", "RAS", "LAS", "RPS", "LPS"], |
105 | | -) -> pe.Node: |
| 106 | + node_type: type[pe.MapNode], |
| 107 | +) -> pe.MapNode: ... |
| 108 | +@overload |
| 109 | +def orientation_node( |
| 110 | + name: str, |
| 111 | + orientation: Literal["RPI", "LPI", "RAI", "LAI", "RAS", "LAS", "RPS", "LPS"], |
| 112 | + node_type: type[pe.Node], |
| 113 | +) -> pe.Node: ... |
| 114 | +def orientation_node( |
| 115 | + name: str, |
| 116 | + orientation: Literal["RPI", "LPI", "RAI", "LAI", "RAS", "LAS", "RPS", "LPS"], |
| 117 | + node_type: type[pe.Node | pe.MapNode] = pe.Node, |
| 118 | +) -> pe.Node | pe.MapNode: |
106 | 119 | """Return a node configured to resample an input with AFNI 3dresample.""" |
107 | | - return pe.Node( |
108 | | - interface=afni_utils.Resample( |
| 120 | + kwargs = { |
| 121 | + "interface": afni_utils.Resample( |
109 | 122 | orientation=orientation, |
110 | 123 | outputtype="NIFTI_GZ", |
111 | 124 | ), |
112 | | - name=name, |
113 | | - mem_gb=0, |
114 | | - mem_x=(0.0115, "in_file", "t"), |
115 | | - ) |
| 125 | + "name": name, |
| 126 | + "mem_gb": 0, |
| 127 | + "mem_x": (0.0115, "in_file", "t"), |
| 128 | + } |
| 129 | + if node_type == pe.MapNode: |
| 130 | + kwargs["iterfield"] = ["in_file", "out_file"] |
| 131 | + return node_type(**kwargs) |
0 commit comments