@@ -364,65 +364,103 @@ def test_set_qform(self):
364
364
img = self .image_class (np .zeros ((2 ,3 ,4 )), np .diag ([2.2 , 3.3 , 4.3 , 1 ]))
365
365
hdr = img .get_header ()
366
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 )
367
+ # Affine is same as sform (best affine)
368
+ assert_array_almost_equal (img .get_affine (), hdr .get_best_affine ())
369
+ # Reset affine to something different again
370
+ aff_affine = np .diag ([3.3 , 4.5 , 6.6 , 1 ])
371
+ img .get_affine ()[:] = aff_affine
372
+ assert_array_almost_equal (img .get_affine (), aff_affine )
373
+ # Set qform using new_affine
374
+ img .set_qform (new_affine , 1 )
375
+ assert_array_almost_equal (img .get_qform (), new_affine )
370
376
assert_equal (hdr ['qform_code' ], 1 )
371
- assert_array_almost_equal (hdr .get_qform (), new_affine )
377
+ # Image get is same as header get
378
+ assert_array_almost_equal (img .get_qform (), new_affine )
379
+ # Coded version of get gets same information
380
+ qaff , code = img .get_qform (coded = True )
381
+ assert_equal (code , 1 )
382
+ assert_array_almost_equal (qaff , new_affine )
383
+ # Image affine now reset to best affine (which is sform)
372
384
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 ])
385
+ # Reset image affine and try update_affine == False
386
+ img .get_affine ()[:] = aff_affine
387
+ img .set_qform (new_affine , 1 , update_affine = False )
388
+ assert_array_almost_equal (img .get_affine (), aff_affine )
389
+ # Clear qform using None, zooms unchanged
390
+ assert_array_almost_equal (hdr .get_zooms (), [1.1 , 1.1 , 1.1 ])
391
+ img .set_qform (None )
392
+ qaff , code = img .get_qform (coded = True )
393
+ assert_equal ((qaff , code ), (None , 0 ))
394
+ assert_array_almost_equal (hdr .get_zooms (), [1.1 , 1.1 , 1.1 ])
395
+ # Best affine similarly
378
396
assert_array_almost_equal (img .get_affine (), hdr .get_best_affine ())
379
- #If sform is not set, qfrom should update affine
397
+ # If sform is not set, qform should update affine
380
398
img .set_sform (None )
381
- stat = img .set_qform (new_affine , 1 )
382
- assert_true ( stat )
383
- assert_equal (hdr [ 'qform_code' ] , 1 )
399
+ img .set_qform (new_affine , 1 )
400
+ qaff , code = img . get_qform ( coded = True )
401
+ assert_equal (code , 1 )
384
402
assert_array_almost_equal (img .get_affine (), new_affine )
385
403
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 )
404
+ # If affine has has shear, should raise Error if strip_shears=False
405
+ img .set_qform (new_affine , 2 )
406
+ assert_raises (HeaderDataError , img .set_qform , new_affine , 2 , False )
407
+ # Unexpected keyword raises error
408
+ assert_raises (TypeError , img .get_qform , strange = True )
390
409
391
410
def test_set_sform (self ):
392
- img = self .image_class (np .zeros ((2 ,3 ,4 )), np .diag ([2.2 , 3.3 , 4.3 , 1 ]))
411
+ orig_aff = np .diag ([2.2 , 3.3 , 4.3 , 1 ])
412
+ img = self .image_class (np .zeros ((2 ,3 ,4 )), orig_aff )
393
413
hdr = img .get_header ()
394
414
new_affine = np .diag ([1.1 , 1.1 , 1.1 , 1 ])
395
415
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 )
416
+ # Reset image affine to something different again
417
+ aff_affine = np .diag ([3.3 , 4.5 , 6.6 , 1 ])
418
+ img .get_affine ()[:] = aff_affine
419
+ assert_array_almost_equal (img .get_affine (), aff_affine )
420
+ # Sform, Qform codes are 'aligned', 'unknown' by default
421
+ assert_equal ((hdr ['sform_code' ], hdr ['qform_code' ]), (2 , 0 ))
422
+ # Set sform using new_affine when qform is 0
423
+ img .set_sform (new_affine , 1 )
401
424
assert_equal (hdr ['sform_code' ], 1 )
402
425
assert_array_almost_equal (hdr .get_sform (), new_affine )
426
+ # Image get is same as header get
427
+ assert_array_almost_equal (img .get_sform (), new_affine )
428
+ # Coded version gives same result
429
+ saff , code = img .get_sform (coded = True )
430
+ assert_equal (code , 1 )
431
+ assert_array_almost_equal (saff , new_affine )
432
+ # Because we've reset the sform with update_affine, the affine changes
403
433
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
-
434
+ # Reset image affine and try update_affine == False
435
+ img .get_affine ()[:] = aff_affine
436
+ img .set_sform (new_affine , 1 , update_affine = False )
437
+ assert_array_almost_equal (img .get_affine (), aff_affine )
438
+ # zooms do not get updated when qform is 0
439
+ assert_array_almost_equal (img .get_qform (), orig_aff )
440
+ assert_array_almost_equal (hdr .get_zooms (), [2.2 , 3.3 , 4.3 ])
441
+ img .set_qform (None )
442
+ assert_array_almost_equal (hdr .get_zooms (), [2.2 , 3.3 , 4.3 ])
443
+ # Set sform using new_affine when qform is set
407
444
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
445
+ img .set_sform (new_affine , 1 )
446
+ saff , code = img .get_sform (coded = True )
447
+ assert_equal (code , 1 )
448
+ assert_array_almost_equal (saff , new_affine )
449
+ assert_array_almost_equal (img .get_affine (), new_affine )
450
+ # zooms follow qform
415
451
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 )
452
+ # Clear sform using None, best_affine should fall back on qform
453
+ img .set_sform (None )
419
454
assert_equal (hdr ['sform_code' ], 0 )
420
455
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 )
456
+ # Sform holds previous affine from last set
457
+ assert_array_almost_equal ( hdr . get_sform (), saff )
458
+ # Image affine follows qform
424
459
assert_array_almost_equal (img .get_affine (), qform_affine )
425
460
assert_array_almost_equal (hdr .get_best_affine (), img .get_affine ())
461
+ # Unexpected keyword raises error
462
+ assert_raises (TypeError , img .get_sform , strange = True )
463
+
426
464
427
465
class TestNifti1Pair (TestNifti1Image ):
428
466
# Run analyze-flavor spatialimage tests
0 commit comments