Skip to content

Commit 58e8931

Browse files
Testing spm (#298)
* tested spm macaque_0p5 macaque et baboon
1 parent 774be8c commit 58e8931

File tree

8 files changed

+170
-53
lines changed

8 files changed

+170
-53
lines changed

macapype/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '0.5.8'
1+
__version__ = '0.5.9'

macapype/nodes/segment.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def _run_interface(self, runtime):
6363

6464
struc = np.ones((size, size, size))
6565

66-
nii_data = nii_image.get_data()
66+
nii_data = nii_image.get_fdata()
6767

6868
nii_data = binary_fill_holes(nii_data, struc)
6969
out_image = nb.Nifti1Image(nii_data.astype(int),
@@ -285,7 +285,7 @@ def merge_masks(mask_csf_file, mask_wm_file, mask_gm_file, index_csf=1,
285285

286286
mask_csf = nib.load(mask_csf_file)
287287

288-
mask_csf_data = mask_csf.get_data()
288+
mask_csf_data = mask_csf.get_fdata()
289289

290290
indexed_mask_data = np.zeros(shape=mask_csf_data.shape)
291291

@@ -294,7 +294,7 @@ def merge_masks(mask_csf_file, mask_wm_file, mask_gm_file, index_csf=1,
294294
# gm
295295
mask_gm = nib.load(mask_gm_file)
296296

297-
mask_gm_data = mask_gm.get_data()
297+
mask_gm_data = mask_gm.get_fdata()
298298

299299
assert np.all(indexed_mask_data.shape == mask_gm_data.shape)
300300

@@ -303,7 +303,7 @@ def merge_masks(mask_csf_file, mask_wm_file, mask_gm_file, index_csf=1,
303303
# wm
304304
mask_wm = nib.load(mask_wm_file)
305305

306-
mask_wm_data = mask_wm.get_data()
306+
mask_wm_data = mask_wm.get_fdata()
307307

308308
assert np.all(indexed_mask_data.shape == mask_wm_data.shape)
309309

macapype/pipelines/full_pipelines.py

Lines changed: 83 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,21 @@ def create_full_spm_subpipes(
217217
outputnode, "native_denoised_T2", params,
218218
inter_val="LIN")
219219

220-
seg_pipe.connect(data_preparation_pipe, "outputnode.stereo_padded_T1",
221-
outputnode, "stereo_padded_T1")
220+
seg_pipe.connect(
221+
data_preparation_pipe, 'outputnode.stereo_T1',
222+
outputnode, "stereo_T1")
222223

223-
seg_pipe.connect(data_preparation_pipe, "outputnode.stereo_padded_T2",
224-
outputnode, "stereo_padded_T2")
224+
seg_pipe.connect(
225+
data_preparation_pipe, 'outputnode.stereo_T2',
226+
outputnode, "stereo_T2")
227+
228+
seg_pipe.connect(
229+
data_preparation_pipe, "outputnode.stereo_padded_T1",
230+
outputnode, "stereo_padded_T1")
231+
232+
seg_pipe.connect(
233+
data_preparation_pipe, "outputnode.stereo_padded_T2",
234+
outputnode, "stereo_padded_T2")
225235

226236
seg_pipe.connect(
227237
data_preparation_pipe, "outputnode.stereo_to_native_trans",
@@ -231,27 +241,29 @@ def create_full_spm_subpipes(
231241
data_preparation_pipe, "outputnode.native_to_stereo_trans",
232242
outputnode, 'native_to_stereo_trans')
233243

234-
# N4debias
235-
seg_pipe.connect(data_preparation_pipe,
236-
'outputnode.stereo_debiased_T1',
237-
outputnode, 'stereo_debiased_T1')
244+
if ("fast" in params["short_preparation_pipe"]
245+
or "N4debias" in params["short_preparation_pipe"]):
238246

239-
seg_pipe.connect(data_preparation_pipe,
240-
'outputnode.stereo_debiased_T2',
241-
outputnode, 'stereo_debiased_T2')
247+
# debiased
248+
seg_pipe.connect(
249+
data_preparation_pipe, 'outputnode.stereo_debiased_T1',
250+
outputnode, 'stereo_debiased_T1')
242251

243-
if pad and space == "native":
244-
pad_back(
245-
seg_pipe, data_preparation_pipe,
246-
data_preparation_pipe, "outputnode.stereo_debiased_T1",
247-
outputnode, "native_debiased_T1", params,
248-
inter_val="LIN")
252+
seg_pipe.connect(
253+
data_preparation_pipe, 'outputnode.stereo_debiased_T2',
254+
outputnode, 'stereo_debiased_T2')
249255

250-
pad_back(
251-
seg_pipe, data_preparation_pipe,
252-
data_preparation_pipe, "outputnode.stereo_debiased_T2",
253-
outputnode, "native_debiased_T2", params,
254-
inter_val="LIN")
256+
if pad:
257+
258+
pad_back(
259+
seg_pipe, data_preparation_pipe,
260+
data_preparation_pipe, "outputnode.stereo_debiased_T1",
261+
outputnode, "native_debiased_T1", params, inter_val="LIN")
262+
263+
pad_back(
264+
seg_pipe, data_preparation_pipe,
265+
data_preparation_pipe, "outputnode.stereo_debiased_T2",
266+
outputnode, "native_debiased_T2", params, inter_val="LIN")
255267

256268
# debias
257269
debias = NodeParams(T1xT2BiasFieldCorrection(),
@@ -292,14 +304,14 @@ def create_full_spm_subpipes(
292304
debias, "b")
293305

294306
# outputnode
295-
296307
if mask_file is None:
297308
seg_pipe.connect(debias, "debiased_mask_file",
298309
outputnode, "stereo_brain_mask")
299310
else:
300311
seg_pipe.connect(apply_crop_external_mask, "out_file",
301312
outputnode, "stereo_brain_mask")
302313

314+
# debiased brain
303315
seg_pipe.connect(debias, 't1_debiased_brain_file',
304316
outputnode, "stereo_masked_debiased_T1")
305317

@@ -325,13 +337,37 @@ def create_full_spm_subpipes(
325337
debias, "t2_debiased_brain_file",
326338
outputnode, "native_masked_debiased_T2", params, inter_val="LIN")
327339

328-
# Bias correction of cropped images
340+
# debiased if not processed in short_preparation_pipe
341+
if not ("fast" in params["short_preparation_pipe"]
342+
or "N4debias" in params["short_preparation_pipe"]):
343+
344+
seg_pipe.connect(
345+
debias, 't1_debiased_file',
346+
outputnode, 'stereo_debiased_T1')
347+
348+
seg_pipe.connect(
349+
debias, 't2_debiased_file',
350+
outputnode, 'stereo_debiased_T2')
351+
352+
if pad:
353+
pad_back(
354+
seg_pipe, data_preparation_pipe,
355+
debias, 't1_debiased_file',
356+
outputnode, "native_debiased_T1", params,
357+
inter_val="LIN")
358+
359+
pad_back(
360+
seg_pipe, data_preparation_pipe,
361+
debias, 't2_debiased_file',
362+
outputnode, "native_debiased_T2", params,
363+
inter_val="LIN")
364+
365+
# Iterative registration to the INIA19 template
329366
if "reg" not in params.keys():
330367

331368
print("No reg, skipping")
332369
return seg_pipe
333370

334-
# Iterative registration to the INIA19 template
335371
reg = NodeParams(IterREGBET(),
336372
params=parse_key(params, "reg"),
337373
name='reg')
@@ -1004,14 +1040,29 @@ def create_full_ants_subpipes(
10041040
seg_pipe.connect(data_preparation_pipe, "outputnode.stereo_padded_T2",
10051041
outputnode, "stereo_padded_T2")
10061042

1007-
# debiased
1008-
seg_pipe.connect(
1009-
data_preparation_pipe, 'outputnode.stereo_debiased_T1',
1010-
outputnode, 'stereo_debiased_T1')
1043+
if ("fast" in params["short_preparation_pipe"]
1044+
or "N4debias" in params["short_preparation_pipe"]):
10111045

1012-
seg_pipe.connect(
1013-
data_preparation_pipe, 'outputnode.stereo_debiased_T2',
1014-
outputnode, 'stereo_debiased_T2')
1046+
# debiased
1047+
seg_pipe.connect(
1048+
data_preparation_pipe, 'outputnode.stereo_debiased_T1',
1049+
outputnode, 'stereo_debiased_T1')
1050+
1051+
seg_pipe.connect(
1052+
data_preparation_pipe, 'outputnode.stereo_debiased_T2',
1053+
outputnode, 'stereo_debiased_T2')
1054+
1055+
if pad:
1056+
1057+
pad_back(
1058+
seg_pipe, data_preparation_pipe,
1059+
data_preparation_pipe, "outputnode.stereo_debiased_T1",
1060+
outputnode, "native_debiased_T1", params, inter_val="LIN")
1061+
1062+
pad_back(
1063+
seg_pipe, data_preparation_pipe,
1064+
data_preparation_pipe, "outputnode.stereo_debiased_T2",
1065+
outputnode, "native_debiased_T2", params, inter_val="LIN")
10151066

10161067
seg_pipe.connect(
10171068
data_preparation_pipe, "outputnode.stereo_to_native_trans",
@@ -1021,18 +1072,6 @@ def create_full_ants_subpipes(
10211072
data_preparation_pipe, "outputnode.native_to_stereo_trans",
10221073
outputnode, 'native_to_stereo_trans')
10231074

1024-
if pad:
1025-
1026-
pad_back(
1027-
seg_pipe, data_preparation_pipe,
1028-
data_preparation_pipe, "outputnode.stereo_debiased_T1",
1029-
outputnode, "native_debiased_T1", params, inter_val="LIN")
1030-
1031-
pad_back(
1032-
seg_pipe, data_preparation_pipe,
1033-
data_preparation_pipe, "outputnode.stereo_debiased_T2",
1034-
outputnode, "native_debiased_T2", params, inter_val="LIN")
1035-
10361075
# ################# extract mask
10371076
print("mask file {}".format(mask_file))
10381077

macapype/pipelines/prepare.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,9 +658,17 @@ def create_short_preparation_pipe(params, params_template={},
658658

659659
if "denoise" in params.keys():
660660
data_preparation_pipe.connect(
661-
denoise_T2, "output_image",
661+
denoise_T1, "output_image",
662662
outputnode, "stereo_debiased_T1")
663+
664+
data_preparation_pipe.connect(
665+
denoise_T2, "output_image",
666+
outputnode, "stereo_debiased_T2")
663667
else:
668+
data_preparation_pipe.connect(
669+
crop_aladin_pipe, "outputnode.stereo_T1",
670+
outputnode, "stereo_debiased_T1")
671+
664672
data_preparation_pipe.connect(
665673
apply_crop_aladin_T2, 'out_file',
666674
outputnode, "stereo_debiased_T2")

macapype/utils/subs.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
"T1w_roi_corrected_restore.nii.gz": "space-orig_desc-preproc_T1w.nii.gz",
1919

2020
"Segmentation_allineate": "space-template_desc-brain_dseg",
21-
"indexed_mask": "space-orig_desc-brain_dseg",
2221
"FLAIR_flirt_flirt": "space-inia19_FLAIR",
2322

2423
"T1w_":"",
@@ -28,6 +27,7 @@
2827
"_trans":"",
2928
"_roi":"",
3029
"_ROI":"",
30+
"_indexed": "",
3131
"_restore_debiased_brain":"",
3232
"_restore_debiased":"",
3333
"_restore_brain": "",

pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ dependencies = [
2525
"scikit-image",
2626
"nibabel",
2727
"numpy",
28-
"SimpleITK",
29-
"brainles-hd-bet==0.0.11"
28+
"SimpleITK"
3029
]
3130

3231
[project.optional-dependencies]
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"general":
3+
{
4+
"template_name": "inia19",
5+
"template_stereo_name": "NMT_v2.0_asym_0p5"
6+
},
7+
"short_preparation_pipe":
8+
{
9+
"crop_aladin_pipe":
10+
{
11+
"reg_T1_on_template":
12+
{
13+
"rig_only_flag":true
14+
},
15+
"reg_T1_on_template2":
16+
{
17+
"rig_only_flag":true
18+
}
19+
},
20+
"denoise":
21+
{
22+
"shrink_factor": 2
23+
}
24+
},
25+
"debias":
26+
{
27+
"s": 2
28+
},
29+
"reg":
30+
{
31+
"n": 2,
32+
"m": "ref",
33+
"dof": 12
34+
},
35+
"old_segment_pipe":
36+
{
37+
"segment":
38+
{
39+
"gm_output_type": [false, false, true],
40+
"wm_output_type": [false, false, true],
41+
"csf_output_type": [false, false, true]
42+
},
43+
"threshold_gm":
44+
{
45+
"thresh": 0.5
46+
},
47+
"threshold_wm":
48+
{
49+
"thresh": 0.5
50+
},
51+
"threshold_csf":
52+
{
53+
"thresh": 0.5
54+
}
55+
},
56+
"mask_from_seg_pipe":
57+
{
58+
"dilate_mask":
59+
{
60+
"kernel_shape": "sphere",
61+
"kernel_size": 2
62+
},
63+
"erode_mask":
64+
{
65+
"kernel_shape": "sphere",
66+
"kernel_size": 2
67+
}
68+
}
69+
}

workflows/segment_pnh.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ def create_main_workflow(cmd, data_dir, process_dir, soft, species, datatypes,
313313
exit(-1)
314314

315315
params_template_stereo = params_template
316+
params_template_brainmask = params_template
317+
params_template_seg = params_template
316318

317319
else:
318320
# use template from params

0 commit comments

Comments
 (0)