Source code for pyRadPlan.machines._load
import os
import sys
from typing import Union
if sys.version_info < (3, 10):
import importlib_resources as resources # Backport for older versions
else:
from importlib import resources # Standard from Python 3.9+
from pymatreader import read_mat
from pyRadPlan.machines import Machine, validate_machine
[docs]
def load_machine(filename: str) -> Machine:
if filename.endswith(".mat"):
machine_dict = load_machine_from_mat(filename)
else:
raise ValueError("Unsupported file type for machine loading:", filename)
return validate_machine(machine_dict)
[docs]
def load_machine_from_mat(filename: Union[os.PathLike, str]) -> dict:
try:
machine = read_mat(filename)
return machine["machine"]
except FileNotFoundError as exc:
raise FileNotFoundError("Could not find the following machine file:", filename) from exc
except KeyError as exc:
raise FileNotFoundError(
"Could not find the machine key in the following file:", filename
) from exc
[docs]
def load_from_name(radiation_mode: str, machine_name: str) -> Machine:
possible_endings = [".mat"]
# Search resources
# TODO: allow customization of search path
search_paths = [resources.files("pyRadPlan.data.machines")]
for ending in possible_endings:
composed_filename = radiation_mode + "_" + machine_name + ending
# We traverse all search paths
for current_path in search_paths:
filename = current_path.joinpath(composed_filename)
if filename.exists():
return load_machine(filename.as_posix())
raise FileNotFoundError("Could not find the following machine file:", composed_filename)
if __name__ == "__main__":
machine = load_from_name(radiation_mode="photons", machine_name="Generic")
print(machine)