Skip to content

Commit 3551a97

Browse files
committed
fix: clean up tests and help messages
1 parent ca205ef commit 3551a97

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

nipype/algorithms/confounds.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -307,18 +307,21 @@ class CompCorInputSpec(BaseInterfaceInputSpec):
307307
desc='already realigned brain image (4D)')
308308
mask_files = InputMultiPath(File(exists=True),
309309
desc=('One or more mask files that determines '
310-
'ROI (3D)'))
310+
'ROI (3D). When more that one file is '
311+
'provided `merge_method` or '
312+
'`merge_index` must be provided'))
311313
merge_method = traits.Enum('union', 'intersect', 'none', xor=['mask_index'],
312314
requires=['mask_files'],
313315
desc=('Merge method if multiple masks are '
314-
'present - `union` aggregates all masks, '
315-
'`intersect` computes the truth value of '
316-
'all masks, `none` performs CompCor on '
316+
'present - `union` uses voxels included in'
317+
' at least one input mask, `intersect` '
318+
'uses only voxels present in all input '
319+
'masks, `none` performs CompCor on '
317320
'each mask individually'))
318321
mask_index = traits.Range(low=0, xor=['merge_method'],
319322
requires=['mask_files'],
320323
desc=('Position of mask in `mask_files` to use - '
321-
'first is the default'))
324+
'first is the default.'))
322325
components_file = traits.Str('components_file.txt', usedefault=True,
323326
desc='Filename to store physiological components')
324327
num_components = traits.Int(6, usedefault=True) # 6 for BOLD, 4 for ASL
@@ -327,9 +330,9 @@ class CompCorInputSpec(BaseInterfaceInputSpec):
327330
'pre-component extraction'))
328331
regress_poly_degree = traits.Range(low=1, default=1, usedefault=True,
329332
desc='the degree polynomial to use')
330-
header = traits.Str(desc=('the desired header for the output tsv file (one '
331-
'column). If undefined, will default to '
332-
'"CompCor"'))
333+
header_prefix = traits.Str(desc=('the desired header for the output tsv '
334+
'file (one column). If undefined, will '
335+
'default to "CompCor"'))
333336

334337

335338
class CompCorOutputSpec(TraitedSpec):
@@ -419,8 +422,8 @@ def _list_outputs(self):
419422

420423
def _make_headers(self, num_col):
421424
headers = []
422-
header = self.inputs.header if isdefined(self.inputs.header) else \
423-
self._header
425+
header = self.inputs.header_prefix if \
426+
isdefined(self.inputs.header_prefix) else self._header
424427
for i in range(num_col):
425428
headers.append(header + '{:02d}'.format(i))
426429
return '\t'.join(headers)
@@ -844,7 +847,12 @@ def combine_mask_files(mask_files, mask_method=None, mask_index=None):
844847

845848
if isdefined(mask_index) or not isdefined(mask_method):
846849
if not isdefined(mask_index):
847-
mask_index = 0
850+
if len(mask_files) == 1:
851+
mask_index = 0
852+
else:
853+
raise ValueError(('When more than one mask file is provided, '
854+
'one of merge_method or mask_index must be '
855+
'set'))
848856
if mask_index < len(mask_files):
849857
mask = nb.load(mask_files[mask_index], mmap=NUMPY_MMAP)
850858
return [mask]

nipype/algorithms/tests/test_compcor.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,13 @@ def test_compcor(self):
4747
['-0.1246655485', '-0.1235705610']]
4848

4949
self.run_cc(CompCor(realigned_file=self.realigned_file,
50-
mask_files=self.mask_files),
50+
mask_files=self.mask_files,
51+
mask_index=0),
5152
expected_components)
5253

5354
self.run_cc(ACompCor(realigned_file=self.realigned_file,
5455
mask_files=self.mask_files,
56+
mask_index=0,
5557
components_file='acc_components_file'),
5658
expected_components, 'aCompCor')
5759

@@ -63,7 +65,8 @@ def test_tcompcor(self):
6365
['0.4566907310', '0.6983205193'],
6466
['-0.7132557407', '0.1340170559'],
6567
['0.5022537643', '-0.5098322262'],
66-
['-0.1342351356', '0.1407855119']], 'tCompCor')
68+
['-0.1342351356', '0.1407855119']],
69+
'tCompCor')
6770

6871
def test_tcompcor_no_percentile(self):
6972
ccinterface = TCompCor(realigned_file=self.realigned_file)
@@ -75,12 +78,14 @@ def test_tcompcor_no_percentile(self):
7578

7679
def test_compcor_no_regress_poly(self):
7780
self.run_cc(CompCor(realigned_file=self.realigned_file,
78-
mask_files=self.mask_files,
79-
use_regress_poly=False), [['0.4451946442', '-0.7683311482'],
80-
['-0.4285129505', '-0.0926034137'],
81-
['0.5721540256', '0.5608764842'],
82-
['-0.5367548139', '0.0059943226'],
83-
['-0.0520809054', '0.2940637551']])
81+
mask_files=self.mask_files,
82+
mask_index=0,
83+
use_regress_poly=False),
84+
[['0.4451946442', '-0.7683311482'],
85+
['-0.4285129505', '-0.0926034137'],
86+
['0.5721540256', '0.5608764842'],
87+
['-0.5367548139', '0.0059943226'],
88+
['-0.0520809054', '0.2940637551']])
8489

8590
def test_tcompcor_asymmetric_dim(self):
8691
asymmetric_shape = (2, 3, 4, 5)
@@ -96,7 +101,8 @@ def test_compcor_bad_input_shapes(self):
96101

97102
for data_shape in (shape_less_than, shape_more_than):
98103
data_file = utils.save_toy_nii(np.zeros(data_shape), 'temp.nii')
99-
interface = CompCor(realigned_file=data_file, mask_files=self.mask_files)
104+
interface = CompCor(realigned_file=data_file,
105+
mask_files=self.mask_files[0])
100106
with pytest.raises(ValueError, message="Dimension mismatch"): interface.run()
101107

102108
def test_tcompcor_bad_input_dim(self):
@@ -124,6 +130,12 @@ def test_tcompcor_index_mask(self):
124130
assert np.array_equal(nb.load('mask_000.nii.gz').get_data(),
125131
([[[0,0],[0,0]],[[0,1],[0,0]]]))
126132

133+
def test_tcompcor_multi_mask_no_index(self):
134+
interface = TCompCor(realigned_file=self.realigned_file,
135+
mask_files=self.mask_files)
136+
with pytest.raises(ValueError, message='more than one mask file'):
137+
interface.run()
138+
127139
def run_cc(self, ccinterface, expected_components, expected_header='CompCor'):
128140
# run
129141
ccresult = ccinterface.run()
@@ -136,11 +148,13 @@ def run_cc(self, ccinterface, expected_components, expected_header='CompCor'):
136148
assert ccinterface.inputs.num_components == 6
137149

138150
with open(ccresult.outputs.components_file, 'r') as components_file:
139-
expected_n_components = min(ccinterface.inputs.num_components, self.fake_data.shape[3])
151+
expected_n_components = min(ccinterface.inputs.num_components,
152+
self.fake_data.shape[3])
140153

141154
components_data = [line.split('\t') for line in components_file]
142155

143-
header = components_data.pop(0) # the first item will be '#', we can throw it out
156+
# the first item will be '#', we can throw it out
157+
header = components_data.pop(0)
144158
expected_header = [expected_header + '{:02d}'.format(i) for i in
145159
range(expected_n_components)]
146160
for i, heading in enumerate(header):

0 commit comments

Comments
 (0)