Source code for production_configuration.production_definition
"""Build and validate production definitions from resolved application options."""
from simtools.constants import SCHEMA_PATH
from simtools.data_model import schema
from simtools.io.ascii_handler import collect_data_from_file
_DEFINITION_SCHEMA = SCHEMA_PATH / "production_definition.schema.yml"
_SCHEMA_NAME = "production_definition"
_SCHEMA_VERSION = "1.0.0"
_SIMULATION_STAGES = {
"corsika": ["corsika"],
"sim_telarray": ["sim_telarray"],
"corsika_sim_telarray": ["corsika", "sim_telarray"],
}
[docs]
def production_definition_from_arguments(args_dict):
"""Create validated production data from resolved grid application arguments."""
simulation_software = args_dict["simulation_software"]
definition = {
"schema_name": _SCHEMA_NAME,
"schema_version": _SCHEMA_VERSION,
"axes": args_dict.get("axis") or [],
"limits_lookup": {
"file": (
str(args_dict["corsika_limits"])
if args_dict.get("corsika_limits") is not None
else None
),
"interpolation": "point",
},
"run_number_allocation": {
"offset": int(args_dict.get("run_number_offset", 0)),
"runs": args_dict.get("number_of_runs"),
},
"job_sizes": {
"showers_per_run": args_dict.get("showers_per_run"),
"total_showers": args_dict.get("total_showers"),
"max_showers_per_run": args_dict.get("max_showers_per_run"),
},
"simulation_stages": _SIMULATION_STAGES[simulation_software],
}
schema_definition = collect_data_from_file(_DEFINITION_SCHEMA)
return schema.validate_dict_using_schema(
definition,
json_schema=schema_definition,
offline=True,
)