Skip to content

Commit 4237bc0

Browse files
committed
update compcor code in workflows
1 parent 9bdf166 commit 4237bc0

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

nipype/workflows/rsfmri/fsl/resting.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,26 @@ def extract_noise_components(realigned_file, noise_mask_file, num_components):
1313
from nibabel import load
1414
import numpy as np
1515
import scipy as sp
16-
from scipy.signal import detrend
1716
imgseries = load(realigned_file)
18-
noise_mask = load(noise_mask_file)
19-
voxel_timecourses = imgseries.get_data()[np.nonzero(noise_mask.get_data())]
20-
for timecourse in voxel_timecourses:
21-
timecourse[:] = detrend(timecourse, type='constant')
22-
u,s,v = sp.linalg.svd(voxel_timecourses, full_matrices=False)
17+
components = None
18+
mask = load(noise_mask_file).get_data()
19+
voxel_timecourses = imgseries.get_data()[mask > 0]
20+
voxel_timecourses[np.isnan(np.sum(voxel_timecourses, axis=1)), :] = 0
21+
# remove mean and normalize by variance
22+
# voxel_timecourses.shape == [nvoxels, time]
23+
X = voxel_timecourses.T
24+
stdX = np.std(X, axis=0)
25+
stdX[stdX == 0] = 1.
26+
stdX[np.isnan(stdX)] = 1.
27+
stdX[np.isinf(stdX)] = 1.
28+
X = (X - np.mean(X, axis=0))/stdX
29+
u, _, _ = sp.linalg.svd(X, full_matrices=False)
30+
if components is None:
31+
components = u[:, :num_components]
32+
else:
33+
components = np.hstack((components, u[:, :num_components]))
2334
components_file = os.path.join(os.getcwd(), 'noise_components.txt')
24-
np.savetxt(components_file, v[:num_components, :].T)
35+
np.savetxt(components_file, components, fmt="%.10f")
2536
return components_file
2637

2738
def select_volume(filename, which):

0 commit comments

Comments
 (0)