Source code for pacfish.api.BaseAdapter
# SPDX-FileCopyrightText: 2021 International Photoacoustics Standardisation Consortium (IPASC)
# SPDX-FileCopyrightText: 2021 Janek Gröhl
# SPDX-FileCopyrightText: 2021 Lina Hacker
# SPDX-License-Identifier: BSD 3-Clause License
from abc import ABC, abstractmethod
from pacfish.core.PAData import PAData
from pacfish.core.Metadata import MetadataAcquisitionTags, MetaDatum
import numpy as np
[docs]class BaseAdapter(ABC):
"""
The purpose of the BaseAdapter class is to provide the framework to convert from any
given input data type into the IPASC format. It can be used as a basis for extension
for a custom Adapter.
To achieve this, one needs to inherit from BaseAdapter and implement the abstract methods::
class CustomAdapter(BaseAdapter):
def __init__():
# TODO do all of the loading etc here
# Then call the __init__ of the BaseAdapter
super(CustomAdapter, self).__init__()
# TODO Add custom parameters after calling BaseAdapter.__init__
def generate_binary_data(self):
# TODO
def generate_device_meta_data(self):
# TODO
def set_metadata_value(self, metadatum: MetaDatum):
# TODO
"""
def __init__(self):
self.pa_data = PAData()
binary_data = self.generate_binary_data()
self.pa_data.binary_time_series_data = binary_data
meta_data = self.generate_acquisition_meta_data()
self.pa_data.meta_data_acquisition = meta_data
meta_data_device = self.generate_device_meta_data()
self.pa_data.meta_data_device = meta_data_device
[docs] @abstractmethod
def generate_binary_data(self) -> np.ndarray:
"""
The binary data is the raw time series data.
It is internally stored as an N-dimensional numpy array.
The binary data must be formatted the following way:
[detectors, samples, wavelengths, measurements]
Return
------
np.ndarray
A numpy array containing the binary data
"""
pass
[docs] @abstractmethod
def generate_device_meta_data(self) -> dict:
"""
Must be implemented to define a digital twin of the photoacoustic imaging device.
This method can be implemented using the DeviceMetaDataCreator.
Return
------
dict
A dictionary containing all key-value pair necessary to describe a digital twin of a
photoacoustic device.
"""
pass
[docs] @abstractmethod
def set_metadata_value(self, metadatum: MetaDatum) -> object:
"""
This method must be implemented to yield appropriate data for all MetaDatum elements in the
MetadataTags class.
You are given a certain meta datum nd have to return the appropriate information.
Parameters
----------
metadatum: MetaDatum
The MetaDatum for which to return the correct data.
Return
------
object
The data corresponding to the given MetaDatum
"""
pass
[docs] def generate_acquisition_meta_data(self) -> dict:
"""
Internal method
Return
------
dict
"""
meta_data_dictionary = dict()
for metadatum in MetadataAcquisitionTags.TAGS:
target_value = self.set_metadata_value(metadatum)
if target_value is not None:
meta_data_dictionary[metadatum.tag] = target_value
return meta_data_dictionary
[docs] def add_custom_meta_datum_field(self, key: str, value: object):
"""
This method can be used to add a metadata field that is not reflected in the
standard list of metadata of the IPASC format.
Must be called after the __init__ method of the BaseAdapter was called.
The custom meta data are stored in the AcquisitionMetadata dictionary.
Parameters
----------
key: str
The unique name with which the value is stored in the dictionary.
value: object
The value to store.
"""
if key is None:
raise KeyError("A meta datum key must not be None.")
if value is None:
raise ValueError("The given value must not be None.")
self.pa_data.meta_data_acquisition[key] = value
[docs] def generate_pa_data(self) -> PAData:
"""
Internal method
Return
------
PAData
"""
return self.pa_data