Skip to content

Commit 40199f1

Browse files
authored
Merge pull request #3577 from manuegrx/bugfix_spm_model
add contrast outputs for EstimatedModel
2 parents b4cc4db + 1467f1c commit 40199f1

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

nipype/interfaces/spm/model.py

+51
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,34 @@ class EstimateModelOutputSpec(TraitedSpec):
245245
ImageFileSPM(exists=True),
246246
desc="Images of the standard deviation of parameter posteriors",
247247
)
248+
con_images = OutputMultiPath(
249+
File(exists=True),
250+
desc=(
251+
"contrast images from a t-contrast "
252+
"(created if factor_info used in Level1Design)"
253+
),
254+
)
255+
spmT_images = OutputMultiPath(
256+
File(exists=True),
257+
desc=(
258+
"stat images from a t-contrast"
259+
"(created if factor_info used in Level1Design)"
260+
),
261+
)
262+
ess_images = OutputMultiPath(
263+
File(exists=True),
264+
desc=(
265+
"contrast images from an F-contrast"
266+
"(created if factor_info used in Level1Design)"
267+
),
268+
)
269+
spmF_images = OutputMultiPath(
270+
File(exists=True),
271+
desc=(
272+
"stat images from an F-contrast"
273+
"(created if factor_info used in Level1Design)"
274+
),
275+
)
248276

249277

250278
class EstimateModel(SPMCommand):
@@ -310,6 +338,29 @@ def _list_outputs(self):
310338
outputs["residual_images"] = glob(os.path.join(pth, "Res_*"))
311339
if betas:
312340
outputs["beta_images"] = [os.path.join(pth, beta) for beta in betas]
341+
# When 'factor_info' is used in Level1Design
342+
# spm automatically creates contrast
343+
try:
344+
contrast = [c.Vcon[0][0].fname[0] for c in spm["SPM"][0, 0].xCon[0]]
345+
contrast_spm = [c.Vspm[0][0].fname[0] for c in spm["SPM"][0, 0].xCon[0]]
346+
except Exception:
347+
contrast = []
348+
contrast_spm = []
349+
350+
if contrast:
351+
outputs["con_images"] = [
352+
os.path.join(pth, cont) for cont in contrast if 'con' in cont
353+
]
354+
outputs["ess_images"] = [
355+
os.path.join(pth, cont) for cont in contrast if 'ess' in cont
356+
]
357+
if contrast_spm:
358+
outputs["spmT_images"] = [
359+
os.path.join(pth, cont) for cont in contrast_spm if 'spmT' in cont
360+
]
361+
outputs["spmF_images"] = [
362+
os.path.join(pth, cont) for cont in contrast_spm if 'spmF' in cont
363+
]
313364

314365
outputs["mask_image"] = os.path.join(pth, f"mask.{outtype}")
315366
outputs["spm_mat_file"] = os.path.join(pth, "SPM.mat")

nipype/interfaces/spm/tests/test_auto_EstimateModel.py

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def test_EstimateModel_outputs():
4646
SDbetas=dict(),
4747
SDerror=dict(),
4848
beta_images=dict(),
49+
con_images=dict(),
50+
ess_images=dict(),
4951
labels=dict(
5052
extensions=[".hdr", ".img", ".img.gz", ".nii"],
5153
),
@@ -56,6 +58,8 @@ def test_EstimateModel_outputs():
5658
extensions=[".hdr", ".img", ".img.gz", ".nii"],
5759
),
5860
residual_images=dict(),
61+
spmF_images=dict(),
62+
spmT_images=dict(),
5963
spm_mat_file=dict(
6064
extensions=None,
6165
),

0 commit comments

Comments
 (0)