Source code for simpa.utils.dict_path_manager

# SPDX-FileCopyrightText: 2021 Division of Intelligent Medical Systems, DKFZ
# SPDX-FileCopyrightText: 2021 Janek Groehl
# SPDX-License-Identifier: MIT

from simpa.utils import Tags
from simpa.utils.constants import (wavelength_dependent_properties, wavelength_independent_properties,
                                   toolkit_tags, simulation_output, simulation_output_fields)


[docs]def generate_dict_path(data_field, wavelength: (int, float) = None) -> str: """ Generates a path within an hdf5 file in the SIMPA convention :param data_field: Data field that is supposed to be stored in an hdf5 file. :param wavelength: Wavelength of the current simulation. :return: String which defines the path to the data_field. """ if data_field in [Tags.SIMPA_VERSION, Tags.SIMULATIONS, Tags.SETTINGS, Tags.DIGITAL_DEVICE, Tags.SIMULATION_PIPELINE]: return "/" + data_field + "/" all_wl_independent_properties = wavelength_independent_properties + toolkit_tags wavelength_dependent_image_processing_output = [Tags.ITERATIVE_qPAI_RESULT] wavelength_independent_image_processing_output = [Tags.LINEAR_UNMIXING_RESULT] if wavelength is not None: wl = "/{}/".format(wavelength) else: wl = "/" if data_field in wavelength_dependent_properties: dict_path = "/" + Tags.SIMULATIONS + "/" + Tags.SIMULATION_PROPERTIES + "/" + data_field + wl elif data_field in simulation_output: if data_field in [Tags.DATA_FIELD_FLUENCE, Tags.DATA_FIELD_INITIAL_PRESSURE, Tags.OPTICAL_MODEL_UNITS, Tags.DATA_FIELD_DIFFUSE_REFLECTANCE, Tags.DATA_FIELD_DIFFUSE_REFLECTANCE_POS, Tags.DATA_FIELD_PHOTON_EXIT_POS, Tags.DATA_FIELD_PHOTON_EXIT_DIR]: dict_path = "/" + Tags.SIMULATIONS + "/" + Tags.OPTICAL_MODEL_OUTPUT_NAME + "/" + data_field + wl else: dict_path = "/" + Tags.SIMULATIONS + "/" + data_field + wl elif data_field in all_wl_independent_properties: dict_path = "/" + Tags.SIMULATIONS + "/" + Tags.SIMULATION_PROPERTIES + "/" + data_field + "/" elif data_field in simulation_output_fields: dict_path = "/" + Tags.SIMULATIONS + "/" + data_field + "/" elif data_field in wavelength_dependent_image_processing_output: dict_path = "/" + Tags.IMAGE_PROCESSING + "/" + data_field + wl elif data_field in wavelength_independent_image_processing_output: dict_path = "/" + Tags.IMAGE_PROCESSING + "/" + data_field + "/" else: raise ValueError(f"The requested data_field: '{data_field}: is not a valid argument. " f"Please specify a valid data_field using the Tags from simpa/utils/tags.py!") return dict_path
[docs]def get_data_field_from_simpa_output(simpa_output: dict, data_field: (tuple, str), wavelength: (int, float) = None): """ Navigates through a dictionary in the standard simpa output format to a specific data field. :param simpa_output: Dictionary that is in the standard simpa output format. :param data_field: Data field that is contained in simpa_output. :param wavelength: Wavelength of the current simulation. :return: Queried data_field. """ dict_path = generate_dict_path(data_field, wavelength) keys_to_data_field = dict_path.split("/") current_dict = simpa_output for key in keys_to_data_field: if key == "": continue current_dict = current_dict[key] return current_dict