import argparse import configparser import logging import pathlib import matplotlib.pyplot as plt import numpy as np parser = argparse.ArgumentParser(description="Pre-process time-series") parser.add_argument("-v", "--verbose", action="count", default=0) parser.add_argument("-c", "--config", default="config.ini") args = parser.parse_args() logging.basicConfig(level=max((10, 20 - 10 * args.verbose))) log = logging.getLogger("bathy") log.info("Starting time-series pre-processing") config = configparser.ConfigParser() config.read(args.config) inp_root = pathlib.Path(config.get("inp", "root")) out_root = pathlib.Path(config.get("out", "root")) out_ts = out_root.joinpath("ts.dat") raw_ts = [] for tsi in config.get("inp", "raw_ts").split(","): raw_ts.append(np.loadtxt( inp_root.joinpath(tsi), dtype=[("state", int), ("z", float), ("y", float), ("x", float)], delimiter=",", max_rows=2304, )) n = len(raw_ts) raw_ts = np.concatenate(raw_ts) log.debug(f"{raw_ts=}") if (errs := np.count_nonzero(raw_ts["state"])) != 0: log.warning(f"{errs} transmission errors!") log.debug(f"{dict(zip(*np.unique(raw_ts['state'], return_counts=True)))}") t = np.linspace(0, 30 * 60 * n, 2304*n+1)[:-1] log.debug(f"{t=}") log.info(f"Saving timeseries to '{out_ts}'") np.savetxt(out_ts, np.stack((t, raw_ts["z"]/100), axis=1)) fig, ax = plt.subplots() ax.plot(t, raw_ts["z"]) ax.set(xlabel="t (s)", ylabel="z (cm)") fig.savefig(out_root.joinpath("ts.pdf"))