Source code for dran.fits.schema
# =========================================================================== #
# File: schema.py #
# Author: Pfesesani V. van Zyl #
# Email: pfesi24@gmail.com #
# =========================================================================== #
# Library imports
# --------------------------------------------------------------------------- #
import logging
from typing import Any, Dict
from dran.fits.computed_columns import build_computed_column_names
from dran.fits.observed_keys import build_observed_header_key_groups
# =========================================================================== #
LOW_BAND_COMPUTED_HDU_INDEX: int = 5
HIGH_BAND_COMPUTED_HDU_INDEX: int = 7
[docs]
def build_header_key_schema(band: str, src: str,
log: logging.Logger) -> Dict[str, Any]:
"""
Build the complete header key schema (observed + computed) for band and source.
Injection rule:
- For L and S bands, computed columns are injected at HDU index 5.
- For other bands, computed columns are injected at HDU index 7.
Args:
band: Band identifier.
src: Source name (used for special-case computed columns).
log: Logger.
Returns:
Dict[str, Any]: Observed groups plus computed group injected.
"""
norm_band = (band or "").strip().upper()
log.debug("Building complete header key schema for band=%s src=%s",
norm_band, src)
header_groups: Dict[int, Any] = build_observed_header_key_groups(norm_band,
log)
computed_columns = build_computed_column_names(
log=log,
band=norm_band,
src=src,
seed=[],
)
slot = LOW_BAND_COMPUTED_HDU_INDEX if norm_band in {"L", "S"} else HIGH_BAND_COMPUTED_HDU_INDEX
header_groups[slot] = computed_columns
# Preserve your previous return type shape (Dict[str, Any]).
# If downstream expects Dict[int, ...], switch this annotation and return directly.
return {str(k): v for k, v in header_groups.items()}