Skip to content

Commit 08d2287

Browse files
authored
Merge pull request #23 from tclose/mif-gz-converter
added converter between mrtrix and mrtrix-gz
2 parents 4cff451 + 7a822f8 commit 08d2287

File tree

7 files changed

+108
-27
lines changed

7 files changed

+108
-27
lines changed

related-packages/fileformats-extras/conftest.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pathlib import Path
44
import tempfile
55
import pytest
6-
from fileformats.medimage import DicomDir
6+
from fileformats.medimage import DicomDir, Nifti
77

88
# Set DEBUG logging for unittests
99

@@ -43,3 +43,10 @@ def dummy_dwi_dicom():
4343
import medimages4tests.dummy.dicom.mri.dwi.siemens.skyra.syngo_d13c as module
4444

4545
return DicomDir(module.get_image())
46+
47+
48+
@pytest.fixture(scope="session")
49+
def dummy_nifti():
50+
import medimages4tests.dummy.nifti as module
51+
52+
return Nifti(module.get_image())

related-packages/fileformats-extras/fileformats/extras/medimage_mrtrix3/converters.py

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from fileformats.medimage_mrtrix3 import (
55
ImageFormat as MrtrixImage,
66
ImageHeader as MrtrixImageHeader,
7+
ImageFormatGz as MrtrixImageGz,
78
)
89

910
try:
@@ -16,6 +17,18 @@
1617
in_out_file_kwargs = {}
1718

1819

20+
@converter(
21+
source_format=MedicalImage,
22+
target_format=MrtrixImageGz,
23+
out_ext=MrtrixImageGz.ext,
24+
**in_out_file_kwargs,
25+
)
26+
@converter(
27+
source_format=MedicalImage,
28+
target_format=MrtrixImageHeader,
29+
out_ext=MrtrixImageHeader.ext,
30+
**in_out_file_kwargs,
31+
)
1932
@converter(
2033
source_format=MedicalImage,
2134
target_format=MrtrixImage,
@@ -40,25 +53,25 @@ def mrconvert(name, out_ext: str, **kwargs):
4053
return MrConvert(name=name, out_file="out" + out_ext, **kwargs)
4154

4255

43-
@converter(
44-
source_format=MedicalImage,
45-
target_format=MrtrixImageHeader,
46-
out_ext=MrtrixImageHeader.ext,
47-
**in_out_file_kwargs,
48-
)
49-
def mrconvert2(name, out_ext: str, **kwargs):
50-
"""Initiate an MRConvert task with the output file extension set
56+
# @converter(
57+
# source_format=MedicalImage,
58+
# target_format=MrtrixImageHeader,
59+
# out_ext=MrtrixImageHeader.ext,
60+
# **in_out_file_kwargs,
61+
# )
62+
# def mrconvert2(name, out_ext: str, **kwargs):
63+
# """Initiate an MRConvert task with the output file extension set
5164

52-
Parameters
53-
----------
54-
name : str
55-
name of the converter task
56-
out_ext : str
57-
extension of the output file, used by MRConvert to determine the desired format
65+
# Parameters
66+
# ----------
67+
# name : str
68+
# name of the converter task
69+
# out_ext : str
70+
# extension of the output file, used by MRConvert to determine the desired format
5871

59-
Returns
60-
-------
61-
pydra.ShellCommandTask
62-
the converter task
63-
"""
64-
return MrConvert(name=name, out_file="out" + out_ext, **kwargs)
72+
# Returns
73+
# -------
74+
# pydra.ShellCommandTask
75+
# the converter task
76+
# """
77+
# return MrConvert(name=name, out_file="out" + out_ext, **kwargs)

related-packages/fileformats-extras/fileformats/extras/medimage_mrtrix3/image.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
import os
2+
import sys
23
from unittest import mock
34
import typing as ty
45
from pathlib import Path
56
import numpy as np
7+
import numpy.typing
68
from medimages4tests.dummy.nifti import get_image as get_dummy_nifti
79
from fileformats.core import FileSet, SampleFileGenerator, extra_implementation
810
from fileformats.medimage import MedicalImage, Nifti1
911
from fileformats.medimage_mrtrix3 import ImageFormat
1012

13+
if sys.version_info >= (3, 9):
14+
from typing import TypeAlias
15+
else:
16+
from typing_extensions import TypeAlias
17+
18+
19+
DataArrayType: TypeAlias = (
20+
"numpy.typing.NDArray[ty.Union[np.floating[ty.Any], np.integer[ty.Any]]]"
21+
)
22+
1123

1224
@extra_implementation(FileSet.generate_sample_data)
1325
def generate_mrtrix_sample_data(
@@ -21,7 +33,7 @@ def generate_mrtrix_sample_data(
2133

2234

2335
@extra_implementation(MedicalImage.read_array)
24-
def mrtrix_read_array(mif: ImageFormat) -> np.ndarray:
36+
def mrtrix_read_array(mif: ImageFormat) -> DataArrayType:
2537
raise NotImplementedError(
2638
"Need to work out how to use the metadata to read the array in the correct order"
2739
)

related-packages/fileformats-extras/fileformats/extras/medimage_mrtrix3/tests/test_converters.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from fileformats.medimage import NiftiBvec
2-
from fileformats.medimage_mrtrix3 import ImageFormat, ImageHeader
2+
from fileformats.medimage_mrtrix3 import ImageFormat, ImageHeader, ImageFormatGz
33

44

55
# @pytest.mark.xfail(reason="not sure what the reason is at this stage, might be bug in Pydra")
@@ -15,3 +15,9 @@ def test_dicom_to_mrtrix_image(dummy_dwi_dicom):
1515

1616
def test_dicom_to_mrtrix_image_header(dummy_dwi_dicom):
1717
ImageHeader.convert(dummy_dwi_dicom)
18+
19+
20+
def test_mif_to_mifgz(dummy_nifti):
21+
mif = ImageFormat.convert(dummy_nifti)
22+
mif_gz = ImageFormatGz.convert(mif)
23+
ImageFormat.convert(mif_gz)

related-packages/fileformats/fileformats/medimage_mrtrix3/__init__.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,23 @@
1313
ImageHeaderB,
1414
)
1515
from .track import Tracks
16+
17+
18+
__all__ = [
19+
"__version__",
20+
"ImageIn",
21+
"ImageOut",
22+
"BFile",
23+
"Tracks",
24+
"NiftiB",
25+
"NiftiGzB",
26+
"NiftiGzXB",
27+
"NiftiXB",
28+
"ImageFormatB",
29+
"ImageFormatGzB",
30+
"ImageHeaderB",
31+
"ImageFormat",
32+
"ImageFormatGz",
33+
"ImageHeader",
34+
"ImageDataFile",
35+
]

related-packages/fileformats/fileformats/medimage_mrtrix3/image.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import typing as ty
33
from fileformats.core import FileSet, extra_implementation
44
from fileformats.generic import File
5-
from fileformats.application import Gzip
5+
from fileformats.application.archive import BaseGzip
66
from fileformats.core.mixin import WithMagicNumber
77
from fileformats.core.exceptions import FormatMismatchError
88
import fileformats.medimage
@@ -61,8 +61,9 @@ def data_file(self):
6161
return self
6262

6363

64-
class ImageFormatGz(Gzip[ImageFormat]):
64+
class ImageFormatGz(fileformats.medimage.MedicalImage, BaseGzip):
6565

66+
archived_type = ImageFormat
6667
iana_mime = "application/x-mrtrix-image-format-gz"
6768
ext = ".mif.gz"
6869

related-packages/fileformats/fileformats/medimage_mrtrix3/in_out.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import sys
12
import typing as ty
23
from fileformats.application import Dicom
34
from fileformats.medimage import (
@@ -10,6 +11,10 @@
1011
Mgh,
1112
MghGz,
1213
Analyze,
14+
NiftiBvec,
15+
NiftiGzBvec,
16+
NiftiXBvec,
17+
NiftiGzXBvec,
1318
)
1419
from .image import ImageFormat, ImageHeader, ImageFormatGz
1520
from .dwi import (
@@ -22,8 +27,13 @@
2227
ImageHeaderB,
2328
)
2429

30+
if sys.version_info >= (3, 9):
31+
from typing import TypeAlias
32+
else:
33+
from typing_extensions import TypeAlias
2534

26-
ImageIn = ty.Union[
35+
36+
ImageIn: TypeAlias = ty.Union[
2737
ImageFormat,
2838
ImageFormatGz,
2939
ImageHeader,
@@ -37,12 +47,16 @@
3747
NiftiX,
3848
Nifti1,
3949
Nifti2,
50+
NiftiB,
51+
NiftiGzB,
52+
NiftiGzXB,
53+
NiftiXB,
4054
Mgh,
4155
MghGz,
4256
Analyze,
4357
]
4458

45-
ImageOut = ty.Union[
59+
ImageOut: TypeAlias = ty.Union[
4660
ImageFormat,
4761
ImageFormatGz,
4862
ImageHeader,
@@ -54,6 +68,14 @@
5468
NiftiX,
5569
Nifti1,
5670
Nifti2,
71+
NiftiB,
72+
NiftiGzB,
73+
NiftiGzXB,
74+
NiftiXB,
75+
NiftiBvec,
76+
NiftiGzBvec,
77+
NiftiXBvec,
78+
NiftiGzXBvec,
5779
Mgh,
5880
MghGz,
5981
Analyze,

0 commit comments

Comments
 (0)