context("CMTK geometry")
if(is.null(cmtk.bindir())){
cmtk_numeric_version=NULL
} else {
cmtk_version=cmtk.dof2mat(version=TRUE)
cmtk_numeric_version=numeric_version(sub("([0-9.]+).*",'\\1',cmtk_version))
test_that("cMTK version is >2.4", {
expect_true(cmtk_numeric_version>=numeric_version("2.4.0"),
'nat depends on CMTK>=2.4.0 for affine matrix (de)composition fixes')
})
}
checkRoundTripFromMat=function(mat,
test.cmtk=!is.null(cmtk_numeric_version) &&
cmtk_numeric_version>=numeric_version("2.4.0")){
params1=affmat2cmtkparams(mat)
expect_equal(cmtkparams2affmat(params1), mat, tolerance=1e-5)
if(test.cmtk){
# repeat with cmtk tools
params2=cmtk.mat2dof(mat)
m3=cmtk.dof2mat(params2)
# can't absolutely rely on getting same params back in certain degenerate
# cases e.g. axis flip.
# checkEqualsNumeric(params,params2,tolerance=1e-5)
expect_equal(mat,m3,tolerance=1e-5)
}
}
test_that("round trip works for challenging affine matrix", {
#ReCompositionAffineShear123CentreMirrorXYZ
params=c(100,50,10,3,4,5,-1.1,-0.9,-1,0.05,0.02,0.03,5,10,20)
checkRoundTripFromMat(cmtkparams2affmat(params))
})
test_that("compose affine with shear works", {
params=matrix(c(100,50,10,3,3,3,1.1,0.9,1,0.03,0.1,0.05,10,50,50),
ncol=3,byrow=TRUE)
affmat=matrix(c(1.09698704245255, -0.0574906547972094, -0.0575695518672382,
0, 0.0794174055868413, 0.895837910136773, 0.0454677297831557,
0, 0.151929624282028, -0.0103700734989691, 0.994640563641534,
0, 87.462778082031, 56.3015147160819, 8.57028084743792, 1),
ncol=4)
expect_equal(cmtkparams2affmat(params),affmat,tolerance=1e-6)
})
test_that("decompose affine with shear works", {
params=matrix(c(100,50,10,3,3,3,1.1,0.9,1,0.03,0.1,0.05,0,0,0),
ncol=3,byrow=TRUE)
attr(params,'version')=numeric_version('2.4')
affmat=matrix(c(1.09698704245255, -0.0574906547972094, -0.0575695518672382,
0, 0.0794174055868413, 0.895837910136773, 0.0454677297831557,
0, 0.151929624282028, -0.0103700734989691, 0.994640563641534,
0, 100, 50, 10, 1),ncol=4)
expect_equal(affmat2cmtkparams(affmat),params,tolerance=1e-6)
})
test_that("compose affine with legacy parameters works", {
# params equivalent to:
# reg=file.path('..','testdata','cmtk','dofv1.1wshears.list')
params=matrix(c(100,50,50, 3,4,5, 1,1.1,1.2, 0.1,0.2,0.3, 0,0,0), ncol=3,
byrow=T)
m_base=matrix(c(0.993768017875764, 0.0124333660488193, 0.1029140991094,
0, 0.0997404961300905, 1.10393643798483, 0.40556613106989, 0,
0.0778012981466213, -0.0620696470929289, 1.19004163463567, 0,
100, 50, 50, 1), ncol=4)
expect_equal(cmtkparams2affmat(params,legacy=TRUE),
m_base,tolerance=1e-4)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.