Source code for ophyd_async.fastcs.panda._table

from collections.abc import Sequence

import numpy as np
from pydantic import model_validator

from ophyd_async.core import Array1D, StrictEnum, Table


[docs] class PandaHdf5DatasetType(StrictEnum): """Dataset options for HDF capture.""" FLOAT_64 = "float64" UINT_32 = "uint32"
[docs] class DatasetTable(Table): name: Sequence[str] dtype: Sequence[PandaHdf5DatasetType]
[docs] class SeqTrigger(StrictEnum): """Trigger options for the SeqTable.""" IMMEDIATE = "Immediate" BITA_0 = "BITA=0" BITA_1 = "BITA=1" BITB_0 = "BITB=0" BITB_1 = "BITB=1" BITC_0 = "BITC=0" BITC_1 = "BITC=1" POSA_GT = "POSA>=POSITION" POSA_LT = "POSA<=POSITION" POSB_GT = "POSB>=POSITION" POSB_LT = "POSB<=POSITION" POSC_GT = "POSC>=POSITION" POSC_LT = "POSC<=POSITION"
[docs] class SeqTable(Table): """Data type for the panda seq table.""" repeats: Array1D[np.uint16] trigger: Sequence[SeqTrigger] position: Array1D[np.int32] time1: Array1D[np.uint32] outa1: Array1D[np.bool_] outb1: Array1D[np.bool_] outc1: Array1D[np.bool_] outd1: Array1D[np.bool_] oute1: Array1D[np.bool_] outf1: Array1D[np.bool_] time2: Array1D[np.uint32] outa2: Array1D[np.bool_] outb2: Array1D[np.bool_] outc2: Array1D[np.bool_] outd2: Array1D[np.bool_] oute2: Array1D[np.bool_] outf2: Array1D[np.bool_]
[docs] @staticmethod def row( *, repeats: int = 1, trigger: str = SeqTrigger.IMMEDIATE, position: int = 0, time1: int = 0, outa1: bool = False, outb1: bool = False, outc1: bool = False, outd1: bool = False, oute1: bool = False, outf1: bool = False, time2: int = 0, outa2: bool = False, outb2: bool = False, outc2: bool = False, outd2: bool = False, oute2: bool = False, outf2: bool = False, ) -> "SeqTable": # Let pydantic do the conversions for us return SeqTable(**{k: [v] for k, v in locals().items()}) # type: ignore
@model_validator(mode="after") def _validate_max_length(self) -> "SeqTable": # Used to check max_length. Unfortunately trying the ``max_length`` arg in # the pydantic field doesn't work. first_length = len(self) max_length = 4096 if first_length > max_length: msg = f"Length {first_length} is too long" raise ValueError(msg) return self