Skip to content

Commit c9aa6d6

Browse files
author
Shoshana Berleant
committed
enable extra_regressors (needed by rsfmri_surface_vol...)
1 parent 6869a5f commit c9aa6d6

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

nipype/algorithms/compcor.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class CompCorInputSpec(BaseInterfaceInputSpec):
2323
'pre-component extraction')
2424
regress_poly_degree = traits.Range(low=1, default=1, usedefault=True,
2525
desc='the degree polynomial to use')
26+
extra_regressors = File(exists=True, mandatory=False,
27+
desc='additional regressors to add')
2628

2729
class CompCorOutputSpec(TraitedSpec):
2830
components_file = File(exists=True,
@@ -75,6 +77,10 @@ def _run_interface(self, runtime):
7577
# principal components using a singular value decomposition."
7678
u, _, _ = linalg.svd(M, full_matrices=False)
7779
components = u[:, :self.inputs.num_components]
80+
if self.inputs.extra_regressors:
81+
components = self._add_extras(components,
82+
self.inputs.extra_regressors)
83+
7884
components_file = os.path.join(os.getcwd(), self.inputs.components_file)
7985
np.savetxt(components_file, components, fmt="%.10f")
8086
return runtime
@@ -92,6 +98,10 @@ def _compute_tSTD(self, M, x):
9298
stdM[np.isinf(stdM)] = x
9399
return stdM
94100

101+
def _add_extras(self, components, extra_regressors):
102+
regressors = np.genfromtxt(self.inputs.extra_regressors)
103+
return np.hstack((components, regressors))
104+
95105
class TCompCor(CompCor):
96106

97107
def _run_interface(self, runtime):

nipype/algorithms/tests/test_compcor.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,38 @@ def setUp(self):
2727
noise = np.fromfunction(self.fake_noise_fun, self.fake_data.shape)
2828
self.realigned_file = utils.save_toy_nii(self.fake_data + noise,
2929
self.filenames['functionalnii'])
30-
31-
def test_compcor(self):
3230
mask = np.ones(self.fake_data.shape[:3])
3331
mask[0,0,0] = 0
3432
mask[0,0,1] = 0
35-
mask_file = utils.save_toy_nii(mask, self.filenames['masknii'])
33+
self.mask_file = utils.save_toy_nii(mask, self.filenames['masknii'])
3634

35+
def test_compcor(self):
3736
expected_components = [['-0.1989607212', '-0.5753813646'],
3837
['0.5692369697', '0.5674945949'],
3938
['-0.6662573243', '0.4675843432'],
4039
['0.4206466244', '-0.3361270124'],
4140
['-0.1246655485', '-0.1235705610']]
4241

4342
ccresult = self.run_cc(CompCor(realigned_file=self.realigned_file,
44-
mask_file=mask_file),
43+
mask_file=self.mask_file),
4544
expected_components)
4645

4746
accresult = self.run_cc(ACompCor(realigned_file=self.realigned_file,
48-
mask_file=mask_file,
47+
mask_file=self.mask_file,
4948
components_file='acc_components_file'),
5049
expected_components)
5150

5251
assert_equal(os.path.getsize(ccresult.outputs.components_file),
5352
os.path.getsize(accresult.outputs.components_file))
5453

54+
@mock.patch('nipype.algorithms.compcor.CompCor._add_extras')
55+
def test_compcor_with_extra_regressors(self, mock_add_extras):
56+
regressors_file ='regress.txt'
57+
open(regressors_file, 'a').close() # make sure file exists
58+
CompCor(realigned_file=self.realigned_file, mask_file=self.mask_file,
59+
extra_regressors=regressors_file).run()
60+
assert_true(mock_add_extras.called)
61+
5562
def test_tcompcor(self):
5663
ccinterface = TCompCor(realigned_file=self.realigned_file)
5764
self.run_cc(ccinterface, [['-0.2846272268'], ['0.7115680670'],

0 commit comments

Comments
 (0)