mrd-python 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mrd/__init__.py +96 -0
- mrd/_binary.py +1339 -0
- mrd/_dtypes.py +89 -0
- mrd/_ndjson.py +1194 -0
- mrd/binary.py +680 -0
- mrd/ndjson.py +2716 -0
- mrd/protocols.py +180 -0
- mrd/tools/export_png_images.py +39 -0
- mrd/tools/minimal_example.py +27 -0
- mrd/tools/phantom.py +161 -0
- mrd/tools/simulation.py +173 -0
- mrd/tools/stream_recon.py +184 -0
- mrd/tools/transform.py +37 -0
- mrd/types.py +1840 -0
- mrd/yardl_types.py +303 -0
- mrd_python-2.0.0.dist-info/METADATA +19 -0
- mrd_python-2.0.0.dist-info/RECORD +19 -0
- mrd_python-2.0.0.dist-info/WHEEL +5 -0
- mrd_python-2.0.0.dist-info/top_level.txt +1 -0
mrd/binary.py
ADDED
|
@@ -0,0 +1,680 @@
|
|
|
1
|
+
# This file was generated by the "yardl" tool. DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# pyright: reportUnusedClass=false
|
|
4
|
+
# pyright: reportUnusedImport=false
|
|
5
|
+
# pyright: reportUnknownArgumentType=false
|
|
6
|
+
# pyright: reportUnknownMemberType=false
|
|
7
|
+
# pyright: reportUnknownVariableType=false
|
|
8
|
+
|
|
9
|
+
import collections.abc
|
|
10
|
+
import io
|
|
11
|
+
import typing
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
import numpy.typing as npt
|
|
15
|
+
|
|
16
|
+
from .types import *
|
|
17
|
+
|
|
18
|
+
from .protocols import *
|
|
19
|
+
from . import _binary
|
|
20
|
+
from . import yardl_types as yardl
|
|
21
|
+
|
|
22
|
+
class BinaryMrdWriter(_binary.BinaryProtocolWriter, MrdWriterBase):
|
|
23
|
+
"""Binary writer for the Mrd protocol."""
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def __init__(self, stream: typing.Union[typing.BinaryIO, str]) -> None:
|
|
27
|
+
MrdWriterBase.__init__(self)
|
|
28
|
+
_binary.BinaryProtocolWriter.__init__(self, stream, MrdWriterBase.schema)
|
|
29
|
+
|
|
30
|
+
def _write_header(self, value: typing.Optional[Header]) -> None:
|
|
31
|
+
_binary.OptionalSerializer(HeaderSerializer()).write(self._stream, value)
|
|
32
|
+
|
|
33
|
+
def _write_data(self, value: collections.abc.Iterable[StreamItem]) -> None:
|
|
34
|
+
_binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer))])).write(self._stream, value)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class BinaryMrdReader(_binary.BinaryProtocolReader, MrdReaderBase):
|
|
38
|
+
"""Binary writer for the Mrd protocol."""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None:
|
|
42
|
+
MrdReaderBase.__init__(self)
|
|
43
|
+
_binary.BinaryProtocolReader.__init__(self, stream, MrdReaderBase.schema)
|
|
44
|
+
|
|
45
|
+
def _read_header(self) -> typing.Optional[Header]:
|
|
46
|
+
return _binary.OptionalSerializer(HeaderSerializer()).read(self._stream)
|
|
47
|
+
|
|
48
|
+
def _read_data(self) -> collections.abc.Iterable[StreamItem]:
|
|
49
|
+
return _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer))])).read(self._stream)
|
|
50
|
+
|
|
51
|
+
class EncodingCountersSerializer(_binary.RecordSerializer[EncodingCounters]):
|
|
52
|
+
def __init__(self) -> None:
|
|
53
|
+
super().__init__([("kspace_encode_step_1", _binary.OptionalSerializer(_binary.uint32_serializer)), ("kspace_encode_step_2", _binary.OptionalSerializer(_binary.uint32_serializer)), ("average", _binary.OptionalSerializer(_binary.uint32_serializer)), ("slice", _binary.OptionalSerializer(_binary.uint32_serializer)), ("contrast", _binary.OptionalSerializer(_binary.uint32_serializer)), ("phase", _binary.OptionalSerializer(_binary.uint32_serializer)), ("repetition", _binary.OptionalSerializer(_binary.uint32_serializer)), ("set", _binary.OptionalSerializer(_binary.uint32_serializer)), ("segment", _binary.OptionalSerializer(_binary.uint32_serializer)), ("user", _binary.VectorSerializer(_binary.uint32_serializer))])
|
|
54
|
+
|
|
55
|
+
def write(self, stream: _binary.CodedOutputStream, value: EncodingCounters) -> None:
|
|
56
|
+
if isinstance(value, np.void):
|
|
57
|
+
self.write_numpy(stream, value)
|
|
58
|
+
return
|
|
59
|
+
self._write(stream, value.kspace_encode_step_1, value.kspace_encode_step_2, value.average, value.slice, value.contrast, value.phase, value.repetition, value.set, value.segment, value.user)
|
|
60
|
+
|
|
61
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
62
|
+
self._write(stream, value['kspace_encode_step_1'], value['kspace_encode_step_2'], value['average'], value['slice'], value['contrast'], value['phase'], value['repetition'], value['set'], value['segment'], value['user'])
|
|
63
|
+
|
|
64
|
+
def read(self, stream: _binary.CodedInputStream) -> EncodingCounters:
|
|
65
|
+
field_values = self._read(stream)
|
|
66
|
+
return EncodingCounters(kspace_encode_step_1=field_values[0], kspace_encode_step_2=field_values[1], average=field_values[2], slice=field_values[3], contrast=field_values[4], phase=field_values[5], repetition=field_values[6], set=field_values[7], segment=field_values[8], user=field_values[9])
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class AcquisitionSerializer(_binary.RecordSerializer[Acquisition]):
|
|
70
|
+
def __init__(self) -> None:
|
|
71
|
+
super().__init__([("flags", _binary.EnumSerializer(_binary.uint64_serializer, AcquisitionFlags)), ("idx", EncodingCountersSerializer()), ("measurement_uid", _binary.uint32_serializer), ("scan_counter", _binary.OptionalSerializer(_binary.uint32_serializer)), ("acquisition_time_stamp", _binary.OptionalSerializer(_binary.uint32_serializer)), ("physiology_time_stamp", _binary.VectorSerializer(_binary.uint32_serializer)), ("channel_order", _binary.VectorSerializer(_binary.uint32_serializer)), ("discard_pre", _binary.OptionalSerializer(_binary.uint32_serializer)), ("discard_post", _binary.OptionalSerializer(_binary.uint32_serializer)), ("center_sample", _binary.OptionalSerializer(_binary.uint32_serializer)), ("encoding_space_ref", _binary.OptionalSerializer(_binary.uint32_serializer)), ("sample_time_us", _binary.OptionalSerializer(_binary.float32_serializer)), ("position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("read_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("phase_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("slice_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("patient_table_position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("user_int", _binary.VectorSerializer(_binary.int32_serializer)), ("user_float", _binary.VectorSerializer(_binary.float32_serializer)), ("data", _binary.NDArraySerializer(_binary.complexfloat32_serializer, 2)), ("trajectory", _binary.NDArraySerializer(_binary.float32_serializer, 2))])
|
|
72
|
+
|
|
73
|
+
def write(self, stream: _binary.CodedOutputStream, value: Acquisition) -> None:
|
|
74
|
+
if isinstance(value, np.void):
|
|
75
|
+
self.write_numpy(stream, value)
|
|
76
|
+
return
|
|
77
|
+
self._write(stream, value.flags, value.idx, value.measurement_uid, value.scan_counter, value.acquisition_time_stamp, value.physiology_time_stamp, value.channel_order, value.discard_pre, value.discard_post, value.center_sample, value.encoding_space_ref, value.sample_time_us, value.position, value.read_dir, value.phase_dir, value.slice_dir, value.patient_table_position, value.user_int, value.user_float, value.data, value.trajectory)
|
|
78
|
+
|
|
79
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
80
|
+
self._write(stream, value['flags'], value['idx'], value['measurement_uid'], value['scan_counter'], value['acquisition_time_stamp'], value['physiology_time_stamp'], value['channel_order'], value['discard_pre'], value['discard_post'], value['center_sample'], value['encoding_space_ref'], value['sample_time_us'], value['position'], value['read_dir'], value['phase_dir'], value['slice_dir'], value['patient_table_position'], value['user_int'], value['user_float'], value['data'], value['trajectory'])
|
|
81
|
+
|
|
82
|
+
def read(self, stream: _binary.CodedInputStream) -> Acquisition:
|
|
83
|
+
field_values = self._read(stream)
|
|
84
|
+
return Acquisition(flags=field_values[0], idx=field_values[1], measurement_uid=field_values[2], scan_counter=field_values[3], acquisition_time_stamp=field_values[4], physiology_time_stamp=field_values[5], channel_order=field_values[6], discard_pre=field_values[7], discard_post=field_values[8], center_sample=field_values[9], encoding_space_ref=field_values[10], sample_time_us=field_values[11], position=field_values[12], read_dir=field_values[13], phase_dir=field_values[14], slice_dir=field_values[15], patient_table_position=field_values[16], user_int=field_values[17], user_float=field_values[18], data=field_values[19], trajectory=field_values[20])
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class SubjectInformationTypeSerializer(_binary.RecordSerializer[SubjectInformationType]):
|
|
88
|
+
def __init__(self) -> None:
|
|
89
|
+
super().__init__([("patient_name", _binary.OptionalSerializer(_binary.string_serializer)), ("patient_weight_kg", _binary.OptionalSerializer(_binary.float32_serializer)), ("patient_height_m", _binary.OptionalSerializer(_binary.float32_serializer)), ("patient_id", _binary.OptionalSerializer(_binary.string_serializer)), ("patient_birthdate", _binary.OptionalSerializer(_binary.date_serializer)), ("patient_gender", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, PatientGender)))])
|
|
90
|
+
|
|
91
|
+
def write(self, stream: _binary.CodedOutputStream, value: SubjectInformationType) -> None:
|
|
92
|
+
if isinstance(value, np.void):
|
|
93
|
+
self.write_numpy(stream, value)
|
|
94
|
+
return
|
|
95
|
+
self._write(stream, value.patient_name, value.patient_weight_kg, value.patient_height_m, value.patient_id, value.patient_birthdate, value.patient_gender)
|
|
96
|
+
|
|
97
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
98
|
+
self._write(stream, value['patient_name'], value['patient_weight_kg'], value['patient_height_m'], value['patient_id'], value['patient_birthdate'], value['patient_gender'])
|
|
99
|
+
|
|
100
|
+
def read(self, stream: _binary.CodedInputStream) -> SubjectInformationType:
|
|
101
|
+
field_values = self._read(stream)
|
|
102
|
+
return SubjectInformationType(patient_name=field_values[0], patient_weight_kg=field_values[1], patient_height_m=field_values[2], patient_id=field_values[3], patient_birthdate=field_values[4], patient_gender=field_values[5])
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class StudyInformationTypeSerializer(_binary.RecordSerializer[StudyInformationType]):
|
|
106
|
+
def __init__(self) -> None:
|
|
107
|
+
super().__init__([("study_date", _binary.OptionalSerializer(_binary.date_serializer)), ("study_time", _binary.OptionalSerializer(_binary.time_serializer)), ("study_id", _binary.OptionalSerializer(_binary.string_serializer)), ("accession_number", _binary.OptionalSerializer(_binary.int64_serializer)), ("referring_physician_name", _binary.OptionalSerializer(_binary.string_serializer)), ("study_description", _binary.OptionalSerializer(_binary.string_serializer)), ("study_instance_uid", _binary.OptionalSerializer(_binary.string_serializer)), ("body_part_examined", _binary.OptionalSerializer(_binary.string_serializer))])
|
|
108
|
+
|
|
109
|
+
def write(self, stream: _binary.CodedOutputStream, value: StudyInformationType) -> None:
|
|
110
|
+
if isinstance(value, np.void):
|
|
111
|
+
self.write_numpy(stream, value)
|
|
112
|
+
return
|
|
113
|
+
self._write(stream, value.study_date, value.study_time, value.study_id, value.accession_number, value.referring_physician_name, value.study_description, value.study_instance_uid, value.body_part_examined)
|
|
114
|
+
|
|
115
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
116
|
+
self._write(stream, value['study_date'], value['study_time'], value['study_id'], value['accession_number'], value['referring_physician_name'], value['study_description'], value['study_instance_uid'], value['body_part_examined'])
|
|
117
|
+
|
|
118
|
+
def read(self, stream: _binary.CodedInputStream) -> StudyInformationType:
|
|
119
|
+
field_values = self._read(stream)
|
|
120
|
+
return StudyInformationType(study_date=field_values[0], study_time=field_values[1], study_id=field_values[2], accession_number=field_values[3], referring_physician_name=field_values[4], study_description=field_values[5], study_instance_uid=field_values[6], body_part_examined=field_values[7])
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class ThreeDimensionalFloatSerializer(_binary.RecordSerializer[ThreeDimensionalFloat]):
|
|
124
|
+
def __init__(self) -> None:
|
|
125
|
+
super().__init__([("x", _binary.float32_serializer), ("y", _binary.float32_serializer), ("z", _binary.float32_serializer)])
|
|
126
|
+
|
|
127
|
+
def write(self, stream: _binary.CodedOutputStream, value: ThreeDimensionalFloat) -> None:
|
|
128
|
+
if isinstance(value, np.void):
|
|
129
|
+
self.write_numpy(stream, value)
|
|
130
|
+
return
|
|
131
|
+
self._write(stream, value.x, value.y, value.z)
|
|
132
|
+
|
|
133
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
134
|
+
self._write(stream, value['x'], value['y'], value['z'])
|
|
135
|
+
|
|
136
|
+
def read(self, stream: _binary.CodedInputStream) -> ThreeDimensionalFloat:
|
|
137
|
+
field_values = self._read(stream)
|
|
138
|
+
return ThreeDimensionalFloat(x=field_values[0], y=field_values[1], z=field_values[2])
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class MeasurementDependencyTypeSerializer(_binary.RecordSerializer[MeasurementDependencyType]):
|
|
142
|
+
def __init__(self) -> None:
|
|
143
|
+
super().__init__([("dependency_type", _binary.string_serializer), ("measurement_id", _binary.string_serializer)])
|
|
144
|
+
|
|
145
|
+
def write(self, stream: _binary.CodedOutputStream, value: MeasurementDependencyType) -> None:
|
|
146
|
+
if isinstance(value, np.void):
|
|
147
|
+
self.write_numpy(stream, value)
|
|
148
|
+
return
|
|
149
|
+
self._write(stream, value.dependency_type, value.measurement_id)
|
|
150
|
+
|
|
151
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
152
|
+
self._write(stream, value['dependency_type'], value['measurement_id'])
|
|
153
|
+
|
|
154
|
+
def read(self, stream: _binary.CodedInputStream) -> MeasurementDependencyType:
|
|
155
|
+
field_values = self._read(stream)
|
|
156
|
+
return MeasurementDependencyType(dependency_type=field_values[0], measurement_id=field_values[1])
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class ReferencedImageSequenceTypeSerializer(_binary.RecordSerializer[ReferencedImageSequenceType]):
|
|
160
|
+
def __init__(self) -> None:
|
|
161
|
+
super().__init__([("referenced_sop_instance_uid", _binary.VectorSerializer(_binary.string_serializer))])
|
|
162
|
+
|
|
163
|
+
def write(self, stream: _binary.CodedOutputStream, value: ReferencedImageSequenceType) -> None:
|
|
164
|
+
if isinstance(value, np.void):
|
|
165
|
+
self.write_numpy(stream, value)
|
|
166
|
+
return
|
|
167
|
+
self._write(stream, value.referenced_sop_instance_uid)
|
|
168
|
+
|
|
169
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
170
|
+
self._write(stream, value['referenced_sop_instance_uid'])
|
|
171
|
+
|
|
172
|
+
def read(self, stream: _binary.CodedInputStream) -> ReferencedImageSequenceType:
|
|
173
|
+
field_values = self._read(stream)
|
|
174
|
+
return ReferencedImageSequenceType(referenced_sop_instance_uid=field_values[0])
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class MeasurementInformationTypeSerializer(_binary.RecordSerializer[MeasurementInformationType]):
|
|
178
|
+
def __init__(self) -> None:
|
|
179
|
+
super().__init__([("measurement_id", _binary.OptionalSerializer(_binary.string_serializer)), ("series_date", _binary.OptionalSerializer(_binary.date_serializer)), ("series_time", _binary.OptionalSerializer(_binary.time_serializer)), ("patient_position", _binary.EnumSerializer(_binary.int32_serializer, PatientPosition)), ("relative_table_position", _binary.OptionalSerializer(ThreeDimensionalFloatSerializer())), ("initial_series_number", _binary.OptionalSerializer(_binary.int64_serializer)), ("protocol_name", _binary.OptionalSerializer(_binary.string_serializer)), ("sequence_name", _binary.OptionalSerializer(_binary.string_serializer)), ("series_description", _binary.OptionalSerializer(_binary.string_serializer)), ("measurement_dependency", _binary.VectorSerializer(MeasurementDependencyTypeSerializer())), ("series_instance_uid_root", _binary.OptionalSerializer(_binary.string_serializer)), ("frame_of_reference_uid", _binary.OptionalSerializer(_binary.string_serializer)), ("referenced_image_sequence", _binary.OptionalSerializer(ReferencedImageSequenceTypeSerializer()))])
|
|
180
|
+
|
|
181
|
+
def write(self, stream: _binary.CodedOutputStream, value: MeasurementInformationType) -> None:
|
|
182
|
+
if isinstance(value, np.void):
|
|
183
|
+
self.write_numpy(stream, value)
|
|
184
|
+
return
|
|
185
|
+
self._write(stream, value.measurement_id, value.series_date, value.series_time, value.patient_position, value.relative_table_position, value.initial_series_number, value.protocol_name, value.sequence_name, value.series_description, value.measurement_dependency, value.series_instance_uid_root, value.frame_of_reference_uid, value.referenced_image_sequence)
|
|
186
|
+
|
|
187
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
188
|
+
self._write(stream, value['measurement_id'], value['series_date'], value['series_time'], value['patient_position'], value['relative_table_position'], value['initial_series_number'], value['protocol_name'], value['sequence_name'], value['series_description'], value['measurement_dependency'], value['series_instance_uid_root'], value['frame_of_reference_uid'], value['referenced_image_sequence'])
|
|
189
|
+
|
|
190
|
+
def read(self, stream: _binary.CodedInputStream) -> MeasurementInformationType:
|
|
191
|
+
field_values = self._read(stream)
|
|
192
|
+
return MeasurementInformationType(measurement_id=field_values[0], series_date=field_values[1], series_time=field_values[2], patient_position=field_values[3], relative_table_position=field_values[4], initial_series_number=field_values[5], protocol_name=field_values[6], sequence_name=field_values[7], series_description=field_values[8], measurement_dependency=field_values[9], series_instance_uid_root=field_values[10], frame_of_reference_uid=field_values[11], referenced_image_sequence=field_values[12])
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class CoilLabelTypeSerializer(_binary.RecordSerializer[CoilLabelType]):
|
|
196
|
+
def __init__(self) -> None:
|
|
197
|
+
super().__init__([("coil_number", _binary.uint32_serializer), ("coil_name", _binary.string_serializer)])
|
|
198
|
+
|
|
199
|
+
def write(self, stream: _binary.CodedOutputStream, value: CoilLabelType) -> None:
|
|
200
|
+
if isinstance(value, np.void):
|
|
201
|
+
self.write_numpy(stream, value)
|
|
202
|
+
return
|
|
203
|
+
self._write(stream, value.coil_number, value.coil_name)
|
|
204
|
+
|
|
205
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
206
|
+
self._write(stream, value['coil_number'], value['coil_name'])
|
|
207
|
+
|
|
208
|
+
def read(self, stream: _binary.CodedInputStream) -> CoilLabelType:
|
|
209
|
+
field_values = self._read(stream)
|
|
210
|
+
return CoilLabelType(coil_number=field_values[0], coil_name=field_values[1])
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class AcquisitionSystemInformationTypeSerializer(_binary.RecordSerializer[AcquisitionSystemInformationType]):
|
|
214
|
+
def __init__(self) -> None:
|
|
215
|
+
super().__init__([("system_vendor", _binary.OptionalSerializer(_binary.string_serializer)), ("system_model", _binary.OptionalSerializer(_binary.string_serializer)), ("system_field_strength_t", _binary.OptionalSerializer(_binary.float32_serializer)), ("relative_receiver_noise_bandwidth", _binary.OptionalSerializer(_binary.float32_serializer)), ("receiver_channels", _binary.OptionalSerializer(_binary.uint32_serializer)), ("coil_label", _binary.VectorSerializer(CoilLabelTypeSerializer())), ("institution_name", _binary.OptionalSerializer(_binary.string_serializer)), ("station_name", _binary.OptionalSerializer(_binary.string_serializer)), ("device_id", _binary.OptionalSerializer(_binary.string_serializer)), ("device_serial_number", _binary.OptionalSerializer(_binary.string_serializer))])
|
|
216
|
+
|
|
217
|
+
def write(self, stream: _binary.CodedOutputStream, value: AcquisitionSystemInformationType) -> None:
|
|
218
|
+
if isinstance(value, np.void):
|
|
219
|
+
self.write_numpy(stream, value)
|
|
220
|
+
return
|
|
221
|
+
self._write(stream, value.system_vendor, value.system_model, value.system_field_strength_t, value.relative_receiver_noise_bandwidth, value.receiver_channels, value.coil_label, value.institution_name, value.station_name, value.device_id, value.device_serial_number)
|
|
222
|
+
|
|
223
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
224
|
+
self._write(stream, value['system_vendor'], value['system_model'], value['system_field_strength_t'], value['relative_receiver_noise_bandwidth'], value['receiver_channels'], value['coil_label'], value['institution_name'], value['station_name'], value['device_id'], value['device_serial_number'])
|
|
225
|
+
|
|
226
|
+
def read(self, stream: _binary.CodedInputStream) -> AcquisitionSystemInformationType:
|
|
227
|
+
field_values = self._read(stream)
|
|
228
|
+
return AcquisitionSystemInformationType(system_vendor=field_values[0], system_model=field_values[1], system_field_strength_t=field_values[2], relative_receiver_noise_bandwidth=field_values[3], receiver_channels=field_values[4], coil_label=field_values[5], institution_name=field_values[6], station_name=field_values[7], device_id=field_values[8], device_serial_number=field_values[9])
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
class ExperimentalConditionsTypeSerializer(_binary.RecordSerializer[ExperimentalConditionsType]):
|
|
232
|
+
def __init__(self) -> None:
|
|
233
|
+
super().__init__([("h1resonance_frequency_hz", _binary.int64_serializer)])
|
|
234
|
+
|
|
235
|
+
def write(self, stream: _binary.CodedOutputStream, value: ExperimentalConditionsType) -> None:
|
|
236
|
+
if isinstance(value, np.void):
|
|
237
|
+
self.write_numpy(stream, value)
|
|
238
|
+
return
|
|
239
|
+
self._write(stream, value.h1resonance_frequency_hz)
|
|
240
|
+
|
|
241
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
242
|
+
self._write(stream, value['h1resonance_frequency_hz'])
|
|
243
|
+
|
|
244
|
+
def read(self, stream: _binary.CodedInputStream) -> ExperimentalConditionsType:
|
|
245
|
+
field_values = self._read(stream)
|
|
246
|
+
return ExperimentalConditionsType(h1resonance_frequency_hz=field_values[0])
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
class MatrixSizeTypeSerializer(_binary.RecordSerializer[MatrixSizeType]):
|
|
250
|
+
def __init__(self) -> None:
|
|
251
|
+
super().__init__([("x", _binary.uint32_serializer), ("y", _binary.uint32_serializer), ("z", _binary.uint32_serializer)])
|
|
252
|
+
|
|
253
|
+
def write(self, stream: _binary.CodedOutputStream, value: MatrixSizeType) -> None:
|
|
254
|
+
if isinstance(value, np.void):
|
|
255
|
+
self.write_numpy(stream, value)
|
|
256
|
+
return
|
|
257
|
+
self._write(stream, value.x, value.y, value.z)
|
|
258
|
+
|
|
259
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
260
|
+
self._write(stream, value['x'], value['y'], value['z'])
|
|
261
|
+
|
|
262
|
+
def read(self, stream: _binary.CodedInputStream) -> MatrixSizeType:
|
|
263
|
+
field_values = self._read(stream)
|
|
264
|
+
return MatrixSizeType(x=field_values[0], y=field_values[1], z=field_values[2])
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
class FieldOfViewMmSerializer(_binary.RecordSerializer[FieldOfViewMm]):
|
|
268
|
+
def __init__(self) -> None:
|
|
269
|
+
super().__init__([("x", _binary.float32_serializer), ("y", _binary.float32_serializer), ("z", _binary.float32_serializer)])
|
|
270
|
+
|
|
271
|
+
def write(self, stream: _binary.CodedOutputStream, value: FieldOfViewMm) -> None:
|
|
272
|
+
if isinstance(value, np.void):
|
|
273
|
+
self.write_numpy(stream, value)
|
|
274
|
+
return
|
|
275
|
+
self._write(stream, value.x, value.y, value.z)
|
|
276
|
+
|
|
277
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
278
|
+
self._write(stream, value['x'], value['y'], value['z'])
|
|
279
|
+
|
|
280
|
+
def read(self, stream: _binary.CodedInputStream) -> FieldOfViewMm:
|
|
281
|
+
field_values = self._read(stream)
|
|
282
|
+
return FieldOfViewMm(x=field_values[0], y=field_values[1], z=field_values[2])
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
class EncodingSpaceTypeSerializer(_binary.RecordSerializer[EncodingSpaceType]):
|
|
286
|
+
def __init__(self) -> None:
|
|
287
|
+
super().__init__([("matrix_size", MatrixSizeTypeSerializer()), ("field_of_view_mm", FieldOfViewMmSerializer())])
|
|
288
|
+
|
|
289
|
+
def write(self, stream: _binary.CodedOutputStream, value: EncodingSpaceType) -> None:
|
|
290
|
+
if isinstance(value, np.void):
|
|
291
|
+
self.write_numpy(stream, value)
|
|
292
|
+
return
|
|
293
|
+
self._write(stream, value.matrix_size, value.field_of_view_mm)
|
|
294
|
+
|
|
295
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
296
|
+
self._write(stream, value['matrix_size'], value['field_of_view_mm'])
|
|
297
|
+
|
|
298
|
+
def read(self, stream: _binary.CodedInputStream) -> EncodingSpaceType:
|
|
299
|
+
field_values = self._read(stream)
|
|
300
|
+
return EncodingSpaceType(matrix_size=field_values[0], field_of_view_mm=field_values[1])
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
class LimitTypeSerializer(_binary.RecordSerializer[LimitType]):
|
|
304
|
+
def __init__(self) -> None:
|
|
305
|
+
super().__init__([("minimum", _binary.uint32_serializer), ("maximum", _binary.uint32_serializer), ("center", _binary.uint32_serializer)])
|
|
306
|
+
|
|
307
|
+
def write(self, stream: _binary.CodedOutputStream, value: LimitType) -> None:
|
|
308
|
+
if isinstance(value, np.void):
|
|
309
|
+
self.write_numpy(stream, value)
|
|
310
|
+
return
|
|
311
|
+
self._write(stream, value.minimum, value.maximum, value.center)
|
|
312
|
+
|
|
313
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
314
|
+
self._write(stream, value['minimum'], value['maximum'], value['center'])
|
|
315
|
+
|
|
316
|
+
def read(self, stream: _binary.CodedInputStream) -> LimitType:
|
|
317
|
+
field_values = self._read(stream)
|
|
318
|
+
return LimitType(minimum=field_values[0], maximum=field_values[1], center=field_values[2])
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class EncodingLimitsTypeSerializer(_binary.RecordSerializer[EncodingLimitsType]):
|
|
322
|
+
def __init__(self) -> None:
|
|
323
|
+
super().__init__([("kspace_encoding_step_0", _binary.OptionalSerializer(LimitTypeSerializer())), ("kspace_encoding_step_1", _binary.OptionalSerializer(LimitTypeSerializer())), ("kspace_encoding_step_2", _binary.OptionalSerializer(LimitTypeSerializer())), ("average", _binary.OptionalSerializer(LimitTypeSerializer())), ("slice", _binary.OptionalSerializer(LimitTypeSerializer())), ("contrast", _binary.OptionalSerializer(LimitTypeSerializer())), ("phase", _binary.OptionalSerializer(LimitTypeSerializer())), ("repetition", _binary.OptionalSerializer(LimitTypeSerializer())), ("set", _binary.OptionalSerializer(LimitTypeSerializer())), ("segment", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_0", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_1", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_2", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_3", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_4", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_5", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_6", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_7", _binary.OptionalSerializer(LimitTypeSerializer()))])
|
|
324
|
+
|
|
325
|
+
def write(self, stream: _binary.CodedOutputStream, value: EncodingLimitsType) -> None:
|
|
326
|
+
if isinstance(value, np.void):
|
|
327
|
+
self.write_numpy(stream, value)
|
|
328
|
+
return
|
|
329
|
+
self._write(stream, value.kspace_encoding_step_0, value.kspace_encoding_step_1, value.kspace_encoding_step_2, value.average, value.slice, value.contrast, value.phase, value.repetition, value.set, value.segment, value.user_0, value.user_1, value.user_2, value.user_3, value.user_4, value.user_5, value.user_6, value.user_7)
|
|
330
|
+
|
|
331
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
332
|
+
self._write(stream, value['kspace_encoding_step_0'], value['kspace_encoding_step_1'], value['kspace_encoding_step_2'], value['average'], value['slice'], value['contrast'], value['phase'], value['repetition'], value['set'], value['segment'], value['user_0'], value['user_1'], value['user_2'], value['user_3'], value['user_4'], value['user_5'], value['user_6'], value['user_7'])
|
|
333
|
+
|
|
334
|
+
def read(self, stream: _binary.CodedInputStream) -> EncodingLimitsType:
|
|
335
|
+
field_values = self._read(stream)
|
|
336
|
+
return EncodingLimitsType(kspace_encoding_step_0=field_values[0], kspace_encoding_step_1=field_values[1], kspace_encoding_step_2=field_values[2], average=field_values[3], slice=field_values[4], contrast=field_values[5], phase=field_values[6], repetition=field_values[7], set=field_values[8], segment=field_values[9], user_0=field_values[10], user_1=field_values[11], user_2=field_values[12], user_3=field_values[13], user_4=field_values[14], user_5=field_values[15], user_6=field_values[16], user_7=field_values[17])
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
class UserParameterLongTypeSerializer(_binary.RecordSerializer[UserParameterLongType]):
|
|
340
|
+
def __init__(self) -> None:
|
|
341
|
+
super().__init__([("name", _binary.string_serializer), ("value", _binary.int64_serializer)])
|
|
342
|
+
|
|
343
|
+
def write(self, stream: _binary.CodedOutputStream, value: UserParameterLongType) -> None:
|
|
344
|
+
if isinstance(value, np.void):
|
|
345
|
+
self.write_numpy(stream, value)
|
|
346
|
+
return
|
|
347
|
+
self._write(stream, value.name, value.value)
|
|
348
|
+
|
|
349
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
350
|
+
self._write(stream, value['name'], value['value'])
|
|
351
|
+
|
|
352
|
+
def read(self, stream: _binary.CodedInputStream) -> UserParameterLongType:
|
|
353
|
+
field_values = self._read(stream)
|
|
354
|
+
return UserParameterLongType(name=field_values[0], value=field_values[1])
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
class UserParameterDoubleTypeSerializer(_binary.RecordSerializer[UserParameterDoubleType]):
|
|
358
|
+
def __init__(self) -> None:
|
|
359
|
+
super().__init__([("name", _binary.string_serializer), ("value", _binary.float64_serializer)])
|
|
360
|
+
|
|
361
|
+
def write(self, stream: _binary.CodedOutputStream, value: UserParameterDoubleType) -> None:
|
|
362
|
+
if isinstance(value, np.void):
|
|
363
|
+
self.write_numpy(stream, value)
|
|
364
|
+
return
|
|
365
|
+
self._write(stream, value.name, value.value)
|
|
366
|
+
|
|
367
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
368
|
+
self._write(stream, value['name'], value['value'])
|
|
369
|
+
|
|
370
|
+
def read(self, stream: _binary.CodedInputStream) -> UserParameterDoubleType:
|
|
371
|
+
field_values = self._read(stream)
|
|
372
|
+
return UserParameterDoubleType(name=field_values[0], value=field_values[1])
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
class UserParameterStringTypeSerializer(_binary.RecordSerializer[UserParameterStringType]):
|
|
376
|
+
def __init__(self) -> None:
|
|
377
|
+
super().__init__([("name", _binary.string_serializer), ("value", _binary.string_serializer)])
|
|
378
|
+
|
|
379
|
+
def write(self, stream: _binary.CodedOutputStream, value: UserParameterStringType) -> None:
|
|
380
|
+
if isinstance(value, np.void):
|
|
381
|
+
self.write_numpy(stream, value)
|
|
382
|
+
return
|
|
383
|
+
self._write(stream, value.name, value.value)
|
|
384
|
+
|
|
385
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
386
|
+
self._write(stream, value['name'], value['value'])
|
|
387
|
+
|
|
388
|
+
def read(self, stream: _binary.CodedInputStream) -> UserParameterStringType:
|
|
389
|
+
field_values = self._read(stream)
|
|
390
|
+
return UserParameterStringType(name=field_values[0], value=field_values[1])
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
class TrajectoryDescriptionTypeSerializer(_binary.RecordSerializer[TrajectoryDescriptionType]):
|
|
394
|
+
def __init__(self) -> None:
|
|
395
|
+
super().__init__([("identifier", _binary.string_serializer), ("user_parameter_long", _binary.VectorSerializer(UserParameterLongTypeSerializer())), ("user_parameter_double", _binary.VectorSerializer(UserParameterDoubleTypeSerializer())), ("user_parameter_string", _binary.VectorSerializer(UserParameterStringTypeSerializer())), ("comment", _binary.OptionalSerializer(_binary.string_serializer))])
|
|
396
|
+
|
|
397
|
+
def write(self, stream: _binary.CodedOutputStream, value: TrajectoryDescriptionType) -> None:
|
|
398
|
+
if isinstance(value, np.void):
|
|
399
|
+
self.write_numpy(stream, value)
|
|
400
|
+
return
|
|
401
|
+
self._write(stream, value.identifier, value.user_parameter_long, value.user_parameter_double, value.user_parameter_string, value.comment)
|
|
402
|
+
|
|
403
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
404
|
+
self._write(stream, value['identifier'], value['user_parameter_long'], value['user_parameter_double'], value['user_parameter_string'], value['comment'])
|
|
405
|
+
|
|
406
|
+
def read(self, stream: _binary.CodedInputStream) -> TrajectoryDescriptionType:
|
|
407
|
+
field_values = self._read(stream)
|
|
408
|
+
return TrajectoryDescriptionType(identifier=field_values[0], user_parameter_long=field_values[1], user_parameter_double=field_values[2], user_parameter_string=field_values[3], comment=field_values[4])
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
class AccelerationFactorTypeSerializer(_binary.RecordSerializer[AccelerationFactorType]):
|
|
412
|
+
def __init__(self) -> None:
|
|
413
|
+
super().__init__([("kspace_encoding_step_1", _binary.uint32_serializer), ("kspace_encoding_step_2", _binary.uint32_serializer)])
|
|
414
|
+
|
|
415
|
+
def write(self, stream: _binary.CodedOutputStream, value: AccelerationFactorType) -> None:
|
|
416
|
+
if isinstance(value, np.void):
|
|
417
|
+
self.write_numpy(stream, value)
|
|
418
|
+
return
|
|
419
|
+
self._write(stream, value.kspace_encoding_step_1, value.kspace_encoding_step_2)
|
|
420
|
+
|
|
421
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
422
|
+
self._write(stream, value['kspace_encoding_step_1'], value['kspace_encoding_step_2'])
|
|
423
|
+
|
|
424
|
+
def read(self, stream: _binary.CodedInputStream) -> AccelerationFactorType:
|
|
425
|
+
field_values = self._read(stream)
|
|
426
|
+
return AccelerationFactorType(kspace_encoding_step_1=field_values[0], kspace_encoding_step_2=field_values[1])
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
class MultibandSpacingTypeSerializer(_binary.RecordSerializer[MultibandSpacingType]):
|
|
430
|
+
def __init__(self) -> None:
|
|
431
|
+
super().__init__([("d_z", _binary.VectorSerializer(_binary.float32_serializer))])
|
|
432
|
+
|
|
433
|
+
def write(self, stream: _binary.CodedOutputStream, value: MultibandSpacingType) -> None:
|
|
434
|
+
if isinstance(value, np.void):
|
|
435
|
+
self.write_numpy(stream, value)
|
|
436
|
+
return
|
|
437
|
+
self._write(stream, value.d_z)
|
|
438
|
+
|
|
439
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
440
|
+
self._write(stream, value['d_z'])
|
|
441
|
+
|
|
442
|
+
def read(self, stream: _binary.CodedInputStream) -> MultibandSpacingType:
|
|
443
|
+
field_values = self._read(stream)
|
|
444
|
+
return MultibandSpacingType(d_z=field_values[0])
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
class MultibandTypeSerializer(_binary.RecordSerializer[MultibandType]):
|
|
448
|
+
def __init__(self) -> None:
|
|
449
|
+
super().__init__([("spacing", _binary.VectorSerializer(MultibandSpacingTypeSerializer())), ("delta_kz", _binary.float32_serializer), ("multiband_factor", _binary.uint32_serializer), ("calibration", _binary.EnumSerializer(_binary.int32_serializer, Calibration)), ("calibration_encoding", _binary.uint64_serializer)])
|
|
450
|
+
|
|
451
|
+
def write(self, stream: _binary.CodedOutputStream, value: MultibandType) -> None:
|
|
452
|
+
if isinstance(value, np.void):
|
|
453
|
+
self.write_numpy(stream, value)
|
|
454
|
+
return
|
|
455
|
+
self._write(stream, value.spacing, value.delta_kz, value.multiband_factor, value.calibration, value.calibration_encoding)
|
|
456
|
+
|
|
457
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
458
|
+
self._write(stream, value['spacing'], value['delta_kz'], value['multiband_factor'], value['calibration'], value['calibration_encoding'])
|
|
459
|
+
|
|
460
|
+
def read(self, stream: _binary.CodedInputStream) -> MultibandType:
|
|
461
|
+
field_values = self._read(stream)
|
|
462
|
+
return MultibandType(spacing=field_values[0], delta_kz=field_values[1], multiband_factor=field_values[2], calibration=field_values[3], calibration_encoding=field_values[4])
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
class ParallelImagingTypeSerializer(_binary.RecordSerializer[ParallelImagingType]):
|
|
466
|
+
def __init__(self) -> None:
|
|
467
|
+
super().__init__([("acceleration_factor", AccelerationFactorTypeSerializer()), ("calibration_mode", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, CalibrationMode))), ("interleaving_dimension", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, InterleavingDimension))), ("multiband", _binary.OptionalSerializer(MultibandTypeSerializer()))])
|
|
468
|
+
|
|
469
|
+
def write(self, stream: _binary.CodedOutputStream, value: ParallelImagingType) -> None:
|
|
470
|
+
if isinstance(value, np.void):
|
|
471
|
+
self.write_numpy(stream, value)
|
|
472
|
+
return
|
|
473
|
+
self._write(stream, value.acceleration_factor, value.calibration_mode, value.interleaving_dimension, value.multiband)
|
|
474
|
+
|
|
475
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
476
|
+
self._write(stream, value['acceleration_factor'], value['calibration_mode'], value['interleaving_dimension'], value['multiband'])
|
|
477
|
+
|
|
478
|
+
def read(self, stream: _binary.CodedInputStream) -> ParallelImagingType:
|
|
479
|
+
field_values = self._read(stream)
|
|
480
|
+
return ParallelImagingType(acceleration_factor=field_values[0], calibration_mode=field_values[1], interleaving_dimension=field_values[2], multiband=field_values[3])
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
class EncodingTypeSerializer(_binary.RecordSerializer[EncodingType]):
|
|
484
|
+
def __init__(self) -> None:
|
|
485
|
+
super().__init__([("encoded_space", EncodingSpaceTypeSerializer()), ("recon_space", EncodingSpaceTypeSerializer()), ("encoding_limits", EncodingLimitsTypeSerializer()), ("trajectory", _binary.EnumSerializer(_binary.int32_serializer, Trajectory)), ("trajectory_description", _binary.OptionalSerializer(TrajectoryDescriptionTypeSerializer())), ("parallel_imaging", _binary.OptionalSerializer(ParallelImagingTypeSerializer())), ("echo_train_length", _binary.OptionalSerializer(_binary.int64_serializer))])
|
|
486
|
+
|
|
487
|
+
def write(self, stream: _binary.CodedOutputStream, value: EncodingType) -> None:
|
|
488
|
+
if isinstance(value, np.void):
|
|
489
|
+
self.write_numpy(stream, value)
|
|
490
|
+
return
|
|
491
|
+
self._write(stream, value.encoded_space, value.recon_space, value.encoding_limits, value.trajectory, value.trajectory_description, value.parallel_imaging, value.echo_train_length)
|
|
492
|
+
|
|
493
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
494
|
+
self._write(stream, value['encoded_space'], value['recon_space'], value['encoding_limits'], value['trajectory'], value['trajectory_description'], value['parallel_imaging'], value['echo_train_length'])
|
|
495
|
+
|
|
496
|
+
def read(self, stream: _binary.CodedInputStream) -> EncodingType:
|
|
497
|
+
field_values = self._read(stream)
|
|
498
|
+
return EncodingType(encoded_space=field_values[0], recon_space=field_values[1], encoding_limits=field_values[2], trajectory=field_values[3], trajectory_description=field_values[4], parallel_imaging=field_values[5], echo_train_length=field_values[6])
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
class GradientDirectionTypeSerializer(_binary.RecordSerializer[GradientDirectionType]):
|
|
502
|
+
def __init__(self) -> None:
|
|
503
|
+
super().__init__([("rl", _binary.float32_serializer), ("ap", _binary.float32_serializer), ("fh", _binary.float32_serializer)])
|
|
504
|
+
|
|
505
|
+
def write(self, stream: _binary.CodedOutputStream, value: GradientDirectionType) -> None:
|
|
506
|
+
if isinstance(value, np.void):
|
|
507
|
+
self.write_numpy(stream, value)
|
|
508
|
+
return
|
|
509
|
+
self._write(stream, value.rl, value.ap, value.fh)
|
|
510
|
+
|
|
511
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
512
|
+
self._write(stream, value['rl'], value['ap'], value['fh'])
|
|
513
|
+
|
|
514
|
+
def read(self, stream: _binary.CodedInputStream) -> GradientDirectionType:
|
|
515
|
+
field_values = self._read(stream)
|
|
516
|
+
return GradientDirectionType(rl=field_values[0], ap=field_values[1], fh=field_values[2])
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
class DiffusionTypeSerializer(_binary.RecordSerializer[DiffusionType]):
|
|
520
|
+
def __init__(self) -> None:
|
|
521
|
+
super().__init__([("gradient_direction", GradientDirectionTypeSerializer()), ("bvalue", _binary.float32_serializer)])
|
|
522
|
+
|
|
523
|
+
def write(self, stream: _binary.CodedOutputStream, value: DiffusionType) -> None:
|
|
524
|
+
if isinstance(value, np.void):
|
|
525
|
+
self.write_numpy(stream, value)
|
|
526
|
+
return
|
|
527
|
+
self._write(stream, value.gradient_direction, value.bvalue)
|
|
528
|
+
|
|
529
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
530
|
+
self._write(stream, value['gradient_direction'], value['bvalue'])
|
|
531
|
+
|
|
532
|
+
def read(self, stream: _binary.CodedInputStream) -> DiffusionType:
|
|
533
|
+
field_values = self._read(stream)
|
|
534
|
+
return DiffusionType(gradient_direction=field_values[0], bvalue=field_values[1])
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
class SequenceParametersTypeSerializer(_binary.RecordSerializer[SequenceParametersType]):
|
|
538
|
+
def __init__(self) -> None:
|
|
539
|
+
super().__init__([("t_r", _binary.VectorSerializer(_binary.float32_serializer)), ("t_e", _binary.VectorSerializer(_binary.float32_serializer)), ("t_i", _binary.VectorSerializer(_binary.float32_serializer)), ("flip_angle_deg", _binary.VectorSerializer(_binary.float32_serializer)), ("sequence_type", _binary.OptionalSerializer(_binary.string_serializer)), ("echo_spacing", _binary.VectorSerializer(_binary.float32_serializer)), ("diffusion_dimension", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, DiffusionDimension))), ("diffusion", _binary.VectorSerializer(DiffusionTypeSerializer())), ("diffusion_scheme", _binary.OptionalSerializer(_binary.string_serializer))])
|
|
540
|
+
|
|
541
|
+
def write(self, stream: _binary.CodedOutputStream, value: SequenceParametersType) -> None:
|
|
542
|
+
if isinstance(value, np.void):
|
|
543
|
+
self.write_numpy(stream, value)
|
|
544
|
+
return
|
|
545
|
+
self._write(stream, value.t_r, value.t_e, value.t_i, value.flip_angle_deg, value.sequence_type, value.echo_spacing, value.diffusion_dimension, value.diffusion, value.diffusion_scheme)
|
|
546
|
+
|
|
547
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
548
|
+
self._write(stream, value['t_r'], value['t_e'], value['t_i'], value['flip_angle_deg'], value['sequence_type'], value['echo_spacing'], value['diffusion_dimension'], value['diffusion'], value['diffusion_scheme'])
|
|
549
|
+
|
|
550
|
+
def read(self, stream: _binary.CodedInputStream) -> SequenceParametersType:
|
|
551
|
+
field_values = self._read(stream)
|
|
552
|
+
return SequenceParametersType(t_r=field_values[0], t_e=field_values[1], t_i=field_values[2], flip_angle_deg=field_values[3], sequence_type=field_values[4], echo_spacing=field_values[5], diffusion_dimension=field_values[6], diffusion=field_values[7], diffusion_scheme=field_values[8])
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
class UserParameterBase64TypeSerializer(_binary.RecordSerializer[UserParameterBase64Type]):
|
|
556
|
+
def __init__(self) -> None:
|
|
557
|
+
super().__init__([("name", _binary.string_serializer), ("value", _binary.string_serializer)])
|
|
558
|
+
|
|
559
|
+
def write(self, stream: _binary.CodedOutputStream, value: UserParameterBase64Type) -> None:
|
|
560
|
+
if isinstance(value, np.void):
|
|
561
|
+
self.write_numpy(stream, value)
|
|
562
|
+
return
|
|
563
|
+
self._write(stream, value.name, value.value)
|
|
564
|
+
|
|
565
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
566
|
+
self._write(stream, value['name'], value['value'])
|
|
567
|
+
|
|
568
|
+
def read(self, stream: _binary.CodedInputStream) -> UserParameterBase64Type:
|
|
569
|
+
field_values = self._read(stream)
|
|
570
|
+
return UserParameterBase64Type(name=field_values[0], value=field_values[1])
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
class UserParametersTypeSerializer(_binary.RecordSerializer[UserParametersType]):
|
|
574
|
+
def __init__(self) -> None:
|
|
575
|
+
super().__init__([("user_parameter_long", _binary.VectorSerializer(UserParameterLongTypeSerializer())), ("user_parameter_double", _binary.VectorSerializer(UserParameterDoubleTypeSerializer())), ("user_parameter_string", _binary.VectorSerializer(UserParameterStringTypeSerializer())), ("user_parameter_base64", _binary.VectorSerializer(UserParameterBase64TypeSerializer()))])
|
|
576
|
+
|
|
577
|
+
def write(self, stream: _binary.CodedOutputStream, value: UserParametersType) -> None:
|
|
578
|
+
if isinstance(value, np.void):
|
|
579
|
+
self.write_numpy(stream, value)
|
|
580
|
+
return
|
|
581
|
+
self._write(stream, value.user_parameter_long, value.user_parameter_double, value.user_parameter_string, value.user_parameter_base64)
|
|
582
|
+
|
|
583
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
584
|
+
self._write(stream, value['user_parameter_long'], value['user_parameter_double'], value['user_parameter_string'], value['user_parameter_base64'])
|
|
585
|
+
|
|
586
|
+
def read(self, stream: _binary.CodedInputStream) -> UserParametersType:
|
|
587
|
+
field_values = self._read(stream)
|
|
588
|
+
return UserParametersType(user_parameter_long=field_values[0], user_parameter_double=field_values[1], user_parameter_string=field_values[2], user_parameter_base64=field_values[3])
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
class WaveformInformationTypeSerializer(_binary.RecordSerializer[WaveformInformationType]):
|
|
592
|
+
def __init__(self) -> None:
|
|
593
|
+
super().__init__([("waveform_name", _binary.string_serializer), ("waveform_type", _binary.EnumSerializer(_binary.int32_serializer, WaveformType)), ("user_parameters", UserParametersTypeSerializer())])
|
|
594
|
+
|
|
595
|
+
def write(self, stream: _binary.CodedOutputStream, value: WaveformInformationType) -> None:
|
|
596
|
+
if isinstance(value, np.void):
|
|
597
|
+
self.write_numpy(stream, value)
|
|
598
|
+
return
|
|
599
|
+
self._write(stream, value.waveform_name, value.waveform_type, value.user_parameters)
|
|
600
|
+
|
|
601
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
602
|
+
self._write(stream, value['waveform_name'], value['waveform_type'], value['user_parameters'])
|
|
603
|
+
|
|
604
|
+
def read(self, stream: _binary.CodedInputStream) -> WaveformInformationType:
|
|
605
|
+
field_values = self._read(stream)
|
|
606
|
+
return WaveformInformationType(waveform_name=field_values[0], waveform_type=field_values[1], user_parameters=field_values[2])
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
class HeaderSerializer(_binary.RecordSerializer[Header]):
|
|
610
|
+
def __init__(self) -> None:
|
|
611
|
+
super().__init__([("version", _binary.OptionalSerializer(_binary.int64_serializer)), ("subject_information", _binary.OptionalSerializer(SubjectInformationTypeSerializer())), ("study_information", _binary.OptionalSerializer(StudyInformationTypeSerializer())), ("measurement_information", _binary.OptionalSerializer(MeasurementInformationTypeSerializer())), ("acquisition_system_information", _binary.OptionalSerializer(AcquisitionSystemInformationTypeSerializer())), ("experimental_conditions", ExperimentalConditionsTypeSerializer()), ("encoding", _binary.VectorSerializer(EncodingTypeSerializer())), ("sequence_parameters", _binary.OptionalSerializer(SequenceParametersTypeSerializer())), ("user_parameters", _binary.OptionalSerializer(UserParametersTypeSerializer())), ("waveform_information", _binary.VectorSerializer(WaveformInformationTypeSerializer()))])
|
|
612
|
+
|
|
613
|
+
def write(self, stream: _binary.CodedOutputStream, value: Header) -> None:
|
|
614
|
+
if isinstance(value, np.void):
|
|
615
|
+
self.write_numpy(stream, value)
|
|
616
|
+
return
|
|
617
|
+
self._write(stream, value.version, value.subject_information, value.study_information, value.measurement_information, value.acquisition_system_information, value.experimental_conditions, value.encoding, value.sequence_parameters, value.user_parameters, value.waveform_information)
|
|
618
|
+
|
|
619
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
620
|
+
self._write(stream, value['version'], value['subject_information'], value['study_information'], value['measurement_information'], value['acquisition_system_information'], value['experimental_conditions'], value['encoding'], value['sequence_parameters'], value['user_parameters'], value['waveform_information'])
|
|
621
|
+
|
|
622
|
+
def read(self, stream: _binary.CodedInputStream) -> Header:
|
|
623
|
+
field_values = self._read(stream)
|
|
624
|
+
return Header(version=field_values[0], subject_information=field_values[1], study_information=field_values[2], measurement_information=field_values[3], acquisition_system_information=field_values[4], experimental_conditions=field_values[5], encoding=field_values[6], sequence_parameters=field_values[7], user_parameters=field_values[8], waveform_information=field_values[9])
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
class ImageMetaDataSerializer(_binary.RecordSerializer[ImageMetaData]):
|
|
628
|
+
def __init__(self) -> None:
|
|
629
|
+
super().__init__([("name", _binary.string_serializer), ("value", _binary.string_serializer)])
|
|
630
|
+
|
|
631
|
+
def write(self, stream: _binary.CodedOutputStream, value: ImageMetaData) -> None:
|
|
632
|
+
if isinstance(value, np.void):
|
|
633
|
+
self.write_numpy(stream, value)
|
|
634
|
+
return
|
|
635
|
+
self._write(stream, value.name, value.value)
|
|
636
|
+
|
|
637
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
638
|
+
self._write(stream, value['name'], value['value'])
|
|
639
|
+
|
|
640
|
+
def read(self, stream: _binary.CodedInputStream) -> ImageMetaData:
|
|
641
|
+
field_values = self._read(stream)
|
|
642
|
+
return ImageMetaData(name=field_values[0], value=field_values[1])
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
class ImageSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Image[T_NP]]):
|
|
646
|
+
def __init__(self, t_serializer: _binary.TypeSerializer[T, T_NP]) -> None:
|
|
647
|
+
super().__init__([("flags", _binary.EnumSerializer(_binary.uint64_serializer, ImageFlags)), ("measurement_uid", _binary.uint32_serializer), ("field_of_view", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("col_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("line_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("slice_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("patient_table_position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("average", _binary.OptionalSerializer(_binary.uint32_serializer)), ("slice", _binary.OptionalSerializer(_binary.uint32_serializer)), ("contrast", _binary.OptionalSerializer(_binary.uint32_serializer)), ("phase", _binary.OptionalSerializer(_binary.uint32_serializer)), ("repetition", _binary.OptionalSerializer(_binary.uint32_serializer)), ("set", _binary.OptionalSerializer(_binary.uint32_serializer)), ("acquisition_time_stamp", _binary.OptionalSerializer(_binary.uint32_serializer)), ("physiology_time_stamp", _binary.VectorSerializer(_binary.uint32_serializer)), ("image_type", _binary.EnumSerializer(_binary.int32_serializer, ImageType)), ("image_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("image_series_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("user_int", _binary.VectorSerializer(_binary.int32_serializer)), ("user_float", _binary.VectorSerializer(_binary.float32_serializer)), ("data", _binary.NDArraySerializer(t_serializer, 4)), ("meta", _binary.MapSerializer(_binary.string_serializer, _binary.VectorSerializer(_binary.string_serializer)))])
|
|
648
|
+
|
|
649
|
+
def write(self, stream: _binary.CodedOutputStream, value: Image[T_NP]) -> None:
|
|
650
|
+
if isinstance(value, np.void):
|
|
651
|
+
self.write_numpy(stream, value)
|
|
652
|
+
return
|
|
653
|
+
self._write(stream, value.flags, value.measurement_uid, value.field_of_view, value.position, value.col_dir, value.line_dir, value.slice_dir, value.patient_table_position, value.average, value.slice, value.contrast, value.phase, value.repetition, value.set, value.acquisition_time_stamp, value.physiology_time_stamp, value.image_type, value.image_index, value.image_series_index, value.user_int, value.user_float, value.data, value.meta)
|
|
654
|
+
|
|
655
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
656
|
+
self._write(stream, value['flags'], value['measurement_uid'], value['field_of_view'], value['position'], value['col_dir'], value['line_dir'], value['slice_dir'], value['patient_table_position'], value['average'], value['slice'], value['contrast'], value['phase'], value['repetition'], value['set'], value['acquisition_time_stamp'], value['physiology_time_stamp'], value['image_type'], value['image_index'], value['image_series_index'], value['user_int'], value['user_float'], value['data'], value['meta'])
|
|
657
|
+
|
|
658
|
+
def read(self, stream: _binary.CodedInputStream) -> Image[T_NP]:
|
|
659
|
+
field_values = self._read(stream)
|
|
660
|
+
return Image[T_NP](flags=field_values[0], measurement_uid=field_values[1], field_of_view=field_values[2], position=field_values[3], col_dir=field_values[4], line_dir=field_values[5], slice_dir=field_values[6], patient_table_position=field_values[7], average=field_values[8], slice=field_values[9], contrast=field_values[10], phase=field_values[11], repetition=field_values[12], set=field_values[13], acquisition_time_stamp=field_values[14], physiology_time_stamp=field_values[15], image_type=field_values[16], image_index=field_values[17], image_series_index=field_values[18], user_int=field_values[19], user_float=field_values[20], data=field_values[21], meta=field_values[22])
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
class WaveformSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Waveform[T_NP]]):
|
|
664
|
+
def __init__(self, t_serializer: _binary.TypeSerializer[T, T_NP]) -> None:
|
|
665
|
+
super().__init__([("flags", _binary.uint64_serializer), ("measurement_uid", _binary.uint32_serializer), ("scan_counter", _binary.uint32_serializer), ("time_stamp", _binary.uint32_serializer), ("sample_time_us", _binary.float32_serializer), ("waveform_id", _binary.uint32_serializer), ("data", _binary.NDArraySerializer(t_serializer, 2))])
|
|
666
|
+
|
|
667
|
+
def write(self, stream: _binary.CodedOutputStream, value: Waveform[T_NP]) -> None:
|
|
668
|
+
if isinstance(value, np.void):
|
|
669
|
+
self.write_numpy(stream, value)
|
|
670
|
+
return
|
|
671
|
+
self._write(stream, value.flags, value.measurement_uid, value.scan_counter, value.time_stamp, value.sample_time_us, value.waveform_id, value.data)
|
|
672
|
+
|
|
673
|
+
def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
|
|
674
|
+
self._write(stream, value['flags'], value['measurement_uid'], value['scan_counter'], value['time_stamp'], value['sample_time_us'], value['waveform_id'], value['data'])
|
|
675
|
+
|
|
676
|
+
def read(self, stream: _binary.CodedInputStream) -> Waveform[T_NP]:
|
|
677
|
+
field_values = self._read(stream)
|
|
678
|
+
return Waveform[T_NP](flags=field_values[0], measurement_uid=field_values[1], scan_counter=field_values[2], time_stamp=field_values[3], sample_time_us=field_values[4], waveform_id=field_values[5], data=field_values[6])
|
|
679
|
+
|
|
680
|
+
|