From 7272302723d329a562e3a6acc9a5a684e36af17a Mon Sep 17 00:00:00 2001 From: Oscar Esteban Date: Mon, 5 Oct 2015 20:23:14 +0200 Subject: [PATCH 1/3] Simplify tSNR, fix division warning --- nipype/algorithms/misc.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/nipype/algorithms/misc.py b/nipype/algorithms/misc.py index 8704860f39..f7be910f42 100644 --- a/nipype/algorithms/misc.py +++ b/nipype/algorithms/misc.py @@ -262,6 +262,11 @@ class TSNRInputSpec(BaseInterfaceInputSpec): in_file = InputMultiPath(File(exists=True), mandatory=True, desc='realigned 4D file or a list of 3D files') regress_poly = traits.Range(low=1, desc='Remove polynomials') + tsnr_file = File('tsnr.nii.gz', usedefault=True, desc='output tSNR file') + mean_file = File('mean.nii.gz', usedefault=True, desc='output mean file') + stddev_file = File('stdev.nii.gz', usedefault=True, desc='output tSNR file') + detrended_file = File('detrend.nii.gz', usedefault=True, + desc='input file after detrending') class TSNROutputSpec(TraitedSpec): @@ -287,24 +292,17 @@ class TSNR(BaseInterface): input_spec = TSNRInputSpec output_spec = TSNROutputSpec - def _gen_output_file_name(self, suffix=None): - _, base, ext = split_filename(self.inputs.in_file[0]) - if suffix in ['mean', 'stddev']: - return os.path.abspath(base + "_tsnr_" + suffix + ext) - elif suffix in ['detrended']: - return os.path.abspath(base + "_" + suffix + ext) - else: - return os.path.abspath(base + "_tsnr" + ext) - def _run_interface(self, runtime): img = nb.load(self.inputs.in_file[0]) header = img.get_header().copy() vollist = [nb.load(filename) for filename in self.inputs.in_file] data = np.concatenate([vol.get_data().reshape( vol.get_shape()[:3] + (-1,)) for vol in vollist], axis=3) + data = data.nan_to_num() if data.dtype.kind == 'i': header.set_data_dtype(np.float32) data = data.astype(np.float32) + if isdefined(self.inputs.regress_poly): timepoints = img.get_shape()[-1] X = np.ones((timepoints, 1)) @@ -318,16 +316,18 @@ def _run_interface(self, runtime): 0, 4) data = data - datahat img = nb.Nifti1Image(data, img.get_affine(), header) - nb.save(img, self._gen_output_file_name('detrended')) + nb.save(img, op.abspath(self.inputs.detrended_file)) + meanimg = np.mean(data, axis=3) stddevimg = np.std(data, axis=3) - tsnr = meanimg / stddevimg + tsnr = np.zeros_like(meanimg) + tsnr[stddevimg > 1.e-3] = meanimg[stddevimg > 1.e-3] / stddevimg[stddevimg > 1.e-3] img = nb.Nifti1Image(tsnr, img.get_affine(), header) - nb.save(img, self._gen_output_file_name()) + nb.save(img, op.abspath(self.inputs.tsnr_file)) img = nb.Nifti1Image(meanimg, img.get_affine(), header) - nb.save(img, self._gen_output_file_name('mean')) + nb.save(img, op.abspath(self.inputs.mean_file)) img = nb.Nifti1Image(stddevimg, img.get_affine(), header) - nb.save(img, self._gen_output_file_name('stddev')) + nb.save(img, op.abspath(self.inputs.stddev_file)) return runtime def _list_outputs(self): From d3c97e0748d6df0bba935af2b82881f89c0ca0a8 Mon Sep 17 00:00:00 2001 From: Oscar Esteban Date: Mon, 5 Oct 2015 20:26:15 +0200 Subject: [PATCH 2/3] missing update of the list_outputs --- nipype/algorithms/misc.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nipype/algorithms/misc.py b/nipype/algorithms/misc.py index f7be910f42..43157e71af 100644 --- a/nipype/algorithms/misc.py +++ b/nipype/algorithms/misc.py @@ -332,11 +332,11 @@ def _run_interface(self, runtime): def _list_outputs(self): outputs = self._outputs().get() - outputs['tsnr_file'] = self._gen_output_file_name() - outputs['mean_file'] = self._gen_output_file_name('mean') - outputs['stddev_file'] = self._gen_output_file_name('stddev') + for k in ['tsnr_file', 'mean_file', 'stddev_file']: + outputs[k] = op.abspath(getattr(self.inputs, k)) + if isdefined(self.inputs.regress_poly): - outputs['detrended_file'] = self._gen_output_file_name('detrended') + outputs['detrended_file'] = op.abspath(self.inputs.detrended_file) return outputs From 06b6ce7087d8f30b37c4cc4c03b963b7f99f6934 Mon Sep 17 00:00:00 2001 From: Oscar Esteban Date: Tue, 6 Oct 2015 15:12:51 +0200 Subject: [PATCH 3/3] add has_files False --- nipype/algorithms/misc.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nipype/algorithms/misc.py b/nipype/algorithms/misc.py index 43157e71af..aaa62a17d2 100644 --- a/nipype/algorithms/misc.py +++ b/nipype/algorithms/misc.py @@ -262,10 +262,13 @@ class TSNRInputSpec(BaseInterfaceInputSpec): in_file = InputMultiPath(File(exists=True), mandatory=True, desc='realigned 4D file or a list of 3D files') regress_poly = traits.Range(low=1, desc='Remove polynomials') - tsnr_file = File('tsnr.nii.gz', usedefault=True, desc='output tSNR file') - mean_file = File('mean.nii.gz', usedefault=True, desc='output mean file') - stddev_file = File('stdev.nii.gz', usedefault=True, desc='output tSNR file') - detrended_file = File('detrend.nii.gz', usedefault=True, + tsnr_file = File('tsnr.nii.gz', usedefault=True, hash_files=False, + desc='output tSNR file') + mean_file = File('mean.nii.gz', usedefault=True, hash_files=False, + desc='output mean file') + stddev_file = File('stdev.nii.gz', usedefault=True, hash_files=False, + desc='output tSNR file') + detrended_file = File('detrend.nii.gz', usedefault=True, hash_files=False, desc='input file after detrending')