Source code for low_comm_tools.ms_fixes.fix_interval
from __future__ import annotations
import argparse
from pathlib import Path
import astropy.units as u
import numpy as np
from casacore.tables import table
from low_comm_tools import ms_utils
from low_comm_tools.log_config import logger
[docs]
def get_interval_from_time(ms_path: Path) -> u.Quantity[u.s]:
current_interval = ms_utils.get_interval_from_ms(
ms_path,
)
logger.info(f"Current INTERVAL column has {current_interval=}")
with table(ms_path.as_posix(), ack=False, readonly=True) as tab:
time_mjds = tab.getcol("TIME") * u.s
unique_time_mjds, time_index = np.unique(time_mjds, return_inverse=True)
diff_s = np.diff(unique_time_mjds)
diff_s_padded = np.append(diff_s, diff_s[-1])
new_interval = current_interval.copy()
new_interval[:] = diff_s_padded[time_index]
return new_interval
[docs]
def fix_interval_from_time(ms_path: Path) -> Path:
logger.info(f"Fixing INTERVAL column in {ms_path}")
new_interval = get_interval_from_time(ms_path)
logger.info(f"New INTERVAL column will be {new_interval=}")
with table(ms_path.as_posix(), ack=False, readonly=False) as tab:
tab.putcol(
"INTERVAL",
value=new_interval.to(u.s).value,
)
logger.info(f"Fixed INTERVAL column in {ms_path}")
return ms_path
[docs]
def get_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="Fix INTERVAL column using TIME in MS",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument("ms_path", help="Path to target MeasurementSet", type=Path)
return parser
[docs]
def main() -> None:
parser = get_parser()
args = parser.parse_args()
_ = fix_interval_from_time(
ms_path=args.ms_path,
)
if __name__ == "__main__":
main()