# This file was generated by the "yardl" tool. DO NOT EDIT.
# pyright: reportUnusedClass=false
# pyright: reportUnusedImport=false
# pyright: reportUnknownArgumentType=false
# pyright: reportUnknownMemberType=false
# pyright: reportUnknownVariableType=false
import collections.abc
import io
import typing
import numpy as np
import numpy.typing as npt
from .types import *
from .protocols import *
from . import _binary
from . import yardl_types as yardl
[docs]class BinaryPrdExperimentWriter(_binary.BinaryProtocolWriter, PrdExperimentWriterBase):
"""Binary writer for the PrdExperiment protocol."""
def __init__(self, stream: typing.Union[typing.BinaryIO, str]) -> None:
PrdExperimentWriterBase.__init__(self)
_binary.BinaryProtocolWriter.__init__(self, stream, PrdExperimentWriterBase.schema)
[docs] def _write_time_blocks(self, value: collections.abc.Iterable[TimeBlock]) -> None:
_binary.StreamSerializer(_TimeBlockSerializer()).write(self._stream, value)
[docs]class BinaryPrdExperimentReader(_binary.BinaryProtocolReader, PrdExperimentReaderBase):
"""Binary writer for the PrdExperiment protocol."""
def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None:
PrdExperimentReaderBase.__init__(self)
_binary.BinaryProtocolReader.__init__(self, stream, PrdExperimentReaderBase.schema)
[docs] def _read_time_blocks(self) -> collections.abc.Iterable[TimeBlock]:
return _binary.StreamSerializer(_TimeBlockSerializer()).read(self._stream)
[docs]class _CoincidenceEventSerializer(_binary.RecordSerializer[CoincidenceEvent]):
def __init__(self) -> None:
super().__init__([("detector_1_id", _binary.uint32_serializer), ("detector_2_id", _binary.uint32_serializer), ("tof_idx", _binary.uint32_serializer), ("energy_1_idx", _binary.uint32_serializer), ("energy_2_idx", _binary.uint32_serializer)])
[docs] def write(self, stream: _binary.CodedOutputStream, value: CoincidenceEvent) -> None:
if isinstance(value, np.void):
self.write_numpy(stream, value)
return
self._write(stream, value.detector_1_id, value.detector_2_id, value.tof_idx, value.energy_1_idx, value.energy_2_idx)
[docs] def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
self._write(stream, value['detector_1_id'], value['detector_2_id'], value['tof_idx'], value['energy_1_idx'], value['energy_2_idx'])
[docs] def read(self, stream: _binary.CodedInputStream) -> CoincidenceEvent:
field_values = self._read(stream)
return CoincidenceEvent(detector_1_id=field_values[0], detector_2_id=field_values[1], tof_idx=field_values[2], energy_1_idx=field_values[3], energy_2_idx=field_values[4])
[docs]class _SubjectSerializer(_binary.RecordSerializer[Subject]):
def __init__(self) -> None:
super().__init__([("name", _binary.OptionalSerializer(_binary.string_serializer)), ("id", _binary.string_serializer)])
[docs] def write(self, stream: _binary.CodedOutputStream, value: Subject) -> None:
if isinstance(value, np.void):
self.write_numpy(stream, value)
return
self._write(stream, value.name, value.id)
[docs] def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
self._write(stream, value['name'], value['id'])
[docs] def read(self, stream: _binary.CodedInputStream) -> Subject:
field_values = self._read(stream)
return Subject(name=field_values[0], id=field_values[1])
[docs]class _InstitutionSerializer(_binary.RecordSerializer[Institution]):
def __init__(self) -> None:
super().__init__([("name", _binary.string_serializer), ("address", _binary.string_serializer)])
[docs] def write(self, stream: _binary.CodedOutputStream, value: Institution) -> None:
if isinstance(value, np.void):
self.write_numpy(stream, value)
return
self._write(stream, value.name, value.address)
[docs] def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
self._write(stream, value['name'], value['address'])
[docs] def read(self, stream: _binary.CodedInputStream) -> Institution:
field_values = self._read(stream)
return Institution(name=field_values[0], address=field_values[1])
[docs]class _DetectorSerializer(_binary.RecordSerializer[Detector]):
def __init__(self) -> None:
super().__init__([("id", _binary.uint32_serializer), ("x", _binary.float32_serializer), ("y", _binary.float32_serializer), ("z", _binary.float32_serializer)])
[docs] def write(self, stream: _binary.CodedOutputStream, value: Detector) -> None:
if isinstance(value, np.void):
self.write_numpy(stream, value)
return
self._write(stream, value.id, value.x, value.y, value.z)
[docs] def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
self._write(stream, value['id'], value['x'], value['y'], value['z'])
[docs] def read(self, stream: _binary.CodedInputStream) -> Detector:
field_values = self._read(stream)
return Detector(id=field_values[0], x=field_values[1], y=field_values[2], z=field_values[3])
[docs]class _TimeBlockSerializer(_binary.RecordSerializer[TimeBlock]):
def __init__(self) -> None:
super().__init__([("id", _binary.uint32_serializer), ("prompt_events", _binary.VectorSerializer(_CoincidenceEventSerializer())), ("delayed_events", _binary.OptionalSerializer(_binary.VectorSerializer(_CoincidenceEventSerializer())))])
[docs] def write(self, stream: _binary.CodedOutputStream, value: TimeBlock) -> None:
if isinstance(value, np.void):
self.write_numpy(stream, value)
return
self._write(stream, value.id, value.prompt_events, value.delayed_events)
[docs] def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
self._write(stream, value['id'], value['prompt_events'], value['delayed_events'])
[docs] def read(self, stream: _binary.CodedInputStream) -> TimeBlock:
field_values = self._read(stream)
return TimeBlock(id=field_values[0], prompt_events=field_values[1], delayed_events=field_values[2])
[docs]class _TimeIntervalSerializer(_binary.RecordSerializer[TimeInterval]):
def __init__(self) -> None:
super().__init__([("start", _binary.uint32_serializer), ("stop", _binary.uint32_serializer)])
[docs] def write(self, stream: _binary.CodedOutputStream, value: TimeInterval) -> None:
if isinstance(value, np.void):
self.write_numpy(stream, value)
return
self._write(stream, value.start, value.stop)
[docs] def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
self._write(stream, value['start'], value['stop'])
[docs] def read(self, stream: _binary.CodedInputStream) -> TimeInterval:
field_values = self._read(stream)
return TimeInterval(start=field_values[0], stop=field_values[1])