From f02daa35dd8033e81fcbeac5174fe478fc52b01f Mon Sep 17 00:00:00 2001 From: Pim Nelissen Date: Wed, 15 Apr 2026 08:44:18 +0200 Subject: [PATCH] add parameter JSON export --- src/pg_rad/utils/export.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/pg_rad/utils/export.py b/src/pg_rad/utils/export.py index 0d9fffd..a476987 100644 --- a/src/pg_rad/utils/export.py +++ b/src/pg_rad/utils/export.py @@ -1,9 +1,11 @@ +from dataclasses import asdict from datetime import datetime as dt +import json import os import logging import re -from numpy import array, full_like +from numpy import array, full_like, ndarray from pandas import DataFrame from pg_rad.simulator.outputs import SimulationOutput @@ -12,6 +14,13 @@ from pg_rad.simulator.outputs import SimulationOutput logger = logging.getLogger(__name__) +class NumpyEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, ndarray): + return obj.tolist() + return super().default(obj) + + def generate_folder_name(sim: SimulationOutput) -> str: formatted_sim_name = re.sub(r"\s+", '_', sim.name.lower()) folder_name = ( @@ -35,9 +44,18 @@ 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) + with open(f"{folder_name}/parameters.json", 'w') as f: + json.dump(generate_sim_param_dict(sim), f, cls=NumpyEncoder) logger.info(f"Simulation output saved to {folder_name}!") +def generate_sim_param_dict(sim: SimulationOutput) -> dict: + """Parse simulation parameters and hyperparameters to dictionary.""" + d = asdict(sim) + d.pop('count_rate') + return d + + def generate_df(sim: SimulationOutput) -> DataFrame: """Parse simulation output to CSV format and the name of CSV."""