Source code for simtel.simtel_io_file_info

#!/usr/bin/python3
"""Read file info and run headers from sim_telarray files."""

from eventio import EventIOFile
from eventio.simtel import MCRunHeader, MCShower, RunHeader


[docs] def get_corsika_run_number(file): """ Return the CORSIKA run number from a sim_telarray file. Parameters ---------- file: str Path to the sim_telarray file. Returns ------- int, None CORSIKA run number. Returns None if not found. """ run_header = get_corsika_run_header(file) return run_header.get("run") if run_header else None
[docs] def get_corsika_run_header(file): """ Return the CORSIKA run header information from a sim_telarray file. Reads both RunHeader and MCRunHeader object from file and returns a merged dictionary. Adds primary id from the first event. Parameters ---------- file: str Path to the sim_telarray file. Returns ------- dict, None CORSIKA run header. Returns None if not found. """ run_header = None mc_run_header = None primary_id = None with EventIOFile(file) as f: for o in f: if isinstance(o, RunHeader) and run_header is None: run_header = o.parse() elif isinstance(o, MCRunHeader) and mc_run_header is None: mc_run_header = o.parse() elif isinstance(o, MCShower): # get primary_id from first MCShower primary_id = o.parse().get("primary_id") if run_header and mc_run_header and primary_id is not None: break run_header = run_header or {} mc_run_header = mc_run_header or {} if primary_id is not None: mc_run_header["primary_id"] = primary_id return run_header | mc_run_header or None