@@ -360,6 +360,69 @@ def test_header_update_affine(self):
360
360
assert_equal (hdr ['sform_code' ], 2 )
361
361
assert_equal (hdr ['qform_code' ], 2 )
362
362
363
+ def test_set_qform (self ):
364
+ img = self .image_class (np .zeros ((2 ,3 ,4 )), np .diag ([2.2 , 3.3 , 4.3 , 1 ]))
365
+ hdr = img .get_header ()
366
+ new_affine = np .diag ([1.1 , 1.1 , 1.1 , 1 ])
367
+ #Set qform using new_affine
368
+ stat = img .set_qform (new_affine , 1 )
369
+ assert_false (stat )
370
+ assert_equal (hdr ['qform_code' ], 1 )
371
+ assert_array_almost_equal (hdr .get_qform (), new_affine )
372
+ assert_array_almost_equal (img .get_affine (), hdr .get_best_affine ())
373
+ #Clear qform using None, zooms sould update from best_affine
374
+ stat = img .set_qform (None )
375
+ assert_false (stat )
376
+ assert_equal (hdr ['qform_code' ], 0 )
377
+ assert_array_almost_equal (hdr .get_zooms (), [2.2 , 3.3 , 4.3 ])
378
+ assert_array_almost_equal (img .get_affine (), hdr .get_best_affine ())
379
+ #If sform is not set, qfrom should update affine
380
+ img .set_sform (None )
381
+ stat = img .set_qform (new_affine , 1 )
382
+ assert_true (stat )
383
+ assert_equal (hdr ['qform_code' ], 1 )
384
+ assert_array_almost_equal (img .get_affine (), new_affine )
385
+ new_affine [0 , 1 ] = 2
386
+ #If affine has has shear, should return false
387
+ stat = img .set_qform (new_affine , 2 )
388
+ assert_false (stat )
389
+ assert_equal (hdr ['qform_code' ], 2 )
390
+
391
+ def test_set_sform (self ):
392
+ img = self .image_class (np .zeros ((2 ,3 ,4 )), np .diag ([2.2 , 3.3 , 4.3 , 1 ]))
393
+ hdr = img .get_header ()
394
+ new_affine = np .diag ([1.1 , 1.1 , 1.1 , 1 ])
395
+ qform_affine = np .diag ([1.2 , 1.2 , 1.2 , 1 ])
396
+ stat = img .set_qform (qform_affine , 0 )
397
+ assert_false (stat )
398
+ #Set sform using new_affine when qfrom is 0
399
+ stat = img .set_sform (new_affine , 1 )
400
+ assert_true (stat )
401
+ assert_equal (hdr ['sform_code' ], 1 )
402
+ assert_array_almost_equal (hdr .get_sform (), new_affine )
403
+ assert_array_almost_equal (img .get_affine (), hdr .get_best_affine ())
404
+ #zooms get updated when qform is 0
405
+ assert_array_almost_equal (hdr .get_zooms (), [1.1 , 1.1 , 1.1 ])
406
+
407
+ img .set_qform (qform_affine , 1 )
408
+ #Set sform using new_affine when qfrom is set
409
+ stat = img .set_sform (new_affine , 1 )
410
+ assert_true (stat )
411
+ assert_equal (hdr ['sform_code' ], 1 )
412
+ assert_array_almost_equal (hdr .get_sform (), new_affine )
413
+ assert_array_almost_equal (img .get_affine (), hdr .get_best_affine ())
414
+ #zooms don't change if qform is set
415
+ assert_array_almost_equal (hdr .get_zooms (), [1.2 , 1.2 , 1.2 ])
416
+ #Clear sform using None, best_affine should fall back on qform
417
+ stat = img .set_sform (None )
418
+ assert_false (stat )
419
+ assert_equal (hdr ['sform_code' ], 0 )
420
+ assert_equal (hdr ['qform_code' ], 1 )
421
+ zeros = np .zeros ((4 ,4 ))
422
+ zeros [3 , 3 ] = 1
423
+ assert_array_almost_equal (hdr .get_sform (), zeros )
424
+ assert_array_almost_equal (img .get_affine (), qform_affine )
425
+ assert_array_almost_equal (hdr .get_best_affine (), img .get_affine ())
363
426
364
427
class TestNifti1Pair (TestNifti1Image ):
365
428
# Run analyze-flavor spatialimage tests
0 commit comments