Source code for dran.fits.labels
# =========================================================================== #
# File: labels.py #
# Author: Pfesesani V. van Zyl #
# Email: pfesi24@gmail.com #
# =========================================================================== #
# Library imports
# --------------------------------------------------------------------------- #
import logging
from itertools import product
from typing import List, Tuple
# =========================================================================== #
[docs]
def build_computed_column_labels(
log: logging.Logger,
pol: Tuple[str, ...] = ("L", "R"),
pos: Tuple[str, ...] = ("O",),
beam: Tuple[str, ...] = ("",),
cols: Tuple[str, ...] = ("RMS", "BSLOPE", "BRMS", "FLAG", "S2N", "TA", "TAPEAKLOC"),
) -> List[str]:
"""
Generate computed column labels.
Rules:
- Labels are built from beam + position + polarization + base column name.
- For TA, append TAERR.
- If position codes include multiple entries and include "O", append:
- PC
- corrected TA (prefixed with C)
- corrected TAERR
Args:
log: Logger for diagnostics.
pol: Polarizations, for example ("L", "R").
pos: Position codes, for example ("N", "S", "O").
beam: Beam identifiers, for example ("A", "B", "").
cols: Base column names.
Returns:
Flattened list of label strings.
"""
log.debug("Building computed column labels.")
include_pc = len(pos) > 1
labels: List[str] = []
beam_independent = {"RMS", "BRMS","BSLOPE", "FLAG"}
for p, s, col in product(pol, pos, cols):
if col in beam_independent:
base = f"{s}{p}{col}"
labels.append(base)
continue
for b in beam:
base = f"{b}{s}{p}{col}"
if col == "TA":
labels.append(base)
labels.append(f"{base}ERR")
if include_pc and s == "O":
labels.append(f"{b}{s}{p}PC")
labels.append(f"{b}C{s}{p}{col}")
labels.append(f"{b}C{s}{p}{col}ERR")
else:
labels.append(base)
log.debug("Computed labels: %s", labels)
return labels