From 9b6c995c9076f75d0a6205291ed251f846802262 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Tue, 26 May 2020 13:30:22 -0400 Subject: [PATCH 1/4] FIX: coerce dataobj to desired data dtype --- niworkflows/interfaces/bids.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/niworkflows/interfaces/bids.py b/niworkflows/interfaces/bids.py index 1f3b784cb60..e8d1f91ffa1 100644 --- a/niworkflows/interfaces/bids.py +++ b/niworkflows/interfaces/bids.py @@ -596,8 +596,16 @@ def _run_interface(self, runtime): # load updated NIfTI nii = nb.load(out_file, mmap=False) data_dtype = np.dtype(data_dtype) - if nii.get_data_dtype() != data_dtype: + orig_dtype = nii.get_data_dtype() + if orig_dtype != data_dtype: + LOGGER.warning( + f"Changing {out_file} dtype from {orig_dtype} to {data_dtype}" + ) + # coerce dataobj to new data dtype + new_data = np.asanyarray(nii.dataobj).astype(data_dtype) + # and set header to match nii.set_data_dtype(data_dtype) + nii = nii.__class__(new_data, nii.affine, nii.header) nii.to_filename(out_file) if len(self._results["out_file"]) == 1: From 27bc82e02971056262080f84f7a9124183159d5b Mon Sep 17 00:00:00 2001 From: Mathias Goncalves Date: Tue, 26 May 2020 13:43:00 -0400 Subject: [PATCH 2/4] Update niworkflows/interfaces/bids.py Co-authored-by: Oscar Esteban --- niworkflows/interfaces/bids.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/niworkflows/interfaces/bids.py b/niworkflows/interfaces/bids.py index e8d1f91ffa1..0743776f7e9 100644 --- a/niworkflows/interfaces/bids.py +++ b/niworkflows/interfaces/bids.py @@ -602,7 +602,7 @@ def _run_interface(self, runtime): f"Changing {out_file} dtype from {orig_dtype} to {data_dtype}" ) # coerce dataobj to new data dtype - new_data = np.asanyarray(nii.dataobj).astype(data_dtype) + new_data = np.asanyarray(nii.dataobj, dtype=data_dtype) # and set header to match nii.set_data_dtype(data_dtype) nii = nii.__class__(new_data, nii.affine, nii.header) From f51fedf6f38bc2adda2006060fff0615ab5dd940 Mon Sep 17 00:00:00 2001 From: Mathias Goncalves Date: Tue, 26 May 2020 14:08:27 -0400 Subject: [PATCH 3/4] Update niworkflows/interfaces/bids.py Co-authored-by: Chris Markiewicz --- niworkflows/interfaces/bids.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/niworkflows/interfaces/bids.py b/niworkflows/interfaces/bids.py index 0743776f7e9..3939ea597d4 100644 --- a/niworkflows/interfaces/bids.py +++ b/niworkflows/interfaces/bids.py @@ -602,7 +602,10 @@ def _run_interface(self, runtime): f"Changing {out_file} dtype from {orig_dtype} to {data_dtype}" ) # coerce dataobj to new data dtype - new_data = np.asanyarray(nii.dataobj, dtype=data_dtype) + if issubclass(data_dtype, np.integer): + new_data = np.rint(nii.dataobj, dtype=data_dtype) + else: + new_data = data_dtype(nii.dataobj) # and set header to match nii.set_data_dtype(data_dtype) nii = nii.__class__(new_data, nii.affine, nii.header) From 2d6d2be5b29bc34a60aeb0d9ee3f44d5e91feffd Mon Sep 17 00:00:00 2001 From: mathiasg Date: Tue, 26 May 2020 14:56:36 -0400 Subject: [PATCH 4/4] FIX: coerce to dtype after rounding --- niworkflows/interfaces/bids.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/niworkflows/interfaces/bids.py b/niworkflows/interfaces/bids.py index 3939ea597d4..4e2d0d13cbe 100644 --- a/niworkflows/interfaces/bids.py +++ b/niworkflows/interfaces/bids.py @@ -602,8 +602,8 @@ def _run_interface(self, runtime): f"Changing {out_file} dtype from {orig_dtype} to {data_dtype}" ) # coerce dataobj to new data dtype - if issubclass(data_dtype, np.integer): - new_data = np.rint(nii.dataobj, dtype=data_dtype) + if np.issubdtype(data_dtype, np.integer): + new_data = np.rint(nii.dataobj).astype(data_dtype) else: new_data = data_dtype(nii.dataobj) # and set header to match