Source code for simtel.file_inspector
"""Inspect sim_telarray output files."""
from pathlib import Path
from simtools.io.file_type import validate_file_type
from simtools.simtel import simtel_io_metadata
[docs]
def inspect_sim_telarray_file(file_path, max_entries=50, format_report=True):
"""Inspect one sim_telarray file and return a report."""
file_path = validate_file_type(file_path, "sim_telarray")
global_meta, telescope_meta = simtel_io_metadata.read_sim_telarray_metadata(file_path)
sorted_global_items = sorted(global_meta.items()) if global_meta is not None else []
telescope_ids = sorted(telescope_meta.keys())
report = {
"file_path": Path(file_path),
"file_type": "sim_telarray",
"file_size_bytes": file_path.stat().st_size,
"global_metadata": dict(sorted_global_items[:max_entries]),
"global_metadata_truncated": _is_truncated(sorted_global_items, max_entries),
"telescope_count": len(telescope_ids),
"telescope_ids": telescope_ids[:max_entries],
"telescope_ids_truncated": _is_truncated(telescope_ids, max_entries),
}
return _format_simtel_report(report) if format_report else report
def _format_simtel_report(report):
"""Format a sim_telarray inspection report."""
lines = [
f"File: {report['file_path']}",
f"Detected file type: {report['file_type']}",
f"file_size_bytes: {report['file_size_bytes']}",
f"telescope_count: {report['telescope_count']}",
f"telescope_ids: {report['telescope_ids']}",
"global_metadata:",
]
if report["global_metadata"]:
lines.extend(f"- {key}: {value}" for key, value in report["global_metadata"].items())
else:
lines.append("- none")
if report["global_metadata_truncated"]:
lines.append("- ... metadata truncated ...")
if report["telescope_ids_truncated"]:
lines.append("telescope_ids_truncated: True")
return "\n".join(lines)
def _is_truncated(values, max_entries):
"""Return whether a collection exceeds the configured preview limit."""
return max_entries is not None and 0 < max_entries < len(values)