Skip to content

UML Diagrams

These diagrams are generated from the Python sources under src/ using Pyreverse (from Pylint). The generator script is scripts/generate_uml.py.

Class Diagram
Could not retrieve image data, got: Forbidden [403]

@startuml classes_GOLIAT
skinparam linetype poly
skinparam ranksep 300
set namespaceSeparator none
class "Analyzer" as src.analysis.analyzer.Analyzer {
  all_organ_results : list
  all_results : list
  base_dir
  config : str
  phantom_name : str
  plotter
  results_base_dir
  strategy : str
  tissue_group_definitions : dict
  __init__(config: 'Config', phantom_name: str, strategy: 'BaseAnalysisStrategy')
  _convert_units_and_cache(results_df: pd.DataFrame, organ_results_df: pd.DataFrame) -> pd.DataFrame
  _export_reports(results_df: pd.DataFrame, all_organ_results_df: pd.DataFrame)
  _generate_plots(results_df: pd.DataFrame, all_organ_results_df: pd.DataFrame)
  _process_single_result(frequency_mhz: int, scenario_name: str, pos_name: str, orient_name: str)
  run_analysis()
}
class "Antenna" as src.antenna.Antenna {
  antenna_config
  config : str
  frequency_mhz : int
  __init__(config: 'Config', frequency_mhz: int)
  get_centered_antenna_path(centered_antennas_dir: str) -> str
  get_config_for_frequency() -> dict
  get_model_type() -> str
  get_source_entity_name() -> str
}
class "BaseAnalysisStrategy" as src.analysis.base_strategy.BaseAnalysisStrategy {
  base_dir
  config : str
  phantom_name : str
  __init__(config: 'Config', phantom_name: str)
  {abstract}apply_bug_fixes(result_entry: dict) -> dict
  {abstract}calculate_summary_stats(results_df: pd.DataFrame) -> pd.DataFrame
  {abstract}extract_data(pickle_data: dict, frequency_mhz: int, detailed_name: str, scenario_name: str, sim_power: float, norm_factor: float) -> tuple[dict, list]
  {abstract}generate_plots(analyzer: 'Analyzer', plotter: 'Plotter', results_df: pd.DataFrame, all_organ_results_df: pd.DataFrame)
  {abstract}get_normalization_factor(frequency_mhz: int, simulated_power_w: float) -> float
  {abstract}get_plots_dir() -> str
  {abstract}get_results_base_dir() -> str
  {abstract}load_and_process_results(analyzer: 'Analyzer')
}
class "BaseAnalysisStrategy" as src.analysis.strategies.BaseAnalysisStrategy {
  base_dir
  config
  phantom_name
  __init__(config, phantom_name)
  {abstract}apply_bug_fixes(result_entry)
  {abstract}calculate_summary_stats(results_df)
  {abstract}extract_data(pickle_data, frequency_mhz, detailed_name, scenario_name, sim_power, norm_factor)
  {abstract}generate_plots(analyzer, plotter, results_df, all_organ_results_df)
  {abstract}get_normalization_factor(frequency_mhz, simulated_power_w)
  {abstract}get_plots_dir()
  {abstract}get_results_base_dir()
  {abstract}load_and_process_results(analyzer)
}
class "BaseSetup" as src.setups.base_setup.BaseSetup {
  config : str
  emfdtd
  model
  progress_logger : str
  s4l_v1
  verbose_logger : str
  __init__(config: 'Config', verbose_logger: 'Logger', progress_logger: 'Logger')
  _add_point_sensors(simulation: 'emfdtd.Simulation', sim_bbox_entity_name: str)
  _apply_simulation_time_and_termination(simulation: 'emfdtd.Simulation', sim_bbox_entity: 'model.Entity', frequency_mhz: int)
  _finalize_setup(project_manager: 'ProjectManager', simulation: 'emfdtd.Simulation', all_simulation_parts: list, frequency_mhz: int)
  _setup_solver_settings(simulation: 'emfdtd.Simulation')
  {abstract}run_full_setup(project_manager: 'ProjectManager')
}
class "BaseStudy" as src.studies.base_study.BaseStudy {
  base_dir
  config
  gui : str
  line_profiler : NoneType
  profiler
  progress_logger : NoneType, RootLogger
  project_manager
  study_type : str
  verbose_logger : NoneType, RootLogger
  __init__(study_type: str, config_filename: str, gui: 'QueueGUI', profiler)
  _check_for_stop_signal()
  {abstract}_run_study()
  _setup_line_profiler(subtask_name: str, instance) -> tuple
  end_stage_animation()
  run()
  start_stage_animation(task_name: str, end_value: int)
  subtask(task_name: str, instance_to_profile)
}
class "BatchGUI" as src.osparc_batch.gui.BatchGUI {
  button_layout
  cancel_jobs_requested
  force_stop_button
  layout
  print_progress_requested
  progress_button
  stop_and_cancel_button
  stop_run_requested
  tray_button
  tray_icon
  __init__()
  closeEvent(event)
  force_stop_run()
  hide_to_tray()
  init_ui()
  show_from_tray()
  stop_and_cancel_jobs()
  tray_icon_activated(reason)
}
class "BoundarySetup" as src.setups.boundary_setup.BoundarySetup {
  simulation : str
  __init__(config: 'Config', simulation: 'emfdtd.Simulation', verbose_logger: 'Logger', progress_logger: 'Logger')
  setup_boundary_conditions()
}
class "Cleaner" as src.extraction.cleaner.Cleaner {
  parent : str
  __init__(parent: 'ResultsExtractor')
  _delete_files(cleanup_types: list, file_patterns: dict) -> int
  _delete_single_file(file_path: str) -> bool
  cleanup_simulation_files()
}
class "ColorFormatter" as src.logging_manager.ColorFormatter {
  format(record: logging.LogRecord) -> str
}
class "Config" as src.config.Config <> {
  base_dir : str
  config
  config_path
  material_mapping
  material_mapping_path
  profiling_config
  profiling_config_path
  __init__(base_dir: str, config_filename: str)
  _load_config_with_inheritance(path: str) -> dict
  _load_json(path: str) -> dict
  _resolve_config_path(config_filename: str, base_path: str) -> str
  get_antenna_component_names(antenna_model_type: str) -> list
  get_antenna_config() -> dict
  get_auto_cleanup_previous_results() -> list
  get_bandwidth() -> float
  get_download_email() -> str
  get_excitation_type() -> str
  get_freespace_expansion() -> list
  get_gridding_parameters() -> dict
  get_line_profiling_config() -> dict
  get_manual_isolve() -> bool
  get_material_mapping(phantom_name: str) -> dict
  get_only_write_input_file() -> bool
  get_osparc_credentials() -> dict
  get_phantom_definition(phantom_name: str) -> dict
  get_placement_scenario(scenario_name: str) -> dict
  get_profiling_config(study_type: str) -> dict
  get_setting(path: str, default)
  get_simulation_parameters() -> dict
  get_solver_settings() -> dict
}
class "FarFieldAnalysisStrategy" as src.analysis.far_field_strategy.FarFieldAnalysisStrategy {
  apply_bug_fixes(result_entry: dict) -> dict
  calculate_summary_stats(results_df: pd.DataFrame) -> pd.DataFrame
  extract_data(pickle_data: dict, frequency_mhz: int, placement_name: str, scenario_name: str, sim_power: float, norm_factor: float) -> tuple[dict, list]
  generate_plots(analyzer: 'Analyzer', plotter: 'Plotter', results_df: pd.DataFrame, all_organ_results_df: pd.DataFrame)
  get_normalization_factor(frequency_mhz: int, simulated_power_w: float) -> float
  get_plots_dir() -> str
  get_results_base_dir() -> str
  load_and_process_results(analyzer: 'Analyzer')
}
class "FarFieldAnalysisStrategy" as src.analysis.strategies.FarFieldAnalysisStrategy {
  apply_bug_fixes(result_entry)
  calculate_summary_stats(results_df)
  extract_data(pickle_data, frequency_mhz, placement_name, scenario_name, sim_power, norm_factor)
  generate_plots(analyzer, plotter, results_df, all_organ_results_df)
  get_normalization_factor(frequency_mhz, simulated_power_w)
  get_plots_dir()
  get_results_base_dir()
  load_and_process_results(analyzer)
}
class "FarFieldSetup" as src.setups.far_field_setup.FarFieldSetup {
  direction_name : str
  document
  frequency_mhz : int
  phantom_name : str
  polarization_name : str
  project_manager : str
  simulation_type
  __init__(config: 'Config', phantom_name: str, frequency_mhz: int, direction_name: str, polarization_name: str, project_manager: 'ProjectManager', verbose_logger: 'Logger', progress_logger: 'Logger')
  _apply_common_settings(simulation: 'emfdtd.Simulation')
  _create_or_get_simulation_bbox() -> 'model.Entity'
  _create_simulation_entity(bbox_entity: 'model.Entity') -> 'emfdtd.Simulation'
  _finalize_setup(project_manager: 'ProjectManager', simulation: 'emfdtd.Simulation', frequency_mhz: int)
  run_full_setup(phantom_setup: 'PhantomSetup') -> 'emfdtd.Simulation'
}
class "FarFieldStudy" as src.studies.far_field_study.FarFieldStudy {
  __init__(config_filename: str, gui: 'QueueGUI')
  _extract_results_for_project(phantom_name: str, freq: int, simulations_to_extract: list)
  _run_study()
  _validate_auto_cleanup_config(do_setup: bool, do_run: bool, do_extract: bool, auto_cleanup: list)
}
class "GriddingSetup" as src.setups.gridding_setup.GriddingSetup {
  antenna : str
  frequency_mhz : Optional[int]
  placement_name : str
  simulation : str
  units
  __init__(config: 'Config', simulation: 'emfdtd.Simulation', placement_name: str, antenna: 'Antenna', verbose_logger: 'Logger', progress_logger: 'Logger', frequency_mhz: Optional[int])
  _setup_main_grid()
  _setup_subgrids(antenna_components: dict)
  setup_gridding(antenna_components: dict)
}
class "LoggingMixin" as src.logging_manager.LoggingMixin {
  _log(message: str, level: str, log_type: str)
}
class "MaterialSetup" as src.setups.material_setup.MaterialSetup {
  XCoreModeling
  antenna : str
  database
  free_space : bool
  phantom_name : str
  simulation : str
  __init__(config: 'Config', simulation: 'emfdtd.Simulation', antenna: 'Antenna', phantom_name: str, verbose_logger: 'Logger', progress_logger: 'Logger', free_space: bool)
  _assign_antenna_materials(antenna_components: dict)
  _assign_phantom_materials()
  assign_materials(antenna_components: dict, phantom_only: bool)
}
class "NearFieldAnalysisStrategy" as src.analysis.near_field_strategy.NearFieldAnalysisStrategy {
  apply_bug_fixes(result_entry: dict) -> dict
  calculate_summary_stats(results_df: pd.DataFrame) -> pd.DataFrame
  extract_data(pickle_data: dict, frequency_mhz: int, placement_name: str, scenario_name: str, sim_power: float, norm_factor: float) -> tuple[dict, list]
  generate_plots(analyzer: 'Analyzer', plotter: 'Plotter', results_df: pd.DataFrame, all_organ_results_df: pd.DataFrame)
  get_normalization_factor(frequency_mhz: int, simulated_power_w: float) -> float
  get_plots_dir() -> str
  get_results_base_dir() -> str
  load_and_process_results(analyzer: 'Analyzer')
}
class "NearFieldAnalysisStrategy" as src.analysis.strategies.NearFieldAnalysisStrategy {
  apply_bug_fixes(result_entry)
  calculate_summary_stats(results_df)
  extract_data(pickle_data, frequency_mhz, placement_name, scenario_name, sim_power, norm_factor)
  generate_plots(analyzer, plotter, results_df, all_organ_results_df)
  get_normalization_factor(frequency_mhz, simulated_power_w)
  get_plots_dir()
  get_results_base_dir()
  load_and_process_results(analyzer)
}
class "NearFieldSetup" as src.setups.near_field_setup.NearFieldSetup {
  XCoreModeling
  antenna : str
  base_placement_name : str
  document
  free_space : bool
  frequency_mhz : int
  orientation_name : str
  phantom_name : str
  placement_name : str
  position_name : str
  __init__(config: 'Config', phantom_name: str, frequency_mhz: int, scenario_name: str, position_name: str, orientation_name: str, antenna: 'Antenna', verbose_logger: 'Logger', progress_logger: 'Logger', free_space: bool)
  _create_simulation_bbox()
  _finalize_setup(project_manager: 'ProjectManager', simulation: 'emfdtd.Simulation', antenna_components: dict)
  _get_antenna_components() -> dict
  _setup_bounding_boxes()
  _setup_simulation_entity() -> 'emfdtd.Simulation'
  run_full_setup(project_manager: 'ProjectManager', lock) -> 'emfdtd.Simulation'
}
class "NearFieldStudy" as src.studies.near_field_study.NearFieldStudy {
  __init__(config_filename: str, gui: 'QueueGUI')
  _run_placement(phantom_name: str, freq: int, scenario_name: str, position_name: str, orientation_name: str, do_setup: bool, do_run: bool, do_extract: bool)
  _run_study()
  _validate_auto_cleanup_config(do_setup: bool, do_run: bool, do_extract: bool, auto_cleanup: list)
}
class "NumpyArrayEncoder" as src.extraction.json_encoder.NumpyArrayEncoder {
  default(obj: Any) -> Any
}
class "PhantomSetup" as src.setups.phantom_setup.PhantomSetup {
  XCoreModeling
  data
  model
  phantom_name : str
  __init__(config: 'Config', phantom_name: str, verbose_logger: 'Logger', progress_logger: 'Logger')
  _log(message: str, log_type: str)
  ensure_phantom_is_loaded() -> bool
}
class "PlacementSetup" as src.setups.placement_setup.PlacementSetup {
  XCoreMath
  antenna : str
  base_placement_name : str
  free_space : bool
  frequency_mhz : int
  orientation_name : str
  phantom_name : str
  placement_name : str
  position_name : str
  __init__(config: 'Config', phantom_name: str, frequency_mhz: int, scenario_name: str, position_name: str, orientation_name: str, antenna: 'Antenna', verbose_logger: 'Logger', progress_logger: 'Logger', free_space: bool)
  _get_placement_details() -> tuple
  place_antenna()
}
class "Plotter" as src.analysis.plotter.Plotter {
  plots_dir : str
  __init__(plots_dir: str)
  _plot_heatmap(fig, ax, data: pd.DataFrame, title: str, cbar: bool, cbar_ax)
  plot_average_sar_bar(scenario_name: str, avg_results: pd.DataFrame, progress_info: pd.Series)
  plot_far_field_distribution_boxplot(results_df: pd.DataFrame, metric: str)
  plot_peak_sar_heatmap(organ_df: pd.DataFrame, group_df: pd.DataFrame, tissue_groups: dict, value_col: str, title: str)
  plot_peak_sar_line(summary_stats: pd.DataFrame)
  plot_pssar_line(scenario_name: str, avg_results: pd.DataFrame)
  plot_sar_distribution_boxplots(scenario_name: str, scenario_results_df: pd.DataFrame)
  plot_sar_heatmap(organ_df: pd.DataFrame, group_df: pd.DataFrame, tissue_groups: dict)
  plot_whole_body_sar_bar(avg_results: pd.DataFrame)
}
class "PowerExtractor" as src.extraction.power_extractor.PowerExtractor {
  config
  document
  frequency_mhz
  parent : str
  placement_name
  progress_logger
  results_data : dict
  simulation
  study_type
  verbose_logger
  __init__(parent: 'ResultsExtractor', results_data: dict)
  _extract_far_field_power()
  _extract_near_field_power(simulation_extractor: 'analysis.Extractor')
  extract_input_power(simulation_extractor: 'analysis.Extractor')
  extract_power_balance(simulation_extractor: 'analysis.Extractor')
}
class "Profiler" as src.profiler.Profiler {
  completed_phases : set
  completed_simulations : int
  completed_stages_in_phase : int
  config_path : str
  current_phase : NoneType, str
  current_project : int
  execution_control : dict
  phase_start_time : NoneType
  phase_weights : dict
  profiling_config : dict
  run_phase_total_duration : int
  start_time
  study_type : str
  subtask_stack : list
  subtask_times : defaultdict
  total_projects : int
  total_simulations : int
  total_stages_in_phase : int
  __init__(execution_control: dict, profiling_config: dict, study_type: str, config_path: str)
  _calculate_phase_weights() -> dict
  complete_run_phase()
  end_stage()
  get_subtask_estimate(task_name: str) -> float
  get_time_remaining(current_stage_progress: float) -> float
  get_weighted_progress(phase_name: str, phase_progress_ratio: float) -> float
  save_estimates()
  set_current_project(project_index: int)
  set_project_scope(total_projects: int)
  set_total_simulations(total: int)
  start_stage(phase_name: str, total_stages: int)
  update_and_save_estimates()
}
class "Profiler" as src.utils.Profiler {
  completed_runs : int
  config_path : str
  current_run_start_time : NoneType
  profiling_config
  run_times : list
  start_time
  study_type : str
  total_runs : int
  __init__(config_path: str, study_type: str)
  _load_config() -> dict
  end_run()
  get_average_run_time() -> float
  get_elapsed() -> float
  get_time_remaining() -> float
  save_estimates()
  start_run()
  start_study(total_runs: int)
  subtask(name: str)
}
class "ProgressGUI" as src.gui_manager.ProgressGUI {
  animation_active : bool
  animation_duration : float, int
  animation_end_value : int
  animation_start_time : int
  animation_start_value : int
  animation_timer
  button_layout
  clock_timer
  elapsed_label
  eta_label
  grid_layout
  layout
  overall_progress_bar
  overall_progress_label
  phase_name_map : dict
  process
  profiler
  profiler_phase : NoneType
  progress_logger : NoneType, RootLogger
  queue : str
  queue_timer
  stage_label
  stage_progress_bar
  start_time
  status_log_label
  status_text
  stop_button
  stop_event : str
  total_steps_for_stage : int
  tray_button
  tray_icon
  verbose_logger : NoneType, RootLogger
  window_title : str
  __init__(queue: 'Queue', stop_event: 'Event', process, window_title: str)
  closeEvent(event)
  end_stage_animation()
  hide_to_tray()
  init_ui()
  process_queue()
  show_from_tray()
  start_stage_animation(estimated_duration: float, end_step: int)
  stop_study()
  study_finished(error: bool)
  tray_icon_activated(reason)
  update_animation()
  update_clock()
  update_overall_progress(current_step: int, total_steps: int)
  update_stage_progress(stage_name: str, current_step: int, total_steps: int)
  update_status(message: str, log_type: str)
}
class "ProjectCorruptionError" as src.project_manager.ProjectCorruptionError {
}
class "ProjectManager" as src.project_manager.ProjectManager {
  config : str
  document
  execution_control
  gui : str
  progress_logger : str
  project_path : NoneType
  verbose_logger : str
  __init__(config: 'Config', verbose_logger: 'Logger', progress_logger: 'Logger', gui: 'QueueGUI')
  _is_valid_smash_file() -> bool
  cleanup()
  close()
  create_new()
  create_or_open_project(phantom_name: str, frequency_mhz: int, scenario_name: str, position_name: str, orientation_name: str)
  open()
  reload_project()
  save()
}
class "QueueGUI" as src.gui_manager.QueueGUI {
  profiler : str
  progress_logger : str
  queue : str
  stop_event : str
  verbose_logger : str
  __init__(queue: 'Queue', stop_event: 'Event', profiler: 'Profiler', progress_logger: 'Logger', verbose_logger: 'Logger')
  end_stage_animation()
  is_stopped() -> bool
  log(message: str, level: str, log_type: str)
  {abstract}process_events()
  start_stage_animation(task_name: str, end_value: int)
  update_overall_progress(current_step: int, total_steps: int)
  update_profiler()
  update_stage_progress(stage_name: str, current_step: int, total_steps: int)
}
class "Reporter" as src.extraction.reporter.Reporter {
  parent : str
  __init__(parent: 'ResultsExtractor')
  _build_html_content(df: pd.DataFrame, tissue_groups: dict, group_sar_stats: dict, results_data: dict) -> str
  _get_results_dir() -> str
  _save_html_report(results_dir: str, df: pd.DataFrame, tissue_groups: dict, group_sar_stats: dict, results_data: dict)
  _save_pickle_report(results_dir: str, df: pd.DataFrame, tissue_groups: dict, group_sar_stats: dict, results_data: dict)
  save_reports(df: pd.DataFrame, tissue_groups: dict, group_sar_stats: dict, results_data: dict)
}
class "ResultsExtractor" as src.results_extractor.ResultsExtractor {
  analysis
  config : str
  document
  free_space : bool
  frequency_mhz : int
  gui : str
  orientation_name : str
  phantom_name : str
  placement_name : str
  progress_logger : str
  simulation : str
  study : str
  study_type : str
  units
  verbose_logger : str
  __init__(config: 'Config', simulation: 's4l_v1.simulation.emfdtd.Simulation', phantom_name: str, frequency_mhz: int, scenario_name: str, position_name: str, orientation_name: str, study_type: str, verbose_logger: 'Logger', progress_logger: 'Logger', free_space: bool, gui: 'QueueGUI', study: 'BaseStudy')
  _save_json_results(results_data: dict)
  extract()
}
class "SarExtractor" as src.extraction.sar_extractor.SarExtractor {
  analysis
  config
  document
  parent : str
  phantom_name
  placement_name
  progress_logger
  results_data : dict
  simulation
  units
  verbose_logger
  __init__(parent: 'ResultsExtractor', results_data: dict)
  _calculate_group_sar(df: pd.DataFrame, tissue_groups: dict) -> dict
  _define_tissue_groups(available_tissues: list) -> dict
  extract_peak_sar_details(em_sensor_extractor: 'analysis.Extractor')
  extract_sar_statistics(simulation_extractor: 'analysis.Extractor')
}
class "SensorExtractor" as src.extraction.sensor_extractor.SensorExtractor {
  parent : str
  progress_logger
  results_data : dict
  verbose_logger
  __init__(parent: 'ResultsExtractor', results_data: dict)
  _save_plot(fig, ax)
  extract_point_sensor_data(simulation_extractor: 'analysis.Extractor')
}
class "SimulationRunner" as src.simulation_runner.SimulationRunner <> {
  config : str
  document
  gui : str
  progress_logger : str
  project_path : str
  simulations : list
  study : str
  verbose_logger : str
  __init__(config: 'Config', project_path: str, simulations: Union['s4l_v1.simulation.emfdtd.Simulation', List['s4l_v1.simulation.emfdtd.Simulation']], verbose_logger: 'Logger', progress_logger: 'Logger', gui: 'QueueGUI', study: 'BaseStudy')
  _get_server_id(server_name: str) -> str
  _run_isolve_manual(simulation: 's4l_v1.simulation.emfdtd.Simulation')
  _run_osparc_direct(simulation: 's4l_v1.simulation.emfdtd.Simulation', server_name: str)
  run(simulation: 's4l_v1.simulation.emfdtd.Simulation')
  run_all()
}
class "SourceSetup" as src.setups.source_setup.SourceSetup {
  antenna : str
  free_space : bool
  frequency_mhz : int
  simulation : str
  units
  __init__(config: 'Config', simulation: 'emfdtd.Simulation', frequency_mhz: int, antenna: 'Antenna', verbose_logger: 'Logger', progress_logger: 'Logger', free_space: bool)
  setup_source_and_sensors(antenna_components: dict)
}
class "StudyCancelledError" as src.utils.StudyCancelledError {
}
class "Worker" as src.osparc_batch.worker.Worker {
  client_cfg : NoneType
  config : NoneType
  config_path : str
  download_and_process_results : Callable[..., Any]
  download_executor : ThreadPoolExecutor
  downloaded_jobs : set
  file_retries : dict
  file_to_job_id : dict
  finished
  get_osparc_client_config : Callable[..., Any]
  get_progress_report : Callable[..., str]
  input_files : list
  job_statuses : dict
  jobs_being_downloaded : set
  logger : Logger
  main_process_logic : Callable[..., Any]
  progress
  running_jobs : dict
  status_update_requested
  stop_requested : bool
  timer
  __init__(config_path: str, logger: logging.Logger, get_osparc_client_config_func: Callable[..., Any], download_and_process_results_func: Callable[..., Any], get_progress_report_func: Callable[..., str], main_process_logic_func: Callable[..., Any])
  _check_jobs_status()
  _download_job_in_thread(job, solver, file_path: Path)
  _update_job_status(job_id: str, status: str)
  cancel_jobs()
  request_progress_report()
  run()
  stop()
}
src.analysis.far_field_strategy.FarFieldAnalysisStrategy --|> src.analysis.base_strategy.BaseAnalysisStrategy
src.analysis.near_field_strategy.NearFieldAnalysisStrategy --|> src.analysis.base_strategy.BaseAnalysisStrategy
src.analysis.strategies.FarFieldAnalysisStrategy --|> src.analysis.strategies.BaseAnalysisStrategy
src.analysis.strategies.NearFieldAnalysisStrategy --|> src.analysis.strategies.BaseAnalysisStrategy
src.extraction.power_extractor.PowerExtractor --|> src.logging_manager.LoggingMixin
src.extraction.sar_extractor.SarExtractor --|> src.logging_manager.LoggingMixin
src.gui_manager.QueueGUI --|> src.logging_manager.LoggingMixin
src.project_manager.ProjectManager --|> src.logging_manager.LoggingMixin
src.results_extractor.ResultsExtractor --|> src.logging_manager.LoggingMixin
src.setups.base_setup.BaseSetup --|> src.logging_manager.LoggingMixin
src.setups.boundary_setup.BoundarySetup --|> src.setups.base_setup.BaseSetup
src.setups.far_field_setup.FarFieldSetup --|> src.setups.base_setup.BaseSetup
src.setups.gridding_setup.GriddingSetup --|> src.setups.base_setup.BaseSetup
src.setups.material_setup.MaterialSetup --|> src.setups.base_setup.BaseSetup
src.setups.near_field_setup.NearFieldSetup --|> src.setups.base_setup.BaseSetup
src.setups.phantom_setup.PhantomSetup --|> src.setups.base_setup.BaseSetup
src.setups.placement_setup.PlacementSetup --|> src.setups.base_setup.BaseSetup
src.setups.source_setup.SourceSetup --|> src.setups.base_setup.BaseSetup
src.simulation_runner.SimulationRunner --|> src.logging_manager.LoggingMixin
src.studies.base_study.BaseStudy --|> src.logging_manager.LoggingMixin
src.studies.far_field_study.FarFieldStudy --|> src.studies.base_study.BaseStudy
src.studies.near_field_study.NearFieldStudy --|> src.studies.base_study.BaseStudy
src.analysis.plotter.Plotter --* src.analysis.analyzer.Analyzer : plotter
src.config.Config --* src.studies.base_study.BaseStudy : config
src.profiler.Profiler --* src.studies.base_study.BaseStudy : profiler
src.project_manager.ProjectManager --* src.studies.base_study.BaseStudy : project_manager
src.config.Config --o src.osparc_batch.worker.Worker : config
@enduml
Packages Diagram
Could not retrieve image data, got: Forbidden [403]

@startuml packages_GOLIAT
skinparam linetype ortho
skinparam ranksep 200
set namespaceSeparator none
package "src" as src {
}
package "src.analysis" as src.analysis {
}
package "src.analysis.analyzer" as src.analysis.analyzer {
}
package "src.analysis.base_strategy" as src.analysis.base_strategy {
}
package "src.analysis.far_field_strategy" as src.analysis.far_field_strategy {
}
package "src.analysis.near_field_strategy" as src.analysis.near_field_strategy {
}
package "src.analysis.plotter" as src.analysis.plotter {
}
package "src.analysis.strategies" as src.analysis.strategies {
}
package "src.antenna" as src.antenna {
}
package "src.colors" as src.colors {
}
package "src.config" as src.config {
}
package "src.data_extractor" as src.data_extractor {
}
package "src.extraction" as src.extraction {
}
package "src.extraction.cleaner" as src.extraction.cleaner {
}
package "src.extraction.json_encoder" as src.extraction.json_encoder {
}
package "src.extraction.power_extractor" as src.extraction.power_extractor {
}
package "src.extraction.reporter" as src.extraction.reporter {
}
package "src.extraction.sar_extractor" as src.extraction.sar_extractor {
}
package "src.extraction.sensor_extractor" as src.extraction.sensor_extractor {
}
package "src.gui_manager" as src.gui_manager {
}
package "src.logging_manager" as src.logging_manager {
}
package "src.osparc_batch" as src.osparc_batch {
}
package "src.osparc_batch.cleanup" as src.osparc_batch.cleanup {
}
package "src.osparc_batch.file_finder" as src.osparc_batch.file_finder {
}
package "src.osparc_batch.gui" as src.osparc_batch.gui {
}
package "src.osparc_batch.logging_utils" as src.osparc_batch.logging_utils {
}
package "src.osparc_batch.main_logic" as src.osparc_batch.main_logic {
}
package "src.osparc_batch.osparc_client" as src.osparc_batch.osparc_client {
}
package "src.osparc_batch.progress" as src.osparc_batch.progress {
}
package "src.osparc_batch.runner" as src.osparc_batch.runner {
}
package "src.osparc_batch.worker" as src.osparc_batch.worker {
}
package "src.profiler" as src.profiler {
}
package "src.project_manager" as src.project_manager {
}
package "src.results_extractor" as src.results_extractor {
}
package "src.setups" as src.setups {
}
package "src.setups.base_setup" as src.setups.base_setup {
}
package "src.setups.boundary_setup" as src.setups.boundary_setup {
}
package "src.setups.far_field_setup" as src.setups.far_field_setup {
}
package "src.setups.gridding_setup" as src.setups.gridding_setup {
}
package "src.setups.material_setup" as src.setups.material_setup {
}
package "src.setups.near_field_setup" as src.setups.near_field_setup {
}
package "src.setups.phantom_setup" as src.setups.phantom_setup {
}
package "src.setups.placement_setup" as src.setups.placement_setup {
}
package "src.setups.source_setup" as src.setups.source_setup {
}
package "src.simulation_runner" as src.simulation_runner {
}
package "src.studies" as src.studies {
}
package "src.studies.base_study" as src.studies.base_study {
}
package "src.studies.far_field_study" as src.studies.far_field_study {
}
package "src.studies.near_field_study" as src.studies.near_field_study {
}
package "src.utils" as src.utils {
}
src.analysis.analyzer --> src.analysis.plotter
src.analysis.far_field_strategy --> src.analysis.base_strategy
src.analysis.near_field_strategy --> src.analysis.base_strategy
src.extraction --> src.extraction.cleaner
src.extraction --> src.extraction.power_extractor
src.extraction --> src.extraction.reporter
src.extraction --> src.extraction.sar_extractor
src.extraction --> src.extraction.sensor_extractor
src.gui_manager --> src.logging_manager
src.gui_manager --> src.profiler
src.gui_manager --> src.utils
src.logging_manager --> src.colors
src.osparc_batch.cleanup --> src.osparc_batch.logging_utils
src.osparc_batch.file_finder --> src.osparc_batch.logging_utils
src.osparc_batch.main_logic --> src.osparc_batch.logging_utils
src.osparc_batch.main_logic --> src.osparc_batch.osparc_client
src.osparc_batch.osparc_client --> src.osparc_batch.logging_utils
src.osparc_batch.progress --> src.osparc_batch.logging_utils
src.osparc_batch.runner --> src.config
src.osparc_batch.runner --> src.osparc_batch.cleanup
src.osparc_batch.runner --> src.osparc_batch.file_finder
src.osparc_batch.runner --> src.osparc_batch.gui
src.osparc_batch.runner --> src.osparc_batch.logging_utils
src.osparc_batch.runner --> src.osparc_batch.main_logic
src.osparc_batch.runner --> src.osparc_batch.osparc_client
src.osparc_batch.runner --> src.osparc_batch.progress
src.osparc_batch.runner --> src.osparc_batch.worker
src.osparc_batch.worker --> src.osparc_batch.runner
src.project_manager --> src.logging_manager
src.project_manager --> src.utils
src.results_extractor --> src.extraction.cleaner
src.results_extractor --> src.extraction.json_encoder
src.results_extractor --> src.extraction.power_extractor
src.results_extractor --> src.extraction.reporter
src.results_extractor --> src.extraction.sar_extractor
src.results_extractor --> src.extraction.sensor_extractor
src.results_extractor --> src.logging_manager
src.setups.base_setup --> src.logging_manager
src.setups.boundary_setup --> src.setups.base_setup
src.setups.far_field_setup --> src.setups.base_setup
src.setups.far_field_setup --> src.setups.boundary_setup
src.setups.far_field_setup --> src.setups.gridding_setup
src.setups.far_field_setup --> src.setups.material_setup
src.setups.gridding_setup --> src.setups.base_setup
src.setups.material_setup --> src.setups.base_setup
src.setups.near_field_setup --> src.setups.base_setup
src.setups.near_field_setup --> src.setups.boundary_setup
src.setups.near_field_setup --> src.setups.gridding_setup
src.setups.near_field_setup --> src.setups.material_setup
src.setups.near_field_setup --> src.setups.phantom_setup
src.setups.near_field_setup --> src.setups.placement_setup
src.setups.near_field_setup --> src.setups.source_setup
src.setups.phantom_setup --> src.setups.base_setup
src.setups.placement_setup --> src.setups.base_setup
src.setups.source_setup --> src.setups.base_setup
src.simulation_runner --> src.logging_manager
src.simulation_runner --> src.utils
src.studies.base_study --> src.config
src.studies.base_study --> src.logging_manager
src.studies.base_study --> src.profiler
src.studies.base_study --> src.project_manager
src.studies.base_study --> src.utils
src.studies.far_field_study --> src.studies.base_study
src.studies.near_field_study --> src.studies.base_study
src.analysis.analyzer ..> src.analysis.base_strategy
src.analysis.base_strategy ..> src.analysis.analyzer
src.analysis.base_strategy ..> src.analysis.plotter
src.analysis.far_field_strategy ..> src.analysis.analyzer
src.analysis.far_field_strategy ..> src.analysis.plotter
src.analysis.near_field_strategy ..> src.analysis.analyzer
src.analysis.near_field_strategy ..> src.analysis.plotter
src.antenna ..> src.config
src.osparc_batch.file_finder ..> src.config
src.osparc_batch.main_logic ..> src.osparc_batch.worker
src.osparc_batch.osparc_client ..> src.config
src.project_manager ..> src.config
src.project_manager ..> src.gui_manager
src.results_extractor ..> src.config
src.results_extractor ..> src.gui_manager
src.results_extractor ..> src.studies.base_study
src.setups.far_field_setup ..> src.setups.phantom_setup
src.simulation_runner ..> src.config
src.simulation_runner ..> src.gui_manager
src.simulation_runner ..> src.studies.base_study
src.utils ..> src.studies.base_study
@enduml

How to view - Right click the above image and open in a new tab. Zoom in and pan around. - Alternatively, use any PlantUML viewer (e.g., VS Code PlantUML extension, IntelliJ PlantUML plugin, or https://www.plantuml.com/plantuml).