51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
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"))
|