Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: Improved testing of LTA handling - ITK-to-LTA, mri_concatenate_lta #75

Merged
merged 2 commits into from
Mar 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
5 changes: 0 additions & 5 deletions nitransforms/tests/data/regressions/bbregister.tfm

This file was deleted.

Binary file added nitransforms/tests/data/regressions/bold.nii.gz
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# This file was generated with bbregister, with fMRIPrep-20.0.5's settings
type = 0 # LINEAR_VOX_TO_VOX
nxforms = 1
mean = 0.0000 0.0000 0.0000
sigma = 10000.0000
1 4 4
3.124095916748047e+00 -2.993918396532536e-02 -8.824434876441956e-02 3.380017089843750e+01
-7.292380183935165e-02 -1.901555061340332e+00 -3.172848463058472e+00 2.405808868408203e+02
-1.820227503776550e-02 2.479679346084595e+00 -2.434180974960327e+00 7.082101440429688e+01
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
src volume info
valid = 1 # volume info valid
filename = /home/oesteban/tmp/fmriprep-ds005/fprep-work/fmriprep_wf/single_subject_01_wf/func_preproc_task_mixedgamblestask_run_01_wf/bold_reg_wf/bbreg_wf/bbregister/uni_xform_masked.nii.gz
volume = 64 64 34
voxelsize = 3.125000000000000e+00 3.125000000000000e+00 4.000000000000000e+00
xras = -1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
cras = 1.000000000000000e+00 2.800000000000000e+01 -3.100000000000000e+01
dst volume info
valid = 1 # volume info valid
filename = /oak/stanford/groups/russpold/data/openfmri/derivatives/ds000005/freesurfer-6.0.1/sub-01/mri/orig.mgz
volume = 256 256 256
voxelsize = 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00
xras = -9.999999403953552e-01 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 0.000000000000000e+00 -9.999999403953552e-01
zras = 0.000000000000000e+00 9.999999403953552e-01 0.000000000000000e+00
cras = -9.999847412109375e-01 -5.000015258789062e+00 -1.000038146972656e+00
subject sub-01
fscale 0.100000
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#Insight Transform File V1.0
#Transform 0
Transform: AffineTransform_double_3_3
Parameters: 0.99971085786819458 0.0058247237466275692 0.023335624486207962 0.0095805395394563675 0.79349809885025024 -0.608498215675354 -0.022061100229620934 0.60854566097259521 0.79321271181106567 -5.5388064384460449 -45.559787750244141 -48.801029205322266
FixedParameters: 0 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Created with lta_convert
# lta_convert --inlta from-fsnative_to-bold_mode-image.lta --outlta from-fsnative_to-bold_mode-image_type-ras2ras.lta
type = 1 # LINEAR_RAS_TO_RAS
nxforms = 1
mean = 0.0000 0.0000 0.0000
sigma = 10000.0000
1 4 4
9.997106194496155e-01 9.580537676811218e-03 2.206108532845974e-02 -4.897087097167969e+00
5.824727471917868e-03 7.934973239898682e-01 -6.085451841354370e-01 -6.588146209716797e+01
-2.333561331033707e-02 6.084975600242615e-01 7.932120561599731e-01 1.111579895019531e+01
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
src volume info
valid = 1 # volume info valid
filename = /home/oesteban/tmp/fmriprep-ds005/fprep-work/fmriprep_wf/single_subject_01_wf/func_preproc_task_mixedgamblestask_run_01_wf/bold_reg_wf/bbreg_wf/bbregister/uni_xform_masked.nii.gz
volume = 64 64 34
voxelsize = 3.125000000000000e+00 3.125000000000000e+00 4.000000000000000e+00
xras = -1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
cras = 1.000000000000000e+00 2.800000000000000e+01 -3.100000000000000e+01
dst volume info
valid = 1 # volume info valid
filename = /oak/stanford/groups/russpold/data/openfmri/derivatives/ds000005/freesurfer-6.0.1/sub-01/mri/orig.mgz
volume = 256 256 256
voxelsize = 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00
xras = -9.999999403953552e-01 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 0.000000000000000e+00 -9.999999403953552e-01
zras = 0.000000000000000e+00 9.999999403953552e-01 0.000000000000000e+00
cras = -9.999847412109375e-01 -5.000015258789062e+00 -1.000038146972656e+00
subject sub-01
fscale 0.100000
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# This file was generated with bbregister, with fMRIPrep-20.0.5's settings
# mri_concatenate_lta from-fsnative_to-bold_mode-image.lta from-scanner_to-fsnative_mode-image.lta from-scanner_to-bold_mode-image.lta
type = 0 # LINEAR_VOX_TO_VOX
nxforms = 1
mean = 0.0000 0.0000 0.0000
sigma = 1.0000
1 4 4
-3.124080896377563e+00 2.981145866215229e-02 8.914728462696075e-02 1.741926879882812e+02
-1.405486371368170e-02 1.859627604484558e+00 -1.825850725173950e+00 5.312585067749023e+01
5.505303665995598e-02 1.426339745521545e+00 2.379452466964722e+00 1.154438781738281e+01
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999998807907104e-01
-3.124080896377563e+00 2.981145866215229e-02 8.914728462696075e-02 1.741926879882812e+02
-1.405486371368170e-02 1.859627604484558e+00 -1.825850725173950e+00 5.312585067749023e+01
5.505303665995598e-02 1.426339745521545e+00 2.379452466964722e+00 1.154438781738281e+01
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999998807907104e-01
src volume info
valid = 1 # volume info valid
filename = /home/oesteban/tmp/fmriprep-ds005/fprep-work/fmriprep_wf/single_subject_01_wf/func_preproc_task_mixedgamblestask_run_01_wf/bold_reg_wf/bbreg_wf/bbregister/uni_xform_masked.nii.gz
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#Insight Transform File V1.0
#Transform 0
Transform: AffineTransform_double_3_3
Parameters: 0.99970638751983643 0.0059967394918203354 0.023489311337471008 0.0095396693795919418 0.79344195127487183 -0.60857224464416504 -0.02228684164583683 0.60861742496490479 0.7931513786315918 -5.5388941764831543 -45.574077606201172 -48.804073333740234
FixedParameters: 0 0 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Created with lta_convert
# lta_convert --inlta from-scanner_to-bold_mode-image.lta --outlta from-scanner_to-bold_mode-image_type-ras2ras.lta
type = 1 # LINEAR_RAS_TO_RAS
nxforms = 1
mean = 0.0000 0.0000 0.0000
sigma = 1.0000
1 4 4
9.997058510780334e-01 9.539666585624218e-03 2.228682115674019e-02 -4.884338378906250e+00
5.996740423142910e-03 7.934408783912659e-01 -6.086167693138123e-01 -6.589652252197266e+01
-2.348928898572922e-02 6.085714697837830e-01 7.931506037712097e-01 1.110400390625000e+01
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999998807907104e-01
src volume info
valid = 1 # volume info valid
filename = /home/oesteban/tmp/fmriprep-ds005/fprep-work/fmriprep_wf/single_subject_01_wf/func_preproc_task_mixedgamblestask_run_01_wf/bold_reg_wf/bbreg_wf/bbregister/uni_xform_masked.nii.gz
volume = 64 64 34
voxelsize = 3.125000000000000e+00 3.125000000000000e+00 4.000000000000000e+00
xras = -1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
cras = 1.000000000000000e+00 2.800000000000000e+01 -3.100000000000000e+01
dst volume info
valid = 1 # volume info valid
filename = /oak/stanford/groups/russpold/data/openfmri/ds000005/sub-01/anat/sub-01_T1w.nii.gz
volume = 160 192 192
voxelsize = 1.000000000000000e+00 1.333333015441895e+00 1.333333015441895e+00
xras = 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
cras = -1.000000000000000e+00 -5.000030517578125e+00 -1.000030517578125e+00
subject sub-01
fscale 0.100000
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# This file was generated with mri_robust_register, with fMRIPrep-20.0.5's settings
# mri_robust_register --satit --iscale --lta from-scanner_to-fsnative_mode-image.lta --mov T1_fsnative.nii.gz --dst T1_scanner.nii.gz

type = 1 # LINEAR_RAS_TO_RAS
nxforms = 1
mean = 129.0000 157.0000 132.0000
sigma = 10000.0000
1 4 4
9.999999403953552e-01 -1.698292035143822e-04 1.542967074783519e-04 -1.678466796875000e-04
1.698438863968477e-04 9.999999403953552e-01 -9.513227996649221e-05 -1.318359375000000e-02
-1.542805403005332e-04 9.515848068986088e-05 9.999999403953552e-01 -6.271362304687500e-03
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999999403953552e-01
src volume info
valid = 1 # volume info valid
filename = /oak/stanford/groups/russpold/data/openfmri/derivatives/ds000005/freesurfer-6.0.1/sub-01/mri/T1.mgz
volume = 256 256 256
voxelsize = 1.000000000000000e+00 1.000000000000000e+00 1.000000000000000e+00
xras = -9.999999403953552e-01 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 0.000000000000000e+00 -9.999999403953552e-01
zras = 0.000000000000000e+00 9.999999403953552e-01 0.000000000000000e+00
cras = -9.999847412109375e-01 -5.000015258789062e+00 -1.000038146972656e+00
dst volume info
valid = 1 # volume info valid
filename = /oak/stanford/groups/russpold/data/openfmri/ds000005/sub-01/anat/sub-01_T1w.nii.gz
volume = 160 192 192
voxelsize = 1.000000000000000e+00 1.333333015441895e+00 1.333333015441895e+00
xras = 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
cras = -1.000000000000000e+00 -5.000030517578125e+00 -1.000030517578125e+00
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#Insight Transform File V1.0
#Transform 0
Transform: AffineTransform_double_3_3
Parameters: 1 0.00016984390094876289 0.00015428056940436363 -0.00016982921806629747 1 -9.5158495241776109e-05 -0.00015429672203026712 9.513228724244982e-05 1 -0.00016911829879973084 -0.01318416278809309 0.0062701348215341568
FixedParameters: 0 0 0
53 changes: 45 additions & 8 deletions nitransforms/tests/test_conversions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,57 @@
# vi: set ft=python sts=4 ts=4 sw=4 et:
"""Conversions between formats."""
import numpy as np
import pytest
from .. import linear as _l
from ..io import LinearTransformArray as LTA


def test_conversions0(data_path):
@pytest.mark.parametrize('filename', [
"from-fsnative_to-bold_mode-image",
"from-fsnative_to-scanner_mode-image",
"from-scanner_to-bold_mode-image",
"from-scanner_to-fsnative_mode-image",
])
def test_lta2itk_conversions(data_path, filename):
"""Check conversions between formats."""
lta = _l.load(data_path / "regressions" / "robust_register.lta", fmt="lta")
itk = _l.load(data_path / "regressions" / "robust_register.tfm", fmt="itk")

lta = _l.load(data_path / "regressions" / ".".join((filename, "lta")),
fmt="lta")
itk = _l.load(data_path / "regressions" / ".".join((filename, "tfm")),
fmt="itk")
assert np.allclose(lta.matrix, itk.matrix)


def test_conversions1(data_path):
@pytest.mark.parametrize('filename,moving,reference', [
("from-fsnative_to-bold_mode-image", "T1w_fsnative.nii.gz", "bold.nii.gz"),
("from-fsnative_to-scanner_mode-image", "T1w_fsnative.nii.gz", "T1w_scanner.nii.gz"),
("from-scanner_to-bold_mode-image", "T1w_scanner.nii.gz", "bold.nii.gz"),
("from-scanner_to-fsnative_mode-image", "T1w_scanner.nii.gz", "T1w_fsnative.nii.gz"),
])
def test_itk2lta_conversions(data_path, tmp_path, filename, moving, reference):
"""Check conversions between formats."""
lta = _l.load(data_path / "regressions" / "bbregister.lta", fmt="lta")
itk = _l.load(data_path / "regressions" / "bbregister.tfm", fmt="itk")
itk = _l.load(data_path / "regressions" / "".join((filename, ".tfm")),
fmt="itk")
itk.reference = data_path / "regressions" / reference
itk.to_filename(tmp_path / "test.lta", fmt="fs",
moving=data_path / "regressions" / moving)

assert np.allclose(lta.matrix, itk.matrix)
converted_lta = LTA.from_filename(tmp_path / "test.lta")
expected_fname = data_path / "regressions" / "".join((filename, "_type-ras2ras.lta"))
if not expected_fname.exists():
expected_fname = data_path / "regressions" / "".join((filename, ".lta"))

exp_lta = LTA.from_filename(expected_fname)
assert np.allclose(converted_lta['xforms'][0]['m_L'],
exp_lta['xforms'][0]['m_L'])


def test_concatenation(data_path):
"""Check replacement to lta_concat."""
lta0 = _l.load(data_path / "regressions" / "from-scanner_to-fsnative_mode-image.lta",
fmt="lta")
lta1 = _l.load(data_path / "regressions" / "from-fsnative_to-bold_mode-image.lta", fmt="lta")

lta_combined = _l.load(data_path / "regressions" / "from-scanner_to-bold_mode-image.lta",
fmt="lta")

assert np.allclose(lta1.matrix.dot(lta0.matrix), lta_combined.matrix)
4 changes: 3 additions & 1 deletion nitransforms/tests/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,8 @@ def test_Displacements(sw_tool):
afni.AFNIDisplacementsField.from_image(field)


@pytest.mark.parametrize('file_type, test_file', [(LTA, 'robust_register.lta')])
@pytest.mark.parametrize('file_type, test_file', [
(LTA, 'from-fsnative_to-scanner_mode-image.lta')
])
def test_regressions(file_type, test_file, data_path):
file_type.from_filename(data_path / 'regressions' / test_file)