improve landscape architecture. builder is separate file. cleaned up hardcoded defaults

This commit is contained in:
Pim Nelissen
2026-02-25 14:26:49 +01:00
parent a74ea765d7
commit 39572da682
4 changed files with 200 additions and 192 deletions

View File

@ -2,10 +2,13 @@ from importlib.resources import files
import logging
from pg_rad.configs.filepaths import TEST_EXP_DATA
from .landscape import LandscapeBuilder
from .config_parser import ConfigParser
from .builder import LandscapeBuilder
from pg_rad.inputparser.specs import (
SimulationSpec,
CSVPathSpec,
ProceduralPathSpec
)
from pg_rad.objects.sources import PointSource
from pg_rad.utils.positional import rel_to_abs_source_position
logger = logging.getLogger(__name__)
@ -18,7 +21,11 @@ class LandscapeDirector:
@staticmethod
def build_test_landscape():
fp = files('pg_rad.data').joinpath(TEST_EXP_DATA)
source = PointSource(activity=100E9, isotope="CS137", pos=(0, 0, 0))
source = PointSource(
activity_MBq=100E9,
isotope="CS137",
position=(0, 0, 0)
)
lb = LandscapeBuilder("Test landscape")
lb.set_air_density(1.243)
lb.set_path_from_experimental_data(fp, z=0)
@ -27,36 +34,16 @@ class LandscapeDirector:
return landscape
@staticmethod
def build_from_config(path_to_config):
conf = ConfigParser(path_to_config)
conf.parse()
def build_from_config(config: SimulationSpec):
lb = LandscapeBuilder(config.metadata.name)
lb.set_air_density(config.options.air_density)
lb = LandscapeBuilder(conf.name)
if conf.path_type == 'csv':
lb.set_path_from_experimental_data(**conf.path)
elif conf.path_type == 'procedural':
if isinstance(config.path, CSVPathSpec):
lb.set_path_from_experimental_data(spec=config.path)
elif isinstance(config.path, ProceduralPathSpec):
lb.set_path_from_segments(
speed=conf.speed,
acquisition_time=conf.acquisition_time,
**conf.path
sim_spec=config,
)
sources = []
for s_name, s_params in conf.sources.items():
if isinstance(s_params['position'], dict):
path = lb.get_path()
x_abs, y_abs, z_abs = rel_to_abs_source_position(
x_list=path.x_list,
y_list=path.y_list,
path_z=path.z,
**s_params['position']
)
s_params['position'] = [x_abs, y_abs, z_abs]
sources.append(PointSource(name=s_name, **s_params))
lb.set_point_sources(*sources)
lb.set_point_sources(*config.point_sources)
landscape = lb.build()
return landscape