From 5f2ca3eb97578f480784bb34b65fc662290e3780 Mon Sep 17 00:00:00 2001 From: Takis Panagopoulos Date: Mon, 29 Oct 2018 18:05:21 +0200 Subject: [PATCH] Ensure affine attribute in sync with header on init. --- nibabel/nifti1.py | 5 ++--- nibabel/tests/test_nifti1.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/nibabel/nifti1.py b/nibabel/nifti1.py index a10177e2f7..0c88386d25 100644 --- a/nibabel/nifti1.py +++ b/nibabel/nifti1.py @@ -1811,11 +1811,10 @@ def update_header(self): def _affine2header(self): """ Unconditionally set affine into the header """ - hdr = self._header # Set affine into sform with default code - hdr.set_sform(self._affine, code='aligned') + self.set_sform(self._affine, code='aligned', update_affine=True) # Make qform 'unknown' - hdr.set_qform(self._affine, code='unknown') + self.set_qform(self._affine, code='unknown', update_affine=True) def get_qform(self, coded=False): """ Return 4x4 affine matrix from qform parameters in header diff --git a/nibabel/tests/test_nifti1.py b/nibabel/tests/test_nifti1.py index 78f876ec7d..955863d4c2 100644 --- a/nibabel/tests/test_nifti1.py +++ b/nibabel/tests/test_nifti1.py @@ -1070,6 +1070,28 @@ def test_write_scaling(self): with np.errstate(invalid='ignore'): self._check_write_scaling(slope, inter, e_slope, e_inter) + def test_same_affine_before_and_after_write(self): + # Ensure affine attribute is the same as the one will be written + # It may differ because of float64 to float32 casting + IC = self.image_class + data = np.ones((5, 5, 5)) + affine = np.array( + [ + [2.99892688e+00, 1.00872545e-02, 7.95947611e-02, + -1.19315027e+02], + [-5.04193734e-03, 2.99400663e+00, -1.89471290e-01, + -1.19174288e+02], + [-8.00727755e-02, 1.89269632e-01, 2.99295425e+00, + -2.83687850e+01], + [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, + 1.00000000e+00] + ] + ) + img = IC(data, affine) + img_rt = bytesio_round_trip(img) + assert_array_equal(img.affine, img.header.get_best_affine()) + assert_array_equal(img.affine, img_rt.affine) + class TestNifti1Image(TestNifti1Pair): # Run analyze-flavor spatialimage tests