Skip to content

Commit 6f4fc19

Browse files
committed
allow mask naming in metadata
1 parent 114e6d4 commit 6f4fc19

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

nipype/algorithms/confounds.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,10 @@ class CompCorInputSpec(BaseInterfaceInputSpec):
386386
requires=['mask_files'],
387387
desc=('Position of mask in `mask_files` to use - '
388388
'first is the default.'))
389+
mask_names = traits.List(traits.Str,
390+
desc='Names for provided masks (for printing into metadata). '
391+
'If provided, it must be as long as the final mask list '
392+
'(after any merge and indexing operations).')
389393
components_file = traits.Str(
390394
'components_file.txt',
391395
usedefault=True,
@@ -563,7 +567,7 @@ def _run_interface(self, runtime):
563567
components, filter_basis, metadata = compute_noise_components(
564568
imgseries.get_data(), mask_images, self.inputs.num_components,
565569
self.inputs.pre_filter, degree, self.inputs.high_pass_cutoff, TR,
566-
self.inputs.failure_mode)
570+
self.inputs.failure_mode, self.inputs.mask_names)
567571

568572
if skip_vols:
569573
old_comp = components
@@ -612,13 +616,11 @@ def _run_interface(self, runtime):
612616

613617
if self.inputs.save_metadata:
614618
metadata_file = self._list_outputs()['metadata_file']
615-
np.savetxt(
616-
metadata_file,
617-
np.vstack(metadata.values()).T,
618-
fmt=['%s', b'%.10f', b'%.10f', b'%.10f'],
619-
delimiter='\t',
620-
header='\t'.join(list(metadata.keys())),
621-
comments='')
619+
with open(metadata_file, 'w') as f:
620+
f.write('{}\t{}\t{}\t{}\n'.format(*list(metadata.keys())))
621+
for i in zip(*metadata.values()):
622+
f.write('{0[0]}\t{0[1]:.10f}\t{0[2]:.10f}\t'
623+
'{0[3]:.10f}\n'.format(i))
622624

623625
return runtime
624626

@@ -650,6 +652,9 @@ def _make_headers(self, num_col):
650652
headers = ['{}{:02d}'.format(header, i) for i in range(num_col)]
651653
return '\t'.join(headers)
652654

655+
def _print_metadata(self, x, f):
656+
f.write('{0[0]}\t{0[1]:.10f}\t{0[2]:.10f}\t{0[3]:.10f}\n'.format(x))
657+
653658

654659
class ACompCor(CompCor):
655660
"""
@@ -1170,7 +1175,8 @@ def combine_mask_files(mask_files, mask_method=None, mask_index=None):
11701175

11711176
def compute_noise_components(imgseries, mask_images, components_criterion=0.5,
11721177
filter_type=False, degree=0, period_cut=128,
1173-
repetition_time=None, failure_mode='error'):
1178+
repetition_time=None, failure_mode='error',
1179+
mask_names=''):
11741180
"""Compute the noise components from the imgseries for each mask
11751181
11761182
Parameters
@@ -1213,7 +1219,9 @@ def compute_noise_components(imgseries, mask_images, components_criterion=0.5,
12131219
"""
12141220
components = None
12151221
basis = np.array([])
1216-
for i, img in enumerate(mask_images):
1222+
if not mask_names:
1223+
mask_names = range(len(mask_images))
1224+
for i, img in zip(mask_names, mask_images):
12171225
mask = img.get_data().astype(np.bool).squeeze()
12181226
if imgseries.shape[:3] != mask.shape:
12191227
raise ValueError(

0 commit comments

Comments
 (0)