Source code for fdsreader.devc.device

from typing import Tuple, Union

from fdsreader.utils import Quantity


[docs] class Device: """Represents a single Device. :ivar id: The id the device was given. :ivar quantity: The :class:`Quantity` the device measured. :ivar position: Position of the device in the simulation space. :ivar orientation: The direction the device was facing. :ivar data: All data the device measured. """ def __init__(self, device_id: str, quantity: Quantity, position: Tuple[float, float, float], orientation: Tuple[float, float, float]): self.id = device_id self.quantity = quantity self.position = position self.orientation = orientation self._data_callback = lambda: None @property def data(self): if not hasattr(self, "_data"): # While this design is suboptimal, there is no other way of doing it at this point in time. When a device # is encountered that does not have any data loaded yet, the device-loading function of the Simulation # class is called, which is needed to get the path to the device file as well as fill in the data for all # other devices as well as we are reading all the data anyway self._data_callback() return self._data @property def quantity_name(self): """Alias for :class:`Device`.quantity.name. """ return self.quantity.name @property def unit(self): """Alias for :class:`Device`.quantity.unit. """ return self.quantity.unit @property def xyz(self): """Alias for :class:`Device`.position. """ return self.position
[docs] def clear_cache(self): """Remove all data from the internal cache that has been loaded so far to free memory. """ if hasattr(self, "_data"): del self._data
def __eq__(self, other): if type(other) == str: return self.id == other return self.id == other.id def __repr__(self): return f"Device(id='{self.id}', xyz={self.position}, quantity={self.quantity})"