add parameter JSON export

This commit is contained in:
Pim Nelissen
2026-04-15 08:44:18 +02:00
parent 09609b4429
commit f02daa35dd

View File

@ -1,9 +1,11 @@
from dataclasses import asdict
from datetime import datetime as dt from datetime import datetime as dt
import json
import os import os
import logging import logging
import re import re
from numpy import array, full_like from numpy import array, full_like, ndarray
from pandas import DataFrame from pandas import DataFrame
from pg_rad.simulator.outputs import SimulationOutput from pg_rad.simulator.outputs import SimulationOutput
@ -12,6 +14,13 @@ from pg_rad.simulator.outputs import SimulationOutput
logger = logging.getLogger(__name__) 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: def generate_folder_name(sim: SimulationOutput) -> str:
formatted_sim_name = re.sub(r"\s+", '_', sim.name.lower()) formatted_sim_name = re.sub(r"\s+", '_', sim.name.lower())
folder_name = ( folder_name = (
@ -35,9 +44,18 @@ def save_results(sim: SimulationOutput, folder_name: str) -> None:
df = generate_df(sim) df = generate_df(sim)
csv_name = generate_csv_name(sim) csv_name = generate_csv_name(sim)
df.to_csv(f"{folder_name}/{csv_name}.csv", index=False) 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}!") 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: def generate_df(sim: SimulationOutput) -> DataFrame:
"""Parse simulation output to CSV format and the name of CSV.""" """Parse simulation output to CSV format and the name of CSV."""