Skip to content

Commit 852e09a

Browse files
authored
Merge pull request #1884 from effigies/test/bbregister
TEST: Multi-version BBRegister test
2 parents 569eb68 + 49e7daa commit 852e09a

File tree

4 files changed

+108
-73
lines changed

4 files changed

+108
-73
lines changed

nipype/interfaces/freesurfer/preprocess.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,9 @@ class BBRegisterInputSpec6(BBRegisterInputSpec):
10381038
init = traits.Enum('coreg', 'rr', 'spm', 'fsl', 'header', 'best', argstr='--init-%s',
10391039
xor=['init_reg_file'],
10401040
desc='initialize registration with mri_coreg, spm, fsl, or header')
1041+
init_reg_file = File(exists=True, argstr='--init-reg %s',
1042+
desc='existing registration file',
1043+
xor=['init'])
10411044

10421045

10431046
class BBRegisterOutputSpec(TraitedSpec):
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from __future__ import unicode_literals
2+
from ..preprocess import BBRegister, BBRegisterInputSpec6
3+
4+
5+
def test_BBRegister_inputs():
6+
input_map_5_3 = dict(
7+
args=dict(argstr='%s',),
8+
contrast_type=dict(argstr='--%s', mandatory=True,),
9+
environ=dict(nohash=True, usedefault=True,),
10+
epi_mask=dict(argstr='--epi-mask',),
11+
ignore_exception=dict(nohash=True, usedefault=True,),
12+
init=dict(argstr='--init-%s', mandatory=True, xor=['init_reg_file'],),
13+
init_reg_file=dict(argstr='--init-reg %s', mandatory=True, xor=['init'],),
14+
intermediate_file=dict(argstr='--int %s',),
15+
out_fsl_file=dict(argstr='--fslmat %s',),
16+
out_reg_file=dict(argstr='--reg %s', genfile=True,),
17+
reg_frame=dict(argstr='--frame %d', xor=['reg_middle_frame'],),
18+
reg_middle_frame=dict(argstr='--mid-frame', xor=['reg_frame'],),
19+
registered_file=dict(argstr='--o %s',),
20+
source_file=dict(argstr='--mov %s', copyfile=False, mandatory=True,),
21+
spm_nifti=dict(argstr='--spm-nii',),
22+
subject_id=dict(argstr='--s %s', mandatory=True,),
23+
subjects_dir=dict(),
24+
terminal_output=dict(nohash=True,),
25+
)
26+
input_map_6_0 = dict(
27+
args=dict(argstr='%s',),
28+
contrast_type=dict(argstr='--%s', mandatory=True,),
29+
environ=dict(nohash=True, usedefault=True,),
30+
epi_mask=dict(argstr='--epi-mask',),
31+
ignore_exception=dict(nohash=True, usedefault=True,),
32+
init=dict(argstr='--init-%s', xor=['init_reg_file'],),
33+
init_reg_file=dict(argstr='--init-reg %s', xor=['init'],),
34+
intermediate_file=dict(argstr='--int %s',),
35+
out_fsl_file=dict(argstr='--fslmat %s',),
36+
out_reg_file=dict(argstr='--reg %s', genfile=True,),
37+
reg_frame=dict(argstr='--frame %d', xor=['reg_middle_frame'],),
38+
reg_middle_frame=dict(argstr='--mid-frame', xor=['reg_frame'],),
39+
registered_file=dict(argstr='--o %s',),
40+
source_file=dict(argstr='--mov %s', copyfile=False, mandatory=True,),
41+
spm_nifti=dict(argstr='--spm-nii',),
42+
subject_id=dict(argstr='--s %s', mandatory=True,),
43+
subjects_dir=dict(),
44+
terminal_output=dict(nohash=True,),
45+
)
46+
47+
instance = BBRegister()
48+
if isinstance(instance.inputs, BBRegisterInputSpec6):
49+
input_map = input_map_6_0
50+
else:
51+
input_map = input_map_5_3
52+
53+
for key, metadata in list(input_map.items()):
54+
for metakey, value in list(metadata.items()):
55+
assert getattr(instance.inputs.traits()[key], metakey) == value
56+
57+
58+
def test_BBRegister_outputs():
59+
output_map = dict(min_cost_file=dict(),
60+
out_fsl_file=dict(),
61+
out_reg_file=dict(),
62+
registered_file=dict(),
63+
)
64+
outputs = BBRegister.output_spec()
65+
66+
for key, metadata in list(output_map.items()):
67+
for metakey, value in list(metadata.items()):
68+
assert getattr(outputs.traits()[key], metakey) == value

nipype/interfaces/freesurfer/tests/test_auto_BBRegister.py

Lines changed: 0 additions & 72 deletions
This file was deleted.

nipype/interfaces/freesurfer/tests/test_preprocess.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import pytest
77
from nipype.testing.fixtures import create_files_in_directory
88

9-
import nipype.interfaces.freesurfer as freesurfer
9+
from nipype.interfaces import freesurfer
10+
from nipype.interfaces.freesurfer.preprocess import FSVersion
11+
from nipype import LooseVersion
1012

1113

1214
@pytest.mark.skipif(freesurfer.no_freesurfer(), reason="freesurfer is not installed")
@@ -118,3 +120,37 @@ def test_mandatory_outvol(create_files_in_directory):
118120
iterations=4)
119121
assert mni2.cmdline == ('mri_nu_correct.mni --i %s --n 4 --o bias_corrected_output'
120122
% filelist[0])
123+
124+
@pytest.mark.skipif(freesurfer.no_freesurfer(), reason="freesurfer is not installed")
125+
def test_bbregister(create_files_in_directory):
126+
filelist, outdir = create_files_in_directory
127+
bbr = freesurfer.BBRegister()
128+
129+
# make sure command gets called
130+
assert bbr.cmd == "bbregister"
131+
132+
# test raising error with mandatory args absent
133+
with pytest.raises(ValueError):
134+
bbr.cmdline
135+
136+
bbr.inputs.subject_id = 'fsaverage'
137+
bbr.inputs.source_file = filelist[0]
138+
bbr.inputs.contrast_type = 't2'
139+
140+
# Check that 'init' is mandatory in FS < 6, but not in 6+
141+
if LooseVersion(FSVersion) < LooseVersion("6.0.0"):
142+
with pytest.raises(ValueError):
143+
bbr.cmdline
144+
else:
145+
bbr.cmdline
146+
147+
bbr.inputs.init = 'fsl'
148+
149+
base, ext = os.path.splitext(os.path.basename(filelist[0]))
150+
if ext == '.gz':
151+
base, _ = os.path.splitext(base)
152+
153+
assert bbr.cmdline == ('bbregister --t2 --init-fsl '
154+
'--reg {base}_bbreg_fsaverage.dat '
155+
'--mov {full} --s fsaverage'.format(
156+
full=filelist[0], base=base))

0 commit comments

Comments
 (0)