Source code for model_repository.asset_names

"""Naming helpers for exported simulation-model assets."""

from pathlib import Path

ECSV_SUFFIX = ".ecsv"
SOURCE_VALUE_KEY = "_simtools_export_source_value"


[docs] def get_export_file_name(parameter_data, fallback_instrument=None): """Return the deterministic exported name for a model asset. ECSV assets are qualified with the instrument scope so that assets from different telescope designs can share one model directory safely. The original source value is kept separately when a parameter has already been qualified. Parameters ---------- parameter_data : dict Model parameter metadata. fallback_instrument : str, optional Instrument scope to use when the metadata does not contain one. Returns ------- str Exported filename. """ value = parameter_data.get(SOURCE_VALUE_KEY, parameter_data.get("value")) if ( parameter_data.get("qualify_filename") is False or not isinstance(value, str) or not value.lower().endswith(ECSV_SUFFIX) ): return value instrument = parameter_data.get("instrument") or fallback_instrument or "global" path = Path(value) if path.stem.endswith(f"-{instrument}"): return value return f"{path.stem}-{instrument}{path.suffix}"
[docs] def qualify_parameter_file_name(parameter_data, fallback_instrument=None): """Update ECSV parameter metadata with its deterministic exported name.""" value = parameter_data.get("value") qualified_value = get_export_file_name(parameter_data, fallback_instrument) if qualified_value != value and isinstance(value, str): parameter_data.setdefault(SOURCE_VALUE_KEY, value) parameter_data["value"] = qualified_value return qualified_value
[docs] def get_simtel_table_file_name(parameter_data): """Return the shared native sim_telarray filename for an ECSV parameter. The model parameter identity is used instead of a telescope configuration filename. This allows identical tables used by several telescope models to share one generated native file. Parameters ---------- parameter_data : dict Model parameter metadata. Returns ------- str or None Shared native filename, or ``None`` when the parameter does not carry enough model identity metadata for safe sharing. """ value = parameter_data.get(SOURCE_VALUE_KEY, parameter_data.get("value")) if not isinstance(value, str) or not value.lower().endswith(ECSV_SUFFIX): return None if not parameter_data.get("instrument") and not parameter_data.get(SOURCE_VALUE_KEY): return None exported_name = get_export_file_name(parameter_data) return f"{Path(exported_name).with_suffix('').name}.dat"