Compare commits

...

1 Commits

Author SHA1 Message Date
18ed677ab6 Added plot derivatives 2026-06-04 10:29:20 +02:00

View File

@@ -0,0 +1,80 @@
# Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
# Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
# SPDX-License-Identifier: GPL-3.0-or-later
from cProfile import label
import pandas as pd
from pathlib import Path
import argparse
from tqdm import tqdm
import matplotlib.pyplot as plt
parser = argparse.ArgumentParser()
parser.add_argument("directory", type=Path, help="Source data directory")
args = parser.parse_args()
directory: Path = args.directory
if not directory.is_dir():
parser.error(f"{directory} is not a valid directory")
print(f"Processing data in: {directory}")
files: list[Path] = []
for path in directory.glob("*.csv"):
stem = path.stem
try:
base_name, channel = stem.rsplit("_", 1)
except ValueError:
print(f"Skipping badly named file: {path}")
continue
if channel != "trimmed":
print(f"Skipping unknown file: {path}")
continue
files.append(path)
for file in files:
trimmed_df = pd.read_csv(file).set_index("time_us", drop=False)
base_name, _ = file.stem.rsplit("_", 1)
der_file = file.parent / f"{base_name}_derivative.csv"
der_df = pd.read_csv(der_file).set_index("time_us", drop=False)
fig, ax = plt.subplots(figsize=(12, 6))
# RPM
ax.plot(der_df["time_us"] / 1_000_000, der_df["d1"], label="d1")
ax.set_xlabel("Time (s)")
ax.set_ylabel("RPM")
ax.set_title(f"{base_name} RPM over Time")
ax.grid(True)
ax1 = ax.twinx()
ax1.plot(der_df["time_us"] / 1_000_000, der_df["d2"], label="d2", color="red")
# Crank on second y-axis
ax2 = ax.twinx()
ax2.plot(
trimmed_df["time_us"] / 1_000_000, trimmed_df["crank"], alpha=0.4, label="Crank"
)
ax2.set_ylabel("Crank")
ax2.set_ylim(-0.1, 1.1)
ax3 = ax.twinx()
ax3.plot(
trimmed_df["time_us"] / 1_000_000,
trimmed_df["cam"],
alpha=0.4,
label="Cam",
color="red",
)
ax3.set_ylabel("Cam")
ax3.set_ylim(-0.1, 1.1)
fig.tight_layout()
plt.show()
plt.close(fig)