Skip to content

Commit bf4e43b

Browse files
authored
Merge pull request #301 from nipreps/fix/goodvoxels
FIX: Goodvoxel projection
2 parents d649e3d + 8002596 commit bf4e43b

20 files changed

+1511
-288
lines changed

.circleci/bcp_anat_outputs.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,20 @@ sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_from-MNIInfant+1_to-T1w_mode-image_xf
2323
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_from-T1w_to-fsnative_mode-image_xfm.txt
2424
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_from-T1w_to-MNIInfant+1_mode-image_xfm.h5
2525
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_curv.shape.gii
26+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_desc-reg_sphere.surf.gii
2627
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_inflated.surf.gii
2728
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_midthickness.surf.gii
2829
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_pial.surf.gii
30+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_space-fsLR_desc-reg_sphere.surf.gii
2931
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_sulc.shape.gii
3032
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_thickness.shape.gii
3133
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_white.surf.gii
3234
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_curv.shape.gii
35+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_desc-reg_sphere.surf.gii
3336
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_inflated.surf.gii
3437
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_midthickness.surf.gii
3538
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_pial.surf.gii
39+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_space-fsLR_desc-reg_sphere.surf.gii
3640
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_sulc.shape.gii
3741
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_thickness.shape.gii
3842
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_white.surf.gii

.circleci/bcp_full_outputs.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,20 @@ sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_from-MNIInfant+1_to-T1w_mode-image_xf
2323
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_from-T1w_to-fsnative_mode-image_xfm.txt
2424
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_from-T1w_to-MNIInfant+1_mode-image_xfm.h5
2525
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_curv.shape.gii
26+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_desc-reg_sphere.surf.gii
2627
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_inflated.surf.gii
2728
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_midthickness.surf.gii
2829
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_pial.surf.gii
30+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_space-fsLR_desc-reg_sphere.surf.gii
2931
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_sulc.shape.gii
3032
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_thickness.shape.gii
3133
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-L_white.surf.gii
3234
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_curv.shape.gii
35+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_desc-reg_sphere.surf.gii
3336
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_inflated.surf.gii
3437
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_midthickness.surf.gii
3538
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_pial.surf.gii
39+
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_space-fsLR_desc-reg_sphere.surf.gii
3640
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_sulc.shape.gii
3741
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_thickness.shape.gii
3842
sub-01/ses-1mo/anat/sub-01_ses-1mo_run-001_hemi-R_white.surf.gii

nibabies/data/__init__.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import atexit
2+
from contextlib import ExitStack
3+
from pathlib import Path
4+
5+
try:
6+
from functools import cache
7+
except ImportError: # PY38
8+
from functools import lru_cache as cache
9+
10+
try: # Prefer backport to leave consistency to dependency spec
11+
from importlib_resources import as_file, files
12+
except ImportError:
13+
from importlib.resources import as_file, files
14+
15+
__all__ = ["load_resource"]
16+
17+
exit_stack = ExitStack()
18+
atexit.register(exit_stack.close)
19+
20+
path = files(__package__)
21+
22+
23+
@cache
24+
def load_resource(fname: str) -> Path:
25+
return exit_stack.enter_context(as_file(path.joinpath(fname)))

nibabies/data/atlases/dHCP/dHCP.week42.L.sphere.surf.gii

Lines changed: 93 additions & 0 deletions
Large diffs are not rendered by default.

nibabies/data/atlases/dHCP/dHCP.week42.R.sphere.surf.gii

Lines changed: 93 additions & 0 deletions
Large diffs are not rendered by default.

nibabies/data/atlases/mcribs/lh.sphere.reg.dHCP42.surf.gii

Lines changed: 67 additions & 0 deletions
Large diffs are not rendered by default.

nibabies/data/atlases/mcribs/lh.sphere.reg2.surf.gii

Lines changed: 67 additions & 0 deletions
Large diffs are not rendered by default.

nibabies/data/atlases/mcribs/rh.sphere.reg.dHCP42.surf.gii

Lines changed: 67 additions & 0 deletions
Large diffs are not rendered by default.

nibabies/data/atlases/mcribs/rh.sphere.reg2.surf.gii

Lines changed: 67 additions & 0 deletions
Large diffs are not rendered by default.

nibabies/interfaces/utils.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import os
2+
import re
3+
4+
from nipype.interfaces.base import (
5+
BaseInterfaceInputSpec,
6+
File,
7+
InputMultiObject,
8+
OutputMultiObject,
9+
SimpleInterface,
10+
TraitedSpec,
11+
traits,
12+
)
13+
14+
15+
class CiftiSelectInputSpec(BaseInterfaceInputSpec):
16+
hemi = traits.Enum("L", "R", desc="Hemisphere")
17+
surfaces = InputMultiObject(File(exists=True), desc="Surfaces")
18+
morphometrics = InputMultiObject(File(exists=True), desc="Surface morphometrics")
19+
spherical_registrations = InputMultiObject(
20+
File(exists=True), desc="Spherical registration to fsLR"
21+
)
22+
template_spheres = InputMultiObject(File(exists=True), desc="fsLR sphere")
23+
template_surfaces = InputMultiObject(File(exists=True), desc="fsLR midthickness")
24+
template_rois = InputMultiObject(File(exists=True), desc="fsLR ROIs")
25+
26+
27+
class CiftiSelectOutputSpec(TraitedSpec):
28+
white = OutputMultiObject(File, desc="white surface")
29+
pial = OutputMultiObject(File, desc="pial surface")
30+
midthickness = OutputMultiObject(File, desc="midthickness surface")
31+
thickness = OutputMultiObject(File, desc="thickness surface")
32+
sphere_reg = OutputMultiObject(File, desc="fsLR spherical regisration")
33+
template_sphere = OutputMultiObject(File, desc="fsLR sphere")
34+
template_surface = OutputMultiObject(File, desc="fsLR surface (midthickness)")
35+
template_roi = OutputMultiObject(File, desc="fsLR ROIs")
36+
37+
38+
class CiftiSelect(SimpleInterface):
39+
input_spec = CiftiSelectInputSpec
40+
output_spec = CiftiSelectOutputSpec
41+
42+
def _run_interface(self, runtime):
43+
idx = 0 if self.inputs.hemi == "L" else 1
44+
all_surfaces = (self.inputs.surfaces or []) + (self.inputs.morphometrics or [])
45+
container = {
46+
'white': [],
47+
'pial': [],
48+
'midthickness': [],
49+
'thickness': [],
50+
'sphere_reg': self.inputs.spherical_registrations or [],
51+
'template_sphere': self.inputs.template_spheres or [],
52+
'template_surface': self.inputs.template_surfaces or [],
53+
'template_roi': self.inputs.template_rois or [],
54+
}
55+
find_name = re.compile(r'(?:^|[^d])(?P<name>white|pial|midthickness|thickness)')
56+
for surface in all_surfaces:
57+
match = find_name.search(os.path.basename(surface))
58+
if match:
59+
container[match.group('name')].append(surface)
60+
61+
for name, vals in container.items():
62+
if vals:
63+
self._results[name] = sorted(vals, key=os.path.basename)[idx]
64+
return runtime

0 commit comments

Comments
 (0)