From 8017159c5ba0e5118b6e0eb11b9b7862b270d964 Mon Sep 17 00:00:00 2001 From: Pim Nelissen Date: Thu, 16 Apr 2026 13:40:47 +0200 Subject: [PATCH] patch export to add also detector details --- src/pg_rad/simulator/engine.py | 13 +++++++++++++ src/pg_rad/simulator/outputs.py | 9 +++++++++ src/pg_rad/utils/export.py | 8 ++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/pg_rad/simulator/engine.py b/src/pg_rad/simulator/engine.py index f22305c..559fb32 100644 --- a/src/pg_rad/simulator/engine.py +++ b/src/pg_rad/simulator/engine.py @@ -3,6 +3,7 @@ from typing import List from pg_rad.landscape.landscape import Landscape from pg_rad.simulator.outputs import ( CountRateOutput, + DetectorOutput, SimulationOutput, SourceOutput ) @@ -31,11 +32,13 @@ class SimulationEngine: count_rate_results = self._calculate_count_rate_along_path() source_results = self._calculate_point_source_distance_to_path() + detector_results = self._generate_detector_output() return SimulationOutput( name=self.landscape.name, size=self.landscape.size, count_rate=count_rate_results, + detector=detector_results, sources=source_results ) @@ -80,3 +83,13 @@ class SimulationEngine: ) return source_output + + def _generate_detector_output(self) -> DetectorOutput: + return DetectorOutput( + name=self.detector.name, + type=self.detector.type, + is_isotropic=self.detector.is_isotropic, + field_eff=self.detector.get_efficiency( + self.landscape.point_sources[0].isotope.E + ) + ) diff --git a/src/pg_rad/simulator/outputs.py b/src/pg_rad/simulator/outputs.py index 404e742..7ec364b 100644 --- a/src/pg_rad/simulator/outputs.py +++ b/src/pg_rad/simulator/outputs.py @@ -24,9 +24,18 @@ class SourceOutput: dist_from_path: float +@dataclass +class DetectorOutput: + name: str + type: str + is_isotropic: bool + field_eff: float + + @dataclass class SimulationOutput: name: str size: tuple + detector: DetectorOutput count_rate: CountRateOutput sources: List[SourceOutput] diff --git a/src/pg_rad/utils/export.py b/src/pg_rad/utils/export.py index a4c38ca..3a7be62 100644 --- a/src/pg_rad/utils/export.py +++ b/src/pg_rad/utils/export.py @@ -5,7 +5,7 @@ import os import logging import re -from numpy import array, full_like, ndarray +from numpy import array, full_like, ndarray, bool_ from pandas import DataFrame from pg_rad.simulator.outputs import SimulationOutput @@ -18,6 +18,8 @@ class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, ndarray): return obj.tolist() + elif isinstance(obj, bool_): + return bool(obj) return super().default(obj) @@ -44,8 +46,10 @@ def save_results(sim: SimulationOutput, folder_name: str) -> None: df = generate_df(sim) csv_name = generate_csv_name(sim) df.to_csv(f"{folder_name}/{csv_name}.csv", index=False) + param_dict = generate_sim_param_dict(sim) + print(type(param_dict['detector']['is_isotropic'])) with open(f"{folder_name}/parameters.json", 'w') as f: - json.dump(generate_sim_param_dict(sim), f, cls=NumpyEncoder) + json.dump(param_dict, f, cls=NumpyEncoder) logger.info(f"Simulation output saved to {folder_name}!")