diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 529ef16a..98f439c3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -23,7 +23,7 @@ repos: types: [python] args: - --license-filepath - - license_header.txt # defaults to: LICENSE.txt + - pre_commit_configs/license_header.txt # defaults to: LICENSE.txt - repo: https://github.com/jorisroovers/gitlint # Uses MIT License (MIT compatible) rev: v0.19.1 @@ -36,6 +36,10 @@ repos: - id: markdown-link-check # checks if links in markdown files work exclude: docs/ types: [markdown] + args: + - -c + - pre_commit_configs/link-config.json + always_run: true # toggle comment to perform git config user email check. Note that you have to place the check-email.sh script in your .git/hooks/ folder # - repo: local diff --git a/license_header.txt b/pre_commit_configs/license_header.txt similarity index 100% rename from license_header.txt rename to pre_commit_configs/license_header.txt diff --git a/pre_commit_configs/link-config.json b/pre_commit_configs/link-config.json new file mode 100644 index 00000000..f1dd61d8 --- /dev/null +++ b/pre_commit_configs/link-config.json @@ -0,0 +1,7 @@ +{ + "ignorePatterns": [ + { + "pattern": "https://doi.org/10.1117/1.JBO.27.8.083010" + } + ] +} \ No newline at end of file diff --git a/simpa/core/__init__.py b/simpa/core/__init__.py index 8653966c..5d416788 100644 --- a/simpa/core/__init__.py +++ b/simpa/core/__init__.py @@ -5,7 +5,7 @@ from simpa.core.device_digital_twins import DigitalDeviceTwinBase from simpa.log import Logger -from simpa.utils import Settings +from simpa.utils import Settings, Tags, PathManager from simpa.utils.processing_device import get_processing_device class PipelineModule: @@ -18,9 +18,31 @@ def __init__(self, global_settings: Settings): :type global_settings: Settings """ self.logger = Logger() - self.global_settings = global_settings + self.global_settings = self.get_default_global_settings() + self.global_settings.update(global_settings) # add and if necessary overrides default global settings by user given settings self.torch_device = get_processing_device(self.global_settings) + def get_default_global_settings(self) -> Settings: + """Return the default global settings + + :return: default global settings + :rtype: Settings + """ + path_manager = PathManager() + + default_global_settings = { + Tags.RANDOM_SEED: 4711, + Tags.VOLUME_NAME: "CompletePipelineExample_4711", + Tags.SIMULATION_PATH: path_manager.get_hdf5_file_save_path(), + Tags.GPU: True, + Tags.DO_FILE_COMPRESSION: True, + Tags.DO_IPASC_EXPORT: True, + Tags.CONTINUE_SIMULATION: False + } + + return Settings(default_global_settings) + + @abstractmethod def run(self, digital_device_twin: DigitalDeviceTwinBase): """ diff --git a/simpa/core/simulation.py b/simpa/core/simulation.py index e19a884d..bb382006 100644 --- a/simpa/core/simulation.py +++ b/simpa/core/simulation.py @@ -91,6 +91,7 @@ def simulate(simulation_pipeline: list, settings: Settings, digital_device_twin: for pipeline_element in simulation_pipeline: logger.debug(f"Running {type(pipeline_element)}") + pipeline_element.global_settings = settings pipeline_element.run(digital_device_twin) logger.debug(f"Running pipeline for wavelength {wavelength}nm... [Done]") diff --git a/simpa/core/simulation_modules/__init__.py b/simpa/core/simulation_modules/__init__.py index 872aa0c1..78c8fcaa 100644 --- a/simpa/core/simulation_modules/__init__.py +++ b/simpa/core/simulation_modules/__init__.py @@ -19,13 +19,28 @@ def __init__(self, global_settings: Settings): :type global_settings: Settings """ super(SimulationModule, self).__init__(global_settings=global_settings) - self.component_settings = self.load_component_settings() + + self.component_settings = self.get_default_component_settings() + self.component_settings.update(self.get_user_set_component_settings()) # adds and if necessary overrides default component settings by user given settings if self.component_settings is None: raise ValueError("The component settings should not be None at this point") @abstractmethod - def load_component_settings(self) -> Settings: + def get_user_set_component_settings(self) -> Settings: + """ + :return: Loads component settings corresponding to this simulation component set by the user """ - :return: Loads component settings corresponding to this simulation component + pass + + @abstractmethod + def get_default_component_settings(self) -> Settings: + """Return the default component settings corresponding to this simulation component + + :return: default component settings of this component + :rtype: Settings """ pass + + + + diff --git a/simpa/core/simulation_modules/acoustic_forward_module/__init__.py b/simpa/core/simulation_modules/acoustic_forward_module/__init__.py index 2beb0eb6..44c52e98 100644 --- a/simpa/core/simulation_modules/acoustic_forward_module/__init__.py +++ b/simpa/core/simulation_modules/acoustic_forward_module/__init__.py @@ -34,13 +34,13 @@ class AcousticForwardModelBaseAdapter(SimulationModule): def __init__(self, global_settings: Settings): super(AcousticForwardModelBaseAdapter, self).__init__(global_settings=global_settings) - def load_component_settings(self) -> Settings: - """Implements abstract method to serve acoustic settings as component settings + def get_user_set_component_settings(self) -> Settings: + """Implements abstract method to serve user set acoustic settings as component settings :return: Settings: acoustic component settings """ return self.global_settings.get_acoustic_settings() - + @abstractmethod def forward_model(self, detection_geometry) -> np.ndarray: """ diff --git a/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_model_test_adapter.py b/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_model_test_adapter.py index 9350da60..5cbccfb6 100644 --- a/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_model_test_adapter.py +++ b/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_model_test_adapter.py @@ -3,12 +3,20 @@ # SPDX-License-Identifier: MIT import numpy as np -from simpa.utils import Tags +from simpa.utils import Tags, Settings from simpa.core.simulation_modules.acoustic_forward_module import AcousticForwardModelBaseAdapter class AcousticForwardModelTestAdapter(AcousticForwardModelBaseAdapter): + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default acoustic component settings + """ + + default_settings = {} + return Settings(default_settings) + def forward_model(self, device) -> np.ndarray: if Tags.ACOUSTIC_SIMULATION_3D in self.component_settings \ diff --git a/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_module_k_wave_adapter.py b/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_module_k_wave_adapter.py index 7bb4e2b1..b1965f87 100644 --- a/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_module_k_wave_adapter.py +++ b/simpa/core/simulation_modules/acoustic_forward_module/acoustic_forward_module_k_wave_adapter.py @@ -66,6 +66,30 @@ class KWaveAdapter(AcousticForwardModelBaseAdapter): """ + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default acoustic component settings + """ + + path_manager = PathManager() + + default_settings = { + Tags.ACOUSTIC_SIMULATION_3D: False, + Tags.ACOUSTIC_MODEL_BINARY_PATH: path_manager.get_matlab_binary_path(), + Tags.KWAVE_PROPERTY_ALPHA_POWER: 0.00, + Tags.KWAVE_PROPERTY_SENSOR_RECORD: "p", + Tags.KWAVE_PROPERTY_PMLInside: False, + Tags.KWAVE_PROPERTY_PMLSize: [31, 32], + Tags.KWAVE_PROPERTY_PMLAlpha: 1.5, + Tags.KWAVE_PROPERTY_PlotPML: False, + Tags.RECORDMOVIE: False, + Tags.MOVIENAME: "visualization_log", + Tags.ACOUSTIC_LOG_SCALE: True + } + + return Settings(default_settings) + + def forward_model(self, detection_geometry: DetectionGeometryBase) -> np.ndarray: """ Runs the acoustic forward model and performs reading parameters and values from an hdf5 file diff --git a/simpa/core/simulation_modules/optical_simulation_module/__init__.py b/simpa/core/simulation_modules/optical_simulation_module/__init__.py index 9e2a3b6a..b184d593 100644 --- a/simpa/core/simulation_modules/optical_simulation_module/__init__.py +++ b/simpa/core/simulation_modules/optical_simulation_module/__init__.py @@ -30,12 +30,13 @@ def __init__(self, global_settings: Settings): self.nz = None self.temporary_output_files = [] - def load_component_settings(self) -> Settings: - """Implements abstract method to serve optical settings as component settings + def get_user_set_component_settings(self) -> Settings: + """Implements abstract method to serve user set optical settings as component settings :return: Settings: optical component settings """ return self.global_settings.get_optical_settings() + @abstractmethod def forward_model(self, diff --git a/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_adapter.py b/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_adapter.py index da9b52d6..bfa23f17 100644 --- a/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_adapter.py +++ b/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_adapter.py @@ -4,7 +4,7 @@ import numpy as np import subprocess -from simpa.utils import Tags, Settings +from simpa.utils import Tags, Settings, PathManager from simpa.core.simulation_modules.optical_simulation_module import OpticalForwardModuleBase from simpa.core.device_digital_twins.illumination_geometries import IlluminationGeometryBase import json @@ -13,6 +13,7 @@ from typing import List, Dict, Tuple + class MCXAdapter(OpticalForwardModuleBase): """ This class implements a bridge to the mcx framework to integrate mcx into SIMPA. This adapter only allows for @@ -38,6 +39,22 @@ def __init__(self, global_settings: Settings): self.frames = None self.mcx_output_suffixes = {'mcx_volumetric_data_file': '.jnii'} + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default optical component settings + """ + + path_manager = PathManager() + + default_settings = { + Tags.MCX_ASSUMED_ANISOTROPY: 0.9, + Tags.OPTICAL_MODEL_BINARY_PATH: path_manager.get_mcx_binary_path(), + Tags.COMPUTE_DIFFUSE_REFLECTANCE: False, + Tags.COMPUTE_PHOTON_DIRECTION_AT_EXIT: False + } + + return Settings(default_settings) + def forward_model(self, absorption_cm: np.ndarray, scattering_cm: np.ndarray, diff --git a/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_reflectance_adapter.py b/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_reflectance_adapter.py index fa9a64a7..de5b7cad 100644 --- a/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_reflectance_adapter.py +++ b/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_mcx_reflectance_adapter.py @@ -7,7 +7,7 @@ import os from typing import List, Tuple, Dict, Union -from simpa.utils import Tags, Settings +from simpa.utils import Tags, Settings, PathManager from simpa.core.simulation_modules.optical_simulation_module.optical_forward_model_mcx_adapter import MCXAdapter from simpa.core.device_digital_twins import IlluminationGeometryBase, PhotoacousticDevice @@ -41,6 +41,22 @@ def __init__(self, global_settings: Settings): self.mcx_output_suffixes = {'mcx_volumetric_data_file': '.jnii', 'mcx_photon_data_file': '_detp.jdat'} + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default optical component settings + """ + + path_manager = PathManager() + + default_settings = { + Tags.MCX_ASSUMED_ANISOTROPY: 0.9, + Tags.OPTICAL_MODEL_BINARY_PATH: path_manager.get_mcx_binary_path(), + Tags.COMPUTE_DIFFUSE_REFLECTANCE: True, + Tags.COMPUTE_PHOTON_DIRECTION_AT_EXIT: False + } + + return Settings(default_settings) + def forward_model(self, absorption_cm: np.ndarray, scattering_cm: np.ndarray, diff --git a/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_test_adapter.py b/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_test_adapter.py index fb891954..3f8cae1b 100644 --- a/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_test_adapter.py +++ b/simpa/core/simulation_modules/optical_simulation_module/optical_forward_model_test_adapter.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT from simpa.core.simulation_modules.optical_simulation_module import OpticalForwardModuleBase -from simpa import Tags +from simpa import Tags, Settings class OpticalForwardModelTestAdapter(OpticalForwardModuleBase): @@ -11,6 +11,14 @@ class OpticalForwardModelTestAdapter(OpticalForwardModuleBase): This Adapter was created for testing purposes and only """ + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default optical component settings + """ + + default_settings = {} + return Settings(default_settings) + def forward_model(self, absorption_cm, scattering_cm, anisotropy, illumination_geometry): results = {Tags.DATA_FIELD_FLUENCE: absorption_cm / ((1 - anisotropy) * scattering_cm)} return results diff --git a/simpa/core/simulation_modules/reconstruction_module/__init__.py b/simpa/core/simulation_modules/reconstruction_module/__init__.py index 118874dc..74529456 100644 --- a/simpa/core/simulation_modules/reconstruction_module/__init__.py +++ b/simpa/core/simulation_modules/reconstruction_module/__init__.py @@ -26,8 +26,8 @@ class ReconstructionAdapterBase(SimulationModule): def __init__(self, global_settings: Settings): super(ReconstructionAdapterBase, self).__init__(global_settings=global_settings) - def load_component_settings(self) -> Settings: - """Implements abstract method to serve reconstruction settings as component settings + def get_user_set_component_settings(self) -> Settings: + """Implements abstract method to serve user set reconstruction settings as component settings :return: Settings: reconstruction component settings """ diff --git a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_and_sum_adapter.py b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_and_sum_adapter.py index b9f8deba..794a41bd 100644 --- a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_and_sum_adapter.py +++ b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_and_sum_adapter.py @@ -2,7 +2,7 @@ # SPDX-FileCopyrightText: 2021 Janek Groehl # SPDX-License-Identifier: MIT -from simpa.utils import Tags +from simpa.utils import Tags, Settings from simpa.core.simulation_modules.reconstruction_module import ReconstructionAdapterBase import numpy as np import torch @@ -14,6 +14,23 @@ class DelayAndSumAdapter(ReconstructionAdapterBase): + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default reconstruction component settings + """ + + default_settings = { + Tags.RECONSTRUCTION_PERFORM_BANDPASS_FILTERING: True, + Tags.TUKEY_WINDOW_ALPHA: 0.5, + Tags.BANDPASS_CUTOFF_LOWPASS_IN_HZ: int(8e6), + Tags.BANDPASS_CUTOFF_HIGHPASS_IN_HZ: int(0.1e6), + Tags.RECONSTRUCTION_BMODE_METHOD: Tags.RECONSTRUCTION_BMODE_METHOD_HILBERT_TRANSFORM, + Tags.RECONSTRUCTION_APODIZATION_METHOD: Tags.RECONSTRUCTION_APODIZATION_BOX, + Tags.RECONSTRUCTION_MODE: Tags.RECONSTRUCTION_MODE_PRESSURE, + } + + return Settings(default_settings) + def reconstruction_algorithm(self, time_series_sensor_data, detection_geometry: DetectionGeometryBase): """ Applies the Delay and Sum beamforming algorithm [1] to the time series sensor data (2D numpy array where the diff --git a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_multiply_and_sum_adapter.py b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_multiply_and_sum_adapter.py index 65178230..97e6df4f 100644 --- a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_multiply_and_sum_adapter.py +++ b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_delay_multiply_and_sum_adapter.py @@ -2,7 +2,7 @@ # SPDX-FileCopyrightText: 2021 Janek Groehl # SPDX-License-Identifier: MIT -from simpa.utils import Tags +from simpa.utils import Tags, Settings from simpa.core.simulation_modules.reconstruction_module import ReconstructionAdapterBase from simpa.core.device_digital_twins import DetectionGeometryBase import numpy as np @@ -14,6 +14,23 @@ class DelayMultiplyAndSumAdapter(ReconstructionAdapterBase): + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default reconstruction component settings + """ + + default_settings = { + Tags.RECONSTRUCTION_PERFORM_BANDPASS_FILTERING: True, + Tags.TUKEY_WINDOW_ALPHA: 0.5, + Tags.BANDPASS_CUTOFF_LOWPASS_IN_HZ: int(8e6), + Tags.BANDPASS_CUTOFF_HIGHPASS_IN_HZ: int(0.1e6), + Tags.RECONSTRUCTION_BMODE_METHOD: Tags.RECONSTRUCTION_BMODE_METHOD_HILBERT_TRANSFORM, + Tags.RECONSTRUCTION_APODIZATION_METHOD: Tags.RECONSTRUCTION_APODIZATION_BOX, + Tags.RECONSTRUCTION_MODE: Tags.RECONSTRUCTION_MODE_PRESSURE, + } + + return Settings(default_settings) + def reconstruction_algorithm(self, time_series_sensor_data, detection_geometry: DetectionGeometryBase): """ Applies the Delay Multiply and Sum beamforming algorithm [1] to the time series sensor data (2D numpy array where the diff --git a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_signed_delay_multiply_and_sum_adapter.py b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_signed_delay_multiply_and_sum_adapter.py index 28c7d84c..c885852e 100644 --- a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_signed_delay_multiply_and_sum_adapter.py +++ b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_signed_delay_multiply_and_sum_adapter.py @@ -2,7 +2,7 @@ # SPDX-FileCopyrightText: 2021 Janek Groehl # SPDX-License-Identifier: MIT -from simpa.utils import Tags +from simpa.utils import Tags, Settings from simpa.core.simulation_modules.reconstruction_module import ReconstructionAdapterBase from simpa.core.device_digital_twins import DetectionGeometryBase import numpy as np @@ -14,6 +14,23 @@ class SignedDelayMultiplyAndSumAdapter(ReconstructionAdapterBase): + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default reconstruction component settings + """ + + default_settings = { + Tags.RECONSTRUCTION_PERFORM_BANDPASS_FILTERING: True, + Tags.TUKEY_WINDOW_ALPHA: 0.5, + Tags.BANDPASS_CUTOFF_LOWPASS_IN_HZ: int(8e6), + Tags.BANDPASS_CUTOFF_HIGHPASS_IN_HZ: int(0.1e6), + Tags.RECONSTRUCTION_BMODE_METHOD: Tags.RECONSTRUCTION_BMODE_METHOD_HILBERT_TRANSFORM, + Tags.RECONSTRUCTION_APODIZATION_METHOD: Tags.RECONSTRUCTION_APODIZATION_BOX, + Tags.RECONSTRUCTION_MODE: Tags.RECONSTRUCTION_MODE_PRESSURE, + } + + return Settings(default_settings) + def reconstruction_algorithm(self, time_series_sensor_data, detection_geometry: DetectionGeometryBase): """ Applies the signed Delay Multiply and Sum beamforming algorithm [1] to the time series sensor data diff --git a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_test_adapter.py b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_test_adapter.py index e3456c4e..546abb8c 100644 --- a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_test_adapter.py +++ b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_test_adapter.py @@ -3,9 +3,18 @@ # SPDX-License-Identifier: MIT from simpa.core.simulation_modules.reconstruction_module import ReconstructionAdapterBase +from simpa.utils import Settings class ReconstructionModuleTestAdapter(ReconstructionAdapterBase): + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default reconstruction component settings + """ + + default_settings = {} + return Settings(default_settings) + def reconstruction_algorithm(self, time_series_sensor_data, detection_geometry): return time_series_sensor_data / 10 + 5 diff --git a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_time_reversal_adapter.py b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_time_reversal_adapter.py index 6b4bd43f..f823329a 100644 --- a/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_time_reversal_adapter.py +++ b/simpa/core/simulation_modules/reconstruction_module/reconstruction_module_time_reversal_adapter.py @@ -2,9 +2,8 @@ # SPDX-FileCopyrightText: 2021 Janek Groehl # SPDX-License-Identifier: MIT -from simpa.utils import Tags +from simpa.utils import Tags, Settings, PathManager from simpa.utils.matlab import generate_matlab_cmd -from simpa.utils.settings import Settings from simpa.core.simulation_modules.reconstruction_module import ReconstructionAdapterBase from simpa.core.device_digital_twins import LinearArrayDetectionGeometry import numpy as np @@ -28,6 +27,37 @@ class TimeReversalAdapter(ReconstructionAdapterBase): """ + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default reconstruction component settings + """ + + path_manager = PathManager() + + default_settings = { + Tags.RECONSTRUCTION_PERFORM_BANDPASS_FILTERING: True, + Tags.ACOUSTIC_MODEL_BINARY_PATH: path_manager.get_matlab_binary_path(), + Tags.ACOUSTIC_SIMULATION_3D: False, + Tags.KWAVE_PROPERTY_ALPHA_POWER: 0.00, + Tags.TUKEY_WINDOW_ALPHA: 0.5, + Tags.BANDPASS_CUTOFF_LOWPASS_IN_HZ: int(8e6), + Tags.BANDPASS_CUTOFF_HIGHPASS_IN_HZ: int(0.1e4), + Tags.RECONSTRUCTION_BMODE_AFTER_RECONSTRUCTION: False, + Tags.RECONSTRUCTION_BMODE_METHOD: Tags.RECONSTRUCTION_BMODE_METHOD_HILBERT_TRANSFORM, + Tags.RECONSTRUCTION_APODIZATION_METHOD: Tags.RECONSTRUCTION_APODIZATION_BOX, + Tags.RECONSTRUCTION_MODE: Tags.RECONSTRUCTION_MODE_PRESSURE, + Tags.KWAVE_PROPERTY_SENSOR_RECORD: "p", + Tags.KWAVE_PROPERTY_PMLInside: False, + Tags.KWAVE_PROPERTY_PMLSize: [31, 32], + Tags.KWAVE_PROPERTY_PMLAlpha: 1.5, + Tags.KWAVE_PROPERTY_PlotPML: False, + Tags.RECORDMOVIE: False, + Tags.MOVIENAME: "visualization_log", + Tags.ACOUSTIC_LOG_SCALE: True, + } + + return Settings(default_settings) + def get_acoustic_properties(self, input_data: dict, detection_geometry): """ This method extracts the acoustic tissue properties from the settings dictionary and diff --git a/simpa/core/simulation_modules/volume_creation_module/__init__.py b/simpa/core/simulation_modules/volume_creation_module/__init__.py index 7f2b3ffa..f8633f89 100644 --- a/simpa/core/simulation_modules/volume_creation_module/__init__.py +++ b/simpa/core/simulation_modules/volume_creation_module/__init__.py @@ -21,8 +21,8 @@ class VolumeCreatorModuleBase(SimulationModule): def __init__(self, global_settings: Settings): super(VolumeCreatorModuleBase, self).__init__(global_settings=global_settings) - def load_component_settings(self) -> Settings: - """Implements abstract method to serve volume creation settings as component settings + def get_user_set_component_settings(self) -> Settings: + """Implements abstract method to serve user set volume creation settings as component settings :return: Settings: volume creation component settings """ diff --git a/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_model_based_adapter.py b/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_model_based_adapter.py index 2379adf3..c9612420 100644 --- a/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_model_based_adapter.py +++ b/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_model_based_adapter.py @@ -4,7 +4,7 @@ from simpa.core.simulation_modules.volume_creation_module import VolumeCreatorModuleBase from simpa.utils.libraries.structure_library import priority_sorted_structures -from simpa.utils import Tags +from simpa.utils import Tags, Settings import numpy as np from simpa.utils import create_deformation_settings import torch @@ -45,6 +45,18 @@ class ModelBasedVolumeCreationAdapter(VolumeCreatorModuleBase): """ + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default volume creation component settings + """ + + default_settings = { + Tags.SIMULATE_DEFORMED_LAYERS: True + } + + return Settings(default_settings) + + def create_simulation_volume(self) -> dict: if Tags.SIMULATE_DEFORMED_LAYERS in self.component_settings \ diff --git a/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_segmentation_based_adapter.py b/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_segmentation_based_adapter.py index 490ce2eb..ff36af02 100644 --- a/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_segmentation_based_adapter.py +++ b/simpa/core/simulation_modules/volume_creation_module/volume_creation_module_segmentation_based_adapter.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT from simpa.core.simulation_modules.volume_creation_module import VolumeCreatorModuleBase -from simpa.utils import Tags +from simpa.utils import Tags, Settings from simpa.utils.constants import property_tags from simpa.io_handling import save_hdf5 import numpy as np @@ -20,6 +20,15 @@ class SegmentationBasedVolumeCreationAdapter(VolumeCreatorModuleBase): With this, an even greater utility is warranted. """ + def get_default_component_settings(self) -> Settings: + """ + :return: Loads default volume creation component settings + """ + + default_settings = {} + return Settings(default_settings) + + def create_simulation_volume(self) -> dict: volumes, x_dim_px, y_dim_px, z_dim_px = self.create_empty_volumes() wavelength = self.global_settings[Tags.WAVELENGTH] diff --git a/simpa/utils/tags.py b/simpa/utils/tags.py index 3dd7c259..3b14c98d 100644 --- a/simpa/utils/tags.py +++ b/simpa/utils/tags.py @@ -101,24 +101,6 @@ class Tags: Volume Creation Settings """ - VOLUME_CREATOR = ("volume_creator", str) - """ - Choice of the volume creator adapter.\n - Usage: module volume_creation_module, module device_digital_twins - """ - - VOLUME_CREATOR_VERSATILE = "volume_creator_versatile" - """ - Corresponds to the ModelBasedVolumeCreator.\n - Usage: module volume_creation_module, naming convention - """ - - VOLUME_CREATOR_SEGMENTATION_BASED = "volume_creator_segmentation_based" - """ - Corresponds to the SegmentationBasedVolumeCreator.\n - Usage: module volume_creation_module, naming convention - """ - INPUT_SEGMENTATION_VOLUME = ("input_segmentation_volume", np.ndarray) """ Array that defines a segmented volume.\n diff --git a/simpa_examples/msot_invision_simulation.py b/simpa_examples/msot_invision_simulation.py index 7c5de16d..efa08798 100644 --- a/simpa_examples/msot_invision_simulation.py +++ b/simpa_examples/msot_invision_simulation.py @@ -126,7 +126,6 @@ def get_settings(): Tags.DIM_VOLUME_Z_MM: XZ_DIM, Tags.DIM_VOLUME_X_MM: XZ_DIM, Tags.DIM_VOLUME_Y_MM: Y_DIM, - Tags.VOLUME_CREATOR: Tags.VOLUME_CREATOR_VERSATILE, Tags.GPU: True, Tags.WAVELENGTHS: [700] } diff --git a/simpa_examples/optical_and_acoustic_simulation.py b/simpa_examples/optical_and_acoustic_simulation.py index 68bb856c..01ba621e 100644 --- a/simpa_examples/optical_and_acoustic_simulation.py +++ b/simpa_examples/optical_and_acoustic_simulation.py @@ -80,7 +80,6 @@ def create_example_tissue(): Tags.DIM_VOLUME_Z_MM: VOLUME_HEIGHT_IN_MM, Tags.DIM_VOLUME_X_MM: VOLUME_TRANSDUCER_DIM_IN_MM, Tags.DIM_VOLUME_Y_MM: VOLUME_PLANAR_DIM_IN_MM, - Tags.VOLUME_CREATOR: Tags.VOLUME_CREATOR_VERSATILE, Tags.GPU: True, Tags.WAVELENGTHS: [700, 800], Tags.DO_FILE_COMPRESSION: True, diff --git a/simpa_tests/manual_tests/__init__.py b/simpa_tests/manual_tests/__init__.py index 79a6a5b1..1cda42ca 100644 --- a/simpa_tests/manual_tests/__init__.py +++ b/simpa_tests/manual_tests/__init__.py @@ -81,7 +81,6 @@ def setup(self): Tags.DIM_VOLUME_Z_MM: self.VOLUME_HEIGHT_IN_MM, Tags.DIM_VOLUME_X_MM: self.VOLUME_TRANSDUCER_DIM_IN_MM, Tags.DIM_VOLUME_Y_MM: self.VOLUME_PLANAR_DIM_IN_MM, - Tags.VOLUME_CREATOR: Tags.VOLUME_CREATOR_VERSATILE, Tags.GPU: True, # Simulation Device diff --git a/simpa_tests/manual_tests/digital_device_twins/SimulationWithMSOTInvision.py b/simpa_tests/manual_tests/digital_device_twins/SimulationWithMSOTInvision.py index 397d2da5..22066591 100644 --- a/simpa_tests/manual_tests/digital_device_twins/SimulationWithMSOTInvision.py +++ b/simpa_tests/manual_tests/digital_device_twins/SimulationWithMSOTInvision.py @@ -130,7 +130,6 @@ def get_settings(self): Tags.DIM_VOLUME_Z_MM: 90, Tags.DIM_VOLUME_X_MM: 90, Tags.DIM_VOLUME_Y_MM: 40, - Tags.VOLUME_CREATOR: Tags.VOLUME_CREATOR_VERSATILE, Tags.GPU: True, Tags.WAVELENGTHS: [700] } diff --git a/simpa_tests/manual_tests/image_reconstruction/PointSourceReconstruction.py b/simpa_tests/manual_tests/image_reconstruction/PointSourceReconstruction.py index e59f35e3..1c532156 100644 --- a/simpa_tests/manual_tests/image_reconstruction/PointSourceReconstruction.py +++ b/simpa_tests/manual_tests/image_reconstruction/PointSourceReconstruction.py @@ -96,7 +96,6 @@ def create_point_source(): Tags.DIM_VOLUME_Z_MM: VOLUME_HEIGHT_IN_MM, Tags.DIM_VOLUME_X_MM: VOLUME_TRANSDUCER_DIM_IN_MM, Tags.DIM_VOLUME_Y_MM: VOLUME_PLANAR_DIM_IN_MM, - Tags.VOLUME_CREATOR: Tags.VOLUME_CREATOR_VERSATILE, Tags.GPU: True, # The following parameters set the optical forward model