diff --git a/nitransforms/tests/data/regressions/T1w_fsnative.nii.gz b/nitransforms/tests/data/regressions/T1w_fsnative.nii.gz new file mode 100644 index 00000000..77543fc4 Binary files /dev/null and b/nitransforms/tests/data/regressions/T1w_fsnative.nii.gz differ diff --git a/nitransforms/tests/data/regressions/T1w_scanner.nii.gz b/nitransforms/tests/data/regressions/T1w_scanner.nii.gz new file mode 100644 index 00000000..90c9edb8 Binary files /dev/null and b/nitransforms/tests/data/regressions/T1w_scanner.nii.gz differ diff --git a/nitransforms/tests/data/regressions/bbregister.tfm b/nitransforms/tests/data/regressions/bbregister.tfm deleted file mode 100644 index 79ebcc00..00000000 --- a/nitransforms/tests/data/regressions/bbregister.tfm +++ /dev/null @@ -1,5 +0,0 @@ -#Insight Transform File V1.0 -#Transform 0 -Transform: MatrixOffsetTransformBase_double_3_3 -Parameters: 0.999706355364118 0.0059967416827344956 0.023489316177446647 0.009539669218827523 0.7934419194347854 -0.6085721629337524 -0.02228683774477952 0.6086173680484374 0.7931513449655613 -5.5388974668589555 -45.57406723091313 -48.80406464758718 -FixedParameters: 0 0 0 diff --git a/nitransforms/tests/data/regressions/bold.nii.gz b/nitransforms/tests/data/regressions/bold.nii.gz new file mode 100644 index 00000000..d4559cdd Binary files /dev/null and b/nitransforms/tests/data/regressions/bold.nii.gz differ diff --git a/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image.lta b/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image.lta new file mode 100644 index 00000000..c9ea3a28 --- /dev/null +++ b/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image.lta @@ -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 diff --git a/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image.tfm b/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image.tfm new file mode 100644 index 00000000..99c00336 --- /dev/null +++ b/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image.tfm @@ -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 diff --git a/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image_type-ras2ras.lta b/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image_type-ras2ras.lta new file mode 100644 index 00000000..901e00ef --- /dev/null +++ b/nitransforms/tests/data/regressions/from-fsnative_to-bold_mode-image_type-ras2ras.lta @@ -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 diff --git a/nitransforms/tests/data/regressions/robust_register.lta b/nitransforms/tests/data/regressions/from-fsnative_to-scanner_mode-image.lta similarity index 100% rename from nitransforms/tests/data/regressions/robust_register.lta rename to nitransforms/tests/data/regressions/from-fsnative_to-scanner_mode-image.lta diff --git a/nitransforms/tests/data/regressions/robust_register.tfm b/nitransforms/tests/data/regressions/from-fsnative_to-scanner_mode-image.tfm similarity index 100% rename from nitransforms/tests/data/regressions/robust_register.tfm rename to nitransforms/tests/data/regressions/from-fsnative_to-scanner_mode-image.tfm diff --git a/nitransforms/tests/data/regressions/bbregister.fsl b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.fsl similarity index 100% rename from nitransforms/tests/data/regressions/bbregister.fsl rename to nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.fsl diff --git a/nitransforms/tests/data/regressions/bbregister.lta b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.lta similarity index 83% rename from nitransforms/tests/data/regressions/bbregister.lta rename to nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.lta index d7aec3ba..dd9683c7 100644 --- a/nitransforms/tests/data/regressions/bbregister.lta +++ b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.lta @@ -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 diff --git a/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.tfm b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.tfm new file mode 100644 index 00000000..63f81a8c --- /dev/null +++ b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image.tfm @@ -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 diff --git a/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image_type-ras2ras.lta b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image_type-ras2ras.lta new file mode 100644 index 00000000..cefb52da --- /dev/null +++ b/nitransforms/tests/data/regressions/from-scanner_to-bold_mode-image_type-ras2ras.lta @@ -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 diff --git a/nitransforms/tests/data/regressions/from-scanner_to-fsnative_mode-image.lta b/nitransforms/tests/data/regressions/from-scanner_to-fsnative_mode-image.lta new file mode 100644 index 00000000..17ce8d9f --- /dev/null +++ b/nitransforms/tests/data/regressions/from-scanner_to-fsnative_mode-image.lta @@ -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 diff --git a/nitransforms/tests/data/regressions/from-scanner_to-fsnative_mode-image.tfm b/nitransforms/tests/data/regressions/from-scanner_to-fsnative_mode-image.tfm new file mode 100644 index 00000000..baea678a --- /dev/null +++ b/nitransforms/tests/data/regressions/from-scanner_to-fsnative_mode-image.tfm @@ -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 diff --git a/nitransforms/tests/test_conversions.py b/nitransforms/tests/test_conversions.py index 9602b02e..a6bc03e1 100644 --- a/nitransforms/tests/test_conversions.py +++ b/nitransforms/tests/test_conversions.py @@ -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) diff --git a/nitransforms/tests/test_io.py b/nitransforms/tests/test_io.py index 13f4d6ee..c76668d8 100644 --- a/nitransforms/tests/test_io.py +++ b/nitransforms/tests/test_io.py @@ -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)