Skip to content

Commit

Permalink
Merge pull request #208 from nipy/fix/remaining-apply-on-object
Browse files Browse the repository at this point in the history
FIX: Forgotten test using ``xfm.apply()``
  • Loading branch information
oesteban authored May 20, 2024
2 parents 8dae35f + f10e50e commit a9a9fda
Show file tree
Hide file tree
Showing 8 changed files with 5,132 additions and 24 deletions.
6 changes: 5 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,14 @@ RUN apt-get update && \
unzip && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN update-ca-certificates -f

# FreeSurfer 7.3.2
FROM downloader as freesurfer
COPY docker/files/freesurfer7.3.2-exclude.txt /usr/local/etc/freesurfer7.3.2-exclude.txt
RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.3.2/freesurfer-linux-ubuntu22_amd64-7.3.2.tar.gz \
COPY docker/files/fs-cert.pem /usr/local/etc/fs-cert.pem
RUN curl --cacert /usr/local/etc/fs-cert.pem \
-sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.3.2/freesurfer-linux-ubuntu22_amd64-7.3.2.tar.gz \
| tar zxv --no-same-owner -C /opt --exclude-from=/usr/local/etc/freesurfer7.3.2-exclude.txt

# AFNI
Expand Down
44 changes: 44 additions & 0 deletions docker/files/fs-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
-----BEGIN CERTIFICATE-----
MIIHuDCCBiCgAwIBAgIRAMa1FS9MSn5TXKMgD8OXtoswDQYJKoZIhvcNAQEMBQAw
RDELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUludGVybmV0MjEhMB8GA1UEAxMYSW5D
b21tb24gUlNBIFNlcnZlciBDQSAyMB4XDTI0MDUwOTAwMDAwMFoXDTI1MDUwOTIz
NTk1OVowfTELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxMTAv
BgNVBAoTKFByZXNpZGVudCBhbmQgRmVsbG93cyBvZiBIYXJ2YXJkIENvbGxlZ2Ux
IzAhBgNVBAMTGnN1cmZlci5ubXIubWdoLmhhcnZhcmQuZWR1MIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxJfeMKn0NjFkmduegvgRICrm+hn4TaZITeVl
uM/af+g05RUtKRKNIR0CC9mzPDYiW10VNj7TuDyS1DNoe/Jr1Or8lrMCm81NHjnY
aKvtC61O9GWvvDfWeb35vkHfkbd60AgBaLGZIEglENl122bBqpSdO8JglVTDgvFd
mWkuBnQzE/qKt7j88Xjafjhzbnv9Uf1hh8NtbiOaAf53/b5FZuUary64k5twPwpm
Y/pWw3CQhIWUhvRMwcQNvG24lDOssOXSEgb9Gd96ikU/yE4MDnuDBb6tf+2crVQ5
PF4V2YvbQZ2x8Kf8hygWk3C555ZSCR3LgRl/Paxp9DZUrxfjtwIDAQABo4ID6jCC
A+YwHwYDVR0jBBgwFoAU70wAkqb7di5eleLJX4cbGdVN4tkwHQYDVR0OBBYEFG0I
bSHaYbRPsftHU7uJ5A7Z9UBfMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAA
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBJBgNVHSAEQjBAMDQGCysG
AQQBsjEBAgJnMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BT
MAgGBmeBDAECAjBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8vY3JsLnNlY3RpZ28u
Y29tL0luQ29tbW9uUlNBU2VydmVyQ0EyLmNybDBwBggrBgEFBQcBAQRkMGIwOwYI
KwYBBQUHMAKGL2h0dHA6Ly9jcnQuc2VjdGlnby5jb20vSW5Db21tb25SU0FTZXJ2
ZXJDQTIuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTCC
AX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHUAzxFW7tUufK/zh1vZaS6b6RpxZ0qw
F+ysAdJbd87MOwgAAAGPXXtaqAAABAMARjBEAiARbv8hz3utGkTar2Y3jNnWOGKG
aajAYuB3f30g5Bnb+AIgAmwaltfGcp2uNYmTMU2eSC5AVhpnbisDS2KcFyC7ok4A
dwCi4wrkRe+9rZt+OO1HZ3dT14JbhJTXK14bLMS5UKRH5wAAAY9de1pQAAAEAwBI
MEYCIQDrM8C7Y6GdEKRmGQ1AUmbUArbpImpEXutI8E+KVOUsogIhAKbl+QYqJIUB
rRHpRkKZlefPyZQRo6JnRNz/J1KEuqsTAHcATnWjJ1yaEMM4W2zU3z9S6x3w4I4b
jWnAsfpksWKaOd8AAAGPXXtaRgAABAMASDBGAiEApB4qFWHZLGtPNkUK+6jFqsEk
vmy3bv3cuODXSG3CvfMCIQCCQPR/3HcrSGfmeJsFjWvwLbJFqe6GbRWCvjaUaldI
WDCB5AYDVR0RBIHcMIHZghpzdXJmZXIubm1yLm1naC5oYXJ2YXJkLmVkdYIUZm9y
dW0uZnJlZXN1cmZlci5uZXSCGWZvcnVtLm5tci5tZ2guaGFydmFyZC5lZHWCDmZy
ZWVzdXJmZXIubmV0ghdmdHAubm1yLm1naC5oYXJ2YXJkLmVkdYIZcnN5bmMubm1y
Lm1naC5oYXJ2YXJkLmVkdYIWc3VwcG9ydC5mcmVlc3VyZmVyLm5ldIIad2ViZGV2
Lm5tci5tZ2guaGFydmFyZC5lZHWCEnd3dy5mcmVlc3VyZmVyLm5ldDANBgkqhkiG
9w0BAQwFAAOCAYEAB5nGih504XqNbZJjz1mK43IAiFs0YjocdDWOqqbXMirpbpNd
cPleB0iJkXJnzfzkZFyLdvFGos9FuPRDGmXSh0sdWpm2uQdkXlOp+/e4vMDg8Nrl
YkjshuU4fmUswnzsQ1aj/ome1DG3rmp3umjKpV6ewnVLhgjQ5zwCHfLLsNyzowqn
I6qAa2uzk7bS3XuYu4bLhVfD3X0Ybe4V3FKODBZRAIIU8hgtCz6zw5WtxzdEm5Qp
FHdN8OKazXvrJbzHB1WVk7buIn+8n2HoO202wGaFyyQFVqM2ug0FgCW8AaB+XRCq
BV+nZND2AIALG1HcIIL+pZwxS1K/jBkjUJRb3GDVWw7yzxuvlmawLhk8xzrgTsvp
QXaR+CbnTBx1PeB4nf+yHg2VBvKk6m7E9lnyymENmbeaLC67CJQgr+ne1rpOuEIs
fVbKUP437fyEvPuZCZ+3gxFsKgOerk2J95+AdLKB01pQFh/ITS/2zHHeMeD118sR
mUO+RXiPX5ZUqu/M
-----END CERTIFICATE-----
11 changes: 6 additions & 5 deletions docs/notebooks/Reading and Writing transforms.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"import numpy as np\n",
"import nibabel as nb\n",
"import nitransforms as nt\n",
"from nitransforms.resampling import apply\n",
"\n",
"cwd = TemporaryDirectory()\n",
"os.chdir(cwd.name)\n",
Expand Down Expand Up @@ -263,7 +264,7 @@
"metadata": {},
"outputs": [],
"source": [
"moved = xfm.apply(nii, order=0)\n",
"moved = apply(xfm, nii, order=0)\n",
"moved.to_filename('moved-nb.nii.gz')"
]
},
Expand Down Expand Up @@ -741,7 +742,7 @@
"outputs": [],
"source": [
"xfm.reference = oblique\n",
"moved_oblique = xfm.apply(las_anatomy)"
"moved_oblique = apply(xfm, las_anatomy)"
]
},
{
Expand Down Expand Up @@ -895,7 +896,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -909,9 +910,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
"version": "3.11.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
"nbformat_minor": 4
}
5,073 changes: 5,063 additions & 10 deletions docs/notebooks/isbi2020.ipynb

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions nitransforms/manip.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ def __len__(self):
"""Enable using len()."""
return len(self.transforms)

@property
def ndim(self):
"""Get the number of dimensions."""
return max(x.ndim for x in self._transforms)

@property
def transforms(self):
"""Get the internal list of transforms."""
Expand Down
8 changes: 4 additions & 4 deletions nitransforms/nonlinear.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,11 +317,11 @@ def map(self, x, inverse=False):
--------
>>> xfm = BSplineFieldTransform(test_dir / "someones_bspline_coefficients.nii.gz")
>>> xfm.reference = test_dir / "someones_anatomy.nii.gz"
>>> xfm.map([-6.5, -36., -19.5]).tolist()
[[-6.5, -31.476097418406784, -19.5]]
>>> xfm.map([-6.5, -36., -19.5]).tolist() # doctest: +ELLIPSIS
[[-6.5, -31.476097418406..., -19.5]]
>>> xfm.map([[-6.5, -36., -19.5], [-1., -41.5, -11.25]]).tolist()
[[-6.5, -31.476097418406784, -19.5], [-1.0, -3.8072675377121996, -11.25]]
>>> xfm.map([[-6.5, -36., -19.5], [-1., -41.5, -11.25]]).tolist() # doctest: +ELLIPSIS
[[-6.5, -31.4760974184..., -19.5], [-1.0, -3.807267537712..., -11.25]]
"""
vfunc = partial(
Expand Down
3 changes: 2 additions & 1 deletion nitransforms/tests/test_manip.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
RMSE_TOL,
APPLY_NONLINEAR_CMD,
)
from nitransforms.resampling import apply

FMT = {"lta": "fs", "tfm": "itk"}

Expand Down Expand Up @@ -54,7 +55,7 @@ def test_itk_h5(tmp_path, testdata_path):
assert exit_code == 0
sw_moved = nb.load("resampled.nii.gz")

nt_moved = xfm.apply(img_fname, order=0)
nt_moved = apply(xfm, img_fname, order=0)
nt_moved.to_filename("nt_resampled.nii.gz")
diff = sw_moved.get_fdata() - nt_moved.get_fdata()
# A certain tolerance is necessary because of resampling at borders
Expand Down
6 changes: 3 additions & 3 deletions nitransforms/tests/test_nonlinear.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ def test_displacements_field1(
exit_code = check_call([cmd], shell=True)
assert exit_code == 0
sw_moved_mask = nb.load("resampled_brainmask.nii.gz")
nt_moved_mask = xfm.apply(msk, order=0)
nt_moved_mask = apply(xfm, msk, order=0)
nt_moved_mask.set_data_dtype(msk.get_data_dtype())
diff = np.asanyarray(sw_moved_mask.dataobj) - np.asanyarray(nt_moved_mask.dataobj)

Expand All @@ -189,7 +189,7 @@ def test_displacements_field1(
assert exit_code == 0
sw_moved = nb.load("resampled.nii.gz")

nt_moved = xfm.apply(nii, order=0)
nt_moved = apply(xfm, nii, order=0)
nt_moved.set_data_dtype(nii.get_data_dtype())
nt_moved.to_filename("nt_resampled.nii.gz")
sw_moved.set_data_dtype(nt_moved.get_data_dtype())
Expand Down Expand Up @@ -229,7 +229,7 @@ def test_displacements_field2(tmp_path, testdata_path, sw_tool):
assert exit_code == 0
sw_moved = nb.load("resampled.nii.gz")

nt_moved = xfm.apply(img_fname, order=0)
nt_moved = apply(xfm, img_fname, order=0)
nt_moved.to_filename("nt_resampled.nii.gz")
sw_moved.set_data_dtype(nt_moved.get_data_dtype())
diff = np.asanyarray(
Expand Down

0 comments on commit a9a9fda

Please sign in to comment.